From 37b2f000fd1cf72484dfb7b1d7b53e121ba02478 Mon Sep 17 00:00:00 2001 From: Ben Barsdell Date: Sat, 10 Jun 2017 12:05:40 -0700 Subject: [PATCH 0001/1155] Refactor Dockerfiles to use common base layer - Dockerfile.base contains all the Bifrost dependencies. - Dockerfile inherits Dockerfile.base and contains the Bifrost build. - The old Dockerfile.cpu and Dockerfile.gpu are removed. - The FROM line and build args in the Dockerfiles are parameterised using ARGs, which are inserted by the Makefile (a WAR is currently needed for the FROM line because it doesn't support ARG, but this was recently fixed in upstream Docker so we can eventually do it properly). - The Makefile defines 4 targets: docker-base (GPU container with dependencies only), docker (GPU container with Bifrost installed), docker-base-cpu (CPU container with dependencies only), and docker-cpu (CPU container with Bifrost installed). - We can now also build containers with different OS images by specifying CUDA_IMAGE_NAME or CPU_IMAGE_NAME. E.g., "make docker CUDA_IMAGE_NAME=nvidia/cuda:7.5 IMAGE_NAME=ledatelescope/bifrost-cuda-7.5", which allows us to easily test compatibility with older versions of CUDA. --- Dockerfile | 19 +++++++++++ Dockerfile.cpu => Dockerfile.base | 11 +++--- Dockerfile.gpu | 56 ------------------------------- Dockerfile_prereq.gpu | 50 --------------------------- Makefile | 39 +++++++++++++-------- user.mk | 5 +++ 6 files changed, 53 insertions(+), 127 deletions(-) create mode 100644 Dockerfile rename Dockerfile.cpu => Dockerfile.base (86%) delete mode 100644 Dockerfile.gpu delete mode 100644 Dockerfile_prereq.gpu diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..8e5d0a3aa --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +# Note: FROM command is inserted by Makefile +# TODO: As of Docker-CE 17.05, we could use this better approach instead: +#ARG base_layer +#FROM $base_layer + +MAINTAINER Ben Barsdell + +ARG make_args + +# Build the library +WORKDIR /bifrost +COPY . . +RUN make clean && \ + make -j16 $make_args && \ + make doc && \ + make install + +WORKDIR /workspace +RUN ["/bin/bash"] diff --git a/Dockerfile.cpu b/Dockerfile.base similarity index 86% rename from Dockerfile.cpu rename to Dockerfile.base index 96ff7287e..635bdcbd8 100644 --- a/Dockerfile.cpu +++ b/Dockerfile.base @@ -1,4 +1,7 @@ -FROM ubuntu:14.04 +# Note: FROM command is inserted by Makefile +# TODO: As of Docker-CE 17.05, we could use this better approach instead: +#ARG base_layer +#FROM $base_layer MAINTAINER Ben Barsdell @@ -41,16 +44,10 @@ ENV TERM xterm # Build the library WORKDIR /bifrost -COPY . . -RUN make clean && \ - make -j NOCUDA=1 && \ - make doc && \ - make install ENV LD_LIBRARY_PATH /usr/local/lib:${LD_LIBRARY_PATH} # IPython EXPOSE 8888 -WORKDIR /workspace RUN ["/bin/bash"] diff --git a/Dockerfile.gpu b/Dockerfile.gpu deleted file mode 100644 index 6b8dcc494..000000000 --- a/Dockerfile.gpu +++ /dev/null @@ -1,56 +0,0 @@ -FROM nvidia/cuda:8.0 - -MAINTAINER Ben Barsdell - -ARG DEBIAN_FRONTEND=noninteractive - -# Get dependencies -RUN apt-get update && apt-get install -y --no-install-recommends \ - build-essential \ - curl \ - git \ - pkg-config \ - software-properties-common \ - python \ - python-dev \ - doxygen \ - exuberant-ctags \ - nano \ - vim \ - && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - -RUN curl -fSsL -O https://bootstrap.pypa.io/get-pip.py && \ - python get-pip.py && \ - rm get-pip.py -RUN pip --no-cache-dir install \ - setuptools \ - numpy \ - matplotlib \ - contextlib2 \ - simplejson \ - pint \ - graphviz - -RUN git clone https://github.com/MatthieuDartiailh/pyclibrary.git && \ - cd pyclibrary && \ - python setup.py install - -ENV TERM xterm - -# Build the library -WORKDIR /bifrost -COPY . . -RUN make clean && \ - make -j && \ - make doc && \ - make install - -ENV LD_LIBRARY_PATH /usr/local/lib:${LD_LIBRARY_PATH} - -# IPython -EXPOSE 8888 - -WORKDIR /workspace -RUN ["/bin/bash"] diff --git a/Dockerfile_prereq.gpu b/Dockerfile_prereq.gpu deleted file mode 100644 index bcef44aa2..000000000 --- a/Dockerfile_prereq.gpu +++ /dev/null @@ -1,50 +0,0 @@ -FROM nvidia/cuda:8.0 - -MAINTAINER Ben Barsdell - -ARG DEBIAN_FRONTEND=noninteractive - -# Get dependencies -RUN apt-get update && apt-get install -y --no-install-recommends \ - build-essential \ - curl \ - git \ - pkg-config \ - software-properties-common \ - python \ - python-dev \ - doxygen \ - exuberant-ctags \ - nano \ - vim \ - && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - -RUN curl -fSsL -O https://bootstrap.pypa.io/get-pip.py && \ - python get-pip.py && \ - rm get-pip.py -RUN pip --no-cache-dir install \ - setuptools \ - numpy \ - matplotlib \ - contextlib2 \ - simplejson \ - pint \ - graphviz - -RUN git clone https://github.com/MatthieuDartiailh/pyclibrary.git && \ - cd pyclibrary && \ - python setup.py install - -ENV TERM xterm - -# Build the library -WORKDIR /bifrost - -ENV LD_LIBRARY_PATH /usr/local/lib:${LD_LIBRARY_PATH} - -# IPython -EXPOSE 8888 - -RUN ["/bin/bash"] diff --git a/Makefile b/Makefile index 0ebedb840..9f1ca28b8 100644 --- a/Makefile +++ b/Makefile @@ -47,23 +47,34 @@ python: libbifrost .PHONY: python #GPU Docker build -IMAGE_NAME ?= ledatelescope/bifrost -docker: - docker build --pull -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile.gpu -t $(IMAGE_NAME) . +docker-base: + echo "FROM $(CUDA_IMAGE_NAME)" > _Dockerfile.tmp + cat Dockerfile.base >> _Dockerfile.tmp + docker build --pull -t $(IMAGE_NAME):latest-base -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR)-base -f _Dockerfile.tmp . + rm _Dockerfile.tmp +.PHONY: docker-base + +docker: docker-base + echo "FROM $(IMAGE_NAME):latest-base" > _Dockerfile.tmp + cat Dockerfile >> _Dockerfile.tmp + docker build --build-arg make_args="" -t $(IMAGE_NAME):latest -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f _Dockerfile.tmp . + rm _Dockerfile.tmp .PHONY: docker -#GPU Docker prereq build -# (To be used for testing new builds rapidly) -IMAGE_NAME ?= ledatelescope/bifrost -docker_prereq: - docker build --pull -t $(IMAGE_NAME)_prereq:$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile_prereq.gpu -t $(IMAGE_NAME)_prereq . -.PHONY: docker_prereq - #CPU-only Docker build -IMAGE_NAME ?= ledatelescope/bifrost -docker-cpu: - docker build --pull -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile.cpu -t $(IMAGE_NAME) . -.PHONY: docker +docker-base-cpu: + echo "FROM $(CPU_IMAGE_NAME)" > _Dockerfile.tmp + cat Dockerfile.base >> _Dockerfile.tmp + docker build --pull -t $(IMAGE_NAME):latest-base-cpu -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR)-base-cpu -f _Dockerfile.tmp . + rm _Dockerfile.tmp +.PHONY: docker-base + +docker-cpu: docker-base-cpu + echo "FROM $(IMAGE_NAME):latest-base-cpu" > _Dockerfile.tmp + cat Dockerfile >> _Dockerfile.tmp + docker build --build-arg make_args="NOCUDA=1" -t $(IMAGE_NAME):latest-cpu -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR)-cpu -f _Dockerfile.tmp . + rm _Dockerfile.tmp +.PHONY: docker-cpu # TODO: Consider adding a mode 'develop=1' that makes symlinks instead of copying # the library and headers. diff --git a/user.mk b/user.mk index da863f684..d25fa4b8c 100644 --- a/user.mk +++ b/user.mk @@ -20,6 +20,11 @@ CUDA_INCDIR ?= $(CUDA_HOME)/include ALIGNMENT ?= 4096 # Memory allocation alignment +# Docker image names +IMAGE_NAME ?= ledatelescope/bifrost +CUDA_IMAGE_NAME ?= nvidia/cuda:8.0 # Base layer for the GPU (default) images +CPU_IMAGE_NAME ?= ubuntu:16.04 # Base layer for the -cpu images + #NODEBUG = 1 # Disable debugging mode (use this for production releases) #TRACE = 1 # Enable tracing mode (generates annotations for use with nvprof/nvvp) #NOCUDA = 1 # Disable CUDA support From 8b5bf913f6c28eb65047da4eb32ba9574c676508 Mon Sep 17 00:00:00 2001 From: Ben Barsdell Date: Sat, 10 Jun 2017 12:48:48 -0700 Subject: [PATCH 0002/1155] Fix travis build by setting docker tag :latest-cpu --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4360055a0..790bd2a7c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ install: - make docker-cpu script: - - docker run --rm ledatelescope/bifrost /bin/sh -c "cd /bifrost/test && sh ./travis.sh" + - docker run --rm ledatelescope/bifrost:latest-cpu /bin/sh -c "cd /bifrost/test && sh ./travis.sh" - bash ./.travis_deploy_docs.sh env: From 62063689609ef50e2da7aa784cb5bd67be6a3d6d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Feb 2019 11:57:49 -0700 Subject: [PATCH 0003/1155] Added a very basic disk cache to the bifrost.map() function to help speed things up between calls of the same code. There needs to be some more work on this to make sure the the cache is invalidated when it needs to be. --- src/fileutils.hpp | 94 +++++++++++++++++++++++++++++++ src/map.cpp | 138 +++++++++++++++++++++++++++++++++++++++++++++- src/proclog.cpp | 61 +------------------- 3 files changed, 231 insertions(+), 62 deletions(-) create mode 100644 src/fileutils.hpp diff --git a/src/fileutils.hpp b/src/fileutils.hpp new file mode 100644 index 000000000..0eb9914ee --- /dev/null +++ b/src/fileutils.hpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include // For flock +#include // For fstat +#include // For getpid +#include // For getpid +#include + +inline void make_dir(std::string path, int perms=775) { + if( std::system(("mkdir -p "+path+" -m "+std::to_string(perms)).c_str()) ) { + throw std::runtime_error("Failed to create path: "+path); + } +} +inline void remove_all(std::string path) { + if( std::system(("rm -rf "+path).c_str()) ) { + throw std::runtime_error("Failed to remove all: "+path); + } +} +inline void remove_dir(std::string path) { + if( std::system(("rmdir "+path+" 2> /dev/null").c_str()) ) { + throw std::runtime_error("Failed to remove dir: "+path); + } +} +inline void remove_file(std::string path) { + if( std::system(("rm -f "+path).c_str()) ) { + throw std::runtime_error("Failed to remove file: "+path); + } +} +inline bool process_exists(pid_t pid) { + struct stat s; + return !(stat(("/proc/"+std::to_string(pid)).c_str(), &s) == -1 + && errno == ENOENT); +} + +inline std::string get_dirname(std::string filename) { + // TODO: This is crude, but works for our proclog use-case + return filename.substr(0, filename.find_last_of("/")); +} + +class LockFile { + std::string _lockfile; + int _fd; +public: + LockFile(LockFile const& ) = delete; + LockFile& operator=(LockFile const& ) = delete; + LockFile(std::string lockfile) : _lockfile(lockfile) { + while( true ) { + _fd = open(_lockfile.c_str(), O_CREAT, 600); + flock(_fd, LOCK_EX); + struct stat fd_stat, lockfile_stat; + fstat(_fd, &fd_stat); + stat(_lockfile.c_str(), &lockfile_stat); + // Compare inodes + if( fd_stat.st_ino == lockfile_stat.st_ino ) { + // Got the lock + break; + } + close(_fd); + } + } + ~LockFile() { + unlink(_lockfile.c_str()); + flock(_fd, LOCK_UN); + } +}; + diff --git a/src/map.cpp b/src/map.cpp index a8b627b3e..04652926e 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -43,6 +43,7 @@ bfMap(3, c.shape, {"dm", "t"}, #endif #include +#include "fileutils.hpp" #include "cuda.hpp" #include "utils.hpp" @@ -74,6 +75,11 @@ using std::cout; using std::cerr; using std::endl; +#include +using std::getline; +#include +#include + #define BF_CHECK_NVRTC(call) \ do { \ nvrtcResult ret = call; \ @@ -389,6 +395,131 @@ BFstatus build_map_kernel(int* external_ndim, return BF_STATUS_SUCCESS; } +class DiskCacheMgr { + static constexpr const char* _cachedir = "/dev/shm/bifrost_cache/"; + std::set _created_dirs; + mutable std::mutex _mutex; + bool _loaded; + + void write_to_disk(std::string cache_key, + std::string kernel_name, + std::string ptx, + bool basic_indexing_only) { + // Do this with a file lock to avoid interference from other processes + LockFile lock(std::string(_cachedir) + ".lock"); + + std::ofstream index, cache; + try { + // Open + cache.open(std::string(_cachedir)+"map_cache.bf", std::ios::app); + index.open(std::string(_cachedir)+"map_index.bf", std::ios::app); + + // Write + cache.write(ptx.c_str(), ptx.size()); + index << ptx.size() << "~" << kernel_name << "~" << basic_indexing_only << "~" << cache_key << "~" << std::endl; + + // Done + cache.close(); + index.close(); + //cout << "SAVED TO DISK " << cache_key << endl; + } catch( std::exception ) {} + } + + void load_from_disk(ObjectCache > *kernel_cache) { + std::ifstream index, cache; + size_t kernel_size; + std::string kernel_name; + bool basic_indexing_only; + std::string cache_key; + std::string ptx; + CUDAKernel kernel; + + std::string field; + std::vector separated_fields; + + // Do this with a file lock to avoid interference from other processes + LockFile lock(std::string(_cachedir) + ".lock"); + + try { + // Open + index.open(std::string(_cachedir)+"map_index.bf", std::ios::in); + cache.open(std::string(_cachedir)+"map_cache.bf", std::ios::in); + + // Read in fields separated by '~' until we get four, and then build the kernels + while( getline(index, field, '~') ) { + separated_fields.push_back(field); + if( separated_fields.size() == 4 ) { + // PTX size + kernel_size = std::atoi(separated_fields[0].c_str()); + // Kernel name + kernel_name = separated_fields[1]; + // Whether or not the kernel supports basic indexing only + basic_indexing_only = false; + if( std::atoi(separated_fields[2].c_str()) > 0 ) { + basic_indexing_only = true; + } + // In-memory cache name + cache_key = separated_fields[3]; + + // Check the cache to see if it is aleady there... + if( !kernel_cache->contains(cache_key) ) { + ptx.resize(kernel_size); + cache.read(&ptx[0], kernel_size); + kernel.set(kernel_name.c_str(), ptx.c_str()); + + kernel_cache->insert(cache_key, + std::make_pair(kernel, basic_indexing_only)); + //cout << "LOADED FROM DISK " << cache_key << endl; + } + + separated_fields.clear(); + } + } + + // Done + index.close(); + cache.close(); + } catch( std::exception ) {} + } + + DiskCacheMgr() + : _loaded(false) { + make_dir(_cachedir); + } + +public: + DiskCacheMgr(DiskCacheMgr& ) = delete; + DiskCacheMgr& operator=(DiskCacheMgr& ) = delete; + + static DiskCacheMgr& get() { + static DiskCacheMgr cache; + return cache; + } + + bool load(ObjectCache > *kernel_cache) { + if( !_loaded ) { + std::lock_guard lock(_mutex); + this->load_from_disk(kernel_cache); + _loaded = true; + } + return _loaded; + } + + void save(std::string cache_key, + std::string kernel_name, + std::string ptx, + bool basic_indexing_only) { + std::lock_guard lock(_mutex); + this->write_to_disk(cache_key, kernel_name, ptx, basic_indexing_only); + } + + void flush(void) { + std::lock_guard lock(_mutex); + remove_file(std::string(_cachedir)+"map_cache.bf"); + remove_file(std::string(_cachedir)+"map_index.bf"); + } +}; + BFstatus bfMap(int ndim, long const* shape, char const*const* axis_names, @@ -403,7 +534,7 @@ BFstatus bfMap(int ndim, // Map containing compiled kernels and basic_indexing_only flag thread_local static ObjectCache > kernel_cache(BF_MAP_KERNEL_CACHE_SIZE); - BF_ASSERT(ndim >= 0, BF_STATUS_INVALID_ARGUMENT); + BF_ASSERT(ndim >= 0, BF_STATUS_INVALID_ARGUMENT); //BF_ASSERT(!ndim || shape, BF_STATUS_INVALID_POINTER); //BF_ASSERT(!ndim || axis_names, BF_STATUS_INVALID_POINTER); BF_ASSERT(narg >= 0, BF_STATUS_INVALID_ARGUMENT); @@ -462,6 +593,8 @@ BFstatus bfMap(int ndim, } std::string cache_key = cache_key_ss.str(); + DiskCacheMgr::get().load(&kernel_cache); + if( !kernel_cache.contains(cache_key) ) { std::string ptx; std::string kernel_name; @@ -485,10 +618,11 @@ BFstatus bfMap(int ndim, basic_indexing_only, &ptx, &kernel_name)); } - CUDAKernel kernel; + CUDAKernel kernel; BF_TRY(kernel.set(kernel_name.c_str(), ptx.c_str())); kernel_cache.insert(cache_key, std::make_pair(kernel, basic_indexing_only)); + DiskCacheMgr::get().save(cache_key, kernel_name, ptx, basic_indexing_only); //std::cout << "INSERTING INTO CACHE" << std::endl; } else { //std::cout << "FOUND IN CACHE" << std::endl; diff --git a/src/proclog.cpp b/src/proclog.cpp index c3ce56801..91ebeda61 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -29,12 +29,11 @@ #include #include "trace.hpp" #include "proclog.hpp" +#include "fileutils.hpp" #include #include // For system #include // For va_start, va_list, va_end -#include // For flock -#include // For fstat #include // For getpid #include // For opendir, readdir, closedir #include // For getpid @@ -42,64 +41,6 @@ #include #include -void make_dir(std::string path, int perms=775) { - if( std::system(("mkdir -p "+path+" -m "+std::to_string(perms)).c_str()) ) { - throw std::runtime_error("Failed to create path: "+path); - } -} -void remove_all(std::string path) { - if( std::system(("rm -rf "+path).c_str()) ) { - throw std::runtime_error("Failed to remove all: "+path); - } -} -void remove_dir(std::string path) { - if( std::system(("rmdir "+path+" 2> /dev/null").c_str()) ) { - throw std::runtime_error("Failed to remove dir: "+path); - } -} -void remove_file(std::string path) { - if( std::system(("rm -f "+path).c_str()) ) { - throw std::runtime_error("Failed to remove file: "+path); - } -} -bool process_exists(pid_t pid) { - struct stat s; - return !(stat(("/proc/"+std::to_string(pid)).c_str(), &s) == -1 - && errno == ENOENT); -} - -std::string get_dirname(std::string filename) { - // TODO: This is crude, but works for our proclog use-case - return filename.substr(0, filename.find_last_of("/")); -} - -class LockFile { - std::string _lockfile; - int _fd; -public: - LockFile(LockFile const& ) = delete; - LockFile& operator=(LockFile const& ) = delete; - LockFile(std::string lockfile) : _lockfile(lockfile) { - while( true ) { - _fd = open(_lockfile.c_str(), O_CREAT, 600); - flock(_fd, LOCK_EX); - struct stat fd_stat, lockfile_stat; - fstat(_fd, &fd_stat); - stat(_lockfile.c_str(), &lockfile_stat); - // Compare inodes - if( fd_stat.st_ino == lockfile_stat.st_ino ) { - // Got the lock - break; - } - close(_fd); - } - } - ~LockFile() { - unlink(_lockfile.c_str()); - flock(_fd, LOCK_UN); - } -}; - class ProcLogMgr { static constexpr const char* base_logdir = "/dev/shm/bifrost"; std::string _logdir; From 52ac3ed40a533addbc1f8527e1ad26da4fac1bec Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Feb 2019 12:58:47 -0700 Subject: [PATCH 0004/1155] Added basic CUDA runtime/driver version checking to the map disk cache. --- src/fileutils.hpp | 5 +++ src/map.cpp | 86 +++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 77 insertions(+), 14 deletions(-) diff --git a/src/fileutils.hpp b/src/fileutils.hpp index 0eb9914ee..c27d90f82 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -54,6 +54,11 @@ inline void remove_file(std::string path) { throw std::runtime_error("Failed to remove file: "+path); } } +inline bool file_exists(std::string path) { + struct stat s; + return !(stat(path.c_str(), &s) == -1 + && errno == ENOENT); +} inline bool process_exists(pid_t pid) { struct stat s; return !(stat(("/proc/"+std::to_string(pid)).c_str(), &s) == -1 diff --git a/src/map.cpp b/src/map.cpp index 04652926e..b1e055a72 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -397,22 +397,76 @@ BFstatus build_map_kernel(int* external_ndim, class DiskCacheMgr { static constexpr const char* _cachedir = "/dev/shm/bifrost_cache/"; + std::string _vinfofile = std::string(_cachedir)+"vinfo.map"; + std::string _indexfile = std::string(_cachedir)+"index.map"; + std::string _cachefile = std::string(_cachedir)+"cache.map"; std::set _created_dirs; mutable std::mutex _mutex; bool _loaded; + void tag_cache(void) { + // NOTE: Must be called from within a LockFile lock + int rt, drv; + cudaRuntimeGetVersion(&rt); + cudaDriverGetVersion(&drv); + + std::ofstream info; + + if( !file_exists(_vinfofile) ) { + try { + info.open(_vinfofile, std::ios::out); + info << rt << " " << drv << endl; + info.close(); + } catch( std::exception ) {} + } + } + + bool validate_cache(void) { + // NOTE: Must be called from within a LockFile lock + bool status = true; + int rt, drv, cached_rt, cached_drv; + cudaRuntimeGetVersion(&rt); + cudaDriverGetVersion(&drv); + + std::ifstream info; + try { + // Open + info.open(_vinfofile, std::ios::in); + + // Read + info >> cached_rt >> cached_drv; + + // Close + info.close(); + } catch( std::exception ) { + cached_rt = cached_drv = -1; + } + + if( rt != cached_rt || drv != cached_drv ) { + status = false; + } + + if( !file_exists(_indexfile) || !file_exists(_cachefile) ) { + status = false; + } + + return status; + } + void write_to_disk(std::string cache_key, std::string kernel_name, std::string ptx, - bool basic_indexing_only) { + bool basic_indexing_only) { // Do this with a file lock to avoid interference from other processes LockFile lock(std::string(_cachedir) + ".lock"); + this->tag_cache(); + std::ofstream index, cache; try { // Open - cache.open(std::string(_cachedir)+"map_cache.bf", std::ios::app); - index.open(std::string(_cachedir)+"map_index.bf", std::ios::app); + cache.open(_cachefile, std::ios::app); + index.open(_indexfile, std::ios::app); // Write cache.write(ptx.c_str(), ptx.size()); @@ -426,6 +480,19 @@ class DiskCacheMgr { } void load_from_disk(ObjectCache > *kernel_cache) { + // Do this with a file lock to avoid interference from other processes + LockFile lock(std::string(_cachedir) + ".lock"); + + // Validate and disgard if necessary + if( !this->validate_cache() ) { + //cout << "INVALIDATING DISK CACHE" << endl; + try { + remove_file(_cachefile); + remove_file(_indexfile); + remove_file(_vinfofile); + } catch( std::exception ) {} + } + std::ifstream index, cache; size_t kernel_size; std::string kernel_name; @@ -437,13 +504,10 @@ class DiskCacheMgr { std::string field; std::vector separated_fields; - // Do this with a file lock to avoid interference from other processes - LockFile lock(std::string(_cachedir) + ".lock"); - try { // Open - index.open(std::string(_cachedir)+"map_index.bf", std::ios::in); - cache.open(std::string(_cachedir)+"map_cache.bf", std::ios::in); + index.open(_indexfile, std::ios::in); + cache.open(_cachefile, std::ios::in); // Read in fields separated by '~' until we get four, and then build the kernels while( getline(index, field, '~') ) { @@ -512,12 +576,6 @@ class DiskCacheMgr { std::lock_guard lock(_mutex); this->write_to_disk(cache_key, kernel_name, ptx, basic_indexing_only); } - - void flush(void) { - std::lock_guard lock(_mutex); - remove_file(std::string(_cachedir)+"map_cache.bf"); - remove_file(std::string(_cachedir)+"map_index.bf"); - } }; BFstatus bfMap(int ndim, From 3ffd92a5cf78ba31374d717a664852784173fcb7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Feb 2019 14:35:01 -0700 Subject: [PATCH 0005/1155] Small cleanup of the valitdate_cache() method of the DiskCacheMgr. Updated the date in the boilerplate. --- src/bifrost/map.h | 2 +- src/fileutils.hpp | 2 +- src/map.cpp | 22 +++++++++++----------- src/proclog.cpp | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/bifrost/map.h b/src/bifrost/map.h index e3c3c8f09..b02de01fe 100644 --- a/src/bifrost/map.h +++ b/src/bifrost/map.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/src/fileutils.hpp b/src/fileutils.hpp index c27d90f82..c8c215755 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/src/map.cpp b/src/map.cpp index b1e055a72..0b6e3d110 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -421,7 +421,7 @@ class DiskCacheMgr { } } - bool validate_cache(void) { + void validate_cache(void) { // NOTE: Must be called from within a LockFile lock bool status = true; int rt, drv, cached_rt, cached_drv; @@ -450,7 +450,14 @@ class DiskCacheMgr { status = false; } - return status; + if( !status ) { + //cout << "INVALIDATING DISK CACHE" << endl; + try { + remove_file(_cachefile); + remove_file(_indexfile); + remove_file(_vinfofile); + } catch( std::exception ) {} + } } void write_to_disk(std::string cache_key, @@ -483,15 +490,8 @@ class DiskCacheMgr { // Do this with a file lock to avoid interference from other processes LockFile lock(std::string(_cachedir) + ".lock"); - // Validate and disgard if necessary - if( !this->validate_cache() ) { - //cout << "INVALIDATING DISK CACHE" << endl; - try { - remove_file(_cachefile); - remove_file(_indexfile); - remove_file(_vinfofile); - } catch( std::exception ) {} - } + // Validate the cache + this->validate_cache(); std::ifstream index, cache; size_t kernel_size; diff --git a/src/proclog.cpp b/src/proclog.cpp index 91ebeda61..79042a099 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions From 0cae41684da42e00d6a0263e63dcc7939d54c937 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Feb 2019 13:19:33 -0700 Subject: [PATCH 0006/1155] Force a cleanup to map function cache when 'make' is called. --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 6ec05752c..5b16bf3b2 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,7 @@ all: libbifrost python libbifrost: $(MAKE) -C $(SRC_DIR) all + rm -f /dev/shm/bifrost_cache/* .PHONY: libbifrost test: From e209a8007f884186fff6a138bea58096f6145ab4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 16 May 2019 12:58:26 -0600 Subject: [PATCH 0007/1155] Moved away from two files that store all of the cached kernels to a per-kernel storage format. The per-kernel storage foramt consists of a '.inf' which hold information about the file and a '.ptx' file that stores the actual kernel. --- src/map.cpp | 116 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 72 insertions(+), 44 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 0b6e3d110..c73c2de77 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -69,6 +69,7 @@ bfMap(3, c.shape, {"dm", "t"}, #include #include #include +#include #include using std::cout; @@ -76,10 +77,12 @@ using std::cerr; using std::endl; #include -using std::getline; #include #include +#include +#include + #define BF_CHECK_NVRTC(call) \ do { \ nvrtcResult ret = call; \ @@ -359,7 +362,7 @@ BFstatus build_map_kernel(int* external_ndim, BF_CHECK_NVRTC( nvrtcGetProgramLog(program, &log[0]) ); int i = 1; for( std::string line; std::getline(code, line); ++i ) { - cout << std::setfill(' ') << std::setw(3) << i << " " << line << endl; + std::cout << std::setfill(' ') << std::setw(3) << i << " " << line << endl; } std::cout << "---------------------------------------------------" << std::endl; std::cout << "--- JIT compile log for program " << program_name << " ---" << std::endl; @@ -397,12 +400,13 @@ BFstatus build_map_kernel(int* external_ndim, class DiskCacheMgr { static constexpr const char* _cachedir = "/dev/shm/bifrost_cache/"; - std::string _vinfofile = std::string(_cachedir)+"vinfo.map"; - std::string _indexfile = std::string(_cachedir)+"index.map"; - std::string _cachefile = std::string(_cachedir)+"cache.map"; + std::string _vinfofile = std::string(_cachedir)+"map.ver"; + std::string _indexfile; + std::string _cachefile; std::set _created_dirs; mutable std::mutex _mutex; bool _loaded; + std::hash _get_name; void tag_cache(void) { // NOTE: Must be called from within a LockFile lock @@ -446,15 +450,11 @@ class DiskCacheMgr { status = false; } - if( !file_exists(_indexfile) || !file_exists(_cachefile) ) { - status = false; - } - if( !status ) { //cout << "INVALIDATING DISK CACHE" << endl; try { - remove_file(_cachefile); - remove_file(_indexfile); + remove_file(std::string(_cachedir)+"*.inf"); + remove_file(std::string(_cachedir)+"*.ptx"); remove_file(_vinfofile); } catch( std::exception ) {} } @@ -469,20 +469,35 @@ class DiskCacheMgr { this->tag_cache(); + // Get the name to save the kernel to + std::stringstream basename; + basename << std::hex << std::uppercase << _get_name(cache_key); + _indexfile = std::string(_cachedir) + basename.str() + ".inf"; + _cachefile = std::string(_cachedir) + basename.str() + ".ptx"; + std::ofstream index, cache; try { // Open - cache.open(_cachefile, std::ios::app); - index.open(_indexfile, std::ios::app); + index.open(_indexfile, std::ios::out); + cache.open(_cachefile, std::ios::out|std::ios::binary); - // Write + // Write Info + // * PTX size + index << ptx.size() << endl; + // * Kernel name + index << kernel_name << endl; + // * Whether or not the kernel supports basic indexing only + index << basic_indexing_only << endl; + // * In-memory cache key + index << cache_key; + + // Write PTX cache.write(ptx.c_str(), ptx.size()); - index << ptx.size() << "~" << kernel_name << "~" << basic_indexing_only << "~" << cache_key << "~" << std::endl; // Done - cache.close(); index.close(); - //cout << "SAVED TO DISK " << cache_key << endl; + cache.close(); + //cout << "SAVED TO DISK " << cache_key << " as " << basename.str() << endl; } catch( std::exception ) {} } @@ -502,28 +517,41 @@ class DiskCacheMgr { CUDAKernel kernel; std::string field; - std::vector separated_fields; - try { - // Open - index.open(_indexfile, std::ios::in); - cache.open(_cachefile, std::ios::in); - - // Read in fields separated by '~' until we get four, and then build the kernels - while( getline(index, field, '~') ) { - separated_fields.push_back(field); - if( separated_fields.size() == 4 ) { - // PTX size - kernel_size = std::atoi(separated_fields[0].c_str()); - // Kernel name - kernel_name = separated_fields[1]; - // Whether or not the kernel supports basic indexing only + // Find the files + DIR* dir = opendir(_cachedir); + struct dirent *entry; + while( (entry = readdir(dir)) != NULL ) { + _indexfile = std::string(_cachedir) + std::string(entry->d_name); + if( _indexfile.size() < 4 ) { + continue; + } + if( _indexfile.compare(_indexfile.size()-4, 4, ".inf") == 0 ) { + // We have an info file, get the corresponding ptx file + _cachefile = _indexfile.substr(0, _indexfile.size()-4) + ".ptx"; + + try { + // Open + index.open(_indexfile, std::ios::in); + cache.open(_cachefile, std::ios::in|std::ios::binary); + + // Read in info and then build the kernels + // * PTX size + std::getline(index, field); + kernel_size = std::atoi(field.c_str()); + // * Kernel name + std::getline(index, kernel_name); + // * Whether or not the kernel supports basic indexing only + std::getline(index, field); basic_indexing_only = false; - if( std::atoi(separated_fields[2].c_str()) > 0 ) { + if( std::atoi(field.c_str()) > 0 ) { basic_indexing_only = true; } - // In-memory cache name - cache_key = separated_fields[3]; + // * In-memory cache name + std::getline(index, cache_key); + while( std::getline(index, field) ) { + cache_key = cache_key + "\n" + field; + } // Check the cache to see if it is aleady there... if( !kernel_cache->contains(cache_key) ) { @@ -534,23 +562,23 @@ class DiskCacheMgr { kernel_cache->insert(cache_key, std::make_pair(kernel, basic_indexing_only)); //cout << "LOADED FROM DISK " << cache_key << endl; + } else { + //cout << "ALREADY THERE" << cache_key << endl; } - - separated_fields.clear(); - } + + // Done + index.close(); + cache.close(); + } catch( std::exception) {} } - - // Done - index.close(); - cache.close(); - } catch( std::exception ) {} + } + closedir(dir); } DiskCacheMgr() : _loaded(false) { make_dir(_cachedir); } - public: DiskCacheMgr(DiskCacheMgr& ) = delete; DiskCacheMgr& operator=(DiskCacheMgr& ) = delete; From accc1e5e5239f740b36e4641f12ae2b1e94c9ade Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 16 May 2019 12:59:52 -0600 Subject: [PATCH 0008/1155] Added a clear method to DiskCacheMgr in map.cpp. It's not currently used but I feel like it should be in there. --- src/map.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/map.cpp b/src/map.cpp index c73c2de77..7b6e7f22a 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -575,6 +575,16 @@ class DiskCacheMgr { closedir(dir); } + void clear_cache() { + // Do this with a file lock to avoid interference from other processes + LockFile lock(std::string(_cachedir) + ".lock"); + + try { + remove_file(std::string(_cachedir)+"*.inf"); + remove_file(std::string(_cachedir)+"*.ptx"); + } catch( std::exception ) {} + } + DiskCacheMgr() : _loaded(false) { make_dir(_cachedir); @@ -604,6 +614,12 @@ class DiskCacheMgr { std::lock_guard lock(_mutex); this->write_to_disk(cache_key, kernel_name, ptx, basic_indexing_only); } + + void clear() { + std::lock_guard lock(_mutex); + this->clear_cache(); + _loaded = false; + } }; BFstatus bfMap(int ndim, From 6b11b8b38dc5d73a6a78e64844df1435803eea2e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 16 May 2019 13:11:32 -0600 Subject: [PATCH 0009/1155] Added a new bfMapClearCache function to map.cpp and linked it in with the Python to make it easy to clear the map cache. --- python/bifrost/__init__.py | 2 +- python/bifrost/map.py | 3 +++ src/bifrost/map.h | 2 ++ src/map.cpp | 5 +++++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/python/bifrost/__init__.py b/python/bifrost/__init__.py index 547484d3b..8e4c9250e 100644 --- a/python/bifrost/__init__.py +++ b/python/bifrost/__init__.py @@ -36,7 +36,7 @@ import device from ndarray import ndarray, asarray, empty_like, empty, zeros_like, zeros import views -from map import map +from map import map, map_clear_cache from pipeline import Pipeline, get_default_pipeline, block_scope import blocks from block_chainer import BlockChainer diff --git a/python/bifrost/map.py b/python/bifrost/map.py index cc0fcd2fb..92a82e2a7 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -124,3 +124,6 @@ def map(func_string, data, axis_names=None, shape=None, narg, _array(args), _array(arg_names), func_name, func_string, extra_code, _array(block_shape), _array(block_axes))) + +def map_clear_cache(): + _check(_bf.bfMapClearCache()) diff --git a/src/bifrost/map.h b/src/bifrost/map.h index b02de01fe..9f1e1eb1e 100644 --- a/src/bifrost/map.h +++ b/src/bifrost/map.h @@ -91,6 +91,8 @@ BFstatus bfMap(int ndim, int const* block_shape, // Must be array of length 2, or NULL int const* block_axes); // Must be array of length 2, or NULL +BFstatus bfMapClearCache(); + #ifdef __cplusplus } // extern "C" #endif diff --git a/src/map.cpp b/src/map.cpp index 7b6e7f22a..da3150769 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -789,3 +789,8 @@ BFstatus bfMap(int ndim, return BF_STATUS_SUCCESS; } + +BFstatus bfMapClearCache() { + DiskCacheMgr::get().clear(); + return BF_STATUS_SUCCESS; +} From b1ede2ffddfb6191c4eab1b513eed17af16552b9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 16 May 2019 13:12:04 -0600 Subject: [PATCH 0010/1155] Updated test_map.py and test_transpose.py to always clear the map disk cache before running. --- test/test_map.py | 1 + test/test_transpose.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/test/test_map.py b/test/test_map.py index 8d4ecc831..fdd41a897 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -33,6 +33,7 @@ class TestMap(unittest.TestCase): def setUp(self): np.random.seed(1234) + bf.map_clear_cache() def run_simple_test(self, x, funcstr, func): x_orig = x x = bf.asarray(x, 'cuda') diff --git a/test/test_transpose.py b/test/test_transpose.py index 1a2d874a7..8b4ac8f29 100644 --- a/test/test_transpose.py +++ b/test/test_transpose.py @@ -32,6 +32,8 @@ from itertools import permutations class TransposeTest(unittest.TestCase): + def setUp(self): + bf.map_clear_cache() def run_simple_test(self, axes, dtype, shape): n = reduce(lambda a,b:a*b, shape) idata = (np.arange(n).reshape(shape) % 251).astype(dtype) From 6d7935516b1043f649481ee6d6544b3429e0320a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 13 Jun 2019 09:49:23 -0600 Subject: [PATCH 0011/1155] Added Python access to the bfStreamGet and bfStreamSet methods. --- python/bifrost/device.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/python/bifrost/device.py b/python/bifrost/device.py index 134045dbb..acb0473ab 100644 --- a/python/bifrost/device.py +++ b/python/bifrost/device.py @@ -25,6 +25,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from ctypes import c_ulong, byref from libbifrost import _bf, _check, _get def set_device(device): @@ -32,10 +33,22 @@ def set_device(device): _check(_bf.bfDeviceSet(device)) else: _check(_bf.bfDeviceSetById(device)) + def get_device(): return _get(_bf.bfDeviceGet) -# TODO: set/get_stream +def get_stream(): + """Get the current CUDA stream and return it as a ctypes.c_ulong instance.""" + stream = c_ulong(0) + _check(_bf.bfStreamGet(byref(stream))) + return stream + +def set_stream(stream): + """Set the CUDA stream to the provided ctypes.c_ulong instance.""" + if not isinstance(stream, c_ulong): + raise TypeError("Expected a ctypes.u_int instance") + _check(_bf.bfStreamSet(byref(stream))) + return True def stream_synchronize(): _check(_bf.bfStreamSynchronize()) From 6649589d0ca8e6672d7f5f9da421c41bdd04f026 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 13 Jun 2019 10:02:58 -0600 Subject: [PATCH 0012/1155] Added a new bfStreamCreate function that wraps cudaStreamCreateWithFlags to enable new stream creation. --- src/bifrost/cuda.h | 2 ++ src/cuda.cpp | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/bifrost/cuda.h b/src/bifrost/cuda.h index 8b796447b..8967ce783 100644 --- a/src/bifrost/cuda.h +++ b/src/bifrost/cuda.h @@ -35,6 +35,8 @@ extern "C" { #endif +BFstatus bfStreamCreate(void* stream, + BFbool nonblocking); BFstatus bfStreamGet(void* stream); BFstatus bfStreamSet(void const* stream); BFstatus bfStreamSynchronize(); diff --git a/src/cuda.cpp b/src/cuda.cpp index e8bca57ef..3a29c3581 100644 --- a/src/cuda.cpp +++ b/src/cuda.cpp @@ -34,12 +34,27 @@ thread_local cudaStream_t g_cuda_stream = cudaStreamPerThread; #endif +BFstatus bfStreamCreate(void* stream, + BFbool nonblocking=false) { + BF_ASSERT(stream, BF_STATUS_INVALID_POINTER); +#if BF_CUDA_ENABLED + int flags = cudaStreamDefault; + if( nonblocking ) { + flags = cudaStreamNonBlocking; + } + BF_CHECK_CUDA(cudaStreamCreateWithFlags((cudaStream_t*)stream, flags), + BF_STATUS_DEVICE_ERROR); +#else + BF_FAIL("Built without CUDA support (bfStreamCreate)", BF_STATUS_INVALID_STATE); +#endif + return BF_STATUS_SUCCESS; +} BFstatus bfStreamGet(void* stream) { BF_ASSERT(stream, BF_STATUS_INVALID_POINTER); #if BF_CUDA_ENABLED *(cudaStream_t*)stream = g_cuda_stream; #else - BF_FAIL("Built with CUDA support (bfStreamGet)", BF_STATUS_INVALID_STATE); + BF_FAIL("Built without CUDA support (bfStreamGet)", BF_STATUS_INVALID_STATE); #endif return BF_STATUS_SUCCESS; } From 7b46154b54b884fda2039bcea2d3f120a5e2ab47 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 13 Jun 2019 10:04:23 -0600 Subject: [PATCH 0013/1155] Added Python access to the new bfStreamCreate function. --- python/bifrost/device.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/python/bifrost/device.py b/python/bifrost/device.py index acb0473ab..e66afc434 100644 --- a/python/bifrost/device.py +++ b/python/bifrost/device.py @@ -37,6 +37,15 @@ def set_device(device): def get_device(): return _get(_bf.bfDeviceGet) +def create_stream(nonblocking=False): + """Create a new CUDA stream and return it as a ctypes.c_ulong instance. + If the `nonblocking` is True then the stream may run independently with + respect to stream 0.""" + stream = c_ulong(0) + _check(_bf.bfStreamCreate(byref(stream), nonblocking)) + return stream + + def get_stream(): """Get the current CUDA stream and return it as a ctypes.c_ulong instance.""" stream = c_ulong(0) From 99962a6c2dad2125b8fd2a3a7ad79cfa6ecdfa67 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 21 Jun 2019 13:57:36 -0600 Subject: [PATCH 0014/1155] Exposed the *GetStream() and *SetStream() methods of a BifrostObject to Python (if they exist). --- python/bifrost/libbifrost.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 369e0ed90..7e54c80d2 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -43,6 +43,7 @@ class BifrostObject(object): """Base class for simple objects with create/destroy functions""" def __init__(self, constructor, destructor, *args): + self._obj_basename = constructor.__name__.replace('Create','') self.obj = destructor.argtypes[0]() _check(constructor(ctypes.byref(self.obj), *args)) self._destructor = destructor @@ -56,6 +57,24 @@ def __enter__(self): return self def __exit__(self, type, value, tb): self._destroy() + def set_stream(self, stream): + if not isinstance(stream, ctypes.c_ulong): + raise TypeError("Expected a ctypes.u_ulong instance") + set_fnc = getattr(_bf, self._obj_basename+"SetStream", None) + if set_fnc is None: + raise AttributeError("set_stream() is not supported by %s objects" % self._obj_basename) + + _check( set_fnc(self.obj, + ctypes.byref(stream)) ) + def get_stream(self): + get_fnc = getattr(_bf, self._obj_basename+"GetStream", None) + if get_fnc is None: + raise AttributeError("get_stream() is not supported by %s objects" % self._obj_basename) + + stream = ctypes.c_ulong(0) + _check( get_fnc(self.obj, + ctypes.byref(stream))) + return stream def _array(size_or_vals, dtype=None): import ctypes From 63b03a1bc517cc99c596e7a5fce1eea653a65415 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 30 Aug 2019 16:03:24 -0600 Subject: [PATCH 0015/1155] Added a flag to user.mk to disable the map disk cache at compile time. --- src/Makefile | 4 ++++ src/map.cpp | 12 +++++++++++- user.mk | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 793b613f9..0607e6d31 100644 --- a/src/Makefile +++ b/src/Makefile @@ -109,6 +109,10 @@ ifndef NOCUDA LIB += -L$(CUDA_LIBDIR64) -L$(CUDA_LIBDIR) -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt endif +ifndef NOMAPCACHE + CPPFLAGS += -DBF_MAPCACHE_ENABLED=1 +endif + ifndef ANY_ARCH CXXFLAGS += -march=native NVCCFLAGS += -Xcompiler "-march=native" diff --git a/src/map.cpp b/src/map.cpp index da3150769..e6008f97e 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -398,6 +398,7 @@ BFstatus build_map_kernel(int* external_ndim, return BF_STATUS_SUCCESS; } +#if BF_MAPCACHE_ENABLED class DiskCacheMgr { static constexpr const char* _cachedir = "/dev/shm/bifrost_cache/"; std::string _vinfofile = std::string(_cachedir)+"map.ver"; @@ -621,6 +622,7 @@ class DiskCacheMgr { _loaded = false; } }; +#endif BFstatus bfMap(int ndim, long const* shape, @@ -695,7 +697,9 @@ BFstatus bfMap(int ndim, } std::string cache_key = cache_key_ss.str(); - DiskCacheMgr::get().load(&kernel_cache); +#if BF_MAPCACHE_ENABLED + DiskCacheMgr::get().load(&kernel_cache); +#endif if( !kernel_cache.contains(cache_key) ) { std::string ptx; @@ -724,7 +728,9 @@ BFstatus bfMap(int ndim, BF_TRY(kernel.set(kernel_name.c_str(), ptx.c_str())); kernel_cache.insert(cache_key, std::make_pair(kernel, basic_indexing_only)); +#if BF_MAPCACHE_ENABLED DiskCacheMgr::get().save(cache_key, kernel_name, ptx, basic_indexing_only); +#endif //std::cout << "INSERTING INTO CACHE" << std::endl; } else { //std::cout << "FOUND IN CACHE" << std::endl; @@ -791,6 +797,10 @@ BFstatus bfMap(int ndim, } BFstatus bfMapClearCache() { +#if BF_MAPCACHE_ENABLED DiskCacheMgr::get().clear(); return BF_STATUS_SUCCESS; +#else + return BF_STATUS_UNSUPPORTED; +#endif } diff --git a/user.mk b/user.mk index 09f7be577..1b3313610 100644 --- a/user.mk +++ b/user.mk @@ -23,6 +23,7 @@ ALIGNMENT ?= 4096 # Memory allocation alignment #NODEBUG = 1 # Disable debugging mode (use this for production releases) #TRACE = 1 # Enable tracing mode (generates annotations for use with nvprof/nvvp) #NOCUDA = 1 # Disable CUDA support +#NOMAPCACHE = 1 # Disable the map function disk cache #ANY_ARCH = 1 # Disable native architecture compilation #CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) #NUMA = 1 # Enable use of numa library for setting affinity of ring memory From 90291f0dd9fb0e8f2cd45d6627259b86d7242eb1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 2 Oct 2019 15:38:46 -0600 Subject: [PATCH 0016/1155] Fixed the dates in the various files modified. --- python/bifrost/map.py | 2 +- src/bifrost/map.h | 2 +- src/map.cpp | 2 +- src/proclog.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/bifrost/map.py b/python/bifrost/map.py index 92a82e2a7..1666329b9 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2019, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/src/bifrost/map.h b/src/bifrost/map.h index 9f1e1eb1e..4abffbd0d 100644 --- a/src/bifrost/map.h +++ b/src/bifrost/map.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2019, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/src/map.cpp b/src/map.cpp index e6008f97e..535664b6c 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2019, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/src/proclog.cpp b/src/proclog.cpp index 79042a099..c76d10cfe 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2019, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions From 357283edddf7a74fc0c4264ba7296f297ea0f133 Mon Sep 17 00:00:00 2001 From: JackH Date: Tue, 16 Jun 2020 08:23:01 -0700 Subject: [PATCH 0017/1155] Add LWA352 packet format --- python/bifrost/libbifrost.py | 1 + python/bifrost/packet_capture.py | 4 + src/bifrost/packet_capture.h | 4 + src/formats/base.hpp | 4 + src/formats/formats.hpp | 1 + src/formats/snap2.hpp | 190 +++++++++++++++++++++++++++++++ src/packet_capture.cpp | 10 ++ src/packet_capture.hpp | 90 ++++++++++++++- 8 files changed, 303 insertions(+), 1 deletion(-) create mode 100644 src/formats/snap2.hpp diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 897d9fd65..68e64654c 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -47,6 +47,7 @@ class BifrostObject(object): """Base class for simple objects with create/destroy functions""" def __init__(self, constructor, destructor, *args): self.obj = destructor.argtypes[0]() + print(self.obj) _check(constructor(ctypes.byref(self.obj), *args)) self._destructor = destructor def _destroy(self): diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index f5fc446ca..fc02d4ffb 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -40,6 +40,10 @@ def set_chips(self, fnc): self._ref_cache['chips'] = _bf.BFpacketcapture_chips_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetCHIPS( self.obj, self._ref_cache['chips'])) + def set_snap2(self, fnc): + self._ref_cache['snap2'] = _bf.BFpacketcapture_snap2_sequence_callback(fnc) + _check(_bf.bfPacketCaptureCallbackSetSNAP2( + self.obj, self._ref_cache['snap2'])) def set_ibeam(self, fnc): self._ref_cache['ibeam'] = _bf.BFpacketcapture_ibeam_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetIBeam( diff --git a/src/bifrost/packet_capture.h b/src/bifrost/packet_capture.h index b32af9bdb..0bf38c64e 100644 --- a/src/bifrost/packet_capture.h +++ b/src/bifrost/packet_capture.h @@ -39,6 +39,8 @@ extern "C" { typedef int (*BFpacketcapture_chips_sequence_callback)(BFoffset, int, int, int, BFoffset*, void const**, size_t*); +typedef int (*BFpacketcapture_snap2_sequence_callback)(BFoffset, int, int, int, + BFoffset*, void const**, size_t*); typedef int (*BFpacketcapture_ibeam_sequence_callback)(BFoffset, int, int, int, BFoffset*, void const**, size_t*); typedef int (*BFpacketcapture_cor_sequence_callback)(BFoffset, BFoffset, int, int, @@ -56,6 +58,8 @@ BFstatus bfPacketCaptureCallbackCreate(BFpacketcapture_callback* obj); BFstatus bfPacketCaptureCallbackDestroy(BFpacketcapture_callback obj); BFstatus bfPacketCaptureCallbackSetCHIPS(BFpacketcapture_callback obj, BFpacketcapture_chips_sequence_callback callback); +BFstatus bfPacketCaptureCallbackSetSNAP2(BFpacketcapture_callback obj, + BFpacketcapture_snap2_sequence_callback callback); BFstatus bfPacketCaptureCallbackSetIBeam(BFpacketcapture_callback obj, BFpacketcapture_ibeam_sequence_callback callback); BFstatus bfPacketCaptureCallbackSetCOR(BFpacketcapture_callback obj, diff --git a/src/formats/base.hpp b/src/formats/base.hpp index 8bc05fedc..8e545a611 100644 --- a/src/formats/base.hpp +++ b/src/formats/base.hpp @@ -64,6 +64,10 @@ struct PacketDesc { int src; int nchan; int chan0; + int nchan_tot; + int npol; + int pol0; + int npol_tot; uint32_t sync; uint64_t time_tag; int tuning; diff --git a/src/formats/formats.hpp b/src/formats/formats.hpp index 311319169..6e2f4c527 100644 --- a/src/formats/formats.hpp +++ b/src/formats/formats.hpp @@ -35,3 +35,4 @@ #include "tbn.hpp" #include "tbf.hpp" #include "ibeam.hpp" +#include "snap2.hpp" diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp new file mode 100644 index 000000000..a63108c86 --- /dev/null +++ b/src/formats/snap2.hpp @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include "base.hpp" + +//#include // SSE + +#define SNAP2_HEADER_MAGIC 0xaabbccdd + +// TODO: parameterize somewhere. This isn't +// related to the packet formatting +#define PIPELINE_NPOL 704 +#define PIPELINE_NCHAN 32 + +#pragma pack(1) +// All entries are network (i.e. big) endian +struct snap2_hdr_type { + uint64_t seq; // Spectra counter == packet counter + uint32_t magic; // = 0xaabbccdd + uint16_t npol; // Number of pols in this packet + uint16_t npol_tot; // Number of pols total + uint16_t nchan; // Number of channels in this packet + uint16_t nchan_tot; // Number of channels total (for this pipeline) + uint32_t chan_block_id; // ID of this block of chans + uint32_t chan0; // First channel in this packet + uint32_t pol0; // First pol in this packet +}; + +/* + * The PacketDecoder's job is to unpack + * a packet into a standard PacketDesc + * format, and verify that a packet + * is valid. + */ + +#define BF_SNAP2_DEBUG 0 + +class SNAP2Decoder : virtual public PacketDecoder { +protected: + inline bool valid_packet(const PacketDesc* pkt) const { +#if BFSNAP2_DEBUG + cout << "seq: "<< pkt->seq << endl; + cout << "src: "<< pkt->src << endl; + cout << "nsrc: "<< pkt->nsrc << endl; + cout << "nchan: "<< pkt->nchan << endl; + cout << "chan0: "<< pkt->chan0 << endl; +#endif + return ( + pkt->seq >= 0 + && pkt->src >= 0 + && pkt->src < _nsrc + && pkt->nsrc == _nsrc + && pkt->chan0 >= 0 + ); + } +public: + SNAP2Decoder(int nsrc, int src0) : PacketDecoder(nsrc, src0) {} + inline bool operator()(const uint8_t* pkt_ptr, + int pkt_size, + PacketDesc* pkt) const { + if( pkt_size < (int)sizeof(snap2_hdr_type) ) { + return false; + } + const snap2_hdr_type* pkt_hdr = (snap2_hdr_type*)pkt_ptr; + const uint8_t* pkt_pld = pkt_ptr + sizeof(snap2_hdr_type); + int pld_size = pkt_size - sizeof(snap2_hdr_type); + if( be32toh(pkt_hdr->magic) != SNAP2_HEADER_MAGIC ) { + return false; + } + pkt->seq = be64toh(pkt_hdr->seq); + int npol_blocks = (be16toh(pkt_hdr->npol_tot) / be16toh(pkt_hdr->npol)); + int nchan_blocks = (be16toh(pkt_hdr->nchan_tot) / be16toh(pkt_hdr->nchan)); + + pkt->nsrc = npol_blocks * nchan_blocks;// _nsrc; + pkt->src = (npol_blocks * be16toh(pkt_hdr->chan_block_id)) + (be16toh(pkt_hdr->npol_tot) / be16toh(pkt_hdr->npol)); + pkt->nchan = be16toh(pkt_hdr->nchan); + pkt->chan0 = be32toh(pkt_hdr->chan_block_id) * be16toh(pkt_hdr->nchan); + pkt->nchan_tot = be16toh(pkt_hdr->nchan_tot); + pkt->npol = be16toh(pkt_hdr->npol); + pkt->npol_tot = be16toh(pkt_hdr->npol_tot); + pkt->pol0 = be32toh(pkt_hdr->pol0); + pkt->payload_size = pld_size; + pkt->payload_ptr = pkt_pld; + return this->valid_packet(pkt); + } +}; + +class SNAP2Processor : virtual public PacketProcessor { +protected: + int _pipeline_nchan = PIPELINE_NCHAN; +public: + inline void operator()(const PacketDesc* pkt, + uint64_t seq0, + uint64_t nseq_per_obuf, + int nbuf, + uint8_t* obufs[], + size_t ngood_bytes[], + size_t* src_ngood_bytes[]) { + int obuf_idx = ((pkt->seq - seq0 >= 1*nseq_per_obuf) + + (pkt->seq - seq0 >= 2*nseq_per_obuf)); + size_t obuf_seq0 = seq0 + obuf_idx*nseq_per_obuf; + size_t nbyte = pkt->payload_size * BF_UNPACK_FACTOR; + ngood_bytes[obuf_idx] += nbyte; + src_ngood_bytes[obuf_idx][pkt->src] += nbyte; + int payload_size = pkt->payload_size; + + size_t obuf_offset = (pkt->seq-obuf_seq0)*pkt->nsrc*payload_size; + typedef unaligned256_type itype; //256 bits = 32 pols / word + typedef aligned256_type otype; + + obuf_offset *= BF_UNPACK_FACTOR; + + // Note: Using these SSE types allows the compiler to use SSE instructions + // However, they require aligned memory (otherwise segfault) + itype const* __restrict__ in = (itype const*)pkt->payload_ptr; + otype* __restrict__ out = (otype* )&obufs[obuf_idx][obuf_offset]; + + // Copy packet payload one channel at a time. + // Packets have payload format nchans x npols x complexity + // spacing with which channel chunks are copied depends + // on the total number of channels/pols in the system + for(int chan=0; channchan; chan++) { + // // TODO: AVX stores here will probably be much faster + // ::memcpy(&out[(((pkt->npol_tot) * (pkt->chan0 + chan)) + (pkt->pol0)) / 32], + // &in[(pkt->npol / 32) * chan], pkt->npol / 32); + } + } + + inline void blank_out_source(uint8_t* data, + int src, + int nsrc, + int nchan, + int nseq) { + typedef aligned256_type otype; + otype* __restrict__ aligned_data = (otype*)data; + for( int t=0; t(hdr); + memset(header, 0, sizeof(chips_hdr_type)); + + header->roach = hdr_base->src + 1; + header->gbe = hdr_base->tuning; + header->nchan = hdr_base->nchan; + header->nsubband = 1; // Should be changable? + header->subband = 0; // Should be changable? + header->nroach = hdr_base->nsrc; + header->chan0 = htons(hdr_base->chan0); + header->seq = htobe64(hdr_base->seq); + } +}; diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index ca594764f..05fadc816 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -132,6 +132,13 @@ BFstatus bfPacketCaptureCallbackSetCHIPS(BFpacketcapture_callback obj, return BF_STATUS_SUCCESS; } +BFstatus bfPacketCaptureCallbackSetSNAP2(BFpacketcapture_callback obj, + BFpacketcapture_snap2_sequence_callback callback) { + BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); + obj->set_snap2(callback); + return BF_STATUS_SUCCESS; +} + BFstatus bfPacketCaptureCallbackSetIBeam(BFpacketcapture_callback obj, BFpacketcapture_ibeam_sequence_callback callback) { BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); @@ -245,9 +252,12 @@ BFpacketcapture_status BFpacketcapture_impl::recv() { ret = BF_CAPTURE_CONTINUED; } } + BF_PRINTD("_bufs.size(): " << _bufs.size()); if( _bufs.size() == 2 ) { + BF_PRINTD("Committing buffer"); this->commit_buf(); } + BF_PRINTD("Rseerving buffer"); this->reserve_buf(); } else { diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index bce215344..e4eb55528 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -350,6 +350,7 @@ inline uint64_t round_nearest(uint64_t val, uint64_t mult) { class BFpacketcapture_callback_impl { BFpacketcapture_chips_sequence_callback _chips_callback; + BFpacketcapture_snap2_sequence_callback _snap2_callback; BFpacketcapture_ibeam_sequence_callback _ibeam_callback; BFpacketcapture_cor_sequence_callback _cor_callback; BFpacketcapture_vdif_sequence_callback _vdif_callback; @@ -358,13 +359,20 @@ class BFpacketcapture_callback_impl { public: BFpacketcapture_callback_impl() : _chips_callback(NULL), _ibeam_callback(NULL), _cor_callback(NULL), - _vdif_callback(NULL), _tbn_callback(NULL), _drx_callback(NULL) {} + _vdif_callback(NULL), _tbn_callback(NULL), _drx_callback(NULL), + _snap2_callback(NULL) {} inline void set_chips(BFpacketcapture_chips_sequence_callback callback) { _chips_callback = callback; } inline BFpacketcapture_chips_sequence_callback get_chips() { return _chips_callback; } + inline void set_snap2(BFpacketcapture_snap2_sequence_callback callback) { + _snap2_callback = callback; + } + inline BFpacketcapture_snap2_sequence_callback get_snap2() { + return _snap2_callback; + } inline void set_ibeam(BFpacketcapture_ibeam_sequence_callback callback) { _ibeam_callback = callback; } @@ -625,6 +633,81 @@ class BFpacketcapture_chips_impl : public BFpacketcapture_impl { } }; +class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { + ProcLog _type_log; + ProcLog _chan_log; + + BFpacketcapture_snap2_sequence_callback _sequence_callback; + + void on_sequence_start(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size ) { + // TODO: Might be safer to round to nearest here, but the current firmware + // always starts things ~3 seq's before the 1sec boundary anyway. + //seq = round_up(pkt->seq, _slot_ntime); + //*_seq = round_nearest(pkt->seq, _slot_ntime); + _seq = round_up(pkt->seq, _slot_ntime); + this->on_sequence_changed(pkt, seq0, time_tag, hdr, hdr_size); + } + void on_sequence_active(const PacketDesc* pkt) { + if( pkt ) { + //cout << "Latest nchan, chan0 = " << pkt->nchan << ", " << pkt->chan0 << endl; + } + else { + //cout << "No latest packet" << endl; + } + } + // Has the configuration changed? I.e., different channels being sent. + inline bool has_sequence_changed(const PacketDesc* pkt) { + // TODO: sequence never changes? + //return false; + //return (pkt->seq % 128 == 0); + } + void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { + *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); + _chan0 = pkt->chan0; + _nchan = pkt->nchan; + _payload_size = pkt->payload_size; + + if( _sequence_callback ) { + int status = (*_sequence_callback)(*seq0, + _chan0, + _nchan, + _nsrc, + time_tag, + hdr, + hdr_size); + if( status != 0 ) { + // TODO: What to do here? Needed? + throw std::runtime_error("BAD HEADER CALLBACK STATUS"); + } + } else { + // Simple default for easy testing + *time_tag = *seq0; + *hdr = NULL; + *hdr_size = 0; + } + + _chan_log.update() << "chan0 : " << _chan0 << "\n" + << "nchan : " << _nchan << "\n" + << "payload_size : " << _payload_size << "\n"; + } +public: + inline BFpacketcapture_snap2_impl(PacketCaptureThread* capture, + BFring ring, + int nsrc, + int src0, + int buffer_ntime, + int slot_ntime, + BFpacketcapture_callback sequence_callback) + : BFpacketcapture_impl(capture, nullptr, nullptr, ring, nsrc, buffer_ntime, slot_ntime), + _type_log((std::string(capture->get_name())+"/type").c_str()), + _chan_log((std::string(capture->get_name())+"/chans").c_str()), + _sequence_callback(sequence_callback->get_snap2()) { + _decoder = new SNAP2Decoder(nsrc, src0); + _processor = new SNAP2Processor(); + _type_log.update("type : %s\n", "snap2"); + } +}; + template class BFpacketcapture_ibeam_impl : public BFpacketcapture_impl { uint8_t _nbeam = B; @@ -1092,6 +1175,11 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, buffer_ntime, slot_ntime, sequence_callback), *obj = 0); + } else if( std::string(format).substr(0, 5) == std::string("snap2") ) { + BF_TRY_RETURN_ELSE(*obj = new BFpacketcapture_snap2_impl(capture, ring, nsrc, src0, + buffer_ntime, slot_ntime, + sequence_callback), + *obj = 0); } else if( std::string(format).substr(0, 6) == std::string("ibeam2") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketcapture_ibeam_impl<2>(capture, ring, nsrc, src0, buffer_ntime, slot_ntime, From 9fb5a0940289e0b794a3468574223178894fdc39 Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 18 Jun 2020 17:09:57 +0000 Subject: [PATCH 0018/1155] Add xGPU bindings This allows the DP4A library to be used, which is way faster --- src/Makefile | 7 +++++ src/bf_xgpu.cpp | 60 +++++++++++++++++++++++++++++++++++++++++++ src/bifrost/bf_xgpu.h | 9 +++++++ 3 files changed, 76 insertions(+) create mode 100644 src/bf_xgpu.cpp create mode 100644 src/bifrost/bf_xgpu.h diff --git a/src/Makefile b/src/Makefile index 72619d2a4..a79c574de 100644 --- a/src/Makefile +++ b/src/Makefile @@ -37,6 +37,10 @@ ifndef NOCUDA fir.o \ guantize.o \ gunpack.o +ifdef XGPU + LIBBIFROST_OBJS += \ + bf_xgpu.o +endif endif JIT_SOURCES ?= \ @@ -110,6 +114,9 @@ endif ifndef NOCUDA CPPFLAGS += -DBF_CUDA_ENABLED=1 LIB += -L$(CUDA_LIBDIR64) -L$(CUDA_LIBDIR) -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt +ifdef XGPU + LIB += -lxgpu +endif endif ifndef ANY_ARCH diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp new file mode 100644 index 000000000..66ea4d5b2 --- /dev/null +++ b/src/bf_xgpu.cpp @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +extern "C" { + +static XGPUContext context; +static XGPUInfo info; + +BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev) { + int xgpu_error; + xgpuInfo(&info); + if (num_contiguous_elements(in) != info.vecLength) { + return BF_STATUS_INVALID_SHAPE; + } + if (num_contiguous_elements(out) != info.matLength) { + return BF_STATUS_INVALID_SHAPE; + } + context.array_h = (ComplexInput *)in->data; + context.array_len = info.vecLength; + context.matrix_h = (Complex *)out->data; + context.matrix_len = info.matLength; + xgpu_error = xgpuInit(&context, gpu_dev); + if (xgpu_error != XGPU_OK) { + return BF_STATUS_INTERNAL_ERROR; + } else { + return BF_STATUS_SUCCESS; + } +} + +BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump) { + int xgpu_error; + context.array_h = (ComplexInput *)in->data; + context.array_len = info.vecLength; + context.matrix_h = (Complex *)out->data; + context.matrix_len = info.matLength; + xgpu_error = xgpuCudaXengineSwizzle(&context, doDump ? SYNCOP_DUMP : SYNCOP_SYNC_TRANSFER); + if (doDump) { + xgpuClearDeviceIntegrationBuffer(&context); + } + if (xgpu_error != XGPU_OK) { + return BF_STATUS_INTERNAL_ERROR; + } else { + return BF_STATUS_SUCCESS; + } +} + +} // C diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h new file mode 100644 index 000000000..120fc8232 --- /dev/null +++ b/src/bifrost/bf_xgpu.h @@ -0,0 +1,9 @@ +#include +#include + +//extern "C" { + +BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); +BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump); + +//} From 1cf8cdbbee181de1bade6cd5855ca7e445ee7976 Mon Sep 17 00:00:00 2001 From: JackH Date: Fri, 19 Jun 2020 13:39:50 +0000 Subject: [PATCH 0019/1155] remove print --- python/bifrost/libbifrost.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 68e64654c..897d9fd65 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -47,7 +47,6 @@ class BifrostObject(object): """Base class for simple objects with create/destroy functions""" def __init__(self, constructor, destructor, *args): self.obj = destructor.argtypes[0]() - print(self.obj) _check(constructor(ctypes.byref(self.obj), *args)) self._destructor = destructor def _destroy(self): From 6d088a2aba4a9280fe52de0f7fac7571c45ac5a0 Mon Sep 17 00:00:00 2001 From: JackH Date: Sun, 21 Jun 2020 16:36:44 +0000 Subject: [PATCH 0020/1155] Add Kernel-only xgpu functions I.e., call xGPU passing pointers to already transferred data on the device. This gives up xGPU's pipelining abilities, but makes it easier to use the xGPU kernel alongside other consumers also using the same GPU input buffer. --- src/Makefile | 2 +- src/bf_xgpu.cpp | 43 +++++++++++++++++++++++++++++++++++++++++-- src/bifrost/bf_xgpu.h | 1 + user.mk | 5 +++-- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/Makefile b/src/Makefile index a79c574de..e3d83f592 100644 --- a/src/Makefile +++ b/src/Makefile @@ -113,7 +113,7 @@ endif ifndef NOCUDA CPPFLAGS += -DBF_CUDA_ENABLED=1 - LIB += -L$(CUDA_LIBDIR64) -L$(CUDA_LIBDIR) -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt + LIB += -L$(CUDA_LIBDIR64) -L$(CUDA_LIBDIR) -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt -lxgpu ifdef XGPU LIB += -lxgpu endif diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp index 66ea4d5b2..54e11b1f8 100644 --- a/src/bf_xgpu.cpp +++ b/src/bf_xgpu.cpp @@ -19,6 +19,11 @@ extern "C" { static XGPUContext context; static XGPUInfo info; +/* + * Initialize the xGPU library by providing + * a pointer to the input and output data (on the host), + * and a GPU device ID + */ BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev) { int xgpu_error; xgpuInfo(&info); @@ -28,7 +33,7 @@ BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev) { if (num_contiguous_elements(out) != info.matLength) { return BF_STATUS_INVALID_SHAPE; } - context.array_h = (ComplexInput *)in->data; + context.array_h = (SwizzleInput *)in->data; context.array_len = info.vecLength; context.matrix_h = (Complex *)out->data; context.matrix_len = info.matLength; @@ -40,9 +45,16 @@ BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev) { } } +/* + * Call the xGPU kernel. + * in : pointer to input data array on host + * out: pointer to output data array on host + * doDump : if 1, this is the last call in an integration, and results + * will be copied to the host. + */ BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump) { int xgpu_error; - context.array_h = (ComplexInput *)in->data; + context.array_h = (SwizzleInput *)in->data; context.array_len = info.vecLength; context.matrix_h = (Complex *)out->data; context.matrix_len = info.matLength; @@ -57,4 +69,31 @@ BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump) { } } +/* + * Call the xGPU kernel having pre-copied data to device memory. + * Note that this means xGPU can't take advantage of its inbuild + * copy/compute pipelining. + * in : pointer to input data array on device + * out: pointer to output data array on device + * doDump : if 1, this is the last call in an integration, and results + * will be copied to the host. + */ +BFstatus xgpuKernel(BFarray *in, BFarray *out, int doDump) { + int xgpu_error; + context.array_h = (ComplexInput *)in->data; + context.array_len = info.vecLength; + context.matrix_h = (Complex *)out->data; + context.matrix_len = info.matLength; + xgpu_error = xgpuCudaXengineSwizzleKernel(&context, doDump ? SYNCOP_DUMP : SYNCOP_SYNC_TRANSFER, + (SwizzleInput *)in->data, (Complex *)out->data); + if (doDump) { + xgpuClearDeviceIntegrationBuffer(&context); + } + if (xgpu_error != XGPU_OK) { + return BF_STATUS_INTERNAL_ERROR; + } else { + return BF_STATUS_SUCCESS; + } +} + } // C diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h index 120fc8232..447c090e7 100644 --- a/src/bifrost/bf_xgpu.h +++ b/src/bifrost/bf_xgpu.h @@ -5,5 +5,6 @@ BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump); +BFstatus xgpuKernel(BFarray *in, BFarray *out, int doDump); //} diff --git a/user.mk b/user.mk index 49cc2a199..256c674f2 100644 --- a/user.mk +++ b/user.mk @@ -28,5 +28,6 @@ ALIGNMENT ?= 4096 # Memory allocation alignment #ANY_ARCH = 1 # Disable native architecture compilation #CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) #NUMA = 1 # Enable use of numa library for setting affinity of ring memory -#HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture -#VMA = 1 # Enable use of Mellanox libvma in udp_capture +HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture +VMA = 1 # Enable use of Mellanox libvma in udp_capture +XGPU = 1 # build xGPU integrations (requires the xGPU library) From 93104062e745b571aa1c71d39329814defc321ee Mon Sep 17 00:00:00 2001 From: JackH Date: Mon, 22 Jun 2020 19:58:25 +0000 Subject: [PATCH 0021/1155] add xgpuSubSelect; fix xgpuKernel Add some checking for proper pointer spaces. More checking required --- src/bf_xgpu.cpp | 78 ++++++++++++++++++++++++++++++++++++++----- src/bifrost/bf_xgpu.h | 5 +-- 2 files changed, 71 insertions(+), 12 deletions(-) diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp index 54e11b1f8..82c923758 100644 --- a/src/bf_xgpu.cpp +++ b/src/bf_xgpu.cpp @@ -27,18 +27,33 @@ static XGPUInfo info; BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev) { int xgpu_error; xgpuInfo(&info); - if (num_contiguous_elements(in) != info.vecLength) { - return BF_STATUS_INVALID_SHAPE; - } - if (num_contiguous_elements(out) != info.matLength) { - return BF_STATUS_INVALID_SHAPE; + // Don't bother checking sizes if the input space is CUDA. + // We're not going to use these arrays anyway + if (in->space != BF_SPACE_CUDA) { + if (num_contiguous_elements(in) != info.vecLength) { + fprintf(stderr, "ERROR: xgpuInitialize: number of elements in != vecLength\n"); + fprintf(stderr, "number of elements in: %lu\n", num_contiguous_elements(in)); + fprintf(stderr, "vecLength: %llu\n", info.vecLength); + return BF_STATUS_INVALID_SHAPE; + } + if (num_contiguous_elements(out) != info.matLength) { + fprintf(stderr, "ERROR: xgpuInitialize: number of elements out != matLength\n"); + fprintf(stderr, "number of elements out: %lu\n", num_contiguous_elements(out)); + fprintf(stderr, "matLength: %llu\n", info.matLength); + return BF_STATUS_INVALID_SHAPE; + } } context.array_h = (SwizzleInput *)in->data; context.array_len = info.vecLength; context.matrix_h = (Complex *)out->data; context.matrix_len = info.matLength; - xgpu_error = xgpuInit(&context, gpu_dev); + if (in->space == BF_SPACE_CUDA) { + xgpu_error = xgpuInit(&context, gpu_dev | XGPU_DONT_REGISTER | XGPU_DONT_MALLOC_GPU); + } else { + xgpu_error = xgpuInit(&context, gpu_dev); + } if (xgpu_error != XGPU_OK) { + fprintf(stderr, "ERROR: xgpuInitialize: call returned %d\n", xgpu_error); return BF_STATUS_INTERNAL_ERROR; } else { return BF_STATUS_SUCCESS; @@ -53,6 +68,12 @@ BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev) { * will be copied to the host. */ BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump) { + if (in->space == BF_SPACE_CUDA) { + return BF_STATUS_UNSUPPORTED_SPACE; + } + if (out->space == BF_SPACE_CUDA) { + return BF_STATUS_UNSUPPORTED_SPACE; + } int xgpu_error; context.array_h = (SwizzleInput *)in->data; context.array_len = info.vecLength; @@ -78,18 +99,59 @@ BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump) { * doDump : if 1, this is the last call in an integration, and results * will be copied to the host. */ +static int newAcc = 1; // flush vacc on the first call BFstatus xgpuKernel(BFarray *in, BFarray *out, int doDump) { + if (in->space != BF_SPACE_CUDA) { + return BF_STATUS_UNSUPPORTED_SPACE; + } + if (out->space != BF_SPACE_CUDA) { + return BF_STATUS_UNSUPPORTED_SPACE; + } int xgpu_error; context.array_h = (ComplexInput *)in->data; context.array_len = info.vecLength; context.matrix_h = (Complex *)out->data; context.matrix_len = info.matLength; - xgpu_error = xgpuCudaXengineSwizzleKernel(&context, doDump ? SYNCOP_DUMP : SYNCOP_SYNC_TRANSFER, + xgpu_error = xgpuCudaXengineSwizzleKernel(&context, doDump ? SYNCOP_DUMP : 0, newAcc, (SwizzleInput *)in->data, (Complex *)out->data); + + if (newAcc) { + newAcc = 0; + } if (doDump) { - xgpuClearDeviceIntegrationBuffer(&context); + newAcc = 1; + } + if (xgpu_error != XGPU_OK) { + fprintf(stderr, "ERROR: xgpuKernel: kernel call returned %d\n", xgpu_error); + return BF_STATUS_INTERNAL_ERROR; + } else { + return BF_STATUS_SUCCESS; + } +} + +/* + * Given an xGPU accumulation buffer, grab a subset of visibilities from + * and gather them in a new buffer, in order chan x visibility x complexity [int32] + * BFarray *in : Pointer to a BFarray with storage in device memory, where xGPU results reside + * BFarray *in : Pointer to a BFarray with storage in device memory where collated visibilities should be written. + * int **vismap : array of visibilities in [[polA, polB], [polC, polD], ... ] form. + * int nvis : The number of visibilities to colate (length of the vismap array) + */ +BFstatus xgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap) { + long long unsigned nvis = num_contiguous_elements(vismap); + int xgpu_error; + if (in->space != BF_SPACE_CUDA) { + return BF_STATUS_UNSUPPORTED_SPACE; + } + if (out->space != BF_SPACE_CUDA) { + return BF_STATUS_UNSUPPORTED_SPACE; + } + if (vismap->space != BF_SPACE_CUDA) { + return BF_STATUS_UNSUPPORTED_SPACE; } + xgpu_error = xgpuCudaSubSelect(&context, (Complex *)in->data, (Complex *)out->data, (int *)vismap->data, nvis); if (xgpu_error != XGPU_OK) { + fprintf(stderr, "ERROR: xgpuKernel: kernel call returned %d\n", xgpu_error); return BF_STATUS_INTERNAL_ERROR; } else { return BF_STATUS_SUCCESS; diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h index 447c090e7..2de082067 100644 --- a/src/bifrost/bf_xgpu.h +++ b/src/bifrost/bf_xgpu.h @@ -1,10 +1,7 @@ #include #include -//extern "C" { - BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump); BFstatus xgpuKernel(BFarray *in, BFarray *out, int doDump); - -//} +BFstatus xgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap); From d18fbe9ffb4143c80bd48f204247c2a88ba3a63c Mon Sep 17 00:00:00 2001 From: JackH Date: Tue, 30 Jun 2020 11:17:54 -0400 Subject: [PATCH 0022/1155] Add beamforming code to bifrost Inspired by the CUBLAS usage in https://github.com/devincody/DSAbeamformer Operates in 3 steps -- 1. Tranpose data and promote to float 2. Compute beams 3. Compute beam dynamic spectra, and sum to (in LWA352's case) 1ms Assumes no polarization ordering of input, but relies on user to upload beamforming coefficients which create X-pol and Y-pol beams. This is an easy way to deal with the arbitrary input ordering at runtime, but isn't very efficient (half the beamforming coeffs are zero). The kernel assumes the beams are constructed like this and uses the fact to generate averaged dynamic spectra (XX, YY, XY_r, XY_i). May well have synchronization bugs which make the benchmarks meaningless, but currently obtains ~50 Gbps throughput (~9MHz bandwidth for 4-bit inputs) with NANTS = 352 NPOLS = 2 NCHANS = 192 (4.4 MHz for LWA352) NBEAMS = 32 (16 x 2-pols) NTIMES = 480 NTIMES_SUM = 24 (1ms) --- src/Makefile | 4 +- src/beamform.cpp | 62 +++++++++++ src/bifrost/beamform.h | 17 +++ src/cublas_beamform.cu | 237 ++++++++++++++++++++++++++++++++++++++++ src/cublas_beamform.cuh | 35 ++++++ 5 files changed, 354 insertions(+), 1 deletion(-) create mode 100644 src/beamform.cpp create mode 100644 src/bifrost/beamform.h create mode 100644 src/cublas_beamform.cu create mode 100644 src/cublas_beamform.cuh diff --git a/src/Makefile b/src/Makefile index e3d83f592..a03efd2a3 100644 --- a/src/Makefile +++ b/src/Makefile @@ -36,7 +36,9 @@ ifndef NOCUDA reduce.o \ fir.o \ guantize.o \ - gunpack.o + gunpack.o \ + beamform.o \ + cublas_beamform.o ifdef XGPU LIBBIFROST_OBJS += \ bf_xgpu.o diff --git a/src/beamform.cpp b/src/beamform.cpp new file mode 100644 index 000000000..ba40d9e87 --- /dev/null +++ b/src/beamform.cpp @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "cublas_beamform.cuh" + +extern "C" { + + +/* + * Initialize the beamformer library + */ + +BFstatus beamformInitialize( + int gpudev, + int ninputs, + int nchans, + int ntimes, + int nbeams, + int ntime_blocks +) { + // TODO: array size checking + // TODO: use complex data types + cublas_beamform_init( + gpudev, + ninputs, + nchans, + ntimes, + nbeams, + ntime_blocks + ); + return BF_STATUS_SUCCESS; +} + +BFstatus beamformRun(BFarray *in, BFarray *out, BFarray *weights) { + if (in->space != BF_SPACE_CUDA) { + fprintf(stderr, "Beamformer input buffer must be in CUDA space\n"); + return BF_STATUS_INVALID_SPACE; + } + if (out->space != BF_SPACE_CUDA) { + fprintf(stderr, "Beamformer output buffer must be in CUDA space\n"); + return BF_STATUS_INVALID_SPACE; + } + if (weights->space != BF_SPACE_CUDA) { + fprintf(stderr, "Beamformer weights buffer must be in CUDA space\n"); + return BF_STATUS_INVALID_SPACE; + } + cublas_beamform((unsigned char *)in->data, (float *)out->data, (float *)weights->data); + return BF_STATUS_SUCCESS; +} + +} // C diff --git a/src/bifrost/beamform.h b/src/bifrost/beamform.h new file mode 100644 index 000000000..5b2e486b4 --- /dev/null +++ b/src/bifrost/beamform.h @@ -0,0 +1,17 @@ +#include +#include + +BFstatus beamformInitialize( + int gpudev, + int ninputs, + int nchans, + int ntimes, + int nbeams, + int ntime_blocks +); + +BFstatus beamformRun( + BFarray *in, + BFarray *out, + BFarray *weights +); diff --git a/src/cublas_beamform.cu b/src/cublas_beamform.cu new file mode 100644 index 000000000..a98ae32ff --- /dev/null +++ b/src/cublas_beamform.cu @@ -0,0 +1,237 @@ +#include +#include +#include + +#include "cublas_beamform.cuh" + +__constant__ float lut[16] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, -8.0, -7.0, -6.0, -5.0, -4.0, -3.0, -2.0, -1.0}; + +// Transpose time x chan x pol x 4+4 bit to +// chan x pol x time x 32+32 bit float +__global__ void trans_4bit_to_float(unsigned char *in, + float *out, + int n_pol, + int n_chan, + int n_time + ) { + //long long int tid = blockDim.y*blockDim.x*blockIdx.y + blockDim.x*blockIdx.x + threadIdx.x; + //int pol = tid % n_pol; + //int chan = (tid / n_pol) % n_chan; + //int time = (tid / (n_pol * n_chan)); + int time = blockIdx.x; + int chan = blockIdx.y; + int pol = TRANSPOSE_POL_BLOCK_SIZE*threadIdx.x; + unsigned char *in_off = in + time*n_chan*n_pol + chan*n_pol + pol; + float *out_off = out + 2*( chan*n_pol*n_time + pol*n_time + time); + //long long int old_index = time*n_chan*n_pol + chan*n_pol + pol; + //long long int new_index = chan*n_pol*n_time + pol*n_time + time; + float real, imag; + unsigned char temp; + #pragma unroll + for (int i=0; i> 4]; + //imag = lut[in[old_index+i] & 0b1111]; + //out[2*(new_index+i)] = real; + //out[2*(new_index+i)+1] = imag; + real = lut[temp >> 4]; + imag = lut[temp & 255]; + *out_off++ = real; + *out_off++ = imag; + } +} + +// Transpose chan x beam x pol x time x 32+32 float to +// beam x time[part-summed] x chan x [XX,YY,XY*_r,XY*_i] x 32 float +// Each thread deals with two pols of a beam, and sums over n_time_sum time samples +__global__ void trans_output_and_sum(float *in, + float *out, + int n_chan, + int n_beam, + int n_time, + int n_time_sum + ) { + int chan = blockIdx.x; + int beam = blockIdx.y; + int time = threadIdx.x; + long long int old_index = chan*n_beam*n_time*2 + beam*n_time*2 + time*n_time_sum; // start index for n_time/n_time_sum samples + long long int new_index = beam*(n_time / n_time_sum)*n_chan + time*n_chan + chan; + float xx=0., yy=0., xy_r=0., xy_i=0.; + float x_r, x_i, y_r, y_i; + int t; + for (t=0; t>>( + in4_d, + context.in32_d, + context.ninputs, + context.nchans, + context.ntimes + ); + cudaStreamSynchronize(context.stream); + + // Beamform using GEMM + float alpha = 1.0; + float beta = 0.0; + // GEMM: + // C <= alpha*AB + beta*C + // alpha = 1.0 + // beta = 0.0 + // A matrix: beamforming coeffs (NBEAMS * NANTS) + // B matrix: data matrix (NANTS * NTIMES) + gpuBLASchk(cublasGemmStridedBatchedEx( + context.handle, + CUBLAS_OP_N, // transpose A? + CUBLAS_OP_N, // transpose B? + context.nbeams, // m + context.ntimes, // n + context.ninputs, // k + // Coeffs + &alpha, // alpha + weights_d, // A + CUDA_C_32F, // A type + context.nbeams, // Lda + context.nbeams*context.ninputs,// strideA : stride size + // Data + context.in32_d, // B + CUDA_C_32F, // B type + context.ninputs, // Ldb + context.ninputs*context.ntimes,// strideB : stride size + &beta, // beta + // Results + context.out_d, // C + CUDA_C_32F, // Ctype + context.nbeams, // Ldc + context.nbeams*context.ntimes,// Stride C + context.nchans, // batchCount + CUDA_C_32F, // compute type + CUBLAS_GEMM_DEFAULT_TENSOR_OP // algo + )); + cudaStreamSynchronize(context.stream); + + // Create XX, YY, XY beam powers. + // Sum over `ntimes_sum` samples + int ntimes_sum = context.ntimes / context.ntimeblocks; + dim3 sumBlockGrid(context.nchans, context.nbeams/2); + dim3 sumThreadGrid(context.ntimes / ntimes_sum); + trans_output_and_sum<<>>( + context.out_d, + sum_out_d, + context.nchans, + context.nbeams/2, + context.ntimes, + ntimes_sum + ); + cudaStreamSynchronize(context.stream); +} diff --git a/src/cublas_beamform.cuh b/src/cublas_beamform.cuh new file mode 100644 index 000000000..eca2d63f2 --- /dev/null +++ b/src/cublas_beamform.cuh @@ -0,0 +1,35 @@ +#ifndef _CUBLAS_BEAMFORM_H +#define _CUBLAS_BEAMFORM_H + +#include +#include +#include + +// Transpose time x chan x pol x 4+4 bit to +#define TRANSPOSE_POL_BLOCK_SIZE 8 +// chan x pol x time x 32+32 bit float +__global__ void trans_4bit_to_float(unsigned char *in, + float *out, + int n_pol, + int n_chan, + int n_time + ); + +// Transpose chan x beam x pol x time x 32+32 float to +// beam x time[part-summed] x chan x [XX,YY,XY*_r,XY*_i] x 32 float +// Each thread deals with two pols of a beam, and sums over n_time_sum time samples +__global__ void trans_output_and_sum(float *in, + float *out, + int n_chan, + int n_beam, + int n_time, + int n_time_sum + ); + +__global__ void complex2pow(float *in, float *out, int N); + +void cublas_beamform_destroy(); +void cublas_beamform(unsigned char *in4_d, float *sum_out_d, float *weights_d); +void cublas_beamform_init(int device, int ninputs, int nchans, int ntimes, int nbeams, int ntimeblocks); + +#endif From 056d98c74fc18da8a667c2ea66790cf7621a1b92 Mon Sep 17 00:00:00 2001 From: JackH Date: Tue, 30 Jun 2020 16:24:01 +0000 Subject: [PATCH 0023/1155] gitignore ctags files --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 74a87e23a..46cd88933 100644 --- a/.gitignore +++ b/.gitignore @@ -97,3 +97,9 @@ target/ # Benchmarking files test/benchmarks/development_vs_gpuspec/with_bifrost/ test/benchmarks/development_vs_gpuspec/without_bifrost/ + +# ctags files +python/bifrost/tags +python/tags +src/tags +tags From 55b2d6f4a3f0151264b555512e5f2b6afd605891 Mon Sep 17 00:00:00 2001 From: JackH Date: Tue, 30 Jun 2020 16:25:02 +0000 Subject: [PATCH 0024/1155] Update GPU arch --- user.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user.mk b/user.mk index 256c674f2..bb2908a26 100644 --- a/user.mk +++ b/user.mk @@ -11,7 +11,8 @@ PYINSTALLFLAGS ?= #GPU_ARCHS ?= 30 32 35 37 50 52 53 # Nap time! #GPU_ARCHS ?= 35 52 -GPU_ARCHS ?= 35 61 +#GPU_ARCHS ?= 35 61 +GPU_ARCHS ?= 75 GPU_SHAREDMEM ?= 16384 # GPU shared memory size From 08129378fae6ef959626e404904feef079bf4294 Mon Sep 17 00:00:00 2001 From: JackH Date: Tue, 30 Jun 2020 19:25:16 +0000 Subject: [PATCH 0025/1155] Add embryonic ibverbs packet RX support --- src/Makefile | 6 ++++ src/packet_capture.hpp | 68 ++++++++++++++++++++++++++++++++++++++++++ user.mk | 1 + 3 files changed, 75 insertions(+) diff --git a/src/Makefile b/src/Makefile index a03efd2a3..cf8b69db7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -105,6 +105,12 @@ ifdef VMA CPPFLAGS += -DBF_VMA_ENABLED=1 endif +ifdef IBV + # Requires ibverbs/hashpipe to be installed + LIB += -libverbs -lhashpipe + CPPFLAGS += -DBF_HPIBV_ENABLED=1 +endif + ifdef ALIGNMENT CPPFLAGS += -DBF_ALIGNMENT=$(ALIGNMENT) endif diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index e4eb55528..5bdc30221 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -223,6 +223,74 @@ class VMAReceiver { }; #endif // BF_VMA_ENABLED +#ifndef BF_HPIBV_ENABLED +#define BF_HPIBV_ENABLED 0 +#endif + +#if BF_HPIBV_ENABLED +#include "hashpipe_ibverbs.h" +#define IBV_UDP_PAYLOAD_OFFSET 42 +class IBVReceiver { + struct hashpipe_ibv_context _hibv_ctx; + struct hashpipe_ibv_recv_pkt* _hibv_rpkt; // Current packet chain + struct hashpipe_ibv_recv_pkt* _pkt; // Current packet +public: + IBVReceiver(int port, int pkt_size_max, char *ifname) + : _pkt(NULL), _hibv_rpkt(NULL) { + strncpy(_hibv_ctx.interface_name, ifname, IFNAMSIZ); + _hibv_ctx.interface_name[IFNAMSIZ-1] = '\0'; // Ensure NUL termination + _hibv_ctx.send_pkt_num = 1; + _hibv_ctx.recv_pkt_num = 8192; + _hibv_ctx.pkt_size_max = pkt_size_max; + _hibv_ctx.max_flows = 1; + int ret = hashpipe_ibv_init(&_hibv_ctx); + if( ret ) { + //PANIC + } + // Subscribe to RX flow + ret = hashpipe_ibv_flow( + &_hibv_ctx, + 0, IBV_FLOW_SPEC_UDP, + _hibv_ctx.mac, NULL, NULL, NULL, NULL, NULL, + NULL, port); + if( ret ) { + //PANIC + } + } + ~IBVReceiver() { } + inline int recv_packet(uint8_t* buf, size_t bufsize, uint8_t** pkt_ptr, int flags=0) { + // If we don't have a work-request queue on the go, + // get some new packets. + // If we do, walk through the packets in this queue. + // Once at the end of the queue, release the current queue and wait + // for another + if ( !_hibv_rpkt ) { + _hibv_rpkt = hashpipe_ibv_recv_pkts(&_hibv_ctx, -1); //infinite timeout + _pkt = _hibv_rpkt; + } else { + _pkt = (struct hashpipe_ibv_recv_pkt *)_pkt->wr.next; + } + if ( !_pkt ) { + hashpipe_ibv_release_pkts(&_hibv_ctx, _hibv_rpkt); + _hibv_rpkt = hashpipe_ibv_recv_pkts(&_hibv_ctx, -1); //infinite timeout + _pkt = _hibv_rpkt; + } + if ( _pkt ) { + // IBV returns Eth/UDP/IP headers. Strip them off here. + *pkt_ptr = (uint8_t *)_pkt->wr.sg_list->addr + IBV_UDP_PAYLOAD_OFFSET; + return _pkt->length - IBV_UDP_PAYLOAD_OFFSET; + } else { + //TODO: can we ever get here? And is returning 0 if no packets + // are available allowed? + hashpipe_ibv_release_pkts(&_hibv_ctx, _hibv_rpkt); + _hibv_rpkt = 0; + return 0; + } + } +}; +#endif // BF_HPIBV_ENABLED + + class UDPPacketReceiver : public PacketCaptureMethod { #if BF_VMA_ENABLED VMAReceiver _vma; diff --git a/user.mk b/user.mk index bb2908a26..7e76cc48f 100644 --- a/user.mk +++ b/user.mk @@ -32,3 +32,4 @@ ALIGNMENT ?= 4096 # Memory allocation alignment HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture VMA = 1 # Enable use of Mellanox libvma in udp_capture XGPU = 1 # build xGPU integrations (requires the xGPU library) +IBV = 1 # Build IB Verbs support using the hashpipe library From f5d60e488ad7a8fbb5d90d574b3105e3bd052584 Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 2 Jul 2020 14:50:05 +0000 Subject: [PATCH 0026/1155] IBVerbs integration Move IB verbs receiving class to a dedicated C file. When using the hashpipe_ibverbs library within packet_capture.hpp directly something in that file messes up the compatibility of the ibverbs structs (their sizes are different) to those interpretted by hashpipe. Odd, but working around for now. --- src/Makefile | 6 +++- src/bf_ibverbs.cpp | 58 ++++++++++++++++++++++++++++++ src/bifrost/bf_ibverbs.h | 17 +++++++++ src/bifrost/io.h | 3 +- src/bifrost/packet_capture.h | 13 +++++++ src/packet_capture.cpp | 24 +++++++++++++ src/packet_capture.hpp | 70 +++++++----------------------------- user.mk | 5 ++- 8 files changed, 136 insertions(+), 60 deletions(-) create mode 100644 src/bf_ibverbs.cpp create mode 100644 src/bifrost/bf_ibverbs.h diff --git a/src/Makefile b/src/Makefile index cf8b69db7..27819cb0b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -44,6 +44,10 @@ ifdef XGPU bf_xgpu.o endif endif +ifdef IBV + LIBBIFROST_OBJS += \ + bf_ibverbs.o +endif JIT_SOURCES ?= \ Complex.hpp.jit \ @@ -107,7 +111,7 @@ endif ifdef IBV # Requires ibverbs/hashpipe to be installed - LIB += -libverbs -lhashpipe + LIB += -lhashpipe_ibverbs CPPFLAGS += -DBF_HPIBV_ENABLED=1 endif diff --git a/src/bf_ibverbs.cpp b/src/bf_ibverbs.cpp new file mode 100644 index 000000000..7d859f474 --- /dev/null +++ b/src/bf_ibverbs.cpp @@ -0,0 +1,58 @@ +#include +#include "hashpipe_ibverbs.h" +#include + +#define IBV_UDP_PAYLOAD_OFFSET 42 + +extern "C" { +struct hashpipe_ibv_context _hibv_ctx = {0}; +struct hashpipe_ibv_recv_pkt* _hibv_rpkt; // Current packet chain +struct hashpipe_ibv_recv_pkt* _pkt; // Current packet + +BFstatus ibv_init(size_t pkt_size_max) { + fprintf(stderr, "Configuring IBV socket\n"); + int port = 10000; + char ifname[IFNAMSIZ] = "ens1f1"; + strncpy(_hibv_ctx.interface_name, ifname, IFNAMSIZ); + _hibv_ctx.interface_name[IFNAMSIZ-1] = '\0'; // Ensure NUL termination + _hibv_ctx.send_pkt_num = 1; + _hibv_ctx.recv_pkt_num = 8192; + _hibv_ctx.pkt_size_max = pkt_size_max; + _hibv_ctx.max_flows = 1; + int ret = hashpipe_ibv_init(&_hibv_ctx); + if( ret ) { + fprintf(stderr, "ERROR: haspipe_ibv_init returned %d\n", ret); + } + + // Subscribe to RX flow + ret = hashpipe_ibv_flow( + &_hibv_ctx, + 0, IBV_FLOW_SPEC_UDP, + _hibv_ctx.mac, NULL, 0, 0, 0, 0, 0, port); + if( ret ) { + fprintf(stderr, "ERROR: haspipe_ibv_flow returned %d\n", ret); + } + + return BF_STATUS_SUCCESS; +} + +int ibv_recv_packet(uint8_t** pkt_ptr, int flags) { + // If we don't have a work-request queue on the go, + // get some new packets. + if ( _pkt ) { + _pkt = (struct hashpipe_ibv_recv_pkt *)_pkt->wr.next; + if ( !_pkt ) { + hashpipe_ibv_release_pkts(&_hibv_ctx, _hibv_rpkt); + _hibv_rpkt = NULL; + } + } + while (!_hibv_rpkt) { + _hibv_rpkt = hashpipe_ibv_recv_pkts(&_hibv_ctx, 1); + _pkt = _hibv_rpkt; + } + // IBV returns Eth/UDP/IP headers. Strip them off here. + *pkt_ptr = (uint8_t *)_pkt->wr.sg_list->addr + IBV_UDP_PAYLOAD_OFFSET; + return _pkt->length - IBV_UDP_PAYLOAD_OFFSET; +} + +} diff --git a/src/bifrost/bf_ibverbs.h b/src/bifrost/bf_ibverbs.h new file mode 100644 index 000000000..ce1206c74 --- /dev/null +++ b/src/bifrost/bf_ibverbs.h @@ -0,0 +1,17 @@ +#ifndef BF_IBVERBS_H_INCLUDE_GUARD_ +#define BF_IBVERBS_H_INCLUDE_GUARD_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +BFstatus ibv_init(size_t pkt_size_max); +int ibv_recv_packet(uint8_t** pkt_ptr, int flags); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // BF_IBVERBS_INCLUDE_GUARD_ diff --git a/src/bifrost/io.h b/src/bifrost/io.h index 086dc8de7..53746a365 100644 --- a/src/bifrost/io.h +++ b/src/bifrost/io.h @@ -39,7 +39,8 @@ typedef enum BFiomethod_ { BF_IO_GENERIC = 0, BF_IO_DISK = 1, BF_IO_UDP = 2, - BF_IO_SNIFFER = 3 + BF_IO_SNIFFER = 3, + BF_IO_IBV_UDP = 4 } BFiomethod; typedef enum BFiowhence_ { diff --git a/src/bifrost/packet_capture.h b/src/bifrost/packet_capture.h index 0bf38c64e..9f05a2be0 100644 --- a/src/bifrost/packet_capture.h +++ b/src/bifrost/packet_capture.h @@ -106,6 +106,19 @@ BFstatus bfUdpCaptureCreate(BFpacketcapture* obj, BFsize slot_ntime, BFpacketcapture_callback sequence_callback, int core); + +BFstatus bfIbvUdpCaptureCreate(BFpacketcapture* obj, + const char* format, + int fd, + BFring ring, + BFsize nsrc, + BFsize src0, + BFsize max_payload_size, + BFsize buffer_ntime, + BFsize slot_ntime, + BFpacketcapture_callback sequence_callback, + int core); + BFstatus bfUdpSnifferCreate(BFpacketcapture* obj, const char* format, int fd, diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index 05fadc816..317ed901f 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -326,6 +326,30 @@ BFstatus bfUdpCaptureCreate(BFpacketcapture* obj, BF_IO_UDP); } +BFstatus bfIbvUdpCaptureCreate(BFpacketcapture* obj, + const char* format, + int fd, + BFring ring, + BFsize nsrc, + BFsize src0, + BFsize max_payload_size, + BFsize buffer_ntime, + BFsize slot_ntime, + BFpacketcapture_callback sequence_callback, + int core) { + return BFpacketcapture_create(obj, + format, + fd, + ring, + nsrc, + src0, + buffer_ntime, + slot_ntime, + sequence_callback, + core, + BF_IO_IBV_UDP); +} + BFstatus bfUdpSnifferCreate(BFpacketcapture* obj, const char* format, int fd, diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 5bdc30221..c028d36c0 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -228,69 +228,22 @@ class VMAReceiver { #endif #if BF_HPIBV_ENABLED -#include "hashpipe_ibverbs.h" -#define IBV_UDP_PAYLOAD_OFFSET 42 -class IBVReceiver { - struct hashpipe_ibv_context _hibv_ctx; - struct hashpipe_ibv_recv_pkt* _hibv_rpkt; // Current packet chain - struct hashpipe_ibv_recv_pkt* _pkt; // Current packet +#include + +class IBVUDPPacketReceiver : public PacketCaptureMethod { public: - IBVReceiver(int port, int pkt_size_max, char *ifname) - : _pkt(NULL), _hibv_rpkt(NULL) { - strncpy(_hibv_ctx.interface_name, ifname, IFNAMSIZ); - _hibv_ctx.interface_name[IFNAMSIZ-1] = '\0'; // Ensure NUL termination - _hibv_ctx.send_pkt_num = 1; - _hibv_ctx.recv_pkt_num = 8192; - _hibv_ctx.pkt_size_max = pkt_size_max; - _hibv_ctx.max_flows = 1; - int ret = hashpipe_ibv_init(&_hibv_ctx); - if( ret ) { - //PANIC - } - // Subscribe to RX flow - ret = hashpipe_ibv_flow( - &_hibv_ctx, - 0, IBV_FLOW_SPEC_UDP, - _hibv_ctx.mac, NULL, NULL, NULL, NULL, NULL, - NULL, port); - if( ret ) { - //PANIC - } + IBVUDPPacketReceiver(int fd, size_t pkt_size_max=JUMBO_FRAME_SIZE) + : PacketCaptureMethod(fd, pkt_size_max, BF_IO_IBV_UDP) + { + ibv_init(pkt_size_max); } - ~IBVReceiver() { } - inline int recv_packet(uint8_t* buf, size_t bufsize, uint8_t** pkt_ptr, int flags=0) { - // If we don't have a work-request queue on the go, - // get some new packets. - // If we do, walk through the packets in this queue. - // Once at the end of the queue, release the current queue and wait - // for another - if ( !_hibv_rpkt ) { - _hibv_rpkt = hashpipe_ibv_recv_pkts(&_hibv_ctx, -1); //infinite timeout - _pkt = _hibv_rpkt; - } else { - _pkt = (struct hashpipe_ibv_recv_pkt *)_pkt->wr.next; - } - if ( !_pkt ) { - hashpipe_ibv_release_pkts(&_hibv_ctx, _hibv_rpkt); - _hibv_rpkt = hashpipe_ibv_recv_pkts(&_hibv_ctx, -1); //infinite timeout - _pkt = _hibv_rpkt; - } - if ( _pkt ) { - // IBV returns Eth/UDP/IP headers. Strip them off here. - *pkt_ptr = (uint8_t *)_pkt->wr.sg_list->addr + IBV_UDP_PAYLOAD_OFFSET; - return _pkt->length - IBV_UDP_PAYLOAD_OFFSET; - } else { - //TODO: can we ever get here? And is returning 0 if no packets - // are available allowed? - hashpipe_ibv_release_pkts(&_hibv_ctx, _hibv_rpkt); - _hibv_rpkt = 0; - return 0; - } + inline int recv_packet(uint8_t** pkt_ptr, int flags=0) { + return ibv_recv_packet(pkt_ptr, flags); } + inline const char* get_name() { return "ibv_udp_capture"; } }; #endif // BF_HPIBV_ENABLED - class UDPPacketReceiver : public PacketCaptureMethod { #if BF_VMA_ENABLED VMAReceiver _vma; @@ -728,6 +681,7 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { // TODO: sequence never changes? //return false; //return (pkt->seq % 128 == 0); + return false; } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); @@ -1231,6 +1185,8 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, method = new DiskPacketReader(fd, max_payload_size); } else if( backend == BF_IO_UDP ) { method = new UDPPacketReceiver(fd, max_payload_size); + } else if( backend == BF_IO_IBV_UDP ) { + method = new IBVUDPPacketReceiver(fd, max_payload_size); } else if( backend == BF_IO_SNIFFER ) { method = new UDPPacketSniffer(fd, max_payload_size); } else { diff --git a/user.mk b/user.mk index 7e76cc48f..43fc3d96a 100644 --- a/user.mk +++ b/user.mk @@ -23,6 +23,9 @@ CUDA_INCDIR ?= $(CUDA_HOME)/include ALIGNMENT ?= 4096 # Memory allocation alignment +# Defining the below will turn on various compilation +# ifdef clauses. +# ***defining as 0 is the same as defining as 1!*** #NODEBUG = 1 # Disable debugging mode (use this for production releases) #TRACE = 1 # Enable tracing mode (generates annotations for use with nvprof/nvvp) #NOCUDA = 1 # Disable CUDA support @@ -30,6 +33,6 @@ ALIGNMENT ?= 4096 # Memory allocation alignment #CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) #NUMA = 1 # Enable use of numa library for setting affinity of ring memory HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture -VMA = 1 # Enable use of Mellanox libvma in udp_capture +#VMA = 1 # Enable use of Mellanox libvma in udp_capture XGPU = 1 # build xGPU integrations (requires the xGPU library) IBV = 1 # Build IB Verbs support using the hashpipe library From 324bb2ca317a0ddd848507a026b090623e398ab1 Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 2 Jul 2020 14:51:47 +0000 Subject: [PATCH 0027/1155] Add flag to use ibverbs --- python/bifrost/packet_capture.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index fc02d4ffb..a375e6126 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -81,7 +81,8 @@ def end(self): class UDPCapture(_CaptureBase): def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, - buffer_ntime, slot_ntime, sequence_callback, core=None): + buffer_ntime, slot_ntime, sequence_callback, core=None, + ibverbs=False, interface='', port=-1): try: fmt = fmt.encode() except AttributeError: @@ -89,11 +90,19 @@ def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, pass if core is None: core = -1 - BifrostObject.__init__( - self, _bf.bfUdpCaptureCreate, _bf.bfPacketCaptureDestroy, - fmt, sock.fileno(), ring.obj, nsrc, src0, - max_payload_size, buffer_ntime, slot_ntime, - sequence_callback.obj, core) + if not ibverbs: + BifrostObject.__init__( + self, _bf.bfUdpCaptureCreate, _bf.bfPacketCaptureDestroy, + fmt, sock.fileno(), ring.obj, nsrc, src0, + max_payload_size, buffer_ntime, slot_ntime, + sequence_callback.obj, core) + else: + print("Using IBVerbs") + BifrostObject.__init__( + self, _bf.bfIbvUdpCaptureCreate, _bf.bfPacketCaptureDestroy, + fmt, sock.fileno(), ring.obj, nsrc, src0, + max_payload_size, buffer_ntime, slot_ntime, + sequence_callback.obj, core) class UDPSniffer(_CaptureBase): def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, From 30217af5a5d92d494eb11cbdaef01019763d0009 Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 2 Jul 2020 14:52:29 +0000 Subject: [PATCH 0028/1155] Change function names to match `bfFunctionName` convention --- src/beamform.cpp | 4 ++-- src/bf_xgpu.cpp | 8 ++++---- src/bifrost/beamform.h | 4 ++-- src/bifrost/bf_xgpu.h | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/beamform.cpp b/src/beamform.cpp index ba40d9e87..190a6232e 100644 --- a/src/beamform.cpp +++ b/src/beamform.cpp @@ -21,7 +21,7 @@ extern "C" { * Initialize the beamformer library */ -BFstatus beamformInitialize( +BFstatus bfBeamformInitialize( int gpudev, int ninputs, int nchans, @@ -42,7 +42,7 @@ BFstatus beamformInitialize( return BF_STATUS_SUCCESS; } -BFstatus beamformRun(BFarray *in, BFarray *out, BFarray *weights) { +BFstatus bfBeamformRun(BFarray *in, BFarray *out, BFarray *weights) { if (in->space != BF_SPACE_CUDA) { fprintf(stderr, "Beamformer input buffer must be in CUDA space\n"); return BF_STATUS_INVALID_SPACE; diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp index 82c923758..25c3774eb 100644 --- a/src/bf_xgpu.cpp +++ b/src/bf_xgpu.cpp @@ -24,7 +24,7 @@ static XGPUInfo info; * a pointer to the input and output data (on the host), * and a GPU device ID */ -BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev) { +BFstatus bfXgpuInitialize(BFarray *in, BFarray *out, int gpu_dev) { int xgpu_error; xgpuInfo(&info); // Don't bother checking sizes if the input space is CUDA. @@ -67,7 +67,7 @@ BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev) { * doDump : if 1, this is the last call in an integration, and results * will be copied to the host. */ -BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump) { +BFstatus bfXgpuCorrelate(BFarray *in, BFarray *out, int doDump) { if (in->space == BF_SPACE_CUDA) { return BF_STATUS_UNSUPPORTED_SPACE; } @@ -100,7 +100,7 @@ BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump) { * will be copied to the host. */ static int newAcc = 1; // flush vacc on the first call -BFstatus xgpuKernel(BFarray *in, BFarray *out, int doDump) { +BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump) { if (in->space != BF_SPACE_CUDA) { return BF_STATUS_UNSUPPORTED_SPACE; } @@ -137,7 +137,7 @@ BFstatus xgpuKernel(BFarray *in, BFarray *out, int doDump) { * int **vismap : array of visibilities in [[polA, polB], [polC, polD], ... ] form. * int nvis : The number of visibilities to colate (length of the vismap array) */ -BFstatus xgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap) { +BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap) { long long unsigned nvis = num_contiguous_elements(vismap); int xgpu_error; if (in->space != BF_SPACE_CUDA) { diff --git a/src/bifrost/beamform.h b/src/bifrost/beamform.h index 5b2e486b4..8fa43a66f 100644 --- a/src/bifrost/beamform.h +++ b/src/bifrost/beamform.h @@ -1,7 +1,7 @@ #include #include -BFstatus beamformInitialize( +BFstatus bfBeamformInitialize( int gpudev, int ninputs, int nchans, @@ -10,7 +10,7 @@ BFstatus beamformInitialize( int ntime_blocks ); -BFstatus beamformRun( +BFstatus bfBeamformRun( BFarray *in, BFarray *out, BFarray *weights diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h index 2de082067..ede805053 100644 --- a/src/bifrost/bf_xgpu.h +++ b/src/bifrost/bf_xgpu.h @@ -1,7 +1,7 @@ #include #include -BFstatus xgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); -BFstatus xgpuCorrelate(BFarray *in, BFarray *out, int doDump); -BFstatus xgpuKernel(BFarray *in, BFarray *out, int doDump); -BFstatus xgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap); +BFstatus bfXgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); +BFstatus bfXgpuCorrelate(BFarray *in, BFarray *out, int doDump); +BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump); +BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap); From faca6c02d781d81f2a2cd6f13f493c802b172c57 Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 2 Jul 2020 15:29:19 +0000 Subject: [PATCH 0029/1155] Change IB verbs packet capture method name to "udp_capture" Evidently, this is the trigger to make `like_bmon` work its magic --- src/packet_capture.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index c028d36c0..cd9f41d57 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -240,7 +240,7 @@ class IBVUDPPacketReceiver : public PacketCaptureMethod { inline int recv_packet(uint8_t** pkt_ptr, int flags=0) { return ibv_recv_packet(pkt_ptr, flags); } - inline const char* get_name() { return "ibv_udp_capture"; } + inline const char* get_name() { return "udp_capture"; } }; #endif // BF_HPIBV_ENABLED From c411072dc8c34b23495d6b5af45b7192c6ca9ff1 Mon Sep 17 00:00:00 2001 From: JackH Date: Fri, 3 Jul 2020 16:36:51 +0000 Subject: [PATCH 0030/1155] Packet receiver OK @ ~28Gb/s Increase RX packet depth of IB verbs interface to 32k (this seems to be the maximum). Make packet handler use AVX stream store instructions. 1. The receiver is currently hard coded for 64 pols per packet. It would be trivial to parameterize this, but it may have some small performance implication. 2. Code loads 64-bit values into a 256-bit AVX register before writing to memory. If the IBV interface can be tweaked to enforce alignment (talk to DM about this) the first stage won't be necessary. 3. 64 pols per packet = 512 bits per memory write (1 freq channel of data). Newer machines supporting AVX512 could probably run faster than the current code by using _mm512_stream_si512 in place of _mm256_stream_si256 --- src/bf_ibverbs.cpp | 4 +++- src/formats/snap2.hpp | 29 ++++++++++++++++++++++------- user.mk | 2 +- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/bf_ibverbs.cpp b/src/bf_ibverbs.cpp index 7d859f474..38fa2e6a0 100644 --- a/src/bf_ibverbs.cpp +++ b/src/bf_ibverbs.cpp @@ -16,8 +16,10 @@ BFstatus ibv_init(size_t pkt_size_max) { strncpy(_hibv_ctx.interface_name, ifname, IFNAMSIZ); _hibv_ctx.interface_name[IFNAMSIZ-1] = '\0'; // Ensure NUL termination _hibv_ctx.send_pkt_num = 1; - _hibv_ctx.recv_pkt_num = 8192; + _hibv_ctx.recv_pkt_num = 32768; _hibv_ctx.pkt_size_max = pkt_size_max; + fprintf(stderr, "IBV: pkt_size_max: %d\n", _hibv_ctx.pkt_size_max); + fprintf(stderr, "IBV: recv_pkt_num: %d\n", _hibv_ctx.recv_pkt_num); _hibv_ctx.max_flows = 1; int ret = hashpipe_ibv_init(&_hibv_ctx); if( ret ) { diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index a63108c86..ff401123b 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -30,7 +30,8 @@ #include "base.hpp" -//#include // SSE +#include // SSE +#include #define SNAP2_HEADER_MAGIC 0xaabbccdd @@ -141,15 +142,29 @@ class SNAP2Processor : virtual public PacketProcessor { // However, they require aligned memory (otherwise segfault) itype const* __restrict__ in = (itype const*)pkt->payload_ptr; otype* __restrict__ out = (otype* )&obufs[obuf_idx][obuf_offset]; + + int words_per_chan_in = pkt->npol >> 5; // 32 pols per 256-bit word + int words_per_chan_out = pkt->npol_tot >> 5; + int pol_offset_out = pkt->pol0 >> 5; + int pkt_chan = pkt->chan0; // The first channel in this packet // Copy packet payload one channel at a time. - // Packets have payload format nchans x npols x complexity - // spacing with which channel chunks are copied depends + // Packets have payload format nchans x npols x complexity. + // Output buffer order is chans * npol_total * complexity + // Spacing with which channel chunks are copied depends // on the total number of channels/pols in the system - for(int chan=0; channchan; chan++) { - // // TODO: AVX stores here will probably be much faster - // ::memcpy(&out[(((pkt->npol_tot) * (pkt->chan0 + chan)) + (pkt->pol0)) / 32], - // &in[(pkt->npol / 32) * chan], pkt->npol / 32); + __m256i *dest_p; + __m256i vecbuf[2]; + uint64_t *in64 = (uint64_t *)in; + int c, i; + dest_p = (__m256i *)(out + (words_per_chan_out * (pkt_chan)) + pol_offset_out); + for(c=0; cnchan; c++) { + vecbuf[0] = _mm256_set_epi64x(in64[3], in64[2], in64[1], in64[0]); + vecbuf[1] = _mm256_set_epi64x(in64[7], in64[6], in64[5], in64[4]); + _mm256_stream_si256(dest_p, vecbuf[0]); + _mm256_stream_si256(dest_p+1, vecbuf[1]); + in64 += 8; + dest_p += words_per_chan_out; } } diff --git a/user.mk b/user.mk index 43fc3d96a..e8067c8e5 100644 --- a/user.mk +++ b/user.mk @@ -33,6 +33,6 @@ ALIGNMENT ?= 4096 # Memory allocation alignment #CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) #NUMA = 1 # Enable use of numa library for setting affinity of ring memory HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture -#VMA = 1 # Enable use of Mellanox libvma in udp_capture +VMA = 1 # Enable use of Mellanox libvma in udp_capture XGPU = 1 # build xGPU integrations (requires the xGPU library) IBV = 1 # Build IB Verbs support using the hashpipe library From 42c696acb597b34f99738a8188f98dac44cdd226 Mon Sep 17 00:00:00 2001 From: JackH Date: Mon, 6 Jul 2020 13:00:03 +0000 Subject: [PATCH 0031/1155] Py2->3 decode; tweak exception raising The behaviour of the traceback library has changed in py3, so remove the now nonexistent call. Tweak error handling to properly pass an exception to the cleanup print Fix missing decode() --- tools/like_top.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/like_top.py b/tools/like_top.py index 9af42e2b6..c4750a7f4 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -189,7 +189,7 @@ def get_gpu_memory_usage(): pass else: # Parse the ouptut and turn everything into something useful, if possible - lines = output.split('\n')[:-1] + lines = output.decode().split('\n')[:-1] for line in lines: used, total, free, draw, limit, load = line.split(',') data['devCount'] += 1 @@ -402,7 +402,8 @@ def main(args): except KeyboardInterrupt: pass - except Exception as error: + except Exception as err: + error = err exc_type, exc_value, exc_traceback = sys.exc_info() fileObject = StringIO() traceback.print_tb(exc_traceback, file=fileObject) @@ -428,7 +429,7 @@ def main(args): # Final reporting try: ## Error - print("%s: failed with %s at line %i" % (os.path.basename(__file__), str(error), traceback.tb_lineno(exc_traceback))) + print("%s: failed with %s" % (os.path.basename(__file__), str(error))) for line in tbString.split('\n'): print(line) except NameError: From 2ec319c3dfb4a51c0b0bb0f61ff29d48eafb518c Mon Sep 17 00:00:00 2001 From: JackH Date: Mon, 6 Jul 2020 15:03:53 +0000 Subject: [PATCH 0032/1155] Add gbps throughput to like_top Time metrics for processing / waiting for input/output data are helpful for figuringout the bottlenecks in the pipeline, but aren't particularly intuitive (IMO) measures of whether things are "fast enough" --- tools/like_top.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/like_top.py b/tools/like_top.py index c4750a7f4..d2b1fd18d 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -333,10 +333,11 @@ def main(args): ac = max([0.0, log['acquire_time']]) pr = max([0.0, log['process_time']]) re = max([0.0, log['reserve_time']]) + gb = max([0.0, log.get('gbps', 0.0)]) except KeyError: - ac, pr, re = 0.0, 0.0, 0.0 + ac, pr, re, gb = 0.0, 0.0, 0.0, 0.0 - blockList['%i-%s' % (pid, block)] = {'pid': pid, 'name':block, 'cmd': cmd, 'core': cr, 'acquire': ac, 'process': pr, 'reserve': re, 'total':ac+pr+re} + blockList['%i-%s' % (pid, block)] = {'pid': pid, 'name':block, 'cmd': cmd, 'core': cr, 'acquire': ac, 'process': pr, 'reserve': re, 'total':ac+pr+re, 'gbps':gb} ## Sort order = sorted(blockList, key=lambda x: blockList[x][sort_key], reverse=sort_rev) @@ -374,7 +375,7 @@ def main(args): k = _add_line(scr, k, 0, output, std) ### Header k = _add_line(scr, k, 0, ' ', std) - output = '%6s %15s %4s %5s %7s %7s %7s %7s Cmd' % ('PID', 'Block', 'Core', '%CPU', 'Total', 'Acquire', 'Process', 'Reserve') + output = '%6s %15s %4s %5s %7s %7s %7s %7s %7s Cmd' % ('PID', 'Block', 'Core', '%CPU', 'Total', 'Acquire', 'Process', 'Reserve', 'Gbits/s') csize = size[1]-len(output) output += ' '*csize output += '\n' @@ -387,7 +388,7 @@ def main(args): c = '%5.1f' % c except KeyError: c = '%5s' % ' ' - output = '%6i %15s %4i %5s %7.3f %7.3f %7.3f %7.3f %s' % (d['pid'], d['name'][:15], d['core'], c, d['total'], d['acquire'], d['process'], d['reserve'], d['cmd'][:csize+3]) + output = '%6i %15s %4i %5s %7.3f %7.3f %7.3f %7.3f %7.3f %s' % (d['pid'], d['name'][:15], d['core'], c, d['total'], d['acquire'], d['process'], d['reserve'], d['gbps'], d['cmd'][:csize+3]) k = _add_line(scr, k, 0, output, std) if k >= size[0] - 1: break From 498034ea3623e08a5ba23450ee05c51096575e94 Mon Sep 17 00:00:00 2001 From: JackH Date: Mon, 6 Jul 2020 15:04:58 +0000 Subject: [PATCH 0033/1155] Create new sequences every 480 time samples for SNAP2 packets This is a gross thing to hardcode, so FIXME. But, having new sequences periodically means that the header timestamps can be used as actual timestamps, rather than just counting bytes in some infinite data stream (which doesn't seem like a good idea when the input stream is from a network, and could conceivably behave strangely). Having timestamps derived from actual packet headers periodically seems sensible(?) --- src/packet_capture.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index cd9f41d57..c61454098 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -678,10 +678,9 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { } // Has the configuration changed? I.e., different channels being sent. inline bool has_sequence_changed(const PacketDesc* pkt) { - // TODO: sequence never changes? + // TODO: Decide what a sequence actually is! + return (pkt->seq % 480 == 0); //return false; - //return (pkt->seq % 128 == 0); - return false; } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); From 42619e15eb459dbf2340fb0c31819f03c2bcb19c Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 23 Jul 2020 13:30:23 +0000 Subject: [PATCH 0034/1155] Split up beamforming GEM and dynamic spectra / transpose / integrate Allow an option to beamform and integrate in one hit by passing ntime_blocks>0 when initializing the library. Otherwise don't transpose or integrate the data. This change allows multiple downstream processes to use raw beamformer data for their own, different purposes -- (eg) one generating integrated dynamic spectra, and one generating VLBI voltage beams --- src/beamform.cpp | 12 ++++++++++ src/bifrost/beamform.h | 5 +++++ src/cublas_beamform.cu | 50 ++++++++++++++++++++++++++++++++++++----- src/cublas_beamform.cuh | 1 + 4 files changed, 62 insertions(+), 6 deletions(-) diff --git a/src/beamform.cpp b/src/beamform.cpp index 190a6232e..eb6c563e4 100644 --- a/src/beamform.cpp +++ b/src/beamform.cpp @@ -59,4 +59,16 @@ BFstatus bfBeamformRun(BFarray *in, BFarray *out, BFarray *weights) { return BF_STATUS_SUCCESS; } +BFstatus bfBeamformIntegrate(BFarray *in, BFarray *out) { + if (in->space != BF_SPACE_CUDA) { + fprintf(stderr, "Beamformer input buffer must be in CUDA space\n"); + return BF_STATUS_INVALID_SPACE; + } + if (out->space != BF_SPACE_CUDA) { + fprintf(stderr, "Beamformer output buffer must be in CUDA space\n"); + return BF_STATUS_INVALID_SPACE; + } + cublas_beamform_integrate((float *)in->data, (float *)out->data); + return BF_STATUS_SUCCESS; +} } // C diff --git a/src/bifrost/beamform.h b/src/bifrost/beamform.h index 8fa43a66f..1da1937a9 100644 --- a/src/bifrost/beamform.h +++ b/src/bifrost/beamform.h @@ -15,3 +15,8 @@ BFstatus bfBeamformRun( BFarray *out, BFarray *weights ); + +BFstatus bfBeamformIntegrate( + BFarray *in, + BFarray *out +); diff --git a/src/cublas_beamform.cu b/src/cublas_beamform.cu index a98ae32ff..94f095850 100644 --- a/src/cublas_beamform.cu +++ b/src/cublas_beamform.cu @@ -143,7 +143,9 @@ static struct beamform_context context; void cublas_beamform_destroy(){ cudaFree(context.in32_d); - cudaFree(context.out_d); + if (context.ntimeblocks > 0) { + cudaFree(context.out_d); + } } void cublas_beamform_init(int device, int ninputs, int nchans, int ntimes, int nbeams, int ntimeblocks) { @@ -164,10 +166,14 @@ void cublas_beamform_init(int device, int ninputs, int nchans, int ntimes, int n // Internally allocate intermediate buffers gpuErrchk( cudaMalloc(&context.in32_d, ninputs * nchans * ntimes * 2 * sizeof(float)) ); - gpuErrchk( cudaMalloc(&context.out_d, ntimes * nchans * nbeams * 2 * sizeof(float)) ); + // If the context is initialized with ntimeblocks=0, then we do no summing so don't + // need the intermediate buffer + if (ntimeblocks > 0) { + gpuErrchk( cudaMalloc(&context.out_d, ntimes * nchans * nbeams * 2 * sizeof(float)) ); + } } -void cublas_beamform(unsigned char *in4_d, float *sum_out_d, float *weights_d) { +void cublas_beamform(unsigned char *in4_d, float *out_d, float *weights_d) { // Transpose input data and promote to float. // CUBLAS doesn't support float coeffs with int8 data dim3 transBlockGrid(context.ntimes, context.nchans); @@ -181,6 +187,17 @@ void cublas_beamform(unsigned char *in4_d, float *sum_out_d, float *weights_d) { ); cudaStreamSynchronize(context.stream); + // If we are integrating beam powers, put the + // GEM output in the context-defined intermediate + // buffer. If not, then write beamformer output + // to the address given by the user. + float *gem_out_d; + if (context.ntimeblocks > 0) { + gem_out_d = context.out_d; + } else { + gem_out_d = out_d; + } + // Beamform using GEMM float alpha = 1.0; float beta = 0.0; @@ -190,6 +207,7 @@ void cublas_beamform(unsigned char *in4_d, float *sum_out_d, float *weights_d) { // beta = 0.0 // A matrix: beamforming coeffs (NBEAMS * NANTS) // B matrix: data matrix (NANTS * NTIMES) + gpuBLASchk(cublasGemmStridedBatchedEx( context.handle, CUBLAS_OP_N, // transpose A? @@ -210,7 +228,7 @@ void cublas_beamform(unsigned char *in4_d, float *sum_out_d, float *weights_d) { context.ninputs*context.ntimes,// strideB : stride size &beta, // beta // Results - context.out_d, // C + gem_out_d, // C CUDA_C_32F, // Ctype context.nbeams, // Ldc context.nbeams*context.ntimes,// Stride C @@ -220,14 +238,34 @@ void cublas_beamform(unsigned char *in4_d, float *sum_out_d, float *weights_d) { )); cudaStreamSynchronize(context.stream); + // Optionally: + if (context.ntimeblocks > 0) { + // Create XX, YY, XY beam powers. + // Sum over `ntimes_sum` samples + int ntimes_sum = context.ntimes / context.ntimeblocks; + dim3 sumBlockGrid(context.nchans, context.nbeams/2); + dim3 sumThreadGrid(context.ntimes / ntimes_sum); + trans_output_and_sum<<>>( + gem_out_d, + out_d, + context.nchans, + context.nbeams/2, + context.ntimes, + ntimes_sum + ); + cudaStreamSynchronize(context.stream); + } +} + +void cublas_beamform_integrate(float *in_d, float *out_d) { // Create XX, YY, XY beam powers. // Sum over `ntimes_sum` samples int ntimes_sum = context.ntimes / context.ntimeblocks; dim3 sumBlockGrid(context.nchans, context.nbeams/2); dim3 sumThreadGrid(context.ntimes / ntimes_sum); trans_output_and_sum<<>>( - context.out_d, - sum_out_d, + in_d, + out_d, context.nchans, context.nbeams/2, context.ntimes, diff --git a/src/cublas_beamform.cuh b/src/cublas_beamform.cuh index eca2d63f2..6a0d2b22a 100644 --- a/src/cublas_beamform.cuh +++ b/src/cublas_beamform.cuh @@ -30,6 +30,7 @@ __global__ void complex2pow(float *in, float *out, int N); void cublas_beamform_destroy(); void cublas_beamform(unsigned char *in4_d, float *sum_out_d, float *weights_d); +void cublas_beamform_integrate(float *in_d, float *sum_out_d); void cublas_beamform_init(int device, int ninputs, int nchans, int ntimes, int nbeams, int ntimeblocks); #endif From 9f077f2238adff7b56c7d8c0e5e3f72dd0ab607b Mon Sep 17 00:00:00 2001 From: JackH Date: Fri, 24 Jul 2020 18:51:22 +0000 Subject: [PATCH 0035/1155] Add missing ifdefs for IBV code --- src/packet_capture.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index c61454098..69258e231 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -1184,8 +1184,10 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, method = new DiskPacketReader(fd, max_payload_size); } else if( backend == BF_IO_UDP ) { method = new UDPPacketReceiver(fd, max_payload_size); +#if BF_HPIBV_ENABLED } else if( backend == BF_IO_IBV_UDP ) { method = new IBVUDPPacketReceiver(fd, max_payload_size); +#endif } else if( backend == BF_IO_SNIFFER ) { method = new UDPPacketSniffer(fd, max_payload_size); } else { From d0a907aac0efe0ca506646294af52214d5977a4a Mon Sep 17 00:00:00 2001 From: JackH Date: Wed, 29 Jul 2020 13:37:56 +0000 Subject: [PATCH 0036/1155] Remove remnants of JH's hashpipe IBV code --- src/Makefile | 6 +--- src/bf_ibverbs.cpp | 60 ---------------------------------------- src/bifrost/bf_ibverbs.h | 17 ------------ 3 files changed, 1 insertion(+), 82 deletions(-) delete mode 100644 src/bf_ibverbs.cpp delete mode 100644 src/bifrost/bf_ibverbs.h diff --git a/src/Makefile b/src/Makefile index 9dc5101b8..b5e6057b8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -20,7 +20,7 @@ LIBBIFROST_OBJS = \ unpack.o \ quantize.o \ proclog.o -ifdef VERBS: +ifdef VERBS # These files require IB verbs to compile LIBBIFROST_OBJS += \ ib_verbs.o @@ -49,10 +49,6 @@ ifdef XGPU bf_xgpu.o endif endif -ifdef IBV - LIBBIFROST_OBJS += \ - bf_ibverbs.o -endif JIT_SOURCES ?= \ Complex.hpp.jit \ diff --git a/src/bf_ibverbs.cpp b/src/bf_ibverbs.cpp deleted file mode 100644 index 38fa2e6a0..000000000 --- a/src/bf_ibverbs.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include "hashpipe_ibverbs.h" -#include - -#define IBV_UDP_PAYLOAD_OFFSET 42 - -extern "C" { -struct hashpipe_ibv_context _hibv_ctx = {0}; -struct hashpipe_ibv_recv_pkt* _hibv_rpkt; // Current packet chain -struct hashpipe_ibv_recv_pkt* _pkt; // Current packet - -BFstatus ibv_init(size_t pkt_size_max) { - fprintf(stderr, "Configuring IBV socket\n"); - int port = 10000; - char ifname[IFNAMSIZ] = "ens1f1"; - strncpy(_hibv_ctx.interface_name, ifname, IFNAMSIZ); - _hibv_ctx.interface_name[IFNAMSIZ-1] = '\0'; // Ensure NUL termination - _hibv_ctx.send_pkt_num = 1; - _hibv_ctx.recv_pkt_num = 32768; - _hibv_ctx.pkt_size_max = pkt_size_max; - fprintf(stderr, "IBV: pkt_size_max: %d\n", _hibv_ctx.pkt_size_max); - fprintf(stderr, "IBV: recv_pkt_num: %d\n", _hibv_ctx.recv_pkt_num); - _hibv_ctx.max_flows = 1; - int ret = hashpipe_ibv_init(&_hibv_ctx); - if( ret ) { - fprintf(stderr, "ERROR: haspipe_ibv_init returned %d\n", ret); - } - - // Subscribe to RX flow - ret = hashpipe_ibv_flow( - &_hibv_ctx, - 0, IBV_FLOW_SPEC_UDP, - _hibv_ctx.mac, NULL, 0, 0, 0, 0, 0, port); - if( ret ) { - fprintf(stderr, "ERROR: haspipe_ibv_flow returned %d\n", ret); - } - - return BF_STATUS_SUCCESS; -} - -int ibv_recv_packet(uint8_t** pkt_ptr, int flags) { - // If we don't have a work-request queue on the go, - // get some new packets. - if ( _pkt ) { - _pkt = (struct hashpipe_ibv_recv_pkt *)_pkt->wr.next; - if ( !_pkt ) { - hashpipe_ibv_release_pkts(&_hibv_ctx, _hibv_rpkt); - _hibv_rpkt = NULL; - } - } - while (!_hibv_rpkt) { - _hibv_rpkt = hashpipe_ibv_recv_pkts(&_hibv_ctx, 1); - _pkt = _hibv_rpkt; - } - // IBV returns Eth/UDP/IP headers. Strip them off here. - *pkt_ptr = (uint8_t *)_pkt->wr.sg_list->addr + IBV_UDP_PAYLOAD_OFFSET; - return _pkt->length - IBV_UDP_PAYLOAD_OFFSET; -} - -} diff --git a/src/bifrost/bf_ibverbs.h b/src/bifrost/bf_ibverbs.h deleted file mode 100644 index ce1206c74..000000000 --- a/src/bifrost/bf_ibverbs.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef BF_IBVERBS_H_INCLUDE_GUARD_ -#define BF_IBVERBS_H_INCLUDE_GUARD_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -BFstatus ibv_init(size_t pkt_size_max); -int ibv_recv_packet(uint8_t** pkt_ptr, int flags); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // BF_IBVERBS_INCLUDE_GUARD_ From 76da1ebc61c6524b87dc979751f7d9be857dd176 Mon Sep 17 00:00:00 2001 From: JackH Date: Wed, 29 Jul 2020 13:39:40 +0000 Subject: [PATCH 0037/1155] Remove remnants of JH's hashpipe IBV code --- src/packet_capture.cpp | 24 ------------------------ src/packet_capture.hpp | 23 ----------------------- 2 files changed, 47 deletions(-) diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index 9c24f8d87..f6d56b43a 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -328,30 +328,6 @@ BFstatus bfUdpCaptureCreate(BFpacketcapture* obj, BF_IO_UDP); } -BFstatus bfIbvUdpCaptureCreate(BFpacketcapture* obj, - const char* format, - int fd, - BFring ring, - BFsize nsrc, - BFsize src0, - BFsize max_payload_size, - BFsize buffer_ntime, - BFsize slot_ntime, - BFpacketcapture_callback sequence_callback, - int core) { - return BFpacketcapture_create(obj, - format, - fd, - ring, - nsrc, - src0, - buffer_ntime, - slot_ntime, - sequence_callback, - core, - BF_IO_IBV_UDP); -} - BFstatus bfUdpSnifferCreate(BFpacketcapture* obj, const char* format, int fd, diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 509b9f6c8..c8fc3f561 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -222,27 +222,6 @@ class VMAReceiver { }; #endif // BF_VMA_ENABLED -#ifndef BF_HPIBV_ENABLED -#define BF_HPIBV_ENABLED 0 -#endif - -#if BF_HPIBV_ENABLED -#include - -class IBVUDPPacketReceiver : public PacketCaptureMethod { -public: - IBVUDPPacketReceiver(int fd, size_t pkt_size_max=JUMBO_FRAME_SIZE) - : PacketCaptureMethod(fd, pkt_size_max, BF_IO_IBV_UDP) - { - ibv_init(pkt_size_max); - } - inline int recv_packet(uint8_t** pkt_ptr, int flags=0) { - return ibv_recv_packet(pkt_ptr, flags); - } - inline const char* get_name() { return "udp_capture"; } -}; -#endif // BF_HPIBV_ENABLED - class UDPPacketReceiver : public PacketCaptureMethod { #if BF_VMA_ENABLED VMAReceiver _vma; @@ -1204,8 +1183,6 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, method = new DiskPacketReader(fd, max_payload_size); } else if( backend == BF_IO_UDP ) { method = new UDPPacketReceiver(fd, max_payload_size); - } else if( backend == BF_IO_IBV_UDP ) { - method = new IBVUDPPacketReceiver(fd, max_payload_size); } else if( backend == BF_IO_SNIFFER ) { method = new UDPPacketSniffer(fd, max_payload_size); #if BF_VERBS_ENABLED From 951b7412c90dd758446bdd211814742a1fc6043b Mon Sep 17 00:00:00 2001 From: JackH Date: Wed, 29 Jul 2020 13:39:59 +0000 Subject: [PATCH 0038/1155] Default to buffer 32k packets Reaches 27Gbps on LWA352 pipeline --- src/ib_verbs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index b2d29a6ad..d00cbca08 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -53,7 +53,7 @@ extern "C" { #endif #ifndef BF_VERBS_NPKTBUF -#define BF_VERBS_NPKTBUF 8192 +#define BF_VERBS_NPKTBUF 32768 #endif #ifndef BF_VERBS_WCBATCH From d8632960e2342a62d83960c8c5856ab23ebc91ff Mon Sep 17 00:00:00 2001 From: JackH Date: Wed, 29 Jul 2020 09:59:18 -0400 Subject: [PATCH 0039/1155] Remove some unused code --- src/formats/snap2.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index ff401123b..fe0f2d7cd 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -143,7 +143,6 @@ class SNAP2Processor : virtual public PacketProcessor { itype const* __restrict__ in = (itype const*)pkt->payload_ptr; otype* __restrict__ out = (otype* )&obufs[obuf_idx][obuf_offset]; - int words_per_chan_in = pkt->npol >> 5; // 32 pols per 256-bit word int words_per_chan_out = pkt->npol_tot >> 5; int pol_offset_out = pkt->pol0 >> 5; int pkt_chan = pkt->chan0; // The first channel in this packet @@ -156,7 +155,7 @@ class SNAP2Processor : virtual public PacketProcessor { __m256i *dest_p; __m256i vecbuf[2]; uint64_t *in64 = (uint64_t *)in; - int c, i; + int c; dest_p = (__m256i *)(out + (words_per_chan_out * (pkt_chan)) + pol_offset_out); for(c=0; cnchan; c++) { vecbuf[0] = _mm256_set_epi64x(in64[3], in64[2], in64[1], in64[0]); From 35e819d39d32688f212a73109373448adf372001 Mon Sep 17 00:00:00 2001 From: JackH Date: Wed, 29 Jul 2020 09:59:47 -0400 Subject: [PATCH 0040/1155] Change how bifrost sequences are defined Sequence only changes if out-of-order packets indicate the upstream transmitters have reset --- src/packet_capture.hpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index c61454098..a0e3e7957 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -657,6 +657,7 @@ class BFpacketcapture_chips_impl : public BFpacketcapture_impl { class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { ProcLog _type_log; ProcLog _chan_log; + BFoffset _last_pkt_seq; BFpacketcapture_snap2_sequence_callback _sequence_callback; @@ -665,7 +666,8 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { // always starts things ~3 seq's before the 1sec boundary anyway. //seq = round_up(pkt->seq, _slot_ntime); //*_seq = round_nearest(pkt->seq, _slot_ntime); - _seq = round_up(pkt->seq, _slot_ntime); + //_seq = round_up(pkt->seq, _slot_ntime); + _seq = pkt->seq; this->on_sequence_changed(pkt, seq0, time_tag, hdr, hdr_size); } void on_sequence_active(const PacketDesc* pkt) { @@ -679,8 +681,12 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { // Has the configuration changed? I.e., different channels being sent. inline bool has_sequence_changed(const PacketDesc* pkt) { // TODO: Decide what a sequence actually is! - return (pkt->seq % 480 == 0); - //return false; + // Currently a new sequence starts whenever packets come out of order. + // This isn't great, but the packet RX code assumes packets are in order too. + bool is_new_seq; + is_new_seq = ((pkt->seq != _last_pkt_seq) && (pkt->seq != _last_pkt_seq)); + _last_pkt_seq = pkt->seq; + return is_new_seq; } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); From f889f156092084b5c557510a3cb953ce3ffd95f6 Mon Sep 17 00:00:00 2001 From: JackH Date: Wed, 29 Jul 2020 10:05:05 -0400 Subject: [PATCH 0041/1155] Don't use VMA or HWLOC --- user.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user.mk b/user.mk index df51b226f..edea22fbd 100644 --- a/user.mk +++ b/user.mk @@ -32,7 +32,7 @@ ALIGNMENT ?= 4096 # Memory allocation alignment #ANY_ARCH = 1 # Disable native architecture compilation #CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) #NUMA = 1 # Enable use of numa library for setting affinity of ring memory -HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture -VMA = 1 # Enable use of Mellanox libvma in udp_capture +#HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture +#VMA = 1 # Enable use of Mellanox libvma in udp_capture XGPU = 1 # build xGPU integrations (requires the xGPU library) VERBS = 1 # Enable use of IB verbs with udp_verbs_capture From d52ebb28477081587a1980a40ef1d0bab6ad6505 Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 30 Jul 2020 17:23:53 +0000 Subject: [PATCH 0042/1155] VERMS doesn't need -lvma --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index b5e6057b8..ee2e9708b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -112,7 +112,7 @@ endif ifdef VERBS # Requires Mellanox libvma to be installed - LIB += -lvma -libverbs + LIB += -libverbs CPPFLAGS += -DBF_VERBS_ENABLED=1 endif From 6ee33a1256a7cb19ea2342d40df2f42b3e726f31 Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 30 Jul 2020 17:24:22 +0000 Subject: [PATCH 0043/1155] Tweaks to sequence boundaries Round start of seq to a gulp size. Decide if a sequence has ended by checking if the first packet of the next sequence is the current time step + gulp size This enforces gulp_size = slot_size. But, it's not obvious slot size actually does anything other than set the time granularity at which a buffer may start --- src/packet_capture.hpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 22f74ba51..9bc978e9b 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -656,7 +656,7 @@ class BFpacketcapture_chips_impl : public BFpacketcapture_impl { class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { ProcLog _type_log; ProcLog _chan_log; - BFoffset _last_pkt_seq; + BFoffset _last_seq; BFpacketcapture_snap2_sequence_callback _sequence_callback; @@ -665,8 +665,7 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { // always starts things ~3 seq's before the 1sec boundary anyway. //seq = round_up(pkt->seq, _slot_ntime); //*_seq = round_nearest(pkt->seq, _slot_ntime); - //_seq = round_up(pkt->seq, _slot_ntime); - _seq = pkt->seq; + _seq = round_up(pkt->seq, _slot_ntime); this->on_sequence_changed(pkt, seq0, time_tag, hdr, hdr_size); } void on_sequence_active(const PacketDesc* pkt) { @@ -680,11 +679,12 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { // Has the configuration changed? I.e., different channels being sent. inline bool has_sequence_changed(const PacketDesc* pkt) { // TODO: Decide what a sequence actually is! - // Currently a new sequence starts whenever packets come out of order. - // This isn't great, but the packet RX code assumes packets are in order too. + // Currently a new sequence starts whenever a block finishes and the next + // packet isn't from the next block + // TODO. Is this actually reasonable? Does it recover from upstream resyncs? bool is_new_seq; - is_new_seq = ((pkt->seq != _last_pkt_seq) && (pkt->seq != _last_pkt_seq)); - _last_pkt_seq = pkt->seq; + is_new_seq = (pkt->seq != _last_seq + _slot_ntime); + _last_seq = pkt->seq; return is_new_seq; } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { @@ -692,6 +692,7 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { _chan0 = pkt->chan0; _nchan = pkt->nchan; _payload_size = pkt->payload_size; + _last_seq = _seq; if( _sequence_callback ) { int status = (*_sequence_callback)(*seq0, From 9206d8f682bb725a3cd6173be03259ffc5c720c9 Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 30 Jul 2020 20:28:51 +0000 Subject: [PATCH 0044/1155] Make new sequence start when packet seq number resets --- src/packet_capture.cpp | 8 ++++++++ src/packet_capture.hpp | 16 ++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index f6d56b43a..7827fbc0c 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -91,6 +91,14 @@ int PacketCaptureThread::run(uint64_t seq_beg, BF_PRINTD("HERE" << " " << _pkt.seq << " < " << seq_beg); _have_pkt = false; if( less_than(_pkt.seq, seq_beg) ) { + // If lots [TODO: what is lots] of packets are late + // return. Otherwise a seq reset can lead to being stuck + // here endlessly counting late packets. + if( less_than(_pkt.seq + nseq_per_obuf, seq_beg) ) { + _have_pkt = true; + ret = CAPTURE_SUCCESS; + break; + } ++_stats.nlate; _stats.nlate_bytes += _pkt.payload_size; ++_src_stats[_pkt.src].nlate; diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 9bc978e9b..7114482ee 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -661,11 +661,6 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { BFpacketcapture_snap2_sequence_callback _sequence_callback; void on_sequence_start(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size ) { - // TODO: Might be safer to round to nearest here, but the current firmware - // always starts things ~3 seq's before the 1sec boundary anyway. - //seq = round_up(pkt->seq, _slot_ntime); - //*_seq = round_nearest(pkt->seq, _slot_ntime); - _seq = round_up(pkt->seq, _slot_ntime); this->on_sequence_changed(pkt, seq0, time_tag, hdr, hdr_size); } void on_sequence_active(const PacketDesc* pkt) { @@ -682,17 +677,22 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { // Currently a new sequence starts whenever a block finishes and the next // packet isn't from the next block // TODO. Is this actually reasonable? Does it recover from upstream resyncs? - bool is_new_seq; - is_new_seq = (pkt->seq != _last_seq + _slot_ntime); + bool is_new_seq = false; + if ( pkt->seq != _last_seq + _slot_ntime ) { + is_new_seq = true; + this->flush(); + } _last_seq = pkt->seq; return is_new_seq; } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { + _seq = round_up(pkt->seq, _slot_ntime); + fprintf(stderr, "New seq start is %d based on pkt->seq %d\n", _seq, (int)pkt->seq); + _last_seq = _seq; *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); _chan0 = pkt->chan0; _nchan = pkt->nchan; _payload_size = pkt->payload_size; - _last_seq = _seq; if( _sequence_callback ) { int status = (*_sequence_callback)(*seq0, From e6fdff18b3bdf725e590b94a1a770f17b9048527 Mon Sep 17 00:00:00 2001 From: JackH Date: Sat, 1 Aug 2020 11:55:57 +0000 Subject: [PATCH 0045/1155] handle StopIteration exceptions Python 3.7 enables https://www.python.org/dev/peps/pep-0479/ StopIteration errors are, from Python 3.7, promoited to RuntimeErrors and must be explicitly handled by user code. See https://stackoverflow.com/questions/51700960/runtimeerror-generator-raised-stopiteration-every-time-i-try-to-run-app --- python/bifrost/ring.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/python/bifrost/ring.py b/python/bifrost/ring.py index ddf2c71e0..83ba84ec0 100644 --- a/python/bifrost/ring.py +++ b/python/bifrost/ring.py @@ -112,8 +112,11 @@ def open_earliest_sequence(self, guarantee=True): def read(self, whence='earliest', guarantee=True): with ReadSequence(self, which=whence, guarantee=guarantee) as cur_seq: while True: - yield cur_seq - cur_seq.increment() + try: + yield cur_seq + cur_seq.increment() + except StopIteration: + return #def _data(self): # data_ptr = _get(self.lib.bfRingLockedGetData, self.obj) # #data_ptr = c_void_p() @@ -273,9 +276,12 @@ def read(self, span_size, stride=None, begin=0): stride = span_size offset = begin while True: - with self.acquire(offset, span_size) as ispan: - yield ispan - offset += stride + try: + with self.acquire(offset, span_size) as ispan: + yield ispan + offset += stride + except StopIteration: + return class SpanBase(object): def __init__(self, ring, writeable): From f9530728b4b15ab24e6b135c072156ac962808d4 Mon Sep 17 00:00:00 2001 From: JackH Date: Sat, 1 Aug 2020 12:29:38 +0000 Subject: [PATCH 0046/1155] Remove debug print --- src/packet_capture.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 7114482ee..e8b397d40 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -687,7 +687,6 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { _seq = round_up(pkt->seq, _slot_ntime); - fprintf(stderr, "New seq start is %d based on pkt->seq %d\n", _seq, (int)pkt->seq); _last_seq = _seq; *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); _chan0 = pkt->chan0; From fa671f43984ec660330ec6078a0460218a5a0a65 Mon Sep 17 00:00:00 2001 From: JackH Date: Mon, 10 Aug 2020 19:14:26 +0000 Subject: [PATCH 0047/1155] Tweak SNAP2 packet format to contain sync time And feed sync time into the pipeline time_tag --- src/formats/snap2.hpp | 10 +++------- src/packet_capture.hpp | 7 +++++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index fe0f2d7cd..9855b8c2e 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -33,8 +33,6 @@ #include // SSE #include -#define SNAP2_HEADER_MAGIC 0xaabbccdd - // TODO: parameterize somewhere. This isn't // related to the packet formatting #define PIPELINE_NPOL 704 @@ -44,9 +42,9 @@ // All entries are network (i.e. big) endian struct snap2_hdr_type { uint64_t seq; // Spectra counter == packet counter - uint32_t magic; // = 0xaabbccdd + uint32_t sync_time; // UNIX sync time uint16_t npol; // Number of pols in this packet - uint16_t npol_tot; // Number of pols total + uint16_t npol_tot; // Number of pols total uint16_t nchan; // Number of channels in this packet uint16_t nchan_tot; // Number of channels total (for this pipeline) uint32_t chan_block_id; // ID of this block of chans @@ -92,10 +90,8 @@ class SNAP2Decoder : virtual public PacketDecoder { const snap2_hdr_type* pkt_hdr = (snap2_hdr_type*)pkt_ptr; const uint8_t* pkt_pld = pkt_ptr + sizeof(snap2_hdr_type); int pld_size = pkt_size - sizeof(snap2_hdr_type); - if( be32toh(pkt_hdr->magic) != SNAP2_HEADER_MAGIC ) { - return false; - } pkt->seq = be64toh(pkt_hdr->seq); + pkt->time_tag = be32toh(pkt_hdr->sync_time); int npol_blocks = (be16toh(pkt_hdr->npol_tot) / be16toh(pkt_hdr->npol)); int nchan_blocks = (be16toh(pkt_hdr->nchan_tot) / be16toh(pkt_hdr->nchan)); diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index e8b397d40..ef5e5d9b4 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -657,6 +657,7 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { ProcLog _type_log; ProcLog _chan_log; BFoffset _last_seq; + BFoffset _last_time_tag; BFpacketcapture_snap2_sequence_callback _sequence_callback; @@ -678,7 +679,7 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { // packet isn't from the next block // TODO. Is this actually reasonable? Does it recover from upstream resyncs? bool is_new_seq = false; - if ( pkt->seq != _last_seq + _slot_ntime ) { + if ( (_last_time_tag != pkt->time_tag) || (pkt->seq != _last_seq + _slot_ntime) ) { is_new_seq = true; this->flush(); } @@ -687,7 +688,9 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { _seq = round_up(pkt->seq, _slot_ntime); - _last_seq = _seq; + *time_tag = (BFoffset) pkt->time_tag; + _last_time_tag = pkt->time_tag; + _last_seq = _seq; *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); _chan0 = pkt->chan0; _nchan = pkt->nchan; From 8e92235fbe7d39bbe17095c175fc4634a9106292 Mon Sep 17 00:00:00 2001 From: JackH Date: Sun, 16 Aug 2020 12:40:19 +0000 Subject: [PATCH 0048/1155] Add option to sum over freq chans while subselecting baselines --- src/bf_xgpu.cpp | 8 ++++---- src/bifrost/bf_xgpu.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp index 25c3774eb..3fcbb8768 100644 --- a/src/bf_xgpu.cpp +++ b/src/bf_xgpu.cpp @@ -134,10 +134,10 @@ BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump) { * and gather them in a new buffer, in order chan x visibility x complexity [int32] * BFarray *in : Pointer to a BFarray with storage in device memory, where xGPU results reside * BFarray *in : Pointer to a BFarray with storage in device memory where collated visibilities should be written. - * int **vismap : array of visibilities in [[polA, polB], [polC, polD], ... ] form. - * int nvis : The number of visibilities to colate (length of the vismap array) + * BFarray *vismap : array of visibilities in [[polA, polB], [polC, polD], ... ] form. + * int nchan_sum: The number of frequency channels to sum over */ -BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap) { +BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, int nchan_sum) { long long unsigned nvis = num_contiguous_elements(vismap); int xgpu_error; if (in->space != BF_SPACE_CUDA) { @@ -149,7 +149,7 @@ BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap) { if (vismap->space != BF_SPACE_CUDA) { return BF_STATUS_UNSUPPORTED_SPACE; } - xgpu_error = xgpuCudaSubSelect(&context, (Complex *)in->data, (Complex *)out->data, (int *)vismap->data, nvis); + xgpu_error = xgpuCudaSubSelect(&context, (Complex *)in->data, (Complex *)out->data, (int *)vismap->data, nvis, nchan_sum); if (xgpu_error != XGPU_OK) { fprintf(stderr, "ERROR: xgpuKernel: kernel call returned %d\n", xgpu_error); return BF_STATUS_INTERNAL_ERROR; diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h index ede805053..7b4f45b1e 100644 --- a/src/bifrost/bf_xgpu.h +++ b/src/bifrost/bf_xgpu.h @@ -4,4 +4,4 @@ BFstatus bfXgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); BFstatus bfXgpuCorrelate(BFarray *in, BFarray *out, int doDump); BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump); -BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap); +BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, int nchan_sum); From 99c0b5b2be38c937ebd980d470a9f0ac95be32a8 Mon Sep 17 00:00:00 2001 From: JackH Date: Sun, 16 Aug 2020 17:09:04 +0000 Subject: [PATCH 0049/1155] Add methods for converting an input order to a visibility order --- src/bf_xgpu.cpp | 73 +++++++++++++++++++++++++++++++++++++++++++ src/bifrost/bf_xgpu.h | 1 + 2 files changed, 74 insertions(+) diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp index 3fcbb8768..35e68d429 100644 --- a/src/bf_xgpu.cpp +++ b/src/bf_xgpu.cpp @@ -158,4 +158,77 @@ BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, int nchan_s } } +/* Computes the triangular index of an (i,j) pair as shown here... + * NB: Output is valid only if i >= j. + * + * i=0 1 2 3 4.. + * +--------------- + * j=0 | 00 01 03 06 10 + * 1 | 02 04 07 11 + * 2 | 05 08 12 + * 3 | 09 13 + * 4 | 14 + * : + */ +int tri_index(int i, int j){ + return (i * (i+1))/2 + j; + } + +/* Returns index into the GPU's register tile ordered output buffer for the + * real component of the cross product of inputs in0 and in1. Note that in0 + * and in1 are input indexes (i.e. 0 based) and often represent antenna and + * polarization by passing (2*ant_idx+pol_idx) as the input number (NB: ant_idx + * and pol_idx are also 0 based). Return value is valid if in1 >= in0. The + * corresponding imaginary component is located xgpu_info.matLength words after + * the real component. + */ +int regtile_index(int in0, int in1, int nstand) { + int a0, a1, p0, p1; + int num_words_per_cell=4; + int quadrant, quadrant_index, quadrant_size, cell_index, pol_offset, index; + a0 = in0 >> 1; + a1 = in1 >> 1; + p0 = in0 & 1; + p1 = in1 & 1; + + // Index within a quadrant + quadrant_index = tri_index(a1/2, a0/2); + // Quadrant for this input pair + quadrant = 2*(a0&1) + (a1&1); + // Size of quadrant + quadrant_size = (nstand/2 + 1) * nstand/4; + // Index of cell (in units of cells) + cell_index = quadrant*quadrant_size + quadrant_index; + // Pol offset + pol_offset = 2*p1 + p0; + // Word index (in units of words (i.e. floats) of real component + index = (cell_index * num_words_per_cell) + pol_offset; + return index; + } + +BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray *is_conj, int nstand, int npol) { + int *ip_map = (int *)antpol_to_input->data; // indexed by stand, pol + int *bl_map = (int *)antpol_to_bl->data; // indexed by stand0, stand1, pol0, pol1 + int *conj_map = (int *)is_conj->data; // indexed by stand0, stand1, pol0, pol1 + int s0, s1, p0, p1, i0, i1; + for (s0=0; s0= i0) { + bl_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = regtile_index(i0, i1, nstand); + conj_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = 0; + } else { + bl_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = regtile_index(i1, i0, nstand); + conj_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = 1; + } + } + } + } + } + return BF_STATUS_SUCCESS; +} + } // C diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h index 7b4f45b1e..6e806c0df 100644 --- a/src/bifrost/bf_xgpu.h +++ b/src/bifrost/bf_xgpu.h @@ -5,3 +5,4 @@ BFstatus bfXgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); BFstatus bfXgpuCorrelate(BFarray *in, BFarray *out, int doDump); BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump); BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, int nchan_sum); +BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray *is_conj, int nstand, int npol); From 63f84d9a1ca3c8dbeb37beda5eb0894c950a8deb Mon Sep 17 00:00:00 2001 From: JackH Date: Mon, 17 Aug 2020 11:26:01 +0000 Subject: [PATCH 0050/1155] Remove IBV option from UDPCapture constructor This is no longer necessary now there is a dedicated UDPVerbsCapture class --- python/bifrost/packet_capture.py | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index 33c61abab..c72f000ae 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -82,7 +82,7 @@ def end(self): class UDPCapture(_CaptureBase): def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, buffer_ntime, slot_ntime, sequence_callback, core=None, - ibverbs=False, interface='', port=-1): + interface='', port=-1): try: fmt = fmt.encode() except AttributeError: @@ -90,19 +90,11 @@ def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, pass if core is None: core = -1 - if not ibverbs: - BifrostObject.__init__( - self, _bf.bfUdpCaptureCreate, _bf.bfPacketCaptureDestroy, - fmt, sock.fileno(), ring.obj, nsrc, src0, - max_payload_size, buffer_ntime, slot_ntime, - sequence_callback.obj, core) - else: - print("Using IBVerbs") - BifrostObject.__init__( - self, _bf.bfIbvUdpCaptureCreate, _bf.bfPacketCaptureDestroy, - fmt, sock.fileno(), ring.obj, nsrc, src0, - max_payload_size, buffer_ntime, slot_ntime, - sequence_callback.obj, core) + BifrostObject.__init__( + self, _bf.bfUdpCaptureCreate, _bf.bfPacketCaptureDestroy, + fmt, sock.fileno(), ring.obj, nsrc, src0, + max_payload_size, buffer_ntime, slot_ntime, + sequence_callback.obj, core) class UDPSniffer(_CaptureBase): def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, From 3cb5105ec70baae091db52e6765d58bf057369e9 Mon Sep 17 00:00:00 2001 From: JackH Date: Mon, 17 Aug 2020 18:01:19 +0000 Subject: [PATCH 0051/1155] Add function to reorder DP4A xGPU output into visibility matrix --- src/bf_xgpu.cpp | 41 ++++++++++++++++++++++++++++++++++++++++- src/bifrost/bf_xgpu.h | 3 ++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp index 35e68d429..34809ec64 100644 --- a/src/bf_xgpu.cpp +++ b/src/bf_xgpu.cpp @@ -206,11 +206,16 @@ int regtile_index(int in0, int in1, int nstand) { return index; } -BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray *is_conj, int nstand, int npol) { +BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray *is_conj) { int *ip_map = (int *)antpol_to_input->data; // indexed by stand, pol int *bl_map = (int *)antpol_to_bl->data; // indexed by stand0, stand1, pol0, pol1 int *conj_map = (int *)is_conj->data; // indexed by stand0, stand1, pol0, pol1 int s0, s1, p0, p1, i0, i1; + int nstand, npol; + XGPUInfo xgpu_info; + xgpuInfo(&xgpu_info); + nstand = xgpu_info.nstation; + npol = xgpu_info.npol; for (s0=0; s0data; + int *input_r = (int *)xgpu_output->data; + int *input_i = input_r + xgpu_info.matLength; + int *bl = (int *)baselines->data; + int *conj = (int *)is_conjugated->data; + int n_bl = num_contiguous_elements(baselines); + int xgpu_n_input = xgpu_info.nstation * xgpu_info.npol; + int n_chan = xgpu_info.nfrequency; + int i, c; + // number of entries per channel + size_t regtile_chan_len = 4 * 4 * xgpu_n_input/4 * (xgpu_n_input/4+1) / 2; + fprintf(stderr, "nbaselines: %d; nchans:%d\n", n_bl, n_chan); + for (i=0; i Date: Mon, 17 Aug 2020 18:48:38 +0000 Subject: [PATCH 0052/1155] Remove debugging prints --- src/bf_xgpu.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp index 34809ec64..0c55a0b9a 100644 --- a/src/bf_xgpu.cpp +++ b/src/bf_xgpu.cpp @@ -256,7 +256,6 @@ BFstatus bfXgpuReorder(BFarray *xgpu_output, BFarray *reordered, BFarray *baseli int i, c; // number of entries per channel size_t regtile_chan_len = 4 * 4 * xgpu_n_input/4 * (xgpu_n_input/4+1) / 2; - fprintf(stderr, "nbaselines: %d; nchans:%d\n", n_bl, n_chan); for (i=0; i Date: Fri, 4 Sep 2020 11:23:48 +0000 Subject: [PATCH 0053/1155] Fix conjugations Fix bugs and set conjugation convention such that given a visibility matrix in order: [stand0, stand1, pol0, pol1] The conjugation of the data is (stand0, pol0) * conj(stand1, pol1) --- src/bf_xgpu.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp index 0c55a0b9a..13a014c5f 100644 --- a/src/bf_xgpu.cpp +++ b/src/bf_xgpu.cpp @@ -222,12 +222,14 @@ BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray for (p1=0; p1= i0) { + // Set the conj map such that bl_map[stand0, stand1, pol0, pol1] has conjugation convention + // stand0,pol0 * conj(stand1,pol1) + if (i1 > i0) { bl_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = regtile_index(i0, i1, nstand); - conj_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = 0; + conj_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = 1; } else { bl_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = regtile_index(i1, i0, nstand); - conj_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = 1; + conj_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = 0; } } } @@ -240,6 +242,7 @@ BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray * Reorder a DP4A xGPU spec output into something more sane, throwing * away unwanted baselines and re-concatenating real and imag parts in * a reasonable way. + * Also remove conjugation weirdness so baselines a,b has conjugation a*conj(b) */ BFstatus bfXgpuReorder(BFarray *xgpu_output, BFarray *reordered, BFarray *baselines, BFarray *is_conjugated) { XGPUInfo xgpu_info; @@ -259,10 +262,10 @@ BFstatus bfXgpuReorder(BFarray *xgpu_output, BFarray *reordered, BFarray *baseli for (i=0; i Date: Thu, 10 Sep 2020 17:30:33 +0000 Subject: [PATCH 0054/1155] Fix source ID computation --- src/formats/snap2.hpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index 9855b8c2e..23de0c387 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -96,13 +96,13 @@ class SNAP2Decoder : virtual public PacketDecoder { int nchan_blocks = (be16toh(pkt_hdr->nchan_tot) / be16toh(pkt_hdr->nchan)); pkt->nsrc = npol_blocks * nchan_blocks;// _nsrc; - pkt->src = (npol_blocks * be16toh(pkt_hdr->chan_block_id)) + (be16toh(pkt_hdr->npol_tot) / be16toh(pkt_hdr->npol)); pkt->nchan = be16toh(pkt_hdr->nchan); pkt->chan0 = be32toh(pkt_hdr->chan_block_id) * be16toh(pkt_hdr->nchan); pkt->nchan_tot = be16toh(pkt_hdr->nchan_tot); pkt->npol = be16toh(pkt_hdr->npol); pkt->npol_tot = be16toh(pkt_hdr->npol_tot); pkt->pol0 = be32toh(pkt_hdr->pol0); + pkt->src = (pkt->pol0 / pkt->npol) + be32toh(pkt_hdr->chan_block_id) * npol_blocks; pkt->payload_size = pld_size; pkt->payload_ptr = pkt_pld; return this->valid_packet(pkt); @@ -153,6 +153,9 @@ class SNAP2Processor : virtual public PacketProcessor { uint64_t *in64 = (uint64_t *)in; int c; dest_p = (__m256i *)(out + (words_per_chan_out * (pkt_chan)) + pol_offset_out); + //if((pol_offset_out == 0) && (pkt_chan==0) && ((pkt->seq % 120)==0) ){ + // fprintf(stderr, "nsrc: %d seq: %d, dest_p: %p obuf idx %d, obuf offset %lu, nseq_per_obuf %d, seq0 %d, nbuf: %d\n", pkt->nsrc, pkt->seq, dest_p, obuf_idx, obuf_offset, nseq_per_obuf, seq0, nbuf); + //} for(c=0; cnchan; c++) { vecbuf[0] = _mm256_set_epi64x(in64[3], in64[2], in64[1], in64[0]); vecbuf[1] = _mm256_set_epi64x(in64[7], in64[6], in64[5], in64[4]); @@ -168,14 +171,16 @@ class SNAP2Processor : virtual public PacketProcessor { int nsrc, int nchan, int nseq) { - typedef aligned256_type otype; - otype* __restrict__ aligned_data = (otype*)data; - for( int t=0; t Date: Wed, 7 Oct 2020 12:14:36 +0000 Subject: [PATCH 0055/1155] Py3-ize pipeline2dot --- tools/pipeline2dot.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/pipeline2dot.py b/tools/pipeline2dot.py index dd21a592d..c899af23c 100755 --- a/tools/pipeline2dot.py +++ b/tools/pipeline2dot.py @@ -63,7 +63,7 @@ def get_process_details(pid): data = {'user':'', 'cpu':0.0, 'mem':0.0, 'etime':'00:00', 'threads':0} try: - output = subprocess.check_output('ps o user,pcpu,pmem,etime,nlwp %i' % pid, shell=True) + output = subprocess.check_output('ps o user,pcpu,pmem,etime,nlwp %i' % pid, shell=True).decode() output = output.split('\n')[1] fields = output.split(None, 4) data['user'] = fields[0] @@ -348,4 +348,3 @@ def main(args): help='exclude associated blocks') args = parser.parse_args() main(args) - \ No newline at end of file From 5cc85c55cd5d1ee389cbd33040fcde428f4a3615 Mon Sep 17 00:00:00 2001 From: JackH Date: Wed, 7 Oct 2020 14:24:42 +0000 Subject: [PATCH 0056/1155] Add option to conjugate baselines while subselecting --- src/bf_xgpu.cpp | 10 ++++++++-- src/bifrost/bf_xgpu.h | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp index 13a014c5f..91d55c843 100644 --- a/src/bf_xgpu.cpp +++ b/src/bf_xgpu.cpp @@ -137,7 +137,7 @@ BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump) { * BFarray *vismap : array of visibilities in [[polA, polB], [polC, polD], ... ] form. * int nchan_sum: The number of frequency channels to sum over */ -BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, int nchan_sum) { +BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *conj, int nchan_sum) { long long unsigned nvis = num_contiguous_elements(vismap); int xgpu_error; if (in->space != BF_SPACE_CUDA) { @@ -149,7 +149,13 @@ BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, int nchan_s if (vismap->space != BF_SPACE_CUDA) { return BF_STATUS_UNSUPPORTED_SPACE; } - xgpu_error = xgpuCudaSubSelect(&context, (Complex *)in->data, (Complex *)out->data, (int *)vismap->data, nvis, nchan_sum); + if (conj->space != BF_SPACE_CUDA) { + return BF_STATUS_UNSUPPORTED_SPACE; + } + if (num_contiguous_elements(conj) != nvis) { + return BF_STATUS_INVALID_SHAPE; + } + xgpu_error = xgpuCudaSubSelect(&context, (Complex *)in->data, (Complex *)out->data, (int *)vismap->data, (int *)conj->data, nvis, nchan_sum); if (xgpu_error != XGPU_OK) { fprintf(stderr, "ERROR: xgpuKernel: kernel call returned %d\n", xgpu_error); return BF_STATUS_INTERNAL_ERROR; diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h index 872777d41..e06b5be61 100644 --- a/src/bifrost/bf_xgpu.h +++ b/src/bifrost/bf_xgpu.h @@ -4,6 +4,6 @@ BFstatus bfXgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); BFstatus bfXgpuCorrelate(BFarray *in, BFarray *out, int doDump); BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump); -BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, int nchan_sum); +BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *conj, int nchan_sum); BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray *is_conj); BFstatus bfXgpuReorder(BFarray *xgpu_output, BFarray *reordered, BFarray *baselines, BFarray *is_conjugated); From db72993f3abf62ad6facf6df1db4c2fa58e73631 Mon Sep 17 00:00:00 2001 From: JackH Date: Tue, 20 Oct 2020 15:56:52 +0000 Subject: [PATCH 0057/1155] Beamformer fixes and comment updates - Add function to accumulate a single beam from a buffer of many - Make accumulation functions take acc_len as an arg rather than reading from context --- src/beamform.cpp | 17 +++++++-- src/bifrost/beamform.h | 52 ++++++++++++++++++++++++++- src/cublas_beamform.cu | 79 +++++++++++++++++++++++++++++++++-------- src/cublas_beamform.cuh | 3 +- 4 files changed, 133 insertions(+), 18 deletions(-) diff --git a/src/beamform.cpp b/src/beamform.cpp index eb6c563e4..16d874222 100644 --- a/src/beamform.cpp +++ b/src/beamform.cpp @@ -59,7 +59,7 @@ BFstatus bfBeamformRun(BFarray *in, BFarray *out, BFarray *weights) { return BF_STATUS_SUCCESS; } -BFstatus bfBeamformIntegrate(BFarray *in, BFarray *out) { +BFstatus bfBeamformIntegrate(BFarray *in, BFarray *out, int ntimes_sum) { if (in->space != BF_SPACE_CUDA) { fprintf(stderr, "Beamformer input buffer must be in CUDA space\n"); return BF_STATUS_INVALID_SPACE; @@ -68,7 +68,20 @@ BFstatus bfBeamformIntegrate(BFarray *in, BFarray *out) { fprintf(stderr, "Beamformer output buffer must be in CUDA space\n"); return BF_STATUS_INVALID_SPACE; } - cublas_beamform_integrate((float *)in->data, (float *)out->data); + cublas_beamform_integrate((float *)in->data, (float *)out->data, ntimes_sum); + return BF_STATUS_SUCCESS; +} + +BFstatus bfBeamformIntegrateSingleBeam(BFarray *in, BFarray *out, int ntimes_sum, int beam_index) { + if (in->space != BF_SPACE_CUDA) { + fprintf(stderr, "Beamformer input buffer must be in CUDA space\n"); + return BF_STATUS_INVALID_SPACE; + } + if (out->space != BF_SPACE_CUDA) { + fprintf(stderr, "Beamformer output buffer must be in CUDA space\n"); + return BF_STATUS_INVALID_SPACE; + } + cublas_beamform_integrate_single_beam((float *)in->data, (float *)out->data, ntimes_sum, beam_index); return BF_STATUS_SUCCESS; } } // C diff --git a/src/bifrost/beamform.h b/src/bifrost/beamform.h index 1da1937a9..890b727da 100644 --- a/src/bifrost/beamform.h +++ b/src/bifrost/beamform.h @@ -1,6 +1,16 @@ #include #include +/* + * gpudev: GPU device ID to use + * ninputs: Number of inputs (single-polarization) to the beamformer + * nchans: Number of frequency channels + * ntimes: Number of time samples per beamforming call + * nbeams: Number of beams to generate. If using ntime_blocks > 0, beams=N will deliver + * ntime_blocks: Number of time blocks to output. Eg. if ntimes=1000 and ntime_blocks=10, the beamformer + will integrate over 100 samples per call. Set to 0 for no accumulation, in which case + raw beam voltages are output. + */ BFstatus bfBeamformInitialize( int gpudev, int ninputs, @@ -10,13 +20,53 @@ BFstatus bfBeamformInitialize( int ntime_blocks ); +/* + * in: Pointer to ntime x nchan x ninputs x 4+4 bit data block + * out: Pointer to output data. + * If ntime_blocks > 0: + * For the purposes of generating dynamic spectra, beam 2n and 2n+1 are considered + * to be two pols of the same pointing, and are cross-multipled and summed over + * ntimes/ntime_blocks to form the output array: + * nbeam/2 x ntime_blocks x nchan x 4 x float32 (powers, XX, YY, re(XY, im(XY)) + * Note that this means for N dual-pol beam pointings, the beamformer should be + * constructed with nbeams=2N. This isn't very efficient, but makes it easy to deal + * with arbitrary polarization orderings in the input buffer (suitable beamforming + * coefficients can make appropriate single-pol beam pairs). + * If ntime_blocks = 0: + * Data are returned as voltages, in order: + * ntimes x nchan x nbeam x complex64 beamformer block + * + * weights -- pointer to nbeams x nchans x ninputs x complex64 weights + */ BFstatus bfBeamformRun( BFarray *in, BFarray *out, BFarray *weights ); +/* + * Take the output of bfBeamformRun with ntime_blocks = 0, and perform transposing and integration + * of data, to deliver a time integrated dual-pol dynamic spectra of the form: + * nbeam/2 x ntime/ntimes_sum x nchan x 4 x float32 (powers, XX, YY, re(XY, im(XY)) + * I.e., the format which would be returned by bfBeamformRun is ntime_blocks > 0 + */ BFstatus bfBeamformIntegrate( BFarray *in, - BFarray *out + BFarray *out, + int ntimes_sum, +); + +/* + * Take the output of bfBeamformRun with ntime_blocks = 0, and + * deliver a time integrated dual-pol dynamic spectra for a single beam of the form: + * ntime/ntimes_sum x nchan x 4 x float32 (powers, XX, YY, re(XY, im(XY)) + * + * ntime_sum: the number of times to integrate + * beam_index: The beam to select (if beam_index=N, beams N and N+1 will be used as a polarization pair) + */ +BFstatus bfBeamformIntegrateSingleBeam( + BFarray *in, + BFarray *out, + int ntimes_sum, + int beam_index ); diff --git a/src/cublas_beamform.cu b/src/cublas_beamform.cu index 94f095850..4be7aedb6 100644 --- a/src/cublas_beamform.cu +++ b/src/cublas_beamform.cu @@ -54,16 +54,16 @@ __global__ void trans_output_and_sum(float *in, int chan = blockIdx.x; int beam = blockIdx.y; int time = threadIdx.x; - long long int old_index = chan*n_beam*n_time*2 + beam*n_time*2 + time*n_time_sum; // start index for n_time/n_time_sum samples + long long int old_index = chan*n_beam*n_time*2 + beam*n_time*2 + time*n_time_sum*2; // start index for n_time/n_time_sum samples long long int new_index = beam*(n_time / n_time_sum)*n_chan + time*n_chan + chan; float xx=0., yy=0., xy_r=0., xy_i=0.; float x_r, x_i, y_r, y_i; int t; for (t=0; t 0 int ninputs; // Number of inputs (ants * pols) int npols; // Number of polarizations per antenna int nchans; // Number of channels input @@ -167,7 +203,7 @@ void cublas_beamform_init(int device, int ninputs, int nchans, int ntimes, int n // Internally allocate intermediate buffers gpuErrchk( cudaMalloc(&context.in32_d, ninputs * nchans * ntimes * 2 * sizeof(float)) ); // If the context is initialized with ntimeblocks=0, then we do no summing so don't - // need the intermediate buffer + // need the intermediate buffer allocated internally. if (ntimeblocks > 0) { gpuErrchk( cudaMalloc(&context.out_d, ntimes * nchans * nbeams * 2 * sizeof(float)) ); } @@ -188,7 +224,7 @@ void cublas_beamform(unsigned char *in4_d, float *out_d, float *weights_d) { cudaStreamSynchronize(context.stream); // If we are integrating beam powers, put the - // GEM output in the context-defined intermediate + // GEM output in the internal intermediate // buffer. If not, then write beamformer output // to the address given by the user. float *gem_out_d; @@ -242,6 +278,7 @@ void cublas_beamform(unsigned char *in4_d, float *out_d, float *weights_d) { if (context.ntimeblocks > 0) { // Create XX, YY, XY beam powers. // Sum over `ntimes_sum` samples + // Write to the user-provided output buffer int ntimes_sum = context.ntimes / context.ntimeblocks; dim3 sumBlockGrid(context.nchans, context.nbeams/2); dim3 sumThreadGrid(context.ntimes / ntimes_sum); @@ -257,13 +294,12 @@ void cublas_beamform(unsigned char *in4_d, float *out_d, float *weights_d) { } } -void cublas_beamform_integrate(float *in_d, float *out_d) { +void cublas_beamform_integrate(float *in_d, float *out_d, int ntimes_sum) { // Create XX, YY, XY beam powers. // Sum over `ntimes_sum` samples - int ntimes_sum = context.ntimes / context.ntimeblocks; dim3 sumBlockGrid(context.nchans, context.nbeams/2); dim3 sumThreadGrid(context.ntimes / ntimes_sum); - trans_output_and_sum<<>>( + trans_output_and_sum<<>>( in_d, out_d, context.nchans, @@ -271,5 +307,20 @@ void cublas_beamform_integrate(float *in_d, float *out_d) { context.ntimes, ntimes_sum ); - cudaStreamSynchronize(context.stream); +} + +void cublas_beamform_integrate_single_beam(float *in_d, float *out_d, int ntimes_sum, int beam_index) { + // Create XX, YY, XY beam powers. + // Sum over `ntimes_sum` samples + dim3 sumBlockGrid(context.nchans); + dim3 sumThreadGrid(context.ntimes / ntimes_sum); + trans_output_and_sum_single_beam<<>>( + in_d, + out_d, + context.nchans, + context.nbeams/2, + context.ntimes, + ntimes_sum, + beam_index + ); } diff --git a/src/cublas_beamform.cuh b/src/cublas_beamform.cuh index 6a0d2b22a..1e9df948f 100644 --- a/src/cublas_beamform.cuh +++ b/src/cublas_beamform.cuh @@ -30,7 +30,8 @@ __global__ void complex2pow(float *in, float *out, int N); void cublas_beamform_destroy(); void cublas_beamform(unsigned char *in4_d, float *sum_out_d, float *weights_d); -void cublas_beamform_integrate(float *in_d, float *sum_out_d); +void cublas_beamform_integrate(float *in_d, float *sum_out_d, int ntimes_sum); +void cublas_beamform_integrate_single_beam(float *in_d, float *sum_out_d, int ntimes_sum, int beam_index); void cublas_beamform_init(int device, int ninputs, int nchans, int ntimes, int nbeams, int ntimeblocks); #endif From 246af1c0c9a44701678e9227eda881e6f0769111 Mon Sep 17 00:00:00 2001 From: JackH Date: Wed, 28 Oct 2020 12:09:18 +0000 Subject: [PATCH 0058/1155] Add LWA352 voltage packet output --- src/formats/formats.hpp | 1 + src/formats/lwa352_vbeam.hpp | 57 ++++++++++++++++++++++++++++++++++++ src/packet_writer.hpp | 19 ++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 src/formats/lwa352_vbeam.hpp diff --git a/src/formats/formats.hpp b/src/formats/formats.hpp index 6e2f4c527..79dd5fd4e 100644 --- a/src/formats/formats.hpp +++ b/src/formats/formats.hpp @@ -36,3 +36,4 @@ #include "tbf.hpp" #include "ibeam.hpp" #include "snap2.hpp" +#include "lwa352_vbeam.hpp" diff --git a/src/formats/lwa352_vbeam.hpp b/src/formats/lwa352_vbeam.hpp new file mode 100644 index 000000000..8cccef753 --- /dev/null +++ b/src/formats/lwa352_vbeam.hpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include "base.hpp" + +#pragma pack(1) +struct lwa352_vbeam_hdr_type { + uint64_t sync_word; + uint64_t sync_time; + uint64_t time_tag; + double bw_hz; + double sfreq; + uint32_t nchan; + uint32_t chan0; + uint32_t npol; +}; + +class LWA352VBeamHeaderFiller : virtual public PacketHeaderFiller { +public: + inline int get_size() { return sizeof(lwa352_vbeam_hdr_type); } + inline void operator()(const PacketDesc* hdr_base, + BFoffset framecount, + char* hdr) { + lwa352_vbeam_hdr_type* header = reinterpret_cast(hdr); + memset(header, 0, sizeof(lwa352_vbeam_hdr_type)); + + header->sync_word = 0xAABBCCDD00000000L; + header->time_tag = htobe64(hdr_base->seq); + } +}; diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index dbdc70e84..527505680 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -320,6 +320,18 @@ class BFpacketwriter_tbf_impl : public BFpacketwriter_impl { } }; +class BFpacketwriter_lwa352_vbeam_impl : public BFpacketwriter_impl { + ProcLog _type_log; +public: + inline BFpacketwriter_lwa352_vbeam_impl(PacketWriterThread* writer, + int nsamples) + : BFpacketwriter_impl(writer, nullptr, nsamples, BF_DTYPE_CF32), + _type_log((std::string(writer->get_name())+"/type").c_str()) { + _filler = new LWA352VBeamHeaderFiller(); + _type_log.update("type : %s\n", "tbf"); + } +}; + BFstatus BFpacketwriter_create(BFpacketwriter* obj, const char* format, int fd, @@ -351,6 +363,10 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, nsamples = 4096; } else if( format == std::string("tbf") ) { nsamples = 6144; + } else if( std::string(format).substr(0, 13) == std::string("lwa352_vbeam_") ) { + // e.g. "lwa352_vbeam_184" is a 184-channel voltage beam" + int nchan = std::atoi((std::string(format).substr(13, std::string(format).length())).c_str()); + nsamples = 2*nchan; // 2 polarizations. Natively 32-bit floating complex (see implementation class) } PacketWriterMethod* method; @@ -390,6 +406,9 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, } else if( format == std::string("tbf") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_tbf_impl(writer, nsamples), *obj = 0); + } else if( std::string(format).substr(0, 13) == std::string("lwa352_vbeam_") ) { + BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_lwa352_vbeam_impl(writer, nsamples), + *obj = 0); } else { return BF_STATUS_UNSUPPORTED; } From 9c693fd2d60f0f119bd0249602ead5c0bbaa20f3 Mon Sep 17 00:00:00 2001 From: JackH Date: Tue, 17 Nov 2020 18:55:00 +0000 Subject: [PATCH 0059/1155] Syntax error in BfBeamformIntegrate declaration --- src/bifrost/beamform.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bifrost/beamform.h b/src/bifrost/beamform.h index 890b727da..296336008 100644 --- a/src/bifrost/beamform.h +++ b/src/bifrost/beamform.h @@ -53,7 +53,7 @@ BFstatus bfBeamformRun( BFstatus bfBeamformIntegrate( BFarray *in, BFarray *out, - int ntimes_sum, + int ntimes_sum ); /* From d10f38aac7a65f3260c102868e060c69e36f3151 Mon Sep 17 00:00:00 2001 From: JackH Date: Tue, 15 Dec 2020 20:20:50 +0000 Subject: [PATCH 0060/1155] Header docstring --- src/bifrost/beamform.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bifrost/beamform.h b/src/bifrost/beamform.h index 296336008..7a5e4d297 100644 --- a/src/bifrost/beamform.h +++ b/src/bifrost/beamform.h @@ -6,7 +6,8 @@ * ninputs: Number of inputs (single-polarization) to the beamformer * nchans: Number of frequency channels * ntimes: Number of time samples per beamforming call - * nbeams: Number of beams to generate. If using ntime_blocks > 0, beams=N will deliver + * nbeams: Number of beams to generate. If using ntime_blocks > 0, beams=N will deliver N/2 beams. + * (See bfBeamformRun) * ntime_blocks: Number of time blocks to output. Eg. if ntimes=1000 and ntime_blocks=10, the beamformer will integrate over 100 samples per call. Set to 0 for no accumulation, in which case raw beam voltages are output. From fb7db55a119ba4e5e446977ff10b848412b04c69 Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 11 Feb 2021 13:11:54 +0000 Subject: [PATCH 0061/1155] Fix mismerge Put UDPVerbsCapture back in after mismerging it out --- python/bifrost/packet_capture.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index b25e8b1e4..7a4ad2594 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -107,6 +107,17 @@ def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, sequence_callback.obj, core) class UDPSniffer(_CaptureBase): + def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, + buffer_ntime, slot_ntime, sequence_callback, core=None): + if core is None: + core = -1 + BifrostObject.__init__( + self, _bf.bfUdpSnifferCreate, _bf.bfPacketCaptureDestroy, + fmt, sock.fileno(), ring.obj, nsrc, src0, + max_payload_size, buffer_ntime, slot_ntime, + sequence_callback.obj, core) + +class UDPVerbsCapture(_CaptureBase): def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, buffer_ntime, slot_ntime, sequence_callback, core=None): try: From 73417bebf4a14f414620503464c1e7253ca19247 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 20 Apr 2021 08:30:39 -0600 Subject: [PATCH 0062/1155] Enabled IBeam1. --- src/packet_capture.hpp | 1 + src/packet_writer.hpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index c144eebb2..9581008fd 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -1182,6 +1182,7 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, buffer_ntime, slot_ntime, \ sequence_callback), \ *obj = 0); + MATCH_IBEAM_MODE(1) MATCH_IBEAM_MODE(2) MATCH_IBEAM_MODE(3) MATCH_IBEAM_MODE(4) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 88d878c87..a25551eed 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -385,6 +385,7 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, } else if( std::string(format).substr(0, 7) == std::string("ibeam"#NBEAM"_") ) { \ BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_ibeam_impl(writer, nsamples), \ *obj = 0); + MATCH_IBEAM_MODE(1) MATCH_IBEAM_MODE(2) MATCH_IBEAM_MODE(3) MATCH_IBEAM_MODE(4) From 861bf6fc084ab1853cb94d90582dd133b7ab2835 Mon Sep 17 00:00:00 2001 From: LEDA Collaboration Date: Thu, 22 Apr 2021 08:22:47 -0600 Subject: [PATCH 0063/1155] Initial commit --- tutorial/.gitignore | 129 ++++++++++++++++++++++++++++++++++++++++++++ tutorial/LICENSE | 29 ++++++++++ 2 files changed, 158 insertions(+) create mode 100644 tutorial/.gitignore create mode 100644 tutorial/LICENSE diff --git a/tutorial/.gitignore b/tutorial/.gitignore new file mode 100644 index 000000000..b6e47617d --- /dev/null +++ b/tutorial/.gitignore @@ -0,0 +1,129 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/tutorial/LICENSE b/tutorial/LICENSE new file mode 100644 index 000000000..19db1efad --- /dev/null +++ b/tutorial/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2021, LEDA Collaboration +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From c551b7a0122764418046d5895c82638de9cccd64 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 22 Apr 2021 08:37:26 -0600 Subject: [PATCH 0064/1155] Started a README.md file. --- tutorial/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tutorial/README.md diff --git a/tutorial/README.md b/tutorial/README.md new file mode 100644 index 000000000..71a94d588 --- /dev/null +++ b/tutorial/README.md @@ -0,0 +1,3 @@ +# The Bifrost Tutorial + +A collection of examples that show how to use various features in the [Bifrost](https://github.com/ledatelescope/bifrost/) framework. From e980e73f2763389fe50e1071bb08ca1c39d71e98 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 22 Apr 2021 17:12:20 -0600 Subject: [PATCH 0065/1155] Getting started. --- tutorial/00_getting_started.ipynb | 389 ++++++++++++++++++++++++++++++ 1 file changed, 389 insertions(+) create mode 100644 tutorial/00_getting_started.ipynb diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb new file mode 100644 index 000000000..e48e82ae5 --- /dev/null +++ b/tutorial/00_getting_started.ipynb @@ -0,0 +1,389 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1dfd7ec3", + "metadata": {}, + "source": [ + "# Getting started with Bifrost\n", + "\n", + "Once Bifrost is installed you can load the Python API with:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a0e32e81", + "metadata": {}, + "outputs": [], + "source": [ + "import bifrost" + ] + }, + { + "cell_type": "markdown", + "id": "538d312c", + "metadata": {}, + "source": [ + "This loads the core parts of Bifrost and several useful functions. The main way of interacting with Bifrost is through the `bifrost.ndarray`, a sub-class of `numpy.ndarray`. You can create an empty array with:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ed1edd3d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " float32 (2, 4096) system\n", + "[[ nan nan nan ... 4.56767247e-41\n", + " 9.00612546e-17 4.56767247e-41]\n", + " [1.65722335e-14 7.21541771e-10 1.00170646e-16 ... 0.00000000e+00\n", + " 0.00000000e+00 0.00000000e+00]]\n" + ] + } + ], + "source": [ + "data = bifrost.ndarray(shape=(2,4096), dtype='f32', space='system')\n", + "print(type(data), data.dtype, data.shape, data.bf.space)\n", + "print(data)" + ] + }, + { + "cell_type": "markdown", + "id": "e22f8ee8", + "metadata": {}, + "source": [ + "You can also use the `bifrost.ndarray` to wrap existing numpy arrays:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "555be72f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " float64 (2, 4096) system\n", + "r: [[ 1.80276352 -0.76465251 -0.2550243 ... 0.96217946 -0.16653778\n", + " 0.22051055]\n", + " [-0.99592518 -0.28503199 1.06522625 ... -0.59604263 1.1375648\n", + " 1.4208186 ]]\n", + "data: [[ 1.80276352 -0.76465251 -0.2550243 ... 0.96217946 -0.16653778\n", + " 0.22051055]\n", + " [-0.99592518 -0.28503199 1.06522625 ... -0.59604263 1.1375648\n", + " 1.4208186 ]]\n" + ] + } + ], + "source": [ + "import numpy\n", + "r = numpy.random.randn(2, 4096)\n", + "data = bifrost.ndarray(r)\n", + "print(type(data), data.dtype, data.shape, data.bf.space)\n", + "print('r:', r)\n", + "print('data:', data)" + ] + }, + { + "cell_type": "markdown", + "id": "33de4f44", + "metadata": {}, + "source": [ + "Since `bifrost.ndarray`s are derived from numpy arrays they can do many (but not all) of the same things:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5d38a8d8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "data += 2.0: [[3.80276352 1.23534749 1.7449757 ... 2.96217946 1.83346222 2.22051055]\n", + " [1.00407482 1.71496801 3.06522625 ... 1.40395737 3.1375648 3.4208186 ]]\n", + "data[0,:] = 55: [[55. 55. 55. ... 55. 55.\n", + " 55. ]\n", + " [ 1.00407482 1.71496801 3.06522625 ... 1.40395737 3.1375648\n", + " 3.4208186 ]]\n" + ] + } + ], + "source": [ + "data += 2.0\n", + "print('data += 2.0:', data)\n", + "data[0,:] = 55\n", + "print('data[0,:] = 55:', data)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0060cff5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "data[:,[1,3,5,7]] = 10: [[55. 55. 55. ... 55. 55.\n", + " 55. ]\n", + " [ 1.00407482 1.71496801 3.06522625 ... 1.40395737 3.1375648\n", + " 3.4208186 ]]\n" + ] + } + ], + "source": [ + "data[:,[1,3,5,7]] = 10\n", + "print('data[:,[1,3,5,7]] = 10:', data)" + ] + }, + { + "cell_type": "markdown", + "id": "5496e82f", + "metadata": {}, + "source": [ + "Unlike numpy arrays `bifrost.ndarray` are \"space aware\", meaning that they can exist in different memory spaces. What we have created so far is in system memory. `bifrost.ndarray`s can also exist in \"cuda_host\" (pinned) memory and \"cuda\" (GPU) memory:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c339a17f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " float32 (2, 4096) cuda_host\n", + " float32 (2, 4096) cuda\n" + ] + } + ], + "source": [ + "data2 = bifrost.ndarray(shape=(2,4096), dtype='f32', space='cuda_host')\n", + "data3 = bifrost.ndarray(shape=(2,4096), dtype='f32', space='cuda')\n", + "print(type(data2), data2.dtype, data2.shape, data2.bf.space)\n", + "print(type(data3), data3.dtype, data3.shape, data3.bf.space)" + ] + }, + { + "cell_type": "markdown", + "id": "c4ea2e82", + "metadata": {}, + "source": [ + "To move between the different spaces the `bifrost.ndarray` class provides a `copy` method:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "bae4c040", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " float64 (2, 4096) cuda\n" + ] + } + ], + "source": [ + "data4 = data.copy(space='cuda')\n", + "print(type(data4), data4.dtype, data4.shape, data4.bf.space)" + ] + }, + { + "cell_type": "markdown", + "id": "4412be1f", + "metadata": {}, + "source": [ + "Once on the GPU you can take advantage of Bifrost's GPU-based functions, like `bifrost.map`:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "79307b19", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "data4/data = data*10/data = 10: [[10. 10. 10. ... 10. 10. 10.]\n", + " [10. 10. 10. ... 10. 10. 10.]]\n" + ] + } + ], + "source": [ + "bifrost.map(\"a(i,j) *= 10\",\n", + " {'a': data4},\n", + " axis_names=('i', 'j'),\n", + " shape=data4.shape)\n", + "data4 = data4.copy(space='system')\n", + "print('data4/data = data*10/data = 10:', data4/data)" + ] + }, + { + "cell_type": "markdown", + "id": "10ab2a0e", + "metadata": {}, + "source": [ + "The `bifrost.map` call here compiles and runs a CUDA kernel that does an element-wise multiplication by ten. In order to view the results of this kernel call we need to copy the memory back to the \"system\" memory space. In the future we hope to support a \"cuda_managed\" space to make this easier." + ] + }, + { + "cell_type": "markdown", + "id": "17611ed2", + "metadata": {}, + "source": [ + "`bifrost.map` is an example of a function that does not require any additional setup to run. For some Bifrost functions, like `bifrost.fft.Fft`, some setup is required so that the function knows how to run:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "6d6a9b6e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data = bifrost.ndarray(shape=(16, 4096), dtype='cf32', space='cuda')\n", + "bifrost.map(\"a(i,j) = exp(Complex(0.0, 2*3.14*i*j/4096))\",\n", + " {'a': data},\n", + " axis_names=('i', 'j'),\n", + " shape=data.shape)\n", + "data2 = data.copy(space='system')\n", + "\n", + "import pylab\n", + "pylab.plot(data2[0,:].real, label='Re0')\n", + "#pylab.plot(data2[0,:].imag, label='Im0')\n", + "pylab.plot(data2[2,:].real, label='Re2')\n", + "#pylab.plot(data2[2,:].imag, label='Im2')\n", + "pylab.plot(data2[5,:].real, label='Re5')\n", + "#pylab.plot(data2[5,:].imag, label='Im5')\n", + "pylab.xlabel('Time')\n", + "pylab.ylabel('Value')\n", + "pylab.legend(loc=0)" + ] + }, + { + "cell_type": "markdown", + "id": "2ae1aac4", + "metadata": {}, + "source": [ + "Now run the FFT and plot the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "1e2e01dd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fdata = bifrost.ndarray(shape=data.shape, dtype='cf32', space='cuda')\n", + "f = bifrost.fft.Fft()\n", + "f.init(data, fdata, axes=1, apply_fftshift=True)\n", + "f.execute(data, fdata)\n", + "fdata2 = fdata.copy(space='system')\n", + "ffreqs = numpy.fft.fftfreq(fdata2.shape[1], d=1/4096.)\n", + "ffreqs = numpy.fft.fftshift(ffreqs)\n", + "\n", + "pylab.semilogy(ffreqs, numpy.abs(fdata2[0,:])**2, label='0')\n", + "pylab.semilogy(ffreqs, numpy.abs(fdata2[2,:])**2, label='2')\n", + "pylab.semilogy(ffreqs, numpy.abs(fdata2[5,:])**2, label='5')\n", + "pylab.xlabel('Frequency')\n", + "pylab.ylabel('Power')\n", + "pylab.xlim(-10, 10)\n", + "pylab.legend(loc=0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3260ac9e", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From b0e12d7c6ca6f1e6c393c5425d524ab9cb37eb41 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 22 Apr 2021 19:36:10 -0600 Subject: [PATCH 0066/1155] Functions. --- tutorial/01_useful_functions.ipynb | 440 +++++++++++++++++++++++++++++ 1 file changed, 440 insertions(+) create mode 100644 tutorial/01_useful_functions.ipynb diff --git a/tutorial/01_useful_functions.ipynb b/tutorial/01_useful_functions.ipynb new file mode 100644 index 000000000..2906e56da --- /dev/null +++ b/tutorial/01_useful_functions.ipynb @@ -0,0 +1,440 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5ecd430b", + "metadata": {}, + "source": [ + "# Useful Functions in Bifrost\n", + "\n", + "With the basics of how to get data onto and off of the GPU, we can now start to look at useful functions in Bifrost. Bifrost provides many functions that run on GPUs and interact via `bifrost.ndarray`s:\n", + "\n", + " * bifrost.fdmt - the fast dispersion measure transform\n", + " * bifrost.fft - multi-dimensional Fourier transforms\n", + " * bifrost.fir - finite impulse response (FIR) filters\n", + " * bifrost.linalg.LinAlg - linear algebra module for matrix-matrix operations\n", + " * bifrost.map - JIT functions for element-wise operations\n", + " * bifrost.quantize - quantizers for moving between floating and integer types\n", + " * bifrost.reduce - reduction (sum, min, max, etc.) array operations\n", + " * bifrost.transpose.transpose - data transpositions\n", + " * bifrost.unpack - unpackers for moving between integer and floating types\n", + "\n", + "We have already seen maps and FFTs in action so let's look at some of the other functions here." + ] + }, + { + "cell_type": "markdown", + "id": "bd3473d6", + "metadata": {}, + "source": [ + "## bifrost.reduce\n", + "\n", + "`bifrost.reduce` is a complement to `bifrost.map` that deals with operations that reduce the size of an array, like a summation along an axis." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "ccc10558", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "numpy: [ -5.5700846 36.078346 63.174416 -13.507341 15.61409 26.860054\n", + " -48.392242 -37.947693 32.48661 0.6984892]\n", + "bifrost: [ -5.5700974 36.078346 63.174435 -13.507346 15.614068 26.860054\n", + " -48.39224 -37.94771 32.486645 0.6984974]\n" + ] + } + ], + "source": [ + "import bifrost, numpy\n", + "data = numpy.random.randn(10, 1000)\n", + "data = data.astype(numpy.float32)\n", + "sdata = data.sum(axis=1)\n", + "print('numpy:', sdata)\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "sdata = bifrost.ndarray(shape=(data.shape[0], 1), dtype=sdata.dtype,\n", + " space='cuda')\n", + "bifrost.reduce(data, sdata, op='sum')\n", + "sdata2 = sdata.copy(space='system')\n", + "print('bifrost:', sdata2[:,0])" + ] + }, + { + "cell_type": "markdown", + "id": "afb6b49d", + "metadata": {}, + "source": [ + "During a reduction Bifrost uses the difference in the dimensions of the input and output arrays to determine what axis to run the reduction on. Here we have summed along the second axis by setting that dimension to one for sdata.\n", + "\n", + "In addition to sum, there are also reduction operations that work on power, i.e., magnitude squared:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "17a76f06", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "numpy: [ 966.90137 1045.7456 932.72754 961.6767 956.31177 1002.28186\n", + " 1080.3342 964.5902 964.6155 971.55927]\n", + "bifrost: [ 966.9012 1045.7462 932.7264 961.676 956.3119 1002.2823\n", + " 1080.334 964.58997 964.61554 971.5588 ]\n" + ] + } + ], + "source": [ + "data = numpy.random.randn(10, 1000)\n", + "data = data.astype(numpy.float32)\n", + "sdata = (data**2).sum(axis=1)\n", + "print('numpy:', sdata)\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "sdata = bifrost.ndarray(shape=(data.shape[0], 1), dtype=sdata.dtype,\n", + " space='cuda')\n", + "bifrost.reduce(data, sdata, op='pwrsum')\n", + "sdata2 = sdata.copy(space='system')\n", + "print('bifrost:', sdata2[:,0])" + ] + }, + { + "cell_type": "markdown", + "id": "df8b8726", + "metadata": {}, + "source": [ + "`bifrost.reduce` currently only support explicit reduction along one axies at a time. However, it may be possible to run multi-dimensional reductions be reshaping the data:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "50c5887d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "numpy: 10009.424\n", + "bifrost: 10009.425\n" + ] + } + ], + "source": [ + "data = numpy.random.randn(10, 1000)\n", + "data = data.astype(numpy.float32)\n", + "sdata = (data**2).sum()\n", + "print('numpy:', sdata)\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "data = data.reshape(data.shape[0]*data.shape[1])\n", + "sdata = bifrost.ndarray(shape=(1,), dtype=sdata.dtype, space='cuda')\n", + "bifrost.reduce(data, sdata, op='pwrsum')\n", + "sdata2 = sdata.copy(space='system')\n", + "print('bifrost:', sdata2[0])" + ] + }, + { + "cell_type": "markdown", + "id": "85537a6d", + "metadata": {}, + "source": [ + "## bifrost.transpose.transpose\n", + "\n", + "For some data processing it may be more convenient to have the axis in a different order. To transpose a GPU array in Bifrost there is the `bifrost.transpose` function:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1c7cf1a4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "numpy: 0.97977257 -> 0.97977257\n", + "bifrost: 0.97977257 -> 0.97977257\n" + ] + } + ], + "source": [ + "data = numpy.random.randn(10, 1000)\n", + "data = data.astype(numpy.float32)\n", + "tdata = data.T.copy()\n", + "print('numpy:', data[0,9], '->', tdata[9,0])\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "tdata = bifrost.ndarray(shape=data.shape[::-1], dtype=data.dtype,\n", + " space='cuda')\n", + "bifrost.transpose.transpose(tdata, data, axes=(1,0))\n", + "data2 = data.copy(space='system')\n", + "tdata2 = tdata.copy(space='system')\n", + "print('bifrost:', data2[0,9], '->', tdata2[9,0])" + ] + }, + { + "cell_type": "markdown", + "id": "bf2d856f", + "metadata": {}, + "source": [ + "Unlike `bifrost.reduce`, `bifrost.transpose.transpose` requires you to have both an output array with the correct shape and to explicitly specify the axis ordering in the call.\n", + "\n", + "This function also support for general data re-ordering operations as well:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "40228867", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "numpy: 0.9396533 -> 0.9396533\n", + "bifrost: 0.9396533 -> 0.9396533\n" + ] + } + ], + "source": [ + "data = numpy.random.randn(10, 20, 30, 40)\n", + "data = data.astype(numpy.float32)\n", + "tdata = data.transpose(1,3,2,0).copy()\n", + "print('numpy:', data[1,3,5,7], '->', tdata[3,7,5,1])\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "tdata = bifrost.ndarray(shape=[data.shape[v] for v in (1,3,2,0)],\n", + " dtype=data.dtype, space='cuda')\n", + "bifrost.transpose.transpose(tdata, data, axes=(1,3,2,0))\n", + "data2 = data.copy(space='system')\n", + "tdata2 = tdata.copy(space='system')\n", + "print('bifrost:', data2[1,3,5,7], '->', tdata2[3,7,5,1])" + ] + }, + { + "cell_type": "markdown", + "id": "6e291072", + "metadata": {}, + "source": [ + "## bifrost.fdmt\n", + "\n", + "Bifrost includes a module for computing the fast dispersion measure transform of Zackay and Ofek (2017, ApJ 835 11) for incoherent dedispersion. Like the `bifrost.fft` module using the FDMT requires some setup. To get started let's make a simulation dispersed pulse at a DM of 5.5 pc cm^3:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "acb5f590", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Frequency [MHz]')" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "DM = 1.25\n", + "time = numpy.linspace(0, 2, 1000)\n", + "freq = numpy.linspace(50e6, 70e6, 200)\n", + "data = numpy.random.randn(freq.size, time.size)\n", + "data[:,100] += 10.0\n", + "data[:,101] += 8.0\n", + "data[:,102] += 4.0\n", + "data[:,103] += 1.0\n", + "for i in range(freq.size):\n", + " delay = 4.15e-3 * DM * ((freq[i]/1e9)**-2 - (freq[-1]/1e9)**-2)\n", + " delay = int(round(delay / (time[1] - time[0])))\n", + " data[i,:] = numpy.roll(data[i,:], delay)\n", + "data = data.astype(numpy.float32)\n", + "\n", + "import pylab\n", + "pylab.imshow(data, extent=(time[0], time[-1], freq[-1]/1e6, freq[0]/1e6))\n", + "pylab.axis('auto')\n", + "pylab.xlabel('Time [s]')\n", + "pylab.ylabel('Frequency [MHz]')" + ] + }, + { + "cell_type": "markdown", + "id": "a65b79b7", + "metadata": {}, + "source": [ + "Now setup and run the FDMT on the data:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "7c33477b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'DM [pc cm$^{-3}$]')" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data = bifrost.ndarray(data, space='cuda')\n", + "ddata = bifrost.ndarray(shape=(time.size, time.size),\n", + " dtype=data.dtype, space='cuda')\n", + "f = bifrost.fdmt.Fdmt()\n", + "f.init(freq.size, time.size, freq[0]/1e6, (freq[1]-freq[0])/1e6)\n", + "f.execute(data, ddata)\n", + "ddata2 = ddata.copy(space='system')\n", + "\n", + "tint = time[1] - time[0]\n", + "dm = numpy.arange(time.size)*1.0\n", + "dm *= tint / 4.15e-3 / ((freq[0]/1e9)**-2 - (freq[-1]/1e9)**-2)\n", + "\n", + "pylab.imshow(ddata2, extent=(time[0], time[-1], dm[-1], dm[0]))\n", + "pylab.axis('auto')\n", + "pylab.xlabel('Time [s]')\n", + "pylab.ylabel('DM [pc cm$^{-3}$]')" + ] + }, + { + "cell_type": "markdown", + "id": "a307015b", + "metadata": {}, + "source": [ + "## bifrost.linalg.LinAlg\n", + "\n", + "The final useful function in Bifrost that we will explore is `bifrost.linalg.LinAlg`. This function implements a varity of matrix-matrix operations. It supports:\n", + "\n", + " * C = $\\alpha$A $\\times$ B + $\\beta$ C\n", + " * C = $\\alpha$A $\\times$ A$^{H}$ + $\\beta$ C $-$ if B is not provided\n", + " * C = $\\alpha$B$^{H}$ $\\times$ B + $\\beta$ C $-$ if A is not provided\n", + "\n", + "where $\\alpha$ and $\\beta$ are scalar values, $\\times$ is a matrix product, and $^{H}$ denotes a Hermetian transpose. For matricies with more than two dimensions the semantics are the same as for `numpy.matmul`: The last two dims represent the matrix, and all other dimensions are used as batch dimensions to be matched or broadcast between A and B.\n", + "\n", + "These three operations make this function useful for implementing simple beamformers or cross-correlation operations. For a beamformer:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "95844ac9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "numpy.matmul: 0.6552756\n", + "numpy manual: 0.6552757\n", + "bifrost: 0.65527564\n" + ] + } + ], + "source": [ + "data = numpy.random.randn(1000, 32, 48) # time, channel, input\n", + "data = data.astype(numpy.float32) # beam, channel input\n", + "coeffs = numpy.ones((1, 32, 48))\n", + "for i in range(coeffs.shape[1]):\n", + " coeffs[:,i] = i/32.0\n", + "coeffs = coeffs.astype(numpy.float32)\n", + "beam = numpy.matmul(coeffs.transpose(1,0,2), data.transpose(1,2,0))\n", + "beam = beam.transpose(2,0,1) # time, channel, beam\n", + "print('numpy.matmul:', beam[0,10,0])\n", + "print('numpy manual:', (data[0,10,:]*coeffs[0,10,:]).sum())\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "coeffs = bifrost.ndarray(coeffs, space='cuda')\n", + "beam = bifrost.ndarray(shape=(32,1,1000), dtype=numpy.float32,\n", + " space='cuda')\n", + "l = bifrost.linalg.LinAlg()\n", + "beam = l.matmul(1.0, coeffs.transpose(1,0,2), data.transpose(1,2,0),\n", + " 0.0, beam)\n", + "beam2 = beam.copy(space='system')\n", + "beam2 = beam2.transpose(2, 0, 1)\n", + "print('bifrost:', beam2[0,10,0])" + ] + }, + { + "cell_type": "markdown", + "id": "a59c251e", + "metadata": {}, + "source": [ + "This example illustrates one of the complexities when dealing with real data. The axis order that makes the most sense for some operations may not be the best match for other operations. Luckily `bifrost.linalg.LinAlg` supports at least some on-the-fly transpose operations and an explict transpose may not be necessary." + ] + }, + { + "cell_type": "markdown", + "id": "48298668", + "metadata": {}, + "source": [ + "## Remaining Functions\n", + "\n", + "The remaining functions of `bifrost.fir`, `bifrost.quantize`, and `bifrost.unpack` will not be addressed here. However, `bifrost.quantize` and `bifrost.unpack` will be used later in the tutorial." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 816381e59df25df945931baa6c3f023d89c15bfc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 22 Apr 2021 20:11:35 -0600 Subject: [PATCH 0067/1155] Added more information. --- tutorial/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tutorial/README.md b/tutorial/README.md index 71a94d588..8b896c535 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -1,3 +1,7 @@ # The Bifrost Tutorial -A collection of examples that show how to use various features in the [Bifrost](https://github.com/ledatelescope/bifrost/) framework. +A collection of examples that show how to use various features in the [Bifrost framework](https://github.com/ledatelescope/bifrost/). Before beginning this tutorial it would be a good idea to famaliarize yourself with the framework and its concepts: + + * Bifrost is described in [Cranmer et al.](https://arxiv.org/abs/1708.00720) + * Documentation for the Python APIs can be found [here](http://ledatelescope.github.io/bifrost/) + * There is an [overview talk of Bifrost](https://www.youtube.com/watch?v=DXH89rOVVzg) from the CASPER 2019 workshop. From 5ed8abf4f6aec0da2b4c05167f70d18ac2b63c42 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 22 Apr 2021 20:21:33 -0600 Subject: [PATCH 0068/1155] Added Romein. --- tutorial/01_useful_functions.ipynb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tutorial/01_useful_functions.ipynb b/tutorial/01_useful_functions.ipynb index 2906e56da..d448bd826 100644 --- a/tutorial/01_useful_functions.ipynb +++ b/tutorial/01_useful_functions.ipynb @@ -12,11 +12,12 @@ " * bifrost.fdmt - the fast dispersion measure transform\n", " * bifrost.fft - multi-dimensional Fourier transforms\n", " * bifrost.fir - finite impulse response (FIR) filters\n", - " * bifrost.linalg.LinAlg - linear algebra module for matrix-matrix operations\n", + " * bifrost.linalg- linear algebra module for matrix-matrix operations\n", " * bifrost.map - JIT functions for element-wise operations\n", " * bifrost.quantize - quantizers for moving between floating and integer types\n", " * bifrost.reduce - reduction (sum, min, max, etc.) array operations\n", - " * bifrost.transpose.transpose - data transpositions\n", + " * bifrost.romein - data gridder\n", + " * bifrost.transpose - data transpositions\n", " * bifrost.unpack - unpackers for moving between integer and floating types\n", "\n", "We have already seen maps and FFTs in action so let's look at some of the other functions here." @@ -412,7 +413,7 @@ "source": [ "## Remaining Functions\n", "\n", - "The remaining functions of `bifrost.fir`, `bifrost.quantize`, and `bifrost.unpack` will not be addressed here. However, `bifrost.quantize` and `bifrost.unpack` will be used later in the tutorial." + "The remaining functions of `bifrost.fir`, `bifrost.romein', `bifrost.quantize`, and `bifrost.unpack` will not be addressed here. However, `bifrost.quantize` and `bifrost.unpack` will be used later in the tutorial." ] } ], From 77522dfc242fdebb6d11e703462b43a0a514fd10 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 23 Apr 2021 11:26:15 -0600 Subject: [PATCH 0069/1155] Blocks. --- tutorial/02_building_complexity.ipynb | 397 ++++++++++++++++++++++++++ 1 file changed, 397 insertions(+) create mode 100644 tutorial/02_building_complexity.ipynb diff --git a/tutorial/02_building_complexity.ipynb b/tutorial/02_building_complexity.ipynb new file mode 100644 index 000000000..121a35cba --- /dev/null +++ b/tutorial/02_building_complexity.ipynb @@ -0,0 +1,397 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8ccf096e", + "metadata": {}, + "source": [ + "# Building Complexity\n", + "\n", + "The previous notebooks have shown how to work with data in Bifrost and highlighted several of its features. We are now going to use that to build a more complete example of how data reducation can be done with Bifrost.\n", + "\n", + "Let's start by taking taking in a collection of time domain complex voltage data for 16 inputs, transforming it to the frequency domain, and creating integrated spectra. First, we need a time domain signal:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f785410a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import bifrost, numpy\n", + "\n", + "ninput = 16\n", + "nchan = 256\n", + "ntime = nchan*32\n", + "\n", + "def make_data(ntime, ninput):\n", + " time = numpy.arange(ntime) / 19.6e6\n", + " data = numpy.random.randn(ntime, ninput)\n", + " data = data + 1j*numpy.random.randn(ntime, ninput)\n", + "\n", + " for freq,amp in ((-5e6,2), (3e6,3), (8e6,1)):\n", + " for i in range(ninput):\n", + " data[:,i] += amp*(1+i/ninput)*numpy.exp(2j*numpy.pi*freq*time)\n", + " data = data.astype(numpy.complex64)\n", + " return time, data\n", + "\n", + "t, data = make_data(ntime, ninput)\n", + "\n", + "import pylab\n", + "fdata = numpy.fft.fft(data[:nchan], axis=0)\n", + "freq = numpy.fft.fftfreq(fdata.shape[0], d=1/19.6e6)\n", + "pylab.semilogy(freq/1e6, numpy.abs(fdata[:,ninput-1])**2,\n", + " label=str(ninput-1))\n", + "pylab.semilogy(freq/1e6, numpy.abs(fdata[:,0])**2,\n", + " label='0')\n", + "pylab.xlabel('Frequency [MHz]')\n", + "pylab.ylabel('Power')\n", + "pylab.legend(loc=0)" + ] + }, + { + "cell_type": "markdown", + "id": "3867d3f8", + "metadata": {}, + "source": [ + "That seems to be working with a quick check of the data using `numpy.fft.fft` and we can even see the different tone amplitudes across the inputs.\n", + "\n", + "Now to translate this into Bifrost and do the integration in time:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a6b958da", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data = bifrost.ndarray(data, space='cuda')\n", + "data = data.reshape(-1,nchan,ninput)\n", + "fdata = bifrost.ndarray(shape=data.shape, dtype=data.dtype, space='cuda')\n", + "\n", + "fft = bifrost.fft.Fft()\n", + "fft.init(data, fdata, axes=1, apply_fftshift=True)\n", + "fft.execute(data, fdata)\n", + "\n", + "spectra = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", + " space='cuda')\n", + "bifrost.reduce(fdata, spectra, 'pwrmean')\n", + "\n", + "spectra = spectra.copy(space='system')\n", + "spectra = spectra[0,:,:]\n", + "bf_freq = numpy.fft.fftshift(freq)\n", + "pylab.semilogy(bf_freq/1e6, spectra[:,ninput-1],\n", + " label=str(ninput-1))\n", + "pylab.semilogy(bf_freq/1e6, spectra[:,0],\n", + " label='0')\n", + "pylab.xlabel('Frequency [MHz]')\n", + "pylab.ylabel('Power')\n", + "pylab.legend(loc=0)" + ] + }, + { + "cell_type": "markdown", + "id": "f9a5fe2f", + "metadata": {}, + "source": [ + "This works for a single batch of data, what we call a \"gulp\" in Bifrost. \n", + "How do we extend this for working on a continuous stream of data? We can first start by wrapping everything in a `for` loop as a stand in for continuous data:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "366ab2a4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "for gulp in range(5):\n", + " t, data_noise = make_data(ntime, ninput)\n", + " \n", + " data_gpu = bifrost.ndarray(data_noise, space='cuda')\n", + " data_gpu = data_gpu.reshape(-1,nchan,ninput)\n", + " fdata = bifrost.ndarray(shape=data_gpu.shape, dtype=data_gpu.dtype,\n", + " space='cuda')\n", + " \n", + " fft = bifrost.fft.Fft()\n", + " fft.init(data_gpu, fdata, axes=1, apply_fftshift=True)\n", + " fft.execute(data_gpu, fdata)\n", + " \n", + " spectra = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", + " space='cuda')\n", + " bifrost.reduce(fdata, spectra, 'pwrmean')\n", + "\n", + " spectra = spectra.copy(space='system')\n", + " spectra = spectra[0,:,:]\n", + " freq = numpy.fft.fftfreq(nchan, d=1/19.6e6)\n", + " bf_freq = numpy.fft.fftshift(freq)\n", + " pylab.semilogy(bf_freq/1e6, spectra[:,ninput-1],\n", + " label=f\"{ninput-1}@{gulp}\")\n", + " pylab.semilogy(bf_freq/1e6, spectra[:,0],\n", + " label=f\"0@{gulp}\")\n", + "pylab.xlabel('Frequency [MHz]')\n", + "pylab.ylabel('Power')\n", + "pylab.legend(loc=0)" + ] + }, + { + "cell_type": "markdown", + "id": "e258984c", + "metadata": {}, + "source": [ + "That works be it is not very efficient. For every gulp we are creating new arrays on both the CPU and GPU memories and creating new `bifrost.fft` instances. One way to deal with this is to pre-initialize the data arrays and the FFT function, and then use `bifrost.ndarray.copy_array` to copy data:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "cf2f6ec8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from bifrost.ndarray import copy_array\n", + "\n", + "data_gpu = bifrost.ndarray(shape=(ntime//nchan, nchan, ninput),\n", + " dtype=numpy.complex64,\n", + " space='cuda')\n", + "fdata = bifrost.ndarray(shape=data_gpu.shape, dtype=data_gpu.dtype,\n", + " space='cuda')\n", + "spectra_gpu = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", + " space='cuda')\n", + "spectra_cpu = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", + " space='system')\n", + "\n", + "fft = bifrost.fft.Fft()\n", + "fft.init(data_gpu, fdata, axes=1, apply_fftshift=True)\n", + "\n", + "for gulp in range(5):\n", + " t, data_noise = make_data(ntime, ninput)\n", + " data_noise = bifrost.ndarray(data_noise, space='system')\n", + " \n", + " data_gpu = data_gpu.reshape(ntime,ninput)\n", + " copy_array(data_gpu, data_noise)\n", + " data_gpu = data_gpu.reshape(-1,nchan,ninput)\n", + " \n", + " fft.execute(data_gpu, fdata)\n", + " \n", + " bifrost.reduce(fdata, spectra_gpu, 'pwrmean')\n", + "\n", + " copy_array(spectra_cpu, spectra_gpu)\n", + " \n", + " freq = numpy.fft.fftfreq(nchan, d=1/19.6e6)\n", + " bf_freq = numpy.fft.fftshift(freq)\n", + " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,ninput-1],\n", + " label=f\"{ninput-1}@{gulp}\")\n", + " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,0],\n", + " label=f\"0@{gulp}\")\n", + "pylab.xlabel('Frequency [MHz]')\n", + "pylab.ylabel('Power')\n", + "pylab.legend(loc=0)\n", + "\n", + "del data_gpu\n", + "del fdata\n", + "del spectra_gpu\n", + "del spectra_cpu\n", + "del fft" + ] + }, + { + "cell_type": "markdown", + "id": "04c8036a", + "metadata": {}, + "source": [ + "This works well if you have a fixed channelization or integration time. For pipelines where those parameters could change an alternative to pre-initilization is to wrap the data copies and FFT initialization in `try...except NameError` blocks:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "299a81ed", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from bifrost.ndarray import copy_array\n", + "\n", + "for gulp in range(5):\n", + " t, data_noise = make_data(ntime, ninput)\n", + " data_noise = bifrost.ndarray(data_noise, space='system')\n", + " \n", + " try:\n", + " data_gpu = data_gpu.reshape(*data_noise.shape)\n", + " copy_array(data_gpu, data_noise)\n", + " except NameError:\n", + " data_gpu = data_noise.copy(space='cuda')\n", + " data_gpu = data_gpu.reshape(-1,nchan,ninput)\n", + " \n", + " try:\n", + " fft.execute(data_gpu, fdata)\n", + " except NameError:\n", + " fdata = bifrost.ndarray(shape=data_gpu.shape,\n", + " dtype=data_gpu.dtype,\n", + " space='cuda')\n", + " \n", + " fft = bifrost.fft.Fft()\n", + " fft.init(data_gpu, fdata, axes=1, apply_fftshift=True)\n", + " fft.execute(data_gpu, fdata)\n", + " \n", + " try:\n", + " bifrost.reduce(fdata, spectra_gpu, 'pwrmean')\n", + " except NameError:\n", + " spectra_gpu = bifrost.ndarray(shape=(1,nchan,ninput),\n", + " dtype=numpy.float32,\n", + " space='cuda')\n", + " \n", + " bifrost.reduce(fdata, spectra_gpu, 'pwrmean')\n", + " \n", + " try:\n", + " copy_array(spectra_cpu, spectra_gpu)\n", + " except NameError:\n", + " spectra_cpu = spectra_gpu.copy(space='system')\n", + " \n", + " freq = numpy.fft.fftfreq(nchan, d=1/19.6e6)\n", + " bf_freq = numpy.fft.fftshift(freq)\n", + " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,ninput-1],\n", + " label=f\"{ninput-1}@{gulp}\")\n", + " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,0],\n", + " label=f\"0@{gulp}\")\n", + "pylab.xlabel('Frequency [MHz]')\n", + "pylab.ylabel('Power')\n", + "pylab.legend(loc=0)\n", + "\n", + "del fft\n", + "del data_gpu\n", + "del fdata\n", + "del spectra_gpu\n", + "del spectra_cpu" + ] + }, + { + "cell_type": "markdown", + "id": "d76f47db", + "metadata": {}, + "source": [ + "This structure allows you to initialize each array on the GPU only once and then reuse it as needed. The only catch is that you need to cleanup after you are done processing gulps. Otherwise, you can run into dimension mis-matches if the channel count or integration time changes.\n", + "\n", + "These two examples are what are called \"blocks\" in Bifrost terminology and represent \"atomic units\" of data processing. In the next section we will look at how Bifrost joins blocks together to build a pipeline." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From e6f3191918e365c5f367feeab766d649a57900bf Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 23 Apr 2021 13:36:44 -0600 Subject: [PATCH 0070/1155] Rings. --- tutorial/03_putting_it_together.ipynb | 254 ++++++++++++++++++++++++++ 1 file changed, 254 insertions(+) create mode 100644 tutorial/03_putting_it_together.ipynb diff --git a/tutorial/03_putting_it_together.ipynb b/tutorial/03_putting_it_together.ipynb new file mode 100644 index 000000000..1d8c45a6e --- /dev/null +++ b/tutorial/03_putting_it_together.ipynb @@ -0,0 +1,254 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fcdf1912", + "metadata": {}, + "source": [ + "# Putting it Together\n", + "\n", + "In the previous section we introduced blocks, the fundamental building blocks of a pipeline in Bifrost. Now we will talk about how blocks are connected together and some of the considerations.\n", + "\n", + "In Bifrost blocks are connected together by circular memory buffers called \"rings\". Like a `bifrost.ndarray`, a ring exists in a memoy space: system, cuda_host, or cuda. A ring also has a size that based on a integer number of segments of the gulp size for the ring. \n", + "\n", + "To create a ring in Bifrost:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e8f5bda6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "name: b'a_ring' , space: system\n" + ] + } + ], + "source": [ + "import bifrost\n", + "\n", + "ring = bifrost.ring.Ring(name=\"a_ring\", space=\"system\")\n", + "print('name:', ring.name, ', space:', ring.space)" + ] + }, + { + "cell_type": "markdown", + "id": "bac3cc61", + "metadata": {}, + "source": [ + "This creates a new ring, called \"a_ring\", in the system memory space. Although the ring has been created it does not yet have any memory allocated to it. To allocate memory you `resize` it:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "705c4df0", + "metadata": {}, + "outputs": [], + "source": [ + "ring.resize(4096)" + ] + }, + { + "cell_type": "markdown", + "id": "de11b932", + "metadata": {}, + "source": [ + "This sets the gulp size for the ring to 4096 bytes and this call sets the total ring size to four, 4096 byte buffer. You can change the buffer fraction by adding in a second argument which is the total ring size. For example, to increase the buffer size to five segments:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "26c0d06f", + "metadata": {}, + "outputs": [], + "source": [ + "ring.resize(4096, 5*4096)" + ] + }, + { + "cell_type": "markdown", + "id": "9c8c0212", + "metadata": {}, + "source": [ + "Resizing a ring is a data-safe process and the contents of the ring are preserved.\n", + "\n", + "Rings in Bifrost are more than just a section of memory, though. It has a few other attributes that make it useful for representing a stream of data:\n", + "\n", + " * a timetag that denotes when the stream of data starts\n", + " * a header that stores metadata about the sequence\n", + " * they support single writer/multi-reader access for branching pipelines\n", + "\n", + "Let's use an example to look at these first two. In this we will write some data to the ring:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f74b9145", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 @ [[ 38 117 68 ... 75 66 96]]\n", + "1 @ [[ 78 28 37 ... 70 121 75]]\n", + "2 @ [[ 88 41 106 ... 90 69 103]]\n", + "3 @ [[ 98 18 64 ... 34 65 101]]\n", + "4 @ [[ 90 115 10 ... 41 94 118]]\n", + "5 @ [[ 16 3 119 ... 28 88 31]]\n", + "6 @ [[ 32 78 32 ... 126 17 64]]\n", + "7 @ [[ 13 7 6 ... 109 103 116]]\n", + "8 @ [[ 50 12 67 ... 126 123 8]]\n", + "9 @ [[ 79 8 118 ... 114 97 95]]\n", + "10 @ [[87 28 74 ... 2 74 63]]\n", + "11 @ [[ 1 94 123 ... 41 14 112]]\n", + "12 @ [[ 0 45 96 ... 51 102 49]]\n", + "13 @ [[54 88 56 ... 74 20 30]]\n", + "14 @ [[ 23 98 101 ... 126 51 21]]\n", + "15 @ [[ 49 1 101 ... 100 40 36]]\n", + "16 @ [[97 25 50 ... 90 83 38]]\n", + "17 @ [[ 90 105 85 ... 66 81 19]]\n", + "18 @ [[ 5 80 81 ... 11 16 111]]\n", + "19 @ [[ 65 125 4 ... 25 97 11]]\n" + ] + } + ], + "source": [ + "import json, numpy, time\n", + "\n", + "ring = bifrost.ring.Ring(name=\"another_ring\", space=\"system\")\n", + "\n", + "with ring.begin_writing() as output_ring:\n", + " time_tag = int(time.time()*1e9)\n", + " hdr = {'time_tag': time_tag,\n", + " 'metadata': 'here',\n", + " 'more_metadata': 'there'}\n", + " hdr_str = json.dumps(hdr)\n", + " \n", + " gulp_size = 4096\n", + " ring.resize(gulp_size, 5*gulp_size)\n", + " \n", + " with output_ring.begin_sequence(time_tag=hdr['time_tag'],\n", + " header=hdr_str) as output_seq:\n", + " for i in range(20):\n", + " with output_seq.reserve(gulp_size) as output_span:\n", + " data = output_span.data_view(numpy.int8)\n", + " data[...] = (numpy.random.rand(gulp_size)\\\n", + " *127).astype(numpy.int8)\n", + " print(i, '@', data[:5])" + ] + }, + { + "cell_type": "markdown", + "id": "21f9db4d", + "metadata": {}, + "source": [ + "Here we:\n", + "\n", + " 1. Ready the ring for writing with `ring.begin_writing()`.\n", + " 2. Once the ring is ready for writing, we define the time tag for the first sample and a dictionary of metadata. The time tag is expected to be an integer and the dictionary is dumped to a JSON object.\n", + " 3. Start a \"sequence\" on the ring using that time tag and JSON object. \n", + " * In Bifrost a sequence is a stream of data with a single observational setup.\n", + " 4. Loop over spans, also called gulps, in the output sequence and writes data to the ring.\n", + " * Writing uses a \"data_view\" of the span/gulp that exposes it as a `bifrost.ndarray`.\n", + "\n", + "Reading from a ring follows a similar sequence:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "223c1f23", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1619206567011656448\n", + "{'time_tag': 1619206567011656448, 'metadata': 'here', 'more_metadata': 'there'}\n", + "12 @ [[ 0 45 96 ... 51 102 49]]\n", + "13 @ [[54 88 56 ... 74 20 30]]\n", + "14 @ [[ 23 98 101 ... 126 51 21]]\n", + "15 @ [[ 49 1 101 ... 100 40 36]]\n", + "16 @ [[97 25 50 ... 90 83 38]]\n", + "17 @ [[ 90 105 85 ... 66 81 19]]\n", + "18 @ [[ 5 80 81 ... 11 16 111]]\n", + "19 @ [[ 65 125 4 ... 25 97 11]]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:9: DeprecationWarning: generator 'ReadSequence.read' raised StopIteration\n", + " if __name__ == '__main__':\n", + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:1: DeprecationWarning: generator 'Ring.read' raised StopIteration\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "source": [ + "for input_seq in ring.read(guarantee=True):\n", + " hdr = json.loads(input_seq.header.tobytes())\n", + " print(input_seq.time_tag)\n", + " print(hdr)\n", + " \n", + " gulp_size = 4096\n", + " \n", + " i = -1\n", + " for input_span in input_seq.read(gulp_size):\n", + " i += 1\n", + " if input_span.size < gulp_size:\n", + " continue\n", + " data = input_span.data_view(numpy.int8)\n", + " print(i, '@', data[:10])" + ] + }, + { + "cell_type": "markdown", + "id": "e11cf55d", + "metadata": {}, + "source": [ + "Here we:\n", + "\n", + " 1. Open the ring for reading with `ring.read()` and get an iterator over sequences in that ring.\n", + " * This ring was opened with `gaurantee=True` which tells Bifrost that spans that are being read from cannot be overwriten with new data until the reader releases the span.\n", + " 2. For the sequence we can access its time_tag and metadata header.\n", + " 3. Loop over spans/gulps within that sequence until the iterator is exhausted.\n", + " * It is possible that a span returned by `input_seq.read()` is smaller than the gulp size, particuarlly at the end of a sequence. It is a good idea to check the size of the span before trying to use it.\n", + " 4. For each span, do the processing that is required.\n", + "\n", + "In the next section we will talk about how to build a complete pipeline from these pieces. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 354630988ee58ba6549807d8d1bcfefc3bfb5a3b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 23 Apr 2021 14:41:19 -0600 Subject: [PATCH 0071/1155] Added numba. --- tutorial/00_getting_started.ipynb | 92 ++++++++++++++++++++++--------- 1 file changed, 65 insertions(+), 27 deletions(-) diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb index e48e82ae5..9f2886b90 100644 --- a/tutorial/00_getting_started.ipynb +++ b/tutorial/00_getting_started.ipynb @@ -39,10 +39,10 @@ "output_type": "stream", "text": [ " float32 (2, 4096) system\n", - "[[ nan nan nan ... 4.56767247e-41\n", - " 9.00612546e-17 4.56767247e-41]\n", - " [1.65722335e-14 7.21541771e-10 1.00170646e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n" + "[[1.9045215e+31 1.6631021e+22 2.7229835e+20 ... 0.0000000e+00\n", + " 0.0000000e+00 0.0000000e+00]\n", + " [0.0000000e+00 0.0000000e+00 0.0000000e+00 ... 4.5557614e-41\n", + " 1.4012985e-45 0.0000000e+00]]\n" ] } ], @@ -71,14 +71,14 @@ "output_type": "stream", "text": [ " float64 (2, 4096) system\n", - "r: [[ 1.80276352 -0.76465251 -0.2550243 ... 0.96217946 -0.16653778\n", - " 0.22051055]\n", - " [-0.99592518 -0.28503199 1.06522625 ... -0.59604263 1.1375648\n", - " 1.4208186 ]]\n", - "data: [[ 1.80276352 -0.76465251 -0.2550243 ... 0.96217946 -0.16653778\n", - " 0.22051055]\n", - " [-0.99592518 -0.28503199 1.06522625 ... -0.59604263 1.1375648\n", - " 1.4208186 ]]\n" + "r: [[ 0.13445404 0.3175441 0.53332765 ... 1.18956152 -1.15990205\n", + " -0.64751085]\n", + " [ 0.45399238 -0.42930972 0.47645107 ... 2.00526937 2.27132679\n", + " 0.78468687]]\n", + "data: [[ 0.13445404 0.3175441 0.53332765 ... 1.18956152 -1.15990205\n", + " -0.64751085]\n", + " [ 0.45399238 -0.42930972 0.47645107 ... 2.00526937 2.27132679\n", + " 0.78468687]]\n" ] } ], @@ -109,12 +109,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "data += 2.0: [[3.80276352 1.23534749 1.7449757 ... 2.96217946 1.83346222 2.22051055]\n", - " [1.00407482 1.71496801 3.06522625 ... 1.40395737 3.1375648 3.4208186 ]]\n", + "data += 2.0: [[2.13445404 2.3175441 2.53332765 ... 3.18956152 0.84009795 1.35248915]\n", + " [2.45399238 1.57069028 2.47645107 ... 4.00526937 4.27132679 2.78468687]]\n", "data[0,:] = 55: [[55. 55. 55. ... 55. 55.\n", " 55. ]\n", - " [ 1.00407482 1.71496801 3.06522625 ... 1.40395737 3.1375648\n", - " 3.4208186 ]]\n" + " [ 2.45399238 1.57069028 2.47645107 ... 4.00526937 4.27132679\n", + " 2.78468687]]\n" ] } ], @@ -137,8 +137,8 @@ "text": [ "data[:,[1,3,5,7]] = 10: [[55. 55. 55. ... 55. 55.\n", " 55. ]\n", - " [ 1.00407482 1.71496801 3.06522625 ... 1.40395737 3.1375648\n", - " 3.4208186 ]]\n" + " [ 2.45399238 1.57069028 2.47645107 ... 4.00526937 4.27132679\n", + " 2.78468687]]\n" ] } ], @@ -147,6 +147,44 @@ "print('data[:,[1,3,5,7]] = 10:', data)" ] }, + { + "cell_type": "markdown", + "id": "afbb6664", + "metadata": {}, + "source": [ + "You can also use `bifrost.ndarray`s with [numba](https://numba.pydata.org/):" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "10465d3d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " [[65. 65. 65. ... 65. 65.\n", + " 65. ]\n", + " [12.45399238 11.57069028 12.47645107 ... 14.00526937 14.27132679\n", + " 12.78468687]]\n" + ] + } + ], + "source": [ + "from numba import jit\n", + "\n", + "@jit(nopython=True)\n", + "def compute(x):\n", + " for i in range(len(x)):\n", + " x[i] = x[i] + 10\n", + "\n", + "compute(data)\n", + "print(type(data), data)\n", + "\n" + ] + }, { "cell_type": "markdown", "id": "5496e82f", @@ -157,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "c339a17f", "metadata": {}, "outputs": [ @@ -187,7 +225,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "bae4c040", "metadata": {}, "outputs": [ @@ -214,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "79307b19", "metadata": {}, "outputs": [ @@ -254,17 +292,17 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "6d6a9b6e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, @@ -311,17 +349,17 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 11, "id": "1e2e01dd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 29, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, From 3f17a60f0d78d160512ce439a2aa2bae1b095832 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 23 Apr 2021 17:38:20 -0600 Subject: [PATCH 0072/1155] Basic pipelines. --- tutorial/04_pipelines.ipynb | 279 ++++++++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 tutorial/04_pipelines.ipynb diff --git a/tutorial/04_pipelines.ipynb b/tutorial/04_pipelines.ipynb new file mode 100644 index 000000000..d3e5e2359 --- /dev/null +++ b/tutorial/04_pipelines.ipynb @@ -0,0 +1,279 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "9f6562f1", + "metadata": {}, + "source": [ + "# Building Pipelines\n", + "\n", + "We now have all of the pieces needed to build a complete pipeline in the Bifrost framework. Although it is hard to run a full multi-threaded Bifrost pipeline inside a Jupyter notebook we will look at a few examples.\n", + "\n", + "Let's start with a simple pipeline that generates random data in one block and writes it to disk in another. The generator block looks like:" + ] + }, + { + "cell_type": "markdown", + "id": "2b20d04d", + "metadata": {}, + "source": [ + "```\n", + "class GeneratorOp(object):\n", + " def __init__(self, oring, ntime_gulp=250, \n", + " shutdown_event=None, core=None):\n", + " self.sock = sock\n", + " self.oring = oring\n", + " self.ntime_gulp = ntime_gulp\n", + " if shutdown_event is None:\n", + " shutdown_event = threading.Event()\n", + " self.shutdown_event = shutdown_event\n", + " self.core = core\n", + " \n", + " def shutdown(self):\n", + " self.shutdown_event.set()\n", + " \n", + " def main(self):\n", + " with self.oring.begin_writing() as oring:\n", + " navg = 24\n", + " tint = navg / CHAN_BW\n", + " tgulp = tint * self.ntime_gulp\n", + " nbeam = 1\n", + " chan0 = 1234\n", + " nchan = 16*184\n", + " npol = 4\n", + " \n", + " ohdr = {'time_tag': int(int(time.time())*FS),\n", + " 'seq0': 0, \n", + " 'chan0': chan0,\n", + " 'cfreq0': chan0*CHAN_BW,\n", + " 'bw': nchan*CHAN_BW,\n", + " 'navg': navg,\n", + " 'nbeam': nbeam,\n", + " 'nchan': nchan,\n", + " 'npol': npol,\n", + " 'pols': 'XX,YY,CR,CI',\n", + " 'complex': False,\n", + " 'nbit': 32}\n", + " ohdr_str = json.dumps(ohdr)\n", + " \n", + " ogulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " oshape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " self.oring.resize(ogulp_size)\n", + " \n", + " prev_time = time.time()\n", + " with oring.begin_sequence(time_tag=ohdr['time_tag'], header=ohdr_str) as oseq:\n", + " while not self.shutdown_event.is_set():\n", + " with oseq.reserve(ogulp_size) as ospan:\n", + " \n", + " odata = ospan.data_view(numpy.float32).reshape(oshape)\n", + " odata[...] = numpy.random.randn(*oshape)\n", + " \n", + " curr_time = time.time()\n", + " while curr_time - prev_time < tgulp:\n", + " time.sleep(0.01)\n", + " curr_time = time.time()\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "518b71ec", + "metadata": {}, + "source": [ + "The `GeneratorOp` block is implemented as an object with a `main` method that is intended to be launched via `threading.Thread`. This setup is consistent with the Bifrost asychronous model where each block is asynchronous but operations on spans/gulps within a particular block are synchronous. The `__init__` method sets up the block and defines the ring that is to be used and the CPU core that the `main` method will be bound to when `main` is started. The `main` method does the heavy lifting here. Inside this method:\n", + "\n", + " 1. The output ring is prepared for writing.\n", + " 2. The parameters of the generated data (number of time samples, number of channels, etc.) and other meta data are defined and dumped to a JSON object.\n", + " 3. The output sequence is started.\n", + " 4. The innermost loops starts and puts random data into the output sequence span by span until a shutdown event breaks out of this loop. The speed of iteration through this inner loop is controlled by a call to `time.sleep` so that the data rate can be limited.\n", + "\n", + "The writer block looks like:" + ] + }, + { + "cell_type": "markdown", + "id": "965f8f47", + "metadata": {}, + "source": [ + "```\n", + "class WriterOp(object):\n", + " def __init__(self, iring, ntime_gulp=250, guarantee=True, core=None):\n", + " self.iring = iring\n", + " self.ntime_gulp = ntime_gulp\n", + " self.guarantee = guarantee\n", + " self.core = core\n", + " \n", + " def main(self):\n", + " if self.core is not None:\n", + " cpu_affinity.set_core(self.core)\n", + " \n", + " for iseq in self.iring.read(guarantee=self.guarantee):\n", + " ihdr = json.loads(iseq.header.tostring())\n", + " \n", + " self.sequence_proclog.update(ihdr)\n", + " \n", + " print(\"Writer: Start of new sequence: %s\", str(ihdr))\n", + " \n", + " time_tag = ihdr['time_tag']\n", + " navg = ihdr['navg']\n", + " nbeam = ihdr['nbeam']\n", + " chan0 = ihdr['chan0']\n", + " nchan = ihdr['nchan']\n", + " chan_bw = ihdr['bw'] / nchan\n", + " npol = ihdr['npol']\n", + " pols = ihdr['pols']\n", + " pols = pols.replace('CR', 'XY_real')\n", + " pols = pols.replace('CI', 'XY_imag')\n", + " \n", + " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " \n", + " prev_time = time.time()\n", + " iseq_spans = iseq.read(igulp_size)\n", + " for ispan in iseq_spans:\n", + " if ispan.size < igulp_size:\n", + " continue # Ignore final gulp\n", + " \n", + " idata = ispan.data_view(numpy.float32).reshape(ishape)\n", + " with open(f\"{time_tag}.dat\", 'wb') as fh:\n", + " fh.write(idata.tobytes())\n", + " \n", + " time_tag += navg * self.ntime_gulp * (int(FS) / int(CHAN_BW))\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "e614dedf", + "metadata": {}, + "source": [ + "The `WriterOp` block is structured in the same was as `GeneratorOp` block but uses the \"input ring\" structure for accessing data.\n", + "\n", + "To run these two blocks as a pipeline you would using the following inside a `if __name__ == '__main__':` block:" + ] + }, + { + "cell_type": "markdown", + "id": "07e406bd", + "metadata": {}, + "source": [ + "```\n", + "write_ring = Ring(name=\"write\")\n", + "\n", + "ops = []\n", + "ops.append(GeneratorOp(write_ring, ntime_gulp=250, core=0))\n", + "ops.append(WriterOp(write_ring, ntime_gulp=250, core=1))\n", + "\n", + "threads = [threading.Thread(target=op.main) for op in ops]\n", + "for thread in threads:\n", + " thread.start()\n", + " \n", + "for thread in threads:\n", + " thread.join()\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "abc15540", + "metadata": {}, + "source": [ + "This creates the ring that connects the two blocks, creates the `threading.Thread` instances that run each block, and starts the blocks.\n", + "\n", + "If you wanted to insert a third block between `GeneratorOp` and `WriterOp` it might look like:" + ] + }, + { + "cell_type": "markdown", + "id": "bddfd9fd", + "metadata": {}, + "source": [ + "```\n", + "class CopyOp(object):\n", + " def __init__(self, iring, oring, ntime_gulp=250, core=-1):\n", + " self.iring = iring\n", + " self.oring = oring\n", + " self.ntime_gulp = ntime_gulp\n", + " self.core = core\n", + " \n", + " def main(self):\n", + " cpu_affinity.set_core(self.core)\n", + " self.bind_proclog.update({'ncore': 1, \n", + " 'core0': cpu_affinity.get_core(),})\n", + " \n", + " with self.oring.begin_writing() as oring:\n", + " for iseq in self.iring.read(guarantee=self.guarantee):\n", + " ihdr = json.loads(iseq.header.tostring())\n", + " \n", + " self.sequence_proclog.update(ihdr)\n", + " \n", + " print(\"Copy: Start of new sequence: %s\", str(ihdr))\n", + " \n", + " time_tag = ihdr['time_tag']\n", + " navg = ihdr['navg']\n", + " nbeam = ihdr['nbeam']\n", + " chan0 = ihdr['chan0']\n", + " nchan = ihdr['nchan']\n", + " chan_bw = ihdr['bw'] / nchan\n", + " npol = ihdr['npol']\n", + " pols = ihdr['pols']\n", + " pols = pols.replace('CR', 'XY_real')\n", + " pols = pols.replace('CI', 'XY_imag')\n", + "\n", + " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " self.iring.resize(igulp_size, igulp_size*5)\n", + " \n", + " ogulp_size = igulp_size\n", + " oshape = ishape\n", + " \n", + " ohdr = ihdr.copy()\n", + " ohdr_str = json.dumps(ohdr)\n", + " \n", + " prev_time = time.time()\n", + " iseq_spans = iseq.read(igulp_size)\n", + " with oring.begin_sequence(time_tag=base_time_tag, header=ohdr_str) as oseq:\n", + " for ispan in iseq_spans:\n", + " if ispan.size < igulp_size:\n", + " continue # Ignore final gulp\n", + " \n", + " with oseq.reserve(ogulp_size) as ospan:\n", + " idata = ispan.data_view(numpy.float32)\n", + " odata = ospan.data_view(numpy.float32) \n", + " odata[...] = idata\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "8fc149b7", + "metadata": {}, + "source": [ + "This `CopyOp` block combines the characteristics of reading and writing from rings to copy data from one ring to the other.\n", + "\n", + "These examples should provide a starting point for building pipelines in Bifrost. Although the examples run purely on the CPU, GPU versions can also be create, either through copying to GPU memory within each block or by using rings in the 'cuda' memory space. If 'cuda' rings the user needs to ensure that all memory copies to/from the ring are executed before the span is released. Otherwise, corruption of the ring's contents can happen. In the next section we will look at logging from inside the blocks to help understand performance. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 1af1a7e83674d63ba6deca2bb46edf55031e972e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 23 Apr 2021 17:56:27 -0600 Subject: [PATCH 0073/1155] Fixes to CopyOp. --- tutorial/04_pipelines.ipynb | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/tutorial/04_pipelines.ipynb b/tutorial/04_pipelines.ipynb index d3e5e2359..680d453d2 100644 --- a/tutorial/04_pipelines.ipynb +++ b/tutorial/04_pipelines.ipynb @@ -198,15 +198,10 @@ " \n", " def main(self):\n", " cpu_affinity.set_core(self.core)\n", - " self.bind_proclog.update({'ncore': 1, \n", - " 'core0': cpu_affinity.get_core(),})\n", " \n", " with self.oring.begin_writing() as oring:\n", " for iseq in self.iring.read(guarantee=self.guarantee):\n", " ihdr = json.loads(iseq.header.tostring())\n", - " \n", - " self.sequence_proclog.update(ihdr)\n", - " \n", " print(\"Copy: Start of new sequence: %s\", str(ihdr))\n", " \n", " time_tag = ihdr['time_tag']\n", @@ -230,7 +225,6 @@ " ohdr = ihdr.copy()\n", " ohdr_str = json.dumps(ohdr)\n", " \n", - " prev_time = time.time()\n", " iseq_spans = iseq.read(igulp_size)\n", " with oring.begin_sequence(time_tag=base_time_tag, header=ohdr_str) as oseq:\n", " for ispan in iseq_spans:\n", @@ -238,9 +232,9 @@ " continue # Ignore final gulp\n", " \n", " with oseq.reserve(ogulp_size) as ospan:\n", - " idata = ispan.data_view(numpy.float32)\n", - " odata = ospan.data_view(numpy.float32) \n", - " odata[...] = idata\n", + " idata = ispan.data_view(numpy.float32)\n", + " odata = ospan.data_view(numpy.float32) \n", + " odata[...] = idata\n", "```" ] }, From 4463fe46c06a4203202300d78cfda18193538e41 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 23 Apr 2021 18:19:29 -0600 Subject: [PATCH 0074/1155] Logging. --- tutorial/05_block_logging.ipynb | 214 ++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 tutorial/05_block_logging.ipynb diff --git a/tutorial/05_block_logging.ipynb b/tutorial/05_block_logging.ipynb new file mode 100644 index 000000000..eeddbe263 --- /dev/null +++ b/tutorial/05_block_logging.ipynb @@ -0,0 +1,214 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4548b5b3", + "metadata": {}, + "source": [ + "# Block Logging\n", + "\n", + "In the previous section we looked at how to put blocks and rings together to build a simple pipeline. In this section we will look at the tools Bifrost provides to analyze pipeline performance and how to integrate those into blocks.\n", + "\n", + "Let's start with the `CopyOp` block from before:" + ] + }, + { + "cell_type": "markdown", + "id": "9990288a", + "metadata": {}, + "source": [ + "```\n", + "class CopyOp(object):\n", + " def __init__(self, iring, oring, ntime_gulp=250, core=-1):\n", + " self.iring = iring\n", + " self.oring = oring\n", + " self.ntime_gulp = ntime_gulp\n", + " self.core = core\n", + " \n", + " def main(self):\n", + " cpu_affinity.set_core(self.core)\n", + " \n", + " with self.oring.begin_writing() as oring:\n", + " for iseq in self.iring.read(guarantee=self.guarantee):\n", + " ihdr = json.loads(iseq.header.tostring())\n", + " print(\"Copy: Start of new sequence: %s\", str(ihdr))\n", + " \n", + " time_tag = ihdr['time_tag']\n", + " navg = ihdr['navg']\n", + " nbeam = ihdr['nbeam']\n", + " chan0 = ihdr['chan0']\n", + " nchan = ihdr['nchan']\n", + " chan_bw = ihdr['bw'] / nchan\n", + " npol = ihdr['npol']\n", + " pols = ihdr['pols']\n", + " pols = pols.replace('CR', 'XY_real')\n", + " pols = pols.replace('CI', 'XY_imag')\n", + "\n", + " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " self.iring.resize(igulp_size, igulp_size*5)\n", + " \n", + " ogulp_size = igulp_size\n", + " oshape = ishape\n", + " \n", + " ohdr = ihdr.copy()\n", + " ohdr_str = json.dumps(ohdr)\n", + " \n", + " iseq_spans = iseq.read(igulp_size)\n", + " with oring.begin_sequence(time_tag=base_time_tag, header=ohdr_str) as oseq:\n", + " for ispan in iseq_spans:\n", + " if ispan.size < igulp_size:\n", + " continue # Ignore final gulp\n", + " \n", + " with oseq.reserve(ogulp_size) as ospan:\n", + " idata = ispan.data_view(numpy.float32)\n", + " odata = ospan.data_view(numpy.float32) \n", + " odata[...] = idata\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "18cdb7e1", + "metadata": {}, + "source": [ + "If we want to know how this block is performing we can add timing statements to it and record the values using Bifrost's `bifrost.proclog` functionality. This provides a lightweight logger that records information to `/dev/shm/bifrost` where it can be accessed.\n", + "\n", + "To add logging to this block we would update it with:" + ] + }, + { + "cell_type": "markdown", + "id": "4f0e15ee", + "metadata": {}, + "source": [ + "```\n", + "class CopyOp(object):\n", + " def __init__(self, iring, oring, ntime_gulp=250, core=-1):\n", + " self.iring = iring\n", + " self.oring = oring\n", + " self.ntime_gulp = ntime_gulp\n", + " self.core = core\n", + " \n", + " self.bind_proclog = ProcLog(type(self).__name__+\"/bind\")\n", + " self.in_proclog = ProcLog(type(self).__name__+\"/in\")\n", + " self.out_proclog = ProcLog(type(self).__name__+\"/out\")\n", + " self.size_proclog = ProcLog(type(self).__name__+\"/size\")\n", + " self.sequence_proclog = ProcLog(type(self).__name__+\"/sequence0\")\n", + " self.perf_proclog = ProcLog(type(self).__name__+\"/perf\")\n", + " \n", + " self.in_proclog.update( {'nring':1, 'ring0':self.iring.name})\n", + " self.out_proclog.update( {'nring':1, 'ring0':self.oring.name})\n", + " self.size_proclog.update({'nseq_per_gulp': self.ntime_gulp})\n", + " \n", + " def main(self):\n", + " cpu_affinity.set_core(self.core)\n", + " self.bind_proclog.update({'ncore': 1, \n", + " 'core0': cpu_affinity.get_core(),})\n", + " \n", + " with self.oring.begin_writing() as oring:\n", + " for iseq in self.iring.read(guarantee=self.guarantee):\n", + " ihdr = json.loads(iseq.header.tostring())\n", + " \n", + " self.sequence_proclog.update(ihdr)\n", + " \n", + " print(\"Copy: Start of new sequence: %s\", str(ihdr))\n", + " \n", + " time_tag = ihdr['time_tag']\n", + " navg = ihdr['navg']\n", + " nbeam = ihdr['nbeam']\n", + " chan0 = ihdr['chan0']\n", + " nchan = ihdr['nchan']\n", + " chan_bw = ihdr['bw'] / nchan\n", + " npol = ihdr['npol']\n", + " pols = ihdr['pols']\n", + " pols = pols.replace('CR', 'XY_real')\n", + " pols = pols.replace('CI', 'XY_imag')\n", + "\n", + " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " self.iring.resize(igulp_size, igulp_size*5)\n", + " \n", + " ogulp_size = igulp_size\n", + " oshape = ishape\n", + " \n", + " ohdr = ihdr.copy()\n", + " ohdr_str = json.dumps(ohdr)\n", + " \n", + " prev_time = time.time()\n", + " iseq_spans = iseq.read(igulp_size)\n", + " with oring.begin_sequence(time_tag=base_time_tag, header=ohdr_str) as oseq:\n", + " for ispan in iseq_spans:\n", + " if ispan.size < igulp_size:\n", + " continue # Ignore final gulp\n", + " curr_time = time.time()\n", + " acquire_time = curr_time - prev_time\n", + " prev_time = curr_time\n", + " \n", + " with oseq.reserve(ogulp_size) as ospan:\n", + " curr_time = time.time()\n", + " reserve_time = curr_time - prev_time\n", + " prev_time = curr_time\n", + " \n", + " idata = ispan.data_view(numpy.float32)\n", + " odata = ospan.data_view(numpy.float32) \n", + " odata[...] = idata\n", + " \n", + " curr_time = time.time()\n", + " process_time = curr_time - prev_time\n", + " prev_time = curr_time\n", + " self.perf_proclog.update({'acquire_time': acquire_time, \n", + " 'reserve_time': reserve_time, \n", + " 'process_time': process_time,})\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "5c784a96", + "metadata": {}, + "source": [ + "In the `__init__` method of `CopyOp` we define all of the logging monitoring points:\n", + "\n", + " * bind_proclog - CPU and GPU binding information\n", + " * in_proclog - input ring(s), if any\n", + " * out_proclog - output ring(s), if any\n", + " * size_proclog - gulp size in use\n", + " * sequence_proclog - metadata for the current sequence being processed\n", + " * perf_proclog - block performance timing, consisting of:\n", + " * acquire_time - time spent waiting to read a span\n", + " * reserve_time - time spect waiting to acquire an output span for writing\n", + " * process_time - time spent processing data (basically everything else)\n", + "\n", + "For some of these monitoring points, like in, out, and size, the values are known when the block is created and they can be saved during initalization. For others, like sequence and perf, they can only be determined while running inside `main`.\n", + "\n", + "In addition to these explict monitoring points, Bifrost also creates monitoring points for the rings that capture their names, sizes, and space. All of this information is recorder to `/dev/shm/bifrost` in a per-process, per-block/ring fashion. The path would be:\n", + "\n", + " /dev/shm/bifrost/// Date: Fri, 30 Apr 2021 09:47:14 -0600 Subject: [PATCH 0075/1155] New-style packet capture. --- tutorial/06_data_capture.ipynb | 160 +++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 tutorial/06_data_capture.ipynb diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb new file mode 100644 index 000000000..9a513cd21 --- /dev/null +++ b/tutorial/06_data_capture.ipynb @@ -0,0 +1,160 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4336558d", + "metadata": {}, + "source": [ + "# Data Capture\n", + "\n", + "*NOTE: This section of the tutorial previews a new packet capture interface that is currently under development at https://github.com/jaycedowell/bifrost/tree/disk-readers*\n", + "\n", + "Next we will look at how to use Bifrost to work with packetized data, either from the network or from packets recorded to a file. This is done through the `bifrost.packet_capture` module:" + ] + }, + { + "cell_type": "markdown", + "id": "ff91a793", + "metadata": {}, + "source": [ + "```\n", + "import json\n", + "import ctypes\n", + "import threading\n", + "\n", + "import bifrost\n", + "from bifrost.address import Address\n", + "from bifrost.udp_socket import UDPSocket\n", + "from bifrost.packet_capture import PacketCaptureCallback, UDPCapture\n", + "\n", + "addr = Address('127.0.0.1', 10000)\n", + "sock = UDPSocket()\n", + "sock.bind(addr)\n", + "sock.timeout = 5.0\n", + "\n", + "class CaptureOp(object):\n", + " def __self, log, oring, sock, nsrc=16, src0=0, max_size=9000, ntime_gulp=250, ntime_slot=25000, core=-1):\n", + " self.log = log\n", + " self.oring = oring\n", + " self.sock = sock\n", + " self.nsrc = nsrc\n", + " self.src0 = src0\n", + " self.max_size = max_size\n", + " self.ntime_gulp = ntime_gulp\n", + " self.ntime_slot = ntime_slot\n", + " self.core = core\n", + " self.shutdown_event = threading.Event()\n", + "\n", + " def shutdown(self):\n", + " self.shutdown_event.set()\n", + "\n", + " def seq_callback(\n", + " self, seq0, chan0, nchan, nsrc, time_tag_ptr, hdr_ptr, hdr_size_ptr):\n", + " timestamp0 = int((self.utc_start - ADP_EPOCH).total_seconds())\n", + " time_tag0 = timestamp0 * int(FS)\n", + " time_tag = time_tag0 + seq0 * (int(FS) // int(CHAN_BW))\n", + " print(\"++++++++++++++++ seq0 =\", seq0)\n", + " print(\" time_tag =\", time_tag)\n", + " time_tag_ptr[0] = time_tag\n", + " hdr = {\n", + " \"time_tag\": time_tag,\n", + " \"seq0\": seq0,\n", + " \"chan0\": chan0,\n", + " \"nchan\": nchan,\n", + " \"cfreq\": (chan0 + 0.5 * (nchan - 1)) * CHAN_BW,\n", + " \"bw\": nchan * CHAN_BW,\n", + " \"nstand\": nsrc * 16,\n", + " # 'stand0': src0*16, # TODO: Pass src0 to the callback too(?)\n", + " \"npol\": 2,\n", + " \"complex\": True,\n", + " \"nbit\": 4,\n", + " \"axes\": \"time,chan,stand,pol\",\n", + " }\n", + " print(\"******** CFREQ:\", hdr[\"cfreq\"])\n", + " hdr_str = json.dumps(hdr)\n", + " self.header_buf = ctypes.create_string_buffer(hdr_str)\n", + " hdr_ptr[0] = ctypes.cast(self.header_buf, ctypes.c_void_p)\n", + " hdr_size_ptr[0] = len(hdr_str)\n", + " return 0\n", + "\n", + " def main(self):\n", + " seq_callback = PacketCaptureCallback()\n", + " seq_callback.set_chips(self.seq_callback)\n", + " with UDPCapture('chips', self.sock, self.nsrc, self.src0, self.max_size,\n", + " self.ntime_gulp, self.ntime_slot, sequence_callback=seq_callback,\n", + " core=self.core) as capture:\n", + " while not self.shutdown_event.is_set():\n", + " status = capture.recv()\n", + " del capture\n", + "````" + ] + }, + { + "cell_type": "markdown", + "id": "3048e76d", + "metadata": {}, + "source": [ + "This block implements data capture of the [CHIPS format](https://github.com/jaycedowell/bifrost/blob/disk-readers/src/formats/chips.hpp#L36) from the network. The snippet starts out by creating a socket that will be used to receive the data on using `bifrost.address.Address` and `bifrost.udp_socket.UDPSocket`. The capture block looks similar to other blocks that we have looked at but there are a few things to note.\n", + " 1. This block accepts many more keywords than the previous block. These extra keywords are used to control the packet capture and data ordering when it is copied into the ring buffer. They are:\n", + " * `nsrc` - The number of packet sources to expect data from,\n", + " * `src0` - The source ID number for the first packet socket,\n", + " * `max_size` - The maximum packet size to accept. This is usually set to 9000 to allow for jumbo packets,\n", + " * `ntime_gulp` - This controls the internal buffer size used by the packet capture. Bifrost keeps two buffers open and releases them to the output ring as data from new gulps is received.\n", + " * `ntime_slot` - The approximate number of packet sets (a packet from all `nsrc` sources) per second. This is used by Bifrost to determine the boundaries in the gulps.\n", + " 2. There is a an internal `threading.Event` instance that is used as a signal for telling the `CaptureOp` block to stop. Without the capture would run indefinitely.\n", + " 3. There is a `seq_callback` method that is called by Bifrost when the packet sequence changes. This method accepts a format-specific number of arguments and returns a JSON-packed header that sent to the ring.\n", + " 4. The `main` method implements the packet capture by calling a collection of Bifrost classes:\n", + " * First, a new `PacketCaptureCallback` instance is created and then the callback for the CHIPS format is set to `CaptureOp.seq_callback`. This redies the method for Bifrost to use it when the sequence changes.\n", + " * Next, a new `UDPCapture` instance is created for the packet format with the relevant source/data parameters. This is used as a context for this packet capture itself.\n", + " * Finally, `UDPCapture.recv` is called repeatedly to receive and process packets. This method returns an integer after a gulp has been released to the ring. This interger stores the current state of the capture.\n", + "\n", + "As mentioned before, Bifrost also works with reading packets from a file using the `bifrost.packet_capture.DiskReader` class. This works similar to `UDPCapture` but the packet format specifiers require extra information in order to read packets from disk. For example, a CHIPS capture of 132 channels is specified as \"chips\" for `UDPCapture` but as \"chips_132\" for `DiskReader`." + ] + }, + { + "cell_type": "markdown", + "id": "f8c48a43", + "metadata": {}, + "source": [ + "## Adding a New Packet Format\n", + "\n", + "Adding a new packet format to Bifrost is a straightforward task:\n", + " 1. Add a new `.hpp` file to `bifrost/src/formats`. This file should contain:\n", + " * the header format for the packet, \n", + " * a sub-class of the C++ `PacketDecoder` class that implements a packet validator,\n", + " * a sub-class of the C++ `PacketProcessor` class that implements an unpacket to take the payload for a valid packet and place it in the correct position inside a ring buffer, and\n", + " * *optionally*, a sub-class of the C++ `PacketHeaderFiller` class that can be used when creating packets from Bifrost.\n", + " 2. Add the new format to `packet_capture.hpp`. This has three parts:\n", + " * Add a new method to the C++ class `BFpacketcapture_callback_impl` to handle the sequence change callback.\n", + " * Add new sub-class of the C++ `BFpacketcapture_impl` class that implements the format and defines how Bifrost detects changes in the packet sequence.\n", + " * Update the C++ function `BFpacketcapture_create` to expose the new packet format.\n", + " 3. Add the new format callback helper to `packet_capture.cpp`.\n", + " 4. Update `bifrost/packet_capture.h` to expose the new callback to the Python API.\n", + " 5. *Optionally*, add support for writing packets:\n", + " * Add the new format to `packet_writer.hpp` by adding a new sub-class of the C++ `BFpacketwriter_impl` class.\n", + " * Update the C++ `BFpacketwriter_create` function to expore the new packet format." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 32897925f0b0f064a850b84dc7b5903aa16ee73d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 30 Apr 2021 09:52:28 -0600 Subject: [PATCH 0076/1155] High level Python API stub. --- tutorial/07_high_level_api.ipynb | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 tutorial/07_high_level_api.ipynb diff --git a/tutorial/07_high_level_api.ipynb b/tutorial/07_high_level_api.ipynb new file mode 100644 index 000000000..ed7ddd6bb --- /dev/null +++ b/tutorial/07_high_level_api.ipynb @@ -0,0 +1,37 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "38542414", + "metadata": {}, + "source": [ + "# High Level Python API\n", + "\n", + "Up until now we have been using the low level Python API that Bifrost has to show the inner workings of the framework and how to build a pipeline. However, Bifrost also has a high level Python API that makes building blocks and pipelines easier with less code. In this section we will look at this interface.\n", + "\n", + "**Someone please add something here.**" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 0adcec98d91c1866a3c567ba0723754ded1d5c08 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 3 May 2021 08:34:06 -0600 Subject: [PATCH 0077/1155] Added a Docker container with the tutorial in it. --- tutorial/docker/Dockerfile | 194 +++++++++++++++++++++ tutorial/docker/config.mk | 35 ++++ tutorial/docker/fix-permissions | 35 ++++ tutorial/docker/jupyter_notebook_config.py | 55 ++++++ tutorial/docker/start-notebook.sh | 19 ++ tutorial/docker/start-singleuser.sh | 39 +++++ tutorial/docker/start.sh | 147 ++++++++++++++++ tutorial/docker/user.mk | 32 ++++ 8 files changed, 556 insertions(+) create mode 100644 tutorial/docker/Dockerfile create mode 100644 tutorial/docker/config.mk create mode 100644 tutorial/docker/fix-permissions create mode 100644 tutorial/docker/jupyter_notebook_config.py create mode 100644 tutorial/docker/start-notebook.sh create mode 100644 tutorial/docker/start-singleuser.sh create mode 100644 tutorial/docker/start.sh create mode 100644 tutorial/docker/user.mk diff --git a/tutorial/docker/Dockerfile b/tutorial/docker/Dockerfile new file mode 100644 index 000000000..e2a8ebd61 --- /dev/null +++ b/tutorial/docker/Dockerfile @@ -0,0 +1,194 @@ +ARG BASE_CONTAINER=nvidia/cuda:10.1-devel-ubuntu18.04 +FROM $BASE_CONTAINER + +LABEL maintainer="Jayce Dowell " +ARG LSL_USER="lwa" +ARG LSL_UID="1000" +ARG LSL_GID="100" + +# Build-time metadata as defined at http://label-schema.org +ARG BUILD_DATE +ARG VCS_REF +LABEL org.label-schema.build-date=$BUILD_DATE \ + org.label-schema.name="Bifrost - Jupyter image" \ + org.label-schema.description="Image with CUDA, Bifrost, LSL, and a useful Jupyter stack" \ + org.label-schema.url="https://github.com/ledatelescope/bifrost" \ + org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.vcs-url="https://github.com/ledatelescope/bifrost_tutorial" \ + org.label-schema.schema-version="1.0" + +USER root + +# Install all OS dependencies for fully functional notebook server +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get update && \ + apt-get install -yq --no-install-recommends \ + build-essential \ + bzip2 \ + ca-certificates \ + curl \ + doxygen \ + emacs-nox \ + exuberant-ctags \ + fonts-liberation \ + git \ + inkscape \ + jed \ + libboost-python-dev \ + libcfitsio-dev \ + libfftw3-dev \ + libgdbm-dev \ + libhdf5-dev \ + libhwloc-dev \ + libnuma-dev \ + libsm6 \ + libxext-dev \ + libxrender1 \ + locales \ + lmodern \ + nano \ + netcat \ + pkg-config \ + python3-dev \ + python3-pip \ + python3-setuptools \ + run-one \ + software-properties-common \ + sudo \ + swig \ + tcsh \ + vim \ + wget \ + # ---- nbconvert dependencies ---- + texlive-xetex \ + texlive-fonts-recommended \ + texlive-generic-recommended \ + # Optional dependency + texlive-fonts-extra \ + # ---- + tzdata \ + unzip && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ + locale-gen + +# Configure the environment +ENV SHELL=/bin/bash \ + LSL_USER=$LSL_USER \ + LSL_UID=$LSL_UID \ + LSL_GID=$LSL_GID \ + LC_ALL=en_US.UTF-8 \ + LANG=en_US.UTF-8 \ + LANGUAGE=en_US.UTF-8 +ENV HOME=/home/$LSL_USER +RUN python3 -m pip install --upgrade virtualenv + +# Copy a script that we will use to correct permissions after running certain commands +COPY fix-permissions /usr/local/bin/fix-permissions +RUN chmod a+rx /usr/local/bin/fix-permissions + +# Enable prompt color in the skeleton .bashrc before creating the default LSL_USER +RUN sed -i 's/^#force_color_prompt=yes/force_color_prompt=yes/' /etc/skel/.bashrc + +# Create LSL_USER with name lwa user with UID=1000 and in the 'users' group +# and make sure these dirs are writable by the `users` group. +RUN echo "auth requisite pam_deny.so" >> /etc/pam.d/su && \ + sed -i.bak -e 's/^%admin/#%admin/' /etc/sudoers && \ + sed -i.bak -e 's/^%sudo/#%sudo/' /etc/sudoers && \ + useradd -m -s /bin/bash -N -u $LSL_UID $LSL_USER && \ + chmod g+w /etc/passwd && \ + fix-permissions $HOME + +USER $LSL_UID +WORKDIR $HOME + +# Activate the environment +ENV VIRTUAL_ENV=$HOME/venv +RUN python3 -m virtualenv -p python3 $VIRTUAL_ENV +ENV PATH="$VIRTUAL_ENV/bin:$PATH" + +# Setup LSL +RUN pip install \ + setuptools \ + numpy \ + matplotlib \ + scipy \ + h5py \ + pyephem==3.7.6.0 && \ + pip install aipy && \ + pip install lsl + +# Setup Bifrost +## Dependencies + numba +RUN pip install \ + contextlib2 \ + graphviz \ + numba \ + pint \ + simplejson \ + git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f +## Bifrost +RUN git clone https://github.com/jaycedowell/bifrost.git && \ + cd /home/$LSL_USER/bifrost && \ + git checkout disk-readers +COPY config.mk user.mk /home/$LSL_USER/bifrost/ +RUN cd /home/$LSL_USER/bifrost && \ + make clean && \ + make -j all && \ + make doc && \ + make install && \ + cd /home/$LSL_USER +## The tutorial +RUN git clone https://github.com/ledatelescope/bifrost_tutorial.git + +# Back to root +USER root + +# Setup work directory for backward-compatibility +RUN mkdir /home/$LSL_USER/work && \ + fix-permissions /home/$LSL_USER + +# Install Tini +RUN pip install tini && \ + fix-permissions /home/$LSL_USER + +# Setup Jupyter +RUN pip install \ + jupyterlab \ + jupyterhub \ + jupyter_client \ + nbformat \ + nbconvert && \ + jupyter notebook --generate-config && \ + rm -rf /home/$LSL_USER/.cache/yarn && \ + fix-permissions /home/$LSL_USER + +EXPOSE 8888 +ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/lwa/venv/lib" + +# Configure container startup +# Add Tini +ENV TINI_VERSION v0.18.0 +ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini +RUN chmod +x /tini +ENTRYPOINT ["/tini", "--"] +CMD ["start-notebook.sh"] + +# Copy local files as late as possible to avoid cache busting +COPY start.sh start-notebook.sh start-singleuser.sh /usr/local/bin/ +RUN chmod a+rx /usr/local/bin/start*.sh +COPY jupyter_notebook_config.py /etc/jupyter/ + +# Fix permissions on /etc/jupyter as root +USER root +RUN fix-permissions /etc/jupyter/ + +# Import matplotlib the first time to build the font cache. +ENV XDG_CACHE_HOME /home/$LSL_USER/.cache/ +RUN MPLBACKEND=Agg python -c "import matplotlib.pyplot" && \ + fix-permissions /home/$LSL_USER + +# Switch back to lwa to avoid accidental container runs as root +USER $LSL_UID diff --git a/tutorial/docker/config.mk b/tutorial/docker/config.mk new file mode 100644 index 000000000..eca31b608 --- /dev/null +++ b/tutorial/docker/config.mk @@ -0,0 +1,35 @@ + +ifndef OS + OS := $(shell uname -s) +endif + +ifeq ($(OS),Linux) + SO_EXT = .so + SHARED_FLAG = -shared + SONAME_FLAG = -soname +else ifeq ($(OS),Darwin) + SO_EXT = .dylib + SHARED_FLAG = -dynamiclib + SONAME_FLAG = -install_name +#else ifeq ($(OS),Windows_NT) +# SO_EXT = .dll +else + $(error Unsupported OS) +endif + +ifndef INSTALL_LIB_DIR + INSTALL_LIB_DIR = /home/lwa/venv/lib +endif + +ifndef INSTALL_INC_DIR + INSTALL_INC_DIR = /home/lwa/venv/include +endif + +BIFROST_NAME = bifrost +LIBBIFROST_NAME = lib$(BIFROST_NAME) +LIBBIFROST_MAJOR = 0 +LIBBIFROST_MINOR = 8 +LIBBIFROST_PATCH = 0 +LIBBIFROST_SO = $(LIBBIFROST_NAME)$(SO_EXT) +LIBBIFROST_SO_MAJ = $(LIBBIFROST_SO).$(LIBBIFROST_MAJOR) +LIBBIFROST_SO_MAJ_MIN = $(LIBBIFROST_SO_MAJ).$(LIBBIFROST_MINOR) diff --git a/tutorial/docker/fix-permissions b/tutorial/docker/fix-permissions new file mode 100644 index 000000000..2358cc917 --- /dev/null +++ b/tutorial/docker/fix-permissions @@ -0,0 +1,35 @@ +#!/bin/bash +# set permissions on a directory +# after any installation, if a directory needs to be (human) user-writable, +# run this script on it. +# It will make everything in the directory owned by the group $LSL_GID +# and writable by that group. +# Deployments that want to set a specific user id can preserve permissions +# by adding the `--group-add users` line to `docker run`. + +# uses find to avoid touching files that already have the right permissions, +# which would cause massive image explosion + +# right permissions are: +# group=$LSL_GID +# AND permissions include group rwX (directory-execute) +# AND directories have setuid,setgid bits set + +set -e + +for d in "$@"; do + find "$d" \ + ! \( \ + -group $LSL_GID \ + -a -perm -g+rwX \ + \) \ + -exec chgrp $LSL_GID {} \; \ + -exec chmod g+rwX {} \; + # setuid,setgid *on directories only* + find "$d" \ + \( \ + -type d \ + -a ! -perm -6000 \ + \) \ + -exec chmod +6000 {} \; +done diff --git a/tutorial/docker/jupyter_notebook_config.py b/tutorial/docker/jupyter_notebook_config.py new file mode 100644 index 000000000..92fa67741 --- /dev/null +++ b/tutorial/docker/jupyter_notebook_config.py @@ -0,0 +1,55 @@ +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +from jupyter_core.paths import jupyter_data_dir +import subprocess +import os +import errno +import stat + +c = get_config() +c.NotebookApp.ip = '0.0.0.0' +c.NotebookApp.port = 8888 +c.NotebookApp.open_browser = False + +# https://github.com/jupyter/notebook/issues/3130 +c.FileContentsManager.delete_to_trash = False + +# Generate a self-signed certificate +if 'GEN_CERT' in os.environ: + dir_name = jupyter_data_dir() + pem_file = os.path.join(dir_name, 'notebook.pem') + try: + os.makedirs(dir_name) + except OSError as exc: # Python >2.5 + if exc.errno == errno.EEXIST and os.path.isdir(dir_name): + pass + else: + raise + + # Generate an openssl.cnf file to set the distinguished name + cnf_file = os.path.join(os.getenv('CONDA_DIR', '/usr/lib'), 'ssl', 'openssl.cnf') + if not os.path.isfile(cnf_file): + with open(cnf_file, 'w') as fh: + fh.write('''\ +[req] +distinguished_name = req_distinguished_name +[req_distinguished_name] +''') + + # Generate a certificate if one doesn't exist on disk + subprocess.check_call(['openssl', 'req', '-new', + '-newkey', 'rsa:2048', + '-days', '365', + '-nodes', '-x509', + '-subj', '/C=XX/ST=XX/L=XX/O=generated/CN=generated', + '-keyout', pem_file, + '-out', pem_file]) + # Restrict access to the file + os.chmod(pem_file, stat.S_IRUSR | stat.S_IWUSR) + c.NotebookApp.certfile = pem_file + +# Change default umask for all subprocesses of the notebook server if set in +# the environment +if 'LSL_UMASK' in os.environ: + os.umask(int(os.environ['LSL_UMASK'], 8)) \ No newline at end of file diff --git a/tutorial/docker/start-notebook.sh b/tutorial/docker/start-notebook.sh new file mode 100644 index 000000000..ed6d0665a --- /dev/null +++ b/tutorial/docker/start-notebook.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +set -e + +wrapper="" +if [[ "${RESTARTABLE}" == "yes" ]]; then + wrapper="run-one-constantly" +fi + +if [[ ! -z "${JUPYTERHUB_API_TOKEN}" ]]; then + # launched by JupyterHub, use single-user entrypoint + exec /usr/local/bin/start-singleuser.sh "$@" +elif [[ ! -z "${JUPYTER_ENABLE_LAB}" ]]; then + . /usr/local/bin/start.sh $wrapper jupyter lab "$@" +else + . /usr/local/bin/start.sh $wrapper jupyter notebook "$@" +fi diff --git a/tutorial/docker/start-singleuser.sh b/tutorial/docker/start-singleuser.sh new file mode 100644 index 000000000..8ddce2d82 --- /dev/null +++ b/tutorial/docker/start-singleuser.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +set -e + +# set default ip to 0.0.0.0 +if [[ "$NOTEBOOK_ARGS $@" != *"--ip="* ]]; then + NOTEBOOK_ARGS="--ip=0.0.0.0 $NOTEBOOK_ARGS" +fi + +# handle some deprecated environment variables +# from DockerSpawner < 0.8. +# These won't be passed from DockerSpawner 0.9, +# so avoid specifying --arg=empty-string +if [ ! -z "$NOTEBOOK_DIR" ]; then + NOTEBOOK_ARGS="--notebook-dir='$NOTEBOOK_DIR' $NOTEBOOK_ARGS" +fi +if [ ! -z "$JPY_PORT" ]; then + NOTEBOOK_ARGS="--port=$JPY_PORT $NOTEBOOK_ARGS" +fi +if [ ! -z "$JPY_USER" ]; then + NOTEBOOK_ARGS="--user=$JPY_USER $NOTEBOOK_ARGS" +fi +if [ ! -z "$JPY_COOKIE_NAME" ]; then + NOTEBOOK_ARGS="--cookie-name=$JPY_COOKIE_NAME $NOTEBOOK_ARGS" +fi +if [ ! -z "$JPY_BASE_URL" ]; then + NOTEBOOK_ARGS="--base-url=$JPY_BASE_URL $NOTEBOOK_ARGS" +fi +if [ ! -z "$JPY_HUB_PREFIX" ]; then + NOTEBOOK_ARGS="--hub-prefix=$JPY_HUB_PREFIX $NOTEBOOK_ARGS" +fi +if [ ! -z "$JPY_HUB_API_URL" ]; then + NOTEBOOK_ARGS="--hub-api-url=$JPY_HUB_API_URL $NOTEBOOK_ARGS" +fi +NOTEBOOK_BIN="jupyterhub-singleuser" + +. /usr/local/bin/start.sh $NOTEBOOK_BIN $NOTEBOOK_ARGS "$@" diff --git a/tutorial/docker/start.sh b/tutorial/docker/start.sh new file mode 100644 index 000000000..5732bf7b0 --- /dev/null +++ b/tutorial/docker/start.sh @@ -0,0 +1,147 @@ +#!/bin/bash +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +set -e + +# Exec the specified command or fall back on bash +if [ $# -eq 0 ]; then + cmd=( "bash" ) +else + cmd=( "$@" ) +fi + +run-hooks () { + # Source scripts or run executable files in a directory + if [[ ! -d "$1" ]] ; then + return + fi + echo "$0: running hooks in $1" + for f in "$1/"*; do + case "$f" in + *.sh) + echo "$0: running $f" + source "$f" + ;; + *) + if [[ -x "$f" ]] ; then + echo "$0: running $f" + "$f" + else + echo "$0: ignoring $f" + fi + ;; + esac + done + echo "$0: done running hooks in $1" +} + +run-hooks /usr/local/bin/start-notebook.d + +# Handle special flags if we're root +if [ $(id -u) == 0 ] ; then + + # Only attempt to change the lwa username if it exists + if id lwa &> /dev/null ; then + echo "Set username to: $LSL_USER" + usermod -d /home/$LSL_USER -l $LSL_USER lwa + fi + + # Handle case where provisioned storage does not have the correct permissions by default + # Ex: default NFS/EFS (no auto-uid/gid) + if [[ "$CHOWN_HOME" == "1" || "$CHOWN_HOME" == 'yes' ]]; then + echo "Changing ownership of /home/$LSL_USER to $LSL_UID:$LSL_GID with options '${CHOWN_HOME_OPTS}'" + chown $CHOWN_HOME_OPTS $LSL_UID:$LSL_GID /home/$LSL_USER + fi + if [ ! -z "$CHOWN_EXTRA" ]; then + for extra_dir in $(echo $CHOWN_EXTRA | tr ',' ' '); do + echo "Changing ownership of ${extra_dir} to $LSL_UID:$LSL_GID with options '${CHOWN_EXTRA_OPTS}'" + chown $CHOWN_EXTRA_OPTS $LSL_UID:$LSL_GID $extra_dir + done + fi + + # handle home and working directory if the username changed + if [[ "$LSL_USER" != "lwa" ]]; then + # changing username, make sure homedir exists + # (it could be mounted, and we shouldn't create it if it already exists) + if [[ ! -e "/home/$LSL_USER" ]]; then + echo "Relocating home dir to /home/$LSL_USER" + mv /home/lwa "/home/$LSL_USER" || ln -s /home/lwa "/home/$LSL_USER" + fi + # if workdir is in /home/lwa, cd to /home/$LSL_USER + if [[ "$PWD/" == "/home/lwa/"* ]]; then + newcwd="/home/$LSL_USER/${PWD:13}" + echo "Setting CWD to $newcwd" + cd "$newcwd" + fi + fi + + # Change UID:GID of LSL_USER to LSL_UID:LSL_GID if it does not match + if [ "$LSL_UID" != $(id -u $LSL_USER) ] || [ "$LSL_GID" != $(id -g $LSL_USER) ]; then + echo "Set user $LSL_USER UID:GID to: $LSL_UID:$LSL_GID" + if [ "$LSL_GID" != $(id -g $LSL_USER) ]; then + groupadd -g $LSL_GID -o ${LSL_GROUP:-${LSL_USER}} + fi + userdel $LSL_USER + useradd --home /home/$LSL_USER -u $LSL_UID -g $LSL_GID -G 100 -l $LSL_USER + fi + + # Enable sudo if requested + if [[ "$GRANT_SUDO" == "1" || "$GRANT_SUDO" == 'yes' ]]; then + echo "Granting $LSL_USER sudo access and appending $CONDA_DIR/bin to sudo PATH" + echo "$LSL_USER ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/notebook + fi + + # Add $CONDA_DIR/bin to sudo secure_path + sed -r "s#Defaults\s+secure_path\s*=\s*\"?([^\"]+)\"?#Defaults secure_path=\"\1:$CONDA_DIR/bin\"#" /etc/sudoers | grep secure_path > /etc/sudoers.d/path + + # Exec the command as LSL_USER with the PATH and the rest of + # the environment preserved + run-hooks /usr/local/bin/before-notebook.d + echo "Executing the command: ${cmd[@]}" + exec sudo -E -H -u $LSL_USER PATH=$PATH XDG_CACHE_HOME=/home/$LSL_USER/.cache PYTHONPATH=${PYTHONPATH:-} "${cmd[@]}" +else + if [[ "$LSL_UID" == "$(id -u lwa)" && "$LSL_GID" == "$(id -g lwa)" ]]; then + # User is not attempting to override user/group via environment + # variables, but they could still have overridden the uid/gid that + # container runs as. Check that the user has an entry in the passwd + # file and if not add an entry. + STATUS=0 && whoami &> /dev/null || STATUS=$? && true + if [[ "$STATUS" != "0" ]]; then + if [[ -w /etc/passwd ]]; then + echo "Adding passwd file entry for $(id -u)" + cat /etc/passwd | sed -e "s/^lwa:/nayvoj:/" > /tmp/passwd + echo "lwa:x:$(id -u):$(id -g):,,,:/home/lwa:/bin/bash" >> /tmp/passwd + cat /tmp/passwd > /etc/passwd + rm /tmp/passwd + else + echo 'Container must be run with group "root" to update passwd file' + fi + fi + + # Warn if the user isn't going to be able to write files to $HOME. + if [[ ! -w /home/lwa ]]; then + echo 'Container must be run with group "users" to update files' + fi + else + # Warn if looks like user want to override uid/gid but hasn't + # run the container as root. + if [[ ! -z "$LSL_UID" && "$LSL_UID" != "$(id -u)" ]]; then + echo 'Container must be run as root to set $LSL_UID' + fi + if [[ ! -z "$LSL_GID" && "$LSL_GID" != "$(id -g)" ]]; then + echo 'Container must be run as root to set $LSL_GID' + fi + fi + + # Warn if looks like user want to run in sudo mode but hasn't run + # the container as root. + if [[ "$GRANT_SUDO" == "1" || "$GRANT_SUDO" == 'yes' ]]; then + echo 'Container must be run as root to grant sudo permissions' + fi + + # Execute the command + run-hooks /usr/local/bin/before-notebook.d + echo "Executing the command: ${cmd[@]}" + exec "${cmd[@]}" +fi diff --git a/tutorial/docker/user.mk b/tutorial/docker/user.mk new file mode 100644 index 000000000..0bd0d712d --- /dev/null +++ b/tutorial/docker/user.mk @@ -0,0 +1,32 @@ +CXX ?= g++ +NVCC ?= nvcc +LINKER ?= g++ +CPPFLAGS ?= +CXXFLAGS ?= -O3 -Wall -pedantic +NVCCFLAGS ?= -O3 -Xcompiler "-Wall" #-Xptxas -v +LDFLAGS ?= +DOXYGEN ?= doxygen +PYBUILDFLAGS ?= +PYINSTALLFLAGS ?= + +#GPU_ARCHS ?= 30 32 35 37 50 52 53 # Nap time! +#GPU_ARCHS ?= 35 52 +GPU_ARCHS ?= 35 50 61 75 + +GPU_SHAREDMEM ?= 16384 # GPU shared memory size + +CUDA_HOME ?= /usr/local/cuda +CUDA_LIBDIR ?= $(CUDA_HOME)/lib +CUDA_LIBDIR64 ?= $(CUDA_HOME)/lib64 +CUDA_INCDIR ?= $(CUDA_HOME)/include + +ALIGNMENT ?= 4096 # Memory allocation alignment + +#NODEBUG = 1 # Disable debugging mode (use this for production releases) +#TRACE = 1 # Enable tracing mode (generates annotations for use with nvprof/nvvp) +#NOCUDA = 1 # Disable CUDA support +#ANY_ARCH = 1 # Disable native architecture compilation +#CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) +NUMA = 1 # Enable use of numa library for setting affinity of ring memory +HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture +#VMA = 1 # Enable use of Mellanox libvma in udp_capture From c15185e64aec3164995013f4d2a97e9358c3cc7f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 3 May 2021 10:55:03 -0600 Subject: [PATCH 0078/1155] Updated for the Docker image. --- tutorial/README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tutorial/README.md b/tutorial/README.md index 8b896c535..31649da33 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -4,4 +4,19 @@ A collection of examples that show how to use various features in the [Bifrost f * Bifrost is described in [Cranmer et al.](https://arxiv.org/abs/1708.00720) * Documentation for the Python APIs can be found [here](http://ledatelescope.github.io/bifrost/) - * There is an [overview talk of Bifrost](https://www.youtube.com/watch?v=DXH89rOVVzg) from the CASPER 2019 workshop. + * There is an [overview talk of Bifrost](https://www.youtube.com/watch?v=DXH89rOVVzg) from the 2019 CASPER workshop. + + ## Docker Image + + You should be able to run these tutorials in any Jupyter environment that has Bifrost installed. We also + have a Docker image with Bifrost, CUDA, Jupyter, and the tutorial already installed if you want a quicker + path to trying it out. Simply run: + + ``` + docker pull lwaproject/bifrost_tutorial + docker run -p 8888:8888 --runtime=nvidia lwaproject/bifrost_tutorial + ``` + + This will start the Jupyter server on port 8888 which you can connect to with a browser running on the + host. *Note that this uses Nvidia runtime for Docker to allow access to the host's GPU for the GPU-enabled + portions of the tutorial.* From 7c729b80688b644970f30dfb99e4798b1e605d66 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 4 May 2021 15:35:30 -0600 Subject: [PATCH 0079/1155] Made runnable. --- tutorial/04_pipelines.ipynb | 219 +++++++++++++++++++++++++++++------- 1 file changed, 181 insertions(+), 38 deletions(-) diff --git a/tutorial/04_pipelines.ipynb b/tutorial/04_pipelines.ipynb index 680d453d2..e5a5d7a7e 100644 --- a/tutorial/04_pipelines.ipynb +++ b/tutorial/04_pipelines.ipynb @@ -13,15 +13,23 @@ ] }, { - "cell_type": "markdown", - "id": "2b20d04d", + "cell_type": "code", + "execution_count": 1, + "id": "423032b3", "metadata": {}, + "outputs": [], "source": [ - "```\n", + "import os\n", + "import json\n", + "import time\n", + "import numpy\n", + "import threading\n", + "\n", + "import bifrost\n", + "\n", "class GeneratorOp(object):\n", " def __init__(self, oring, ntime_gulp=250, \n", " shutdown_event=None, core=None):\n", - " self.sock = sock\n", " self.oring = oring\n", " self.ntime_gulp = ntime_gulp\n", " if shutdown_event is None:\n", @@ -35,18 +43,18 @@ " def main(self):\n", " with self.oring.begin_writing() as oring:\n", " navg = 24\n", - " tint = navg / CHAN_BW\n", + " tint = navg / 25e3\n", " tgulp = tint * self.ntime_gulp\n", " nbeam = 1\n", " chan0 = 1234\n", " nchan = 16*184\n", " npol = 4\n", " \n", - " ohdr = {'time_tag': int(int(time.time())*FS),\n", + " ohdr = {'time_tag': int(int(time.time())*196e6),\n", " 'seq0': 0, \n", " 'chan0': chan0,\n", - " 'cfreq0': chan0*CHAN_BW,\n", - " 'bw': nchan*CHAN_BW,\n", + " 'cfreq0': chan0*25e3,\n", + " 'bw': nchan*25e3,\n", " 'navg': navg,\n", " 'nbeam': nbeam,\n", " 'nchan': nchan,\n", @@ -71,8 +79,7 @@ " curr_time = time.time()\n", " while curr_time - prev_time < tgulp:\n", " time.sleep(0.01)\n", - " curr_time = time.time()\n", - "```" + " curr_time = time.time()" ] }, { @@ -91,11 +98,13 @@ ] }, { - "cell_type": "markdown", - "id": "965f8f47", + "cell_type": "code", + "execution_count": 2, + "id": "0bb566f8", "metadata": {}, + "outputs": [], "source": [ - "```\n", + "\n", "class WriterOp(object):\n", " def __init__(self, iring, ntime_gulp=250, guarantee=True, core=None):\n", " self.iring = iring\n", @@ -104,15 +113,10 @@ " self.core = core\n", " \n", " def main(self):\n", - " if self.core is not None:\n", - " cpu_affinity.set_core(self.core)\n", - " \n", " for iseq in self.iring.read(guarantee=self.guarantee):\n", " ihdr = json.loads(iseq.header.tostring())\n", " \n", - " self.sequence_proclog.update(ihdr)\n", - " \n", - " print(\"Writer: Start of new sequence: %s\", str(ihdr))\n", + " print(\"Writer: Start of new sequence:\", str(ihdr))\n", " \n", " time_tag = ihdr['time_tag']\n", " navg = ihdr['navg']\n", @@ -137,9 +141,9 @@ " idata = ispan.data_view(numpy.float32).reshape(ishape)\n", " with open(f\"{time_tag}.dat\", 'wb') as fh:\n", " fh.write(idata.tobytes())\n", + " print(' ', fh.name, '@', os.path.getsize(fh.name))\n", " \n", - " time_tag += navg * self.ntime_gulp * (int(FS) / int(CHAN_BW))\n", - "```" + " time_tag += navg * self.ntime_gulp * (int(196e6) // int(25e3))" ] }, { @@ -153,12 +157,57 @@ ] }, { - "cell_type": "markdown", - "id": "07e406bd", + "cell_type": "code", + "execution_count": 3, + "id": "7dfa4ef3", "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:10: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.\n", + " # Remove the CWD from sys.path while we load stuff.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writer: Start of new sequence: {'time_tag': 317552125968000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', 'complex': False, 'nbit': 32}\n", + " 317552125968000000.dat @ 11776000\n", + " 317552126015040000.dat @ 11776000\n", + " 317552126062080000.dat @ 11776000\n", + " 317552126109120000.dat @ 11776000\n", + " 317552126156160000.dat @ 11776000\n", + " 317552126203200000.dat @ 11776000\n", + " 317552126250240000.dat @ 11776000\n", + " 317552126297280000.dat @ 11776000\n", + " 317552126344320000.dat @ 11776000\n", + " 317552126391360000.dat @ 11776000\n", + " 317552126438400000.dat @ 11776000\n", + " 317552126485440000.dat @ 11776000\n", + " 317552126532480000.dat @ 11776000\n", + " 317552126579520000.dat @ 11776000\n", + " 317552126626560000.dat @ 11776000\n", + " 317552126673600000.dat @ 11776000\n", + " 317552126720640000.dat @ 11776000\n", + " 317552126767680000.dat @ 11776000\n", + "Done\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:30: DeprecationWarning: generator 'ReadSequence.read' raised StopIteration\n", + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:9: DeprecationWarning: generator 'Ring.read' raised StopIteration\n", + " if __name__ == '__main__':\n" + ] + } + ], "source": [ - "```\n", - "write_ring = Ring(name=\"write\")\n", + "write_ring = bifrost.ring.Ring(name=\"write\")\n", "\n", "ops = []\n", "ops.append(GeneratorOp(write_ring, ntime_gulp=250, core=0))\n", @@ -168,9 +217,13 @@ "for thread in threads:\n", " thread.start()\n", " \n", + "# Don't run forever\n", + "time.sleep(3)\n", + "ops[0].shutdown()\n", + "\n", "for thread in threads:\n", " thread.join()\n", - "```" + "print(\"Done\")" ] }, { @@ -184,25 +237,26 @@ ] }, { - "cell_type": "markdown", - "id": "bddfd9fd", + "cell_type": "code", + "execution_count": 4, + "id": "6519c569", "metadata": {}, + "outputs": [], "source": [ - "```\n", "class CopyOp(object):\n", - " def __init__(self, iring, oring, ntime_gulp=250, core=-1):\n", + " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", " self.iring = iring\n", " self.oring = oring\n", " self.ntime_gulp = ntime_gulp\n", + " self.guarantee = guarantee\n", " self.core = core\n", " \n", " def main(self):\n", - " cpu_affinity.set_core(self.core)\n", - " \n", " with self.oring.begin_writing() as oring:\n", " for iseq in self.iring.read(guarantee=self.guarantee):\n", " ihdr = json.loads(iseq.header.tostring())\n", - " print(\"Copy: Start of new sequence: %s\", str(ihdr))\n", + " \n", + " print(\"Copy: Start of new sequence:\", str(ihdr))\n", " \n", " time_tag = ihdr['time_tag']\n", " navg = ihdr['navg']\n", @@ -221,12 +275,13 @@ " \n", " ogulp_size = igulp_size\n", " oshape = ishape\n", + " self.oring.resize(ogulp_size)\n", " \n", " ohdr = ihdr.copy()\n", " ohdr_str = json.dumps(ohdr)\n", " \n", " iseq_spans = iseq.read(igulp_size)\n", - " with oring.begin_sequence(time_tag=base_time_tag, header=ohdr_str) as oseq:\n", + " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", " for ispan in iseq_spans:\n", " if ispan.size < igulp_size:\n", " continue # Ignore final gulp\n", @@ -234,8 +289,7 @@ " with oseq.reserve(ogulp_size) as ospan:\n", " idata = ispan.data_view(numpy.float32)\n", " odata = ospan.data_view(numpy.float32) \n", - " odata[...] = idata\n", - "```" + " odata[...] = idata" ] }, { @@ -243,9 +297,98 @@ "id": "8fc149b7", "metadata": {}, "source": [ - "This `CopyOp` block combines the characteristics of reading and writing from rings to copy data from one ring to the other.\n", + "This `CopyOp` block combines the characteristics of reading and writing from rings to copy data from one ring to the other." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "094130bc", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:12: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.\n", + " if sys.path[0] == '':\n", + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:10: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.\n", + " # Remove the CWD from sys.path while we load stuff.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Copy: Start of new sequence: {'time_tag': 317552126948000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', 'complex': False, 'nbit': 32}\n", + "Writer: Start of new sequence: {'time_tag': 317552126948000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', 'complex': False, 'nbit': 32}\n", + " 317552126948000000.dat @ 11776000\n", + " 317552126995040000.dat @ 11776000\n", + " 317552127042080000.dat @ 11776000\n", + " 317552127089120000.dat @ 11776000\n", + " 317552127136160000.dat @ 11776000\n", + " 317552127183200000.dat @ 11776000\n", + " 317552127230240000.dat @ 11776000\n", + " 317552127277280000.dat @ 11776000\n", + " 317552127324320000.dat @ 11776000\n", + " 317552127371360000.dat @ 11776000\n", + " 317552127418400000.dat @ 11776000\n", + " 317552127465440000.dat @ 11776000\n", + " 317552127512480000.dat @ 11776000\n", + " 317552127559520000.dat @ 11776000\n", + " 317552127606560000.dat @ 11776000\n", + " 317552127653600000.dat @ 11776000\n", + " 317552127700640000.dat @ 11776000\n", + " 317552127747680000.dat @ 11776000\n", + " 317552127794720000.dat @ 11776000\n", + " 317552127841760000.dat @ 11776000\n", + " 317552127888800000.dat @ 11776000\n", + " 317552127935840000.dat @ 11776000\n", + " 317552127982880000.dat @ 11776000\n", + "Done\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:40: DeprecationWarning: generator 'ReadSequence.read' raised StopIteration\n", + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:11: DeprecationWarning: generator 'Ring.read' raised StopIteration\n", + " # This is added back by InteractiveShellApp.init_path()\n", + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:30: DeprecationWarning: generator 'ReadSequence.read' raised StopIteration\n", + "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:9: DeprecationWarning: generator 'Ring.read' raised StopIteration\n", + " if __name__ == '__main__':\n" + ] + } + ], + "source": [ + "copy_ring = bifrost.ring.Ring(name=\"copy\")\n", + "write_ring = bifrost.ring.Ring(name=\"write\")\n", + "\n", + "ops = []\n", + "ops.append(GeneratorOp(copy_ring, ntime_gulp=250, core=0))\n", + "ops.append(CopyOp(copy_ring, write_ring, ntime_gulp=250, core=1))\n", + "ops.append(WriterOp(write_ring, ntime_gulp=250, core=2))\n", + "\n", + "threads = [threading.Thread(target=op.main) for op in ops]\n", + "for thread in threads:\n", + " thread.start()\n", + " \n", + "# Don't run forever\n", + "time.sleep(3)\n", + "ops[0].shutdown()\n", "\n", - "These examples should provide a starting point for building pipelines in Bifrost. Although the examples run purely on the CPU, GPU versions can also be create, either through copying to GPU memory within each block or by using rings in the 'cuda' memory space. If 'cuda' rings the user needs to ensure that all memory copies to/from the ring are executed before the span is released. Otherwise, corruption of the ring's contents can happen. In the next section we will look at logging from inside the blocks to help understand performance. " + "for thread in threads:\n", + " thread.join()\n", + "print(\"Done\")" + ] + }, + { + "cell_type": "markdown", + "id": "916ef6f2", + "metadata": {}, + "source": [ + "These examples should provide a starting point for building pipelines in Bifrost. Although the examples run purely on the CPU, GPU versions can also be create, either through copying to GPU memory within each block or by using rings in the 'cuda' memory space. If 'cuda' rings the user needs to ensure that all memory copies to/from the ring are executed before the span is released. Otherwise, corruption of the ring's contents can happen. In the next section we will look at logging from inside the blocks to help understand performance." ] } ], From 68f608814768ce772f9d4752fc94716cc719ff45 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 4 May 2021 15:37:23 -0600 Subject: [PATCH 0080/1155] Cleanup to match 04. --- tutorial/05_block_logging.ipynb | 56 ++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/tutorial/05_block_logging.ipynb b/tutorial/05_block_logging.ipynb index eeddbe263..6ce367856 100644 --- a/tutorial/05_block_logging.ipynb +++ b/tutorial/05_block_logging.ipynb @@ -9,29 +9,38 @@ "\n", "In the previous section we looked at how to put blocks and rings together to build a simple pipeline. In this section we will look at the tools Bifrost provides to analyze pipeline performance and how to integrate those into blocks.\n", "\n", - "Let's start with the `CopyOp` block from before:" + "Let's start with the `CopyOp` block from the previous section:" ] }, { - "cell_type": "markdown", - "id": "9990288a", + "cell_type": "code", + "execution_count": 1, + "id": "84820717", "metadata": {}, + "outputs": [], "source": [ - "```\n", + "import os\n", + "import json\n", + "import time\n", + "import numpy\n", + "import threading\n", + "\n", + "import bifrost\n", + "\n", "class CopyOp(object):\n", - " def __init__(self, iring, oring, ntime_gulp=250, core=-1):\n", + " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", " self.iring = iring\n", " self.oring = oring\n", " self.ntime_gulp = ntime_gulp\n", + " self.guarantee = guarantee\n", " self.core = core\n", " \n", " def main(self):\n", - " cpu_affinity.set_core(self.core)\n", - " \n", " with self.oring.begin_writing() as oring:\n", " for iseq in self.iring.read(guarantee=self.guarantee):\n", " ihdr = json.loads(iseq.header.tostring())\n", - " print(\"Copy: Start of new sequence: %s\", str(ihdr))\n", + " \n", + " print(\"Copy: Start of new sequence:\", str(ihdr))\n", " \n", " time_tag = ihdr['time_tag']\n", " navg = ihdr['navg']\n", @@ -50,12 +59,13 @@ " \n", " ogulp_size = igulp_size\n", " oshape = ishape\n", + " self.oring.resize(ogulp_size)\n", " \n", " ohdr = ihdr.copy()\n", " ohdr_str = json.dumps(ohdr)\n", " \n", " iseq_spans = iseq.read(igulp_size)\n", - " with oring.begin_sequence(time_tag=base_time_tag, header=ohdr_str) as oseq:\n", + " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", " for ispan in iseq_spans:\n", " if ispan.size < igulp_size:\n", " continue # Ignore final gulp\n", @@ -63,8 +73,7 @@ " with oseq.reserve(ogulp_size) as ospan:\n", " idata = ispan.data_view(numpy.float32)\n", " odata = ospan.data_view(numpy.float32) \n", - " odata[...] = idata\n", - "```" + " odata[...] = idata" ] }, { @@ -78,16 +87,21 @@ ] }, { - "cell_type": "markdown", - "id": "4f0e15ee", + "cell_type": "code", + "execution_count": 2, + "id": "cfea96e1", "metadata": {}, + "outputs": [], "source": [ - "```\n", + "from bifrost.proclog import ProcLog\n", + "from bifrost.affinity import get_core, set_core\n", + "\n", "class CopyOp(object):\n", - " def __init__(self, iring, oring, ntime_gulp=250, core=-1):\n", + " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", " self.iring = iring\n", " self.oring = oring\n", " self.ntime_gulp = ntime_gulp\n", + " self.guarantee = guarantee\n", " self.core = core\n", " \n", " self.bind_proclog = ProcLog(type(self).__name__+\"/bind\")\n", @@ -102,9 +116,9 @@ " self.size_proclog.update({'nseq_per_gulp': self.ntime_gulp})\n", " \n", " def main(self):\n", - " cpu_affinity.set_core(self.core)\n", + " set_core(self.core)\n", " self.bind_proclog.update({'ncore': 1, \n", - " 'core0': cpu_affinity.get_core(),})\n", + " 'core0': get_core(),})\n", " \n", " with self.oring.begin_writing() as oring:\n", " for iseq in self.iring.read(guarantee=self.guarantee):\n", @@ -112,7 +126,7 @@ " \n", " self.sequence_proclog.update(ihdr)\n", " \n", - " print(\"Copy: Start of new sequence: %s\", str(ihdr))\n", + " print(\"Copy: Start of new sequence:\", str(ihdr))\n", " \n", " time_tag = ihdr['time_tag']\n", " navg = ihdr['navg']\n", @@ -131,13 +145,14 @@ " \n", " ogulp_size = igulp_size\n", " oshape = ishape\n", + " self.oring.resize(ogulp_size)\n", " \n", " ohdr = ihdr.copy()\n", " ohdr_str = json.dumps(ohdr)\n", " \n", " prev_time = time.time()\n", " iseq_spans = iseq.read(igulp_size)\n", - " with oring.begin_sequence(time_tag=base_time_tag, header=ohdr_str) as oseq:\n", + " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", " for ispan in iseq_spans:\n", " if ispan.size < igulp_size:\n", " continue # Ignore final gulp\n", @@ -159,8 +174,7 @@ " prev_time = curr_time\n", " self.perf_proclog.update({'acquire_time': acquire_time, \n", " 'reserve_time': reserve_time, \n", - " 'process_time': process_time,})\n", - "```" + " 'process_time': process_time,})" ] }, { From 0e809b3bdc1234046a13538d7696981555ea74b0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 4 May 2021 16:24:02 -0600 Subject: [PATCH 0081/1155] Added packet writing. --- tutorial/06_data_capture.ipynb | 115 ++++++++++++++++++++++++++++++--- 1 file changed, 107 insertions(+), 8 deletions(-) diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index 9a513cd21..a5fccf272 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -13,11 +13,12 @@ ] }, { - "cell_type": "markdown", - "id": "ff91a793", + "cell_type": "code", + "execution_count": 1, + "id": "372e7e14", "metadata": {}, + "outputs": [], "source": [ - "```\n", "import json\n", "import ctypes\n", "import threading\n", @@ -33,7 +34,7 @@ "sock.timeout = 5.0\n", "\n", "class CaptureOp(object):\n", - " def __self, log, oring, sock, nsrc=16, src0=0, max_size=9000, ntime_gulp=250, ntime_slot=25000, core=-1):\n", + " def __init__(self, log, oring, sock, nsrc=16, src0=0, max_size=9000, ntime_gulp=250, ntime_slot=25000, core=-1):\n", " self.log = log\n", " self.oring = oring\n", " self.sock = sock\n", @@ -64,7 +65,6 @@ " \"cfreq\": (chan0 + 0.5 * (nchan - 1)) * CHAN_BW,\n", " \"bw\": nchan * CHAN_BW,\n", " \"nstand\": nsrc * 16,\n", - " # 'stand0': src0*16, # TODO: Pass src0 to the callback too(?)\n", " \"npol\": 2,\n", " \"complex\": True,\n", " \"nbit\": 4,\n", @@ -85,8 +85,7 @@ " core=self.core) as capture:\n", " while not self.shutdown_event.is_set():\n", " status = capture.recv()\n", - " del capture\n", - "````" + " del capture" ] }, { @@ -111,6 +110,106 @@ "As mentioned before, Bifrost also works with reading packets from a file using the `bifrost.packet_capture.DiskReader` class. This works similar to `UDPCapture` but the packet format specifiers require extra information in order to read packets from disk. For example, a CHIPS capture of 132 channels is specified as \"chips\" for `UDPCapture` but as \"chips_132\" for `DiskReader`." ] }, + { + "cell_type": "markdown", + "id": "52efad41", + "metadata": {}, + "source": [ + "## Writing Data\n", + "\n", + "Related to this capture interface is the `bifrost.packet_writer` module. This implments the reverse of the capture in that it takes data from a ring and write it to the network or disk.\n", + "\n", + "Let's look at an example of writing binary data in the [LWA TBN format](https://fornax.phys.unm.edu/lwa/trac/wiki/DP_Formats#TBNOutputInterface), a stream of 8+8-bit complex integers:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a67846f0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Input:\n", + " 0 @ 0 : (-13.042428970336914-12.23082447052002j) -> (-13, -12)\n", + " 1 @ 0 : (6.989960670471191+7.241285800933838j) -> (7, 7)\n", + " 2 @ 0 : (6.997556686401367+3.1934947967529297j) -> (7, 3)\n", + " 3 @ 0 : (19.13669776916504+3.609508991241455j) -> (19, 4)\n", + " 4 @ 0 : (-8.871187210083008+3.9164607524871826j) -> (-9, 4)\n", + "Output:\n", + "[(-13, -12), (7, 7), (7, 3), (19, 4), (-9, 4)]\n" + ] + } + ], + "source": [ + "import time\n", + "import numpy\n", + "from bifrost.packet_writer import HeaderInfo, DiskWriter\n", + "\n", + "with open('output.dat', 'wb') as fh:\n", + " bfo = DiskWriter('tbn', fh, core=0)\n", + " desc = HeaderInfo()\n", + " desc.set_tuning(int(round(38e6 / 196e6 * 2**32)))\n", + " desc.set_gain(20)\n", + " \n", + " time_tag = int(time.time()*196e6)\n", + " \n", + " data = numpy.random.randn(16, 512*10)\n", + " data = data + 1j*numpy.random.randn(*data.shape)\n", + " for i in range(16):\n", + " data[i,:] *= 4\n", + " data = bifrost.ndarray(data.astype(numpy.complex64))\n", + " \n", + " qdata = bifrost.ndarray(shape=data.shape, dtype='ci8')\n", + " bifrost.quantize.quantize(data, qdata, scale=2)\n", + " print('Input:')\n", + " for i in range(5):\n", + " print(' ', i, '@', 0, ':', data[0,i]*2, '->', qdata[0,i])\n", + " \n", + " qdata = qdata.reshape(16, -1, 512)\n", + " qdata = qdata.transpose(1,0,2).copy()\n", + " \n", + " bfo.send(desc, time_tag, qdata.shape[0]*1960, 0, 1, qdata)\n", + " \n", + "import struct\n", + "print('Output:')\n", + "with open('output.dat', 'rb') as fh:\n", + " packet_header = fh.read(24)\n", + " packet_payload = fh.read(512*2)\n", + " packet_payload = struct.unpack('<1024b', packet_payload)\n", + " i, q = packet_payload[0::2], packet_payload[1::2]\n", + " print(list(zip(i,q))[:5])\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "52762b36", + "metadata": {}, + "source": [ + "The flow here is:\n", + " 1. Opening a file in binary write mode and creating new `DiskWriter` and `HeaderInfo` instances. `DiskWriter` is what actually writes the formatted data to disk and `HeaderInfo` is a metadata helper used to fill in the packet headers as they are written.\n", + " 2. Setting the \"tuning\" and \"gain\" parameters for the output headers. These are values that are common to all of the packets written.\n", + " 3. Creating a time tag for the first sample and a collection of complex data that will go into the packets.\n", + " 4. Converting the complex data into the 8+8-bit integer format expected for TBN data. The `DiskWriter` instances are data type-aware.\n", + " 5. Reshaping `qdata` so that it has axes of (packet number, output index, samples per packet).\n", + " 6. Actually writing the data to disk with `DiskWriter.send`. This method takes in:\n", + " * a `HeaderInfo` instance used to population the header,\n", + " * a starting time tag value,\n", + " * a time tag increment to apply when moving to the next packet,\n", + " * an output naming starting index,\n", + " * a output naming increment to apply when moving to the next output name, and\n", + " * the data itself.\n", + "\n", + "After this we re-open the file and read in the data to verify that what is written matches what was put in. Since the data is 8+8-bit complex this is easy to do with some information about the packet structure and the `struct` module.\n", + "\n", + "To write to the network rather than a file you would:\n", + " 1. Swap the open filehandle with a `bifrost.udp_socket.UDPSocket` instance and\n", + " 2. Trade `bifrost.packet_writer.DiskWriter` for `bifrost.packet_writer.UDPTransmit`." + ] + }, { "cell_type": "markdown", "id": "f8c48a43", @@ -132,7 +231,7 @@ " 4. Update `bifrost/packet_capture.h` to expose the new callback to the Python API.\n", " 5. *Optionally*, add support for writing packets:\n", " * Add the new format to `packet_writer.hpp` by adding a new sub-class of the C++ `BFpacketwriter_impl` class.\n", - " * Update the C++ `BFpacketwriter_create` function to expore the new packet format." + " * Update the C++ `BFpacketwriter_create` function to expose the new packet format." ] } ], From 76c8e38764352811dc821cc4d6e78fa7cd28930a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 4 May 2021 18:09:24 -0600 Subject: [PATCH 0082/1155] Added something. --- tutorial/07_high_level_api.ipynb | 280 ++++++++++++++++++++++++++++++- 1 file changed, 279 insertions(+), 1 deletion(-) diff --git a/tutorial/07_high_level_api.ipynb b/tutorial/07_high_level_api.ipynb index ed7ddd6bb..eddb55fe4 100644 --- a/tutorial/07_high_level_api.ipynb +++ b/tutorial/07_high_level_api.ipynb @@ -9,7 +9,285 @@ "\n", "Up until now we have been using the low level Python API that Bifrost has to show the inner workings of the framework and how to build a pipeline. However, Bifrost also has a high level Python API that makes building blocks and pipelines easier with less code. In this section we will look at this interface.\n", "\n", - "**Someone please add something here.**" + "Let's start by revisiting the `CopyOp` block from the pipelines section:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e28cdc15", + "metadata": {}, + "outputs": [], + "source": [ + "class CopyOp(object):\n", + " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", + " self.iring = iring\n", + " self.oring = oring\n", + " self.ntime_gulp = ntime_gulp\n", + " self.guarantee = guarantee\n", + " self.core = core\n", + " \n", + " def main(self):\n", + " with self.oring.begin_writing() as oring:\n", + " for iseq in self.iring.read(guarantee=self.guarantee):\n", + " ihdr = json.loads(iseq.header.tostring())\n", + " \n", + " print(\"Copy: Start of new sequence:\", str(ihdr))\n", + " \n", + " time_tag = ihdr['time_tag']\n", + " navg = ihdr['navg']\n", + " nbeam = ihdr['nbeam']\n", + " chan0 = ihdr['chan0']\n", + " nchan = ihdr['nchan']\n", + " chan_bw = ihdr['bw'] / nchan\n", + " npol = ihdr['npol']\n", + " pols = ihdr['pols']\n", + " pols = pols.replace('CR', 'XY_real')\n", + " pols = pols.replace('CI', 'XY_imag')\n", + "\n", + " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " self.iring.resize(igulp_size, igulp_size*5)\n", + " \n", + " ogulp_size = igulp_size\n", + " oshape = ishape\n", + " self.oring.resize(ogulp_size)\n", + " \n", + " ohdr = ihdr.copy()\n", + " ohdr_str = json.dumps(ohdr)\n", + " \n", + " iseq_spans = iseq.read(igulp_size)\n", + " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", + " for ispan in iseq_spans:\n", + " if ispan.size < igulp_size:\n", + " continue # Ignore final gulp\n", + " \n", + " with oseq.reserve(ogulp_size) as ospan:\n", + " idata = ispan.data_view(numpy.float32)\n", + " odata = ospan.data_view(numpy.float32) \n", + " odata[...] = idata" + ] + }, + { + "cell_type": "markdown", + "id": "56648b0e", + "metadata": {}, + "source": [ + "There is a lot of setup in here and iteration control that is common across many of the blocks that we have looked at. In the high level API much of this can be abstracted away using the classes defined in `bifrost.pipelines`:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e88a7c54", + "metadata": {}, + "outputs": [], + "source": [ + "import copy\n", + "\n", + "from bifrost import pipeline\n", + "\n", + "class NewCopyOp(pipeline.TransformBlock):\n", + " def __init__(self, iring, *args, **kwargs):\n", + " super(NewCopyOp, self).__init__(iring, *args, **kwargs)\n", + " \n", + " def on_sequence(self, iseq):\n", + " ihdr = iseq.header\n", + " print(\"Copy: Start of new sequence:\", str(ihdr))\n", + " \n", + " ohdr = copy.deepcopy(iseq.header)\n", + " return ohdr\n", + "\n", + " def on_data(self, ispan, ospan):\n", + " in_nframe = ispan.nframe\n", + " out_nframe = in_nframe\n", + "\n", + " idata = ispan.data\n", + " odata = ospan.data\n", + "\n", + " odata[...] = idata\n", + " return out_nframe" + ] + }, + { + "cell_type": "markdown", + "id": "2a696a9f", + "metadata": {}, + "source": [ + "That is much more compact. The key things in this new class are:\n", + " 1. the `on_sequence` method is called whenever a new sequence starts and is used to update the header for the output ring buffer and\n", + " 2. the `on_data` method is called for each span/gulp that is processed.\n", + " \n", + " Similarly, we can translate the `GeneratorOp` and `WriterOp` blocks as well using sub-classes of `bifrost.pipeline.SourceBlock` and `bifrost.pipeline.SinkBlock`, respectively:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "246e1a6c", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import time\n", + "import numpy\n", + "\n", + "class NewGeneratorOp(pipeline.SourceBlock):\n", + " def __init__(self, ntime_gulp, *args, **kwargs):\n", + " super(NewGeneratorOp, self).__init__(['generator',], 1,\n", + " *args, **kwargs)\n", + " \n", + " self.ntime_gulp = ntime_gulp\n", + " self.ngulp_done = 0\n", + " self.ngulp_max = 10\n", + " \n", + " self.navg = 24\n", + " tint = self.navg / 25e3\n", + " self.tgulp = tint * self.ntime_gulp\n", + " self.nbeam = 1\n", + " self.chan0 = 1234\n", + " self.nchan = 16*184\n", + " self.npol = 4\n", + " \n", + " def create_reader(self, name):\n", + " self.ngulp_done = 0\n", + " \n", + " class Random(object):\n", + " def __init__(self, name):\n", + " self.name = name\n", + " def __enter__(self):\n", + " return self\n", + " def __exit__(self, type, value, tb):\n", + " return True\n", + " def read(self, *args):\n", + " return numpy.random.randn(*args)\n", + " \n", + " return Random(name)\n", + " \n", + " def on_sequence(self, reader, name):\n", + " ohdr = {'time_tag': int(int(time.time())*196e6),\n", + " 'seq0': 0, \n", + " 'chan0': self.chan0,\n", + " 'cfreq0': self.chan0*25e3,\n", + " 'bw': self.nchan*25e3,\n", + " 'navg': self.navg,\n", + " 'nbeam': self.nbeam,\n", + " 'nchan': self.nchan,\n", + " 'npol': self.npol,\n", + " 'pols': 'XX,YY,CR,CI',\n", + " }\n", + " ohdr['_tensor'] = {'dtype': 'f32',\n", + " 'shape': [-1,\n", + " self.ntime_gulp,\n", + " self.nbeam,\n", + " self.nchan,\n", + " self.npol]\n", + " }\n", + " return [ohdr,]\n", + " \n", + " def on_data(self, reader, ospans):\n", + " indata = reader.read(self.ntime_gulp, self.nbeam, self.nchan, self.npol)\n", + " time.sleep(self.tgulp)\n", + "\n", + " if indata.shape[0] == self.ntime_gulp \\\n", + " and self.ngulp_done < self.ngulp_max:\n", + " ospans[0].data[...] = indata\n", + " self.ngulp_done += 1\n", + " return [1]\n", + " else:\n", + " return [0] " + ] + }, + { + "cell_type": "markdown", + "id": "44a371f1", + "metadata": {}, + "source": [ + "For the `bifrost.pipeline.SourceBlock` we need have slightly different requirements on `on_sequence` and `on_data`. Plus, we also need to define a `create_reader` method that returns a context manager (a class with `__enter__` and `__exit__` methods). For `on_sequence` we need to accept two arguments: a context manager created by `create_reader` and an identifying name (although it is not used here). We also see in `on_sequence` here that the header dictionary has a new required `_tensor` key. This key is the key to automatically chaining blocks together into a pipeline since it defines the data type and dimensionality for the spans/gulps. For `on_data` we also have two arguments now, the context manager and a list of output spans. In here we need to grab the data from `reader` and put it into the appropriate part of the output spans.\n", + "\n", + "We can also translate the original `WriterOp`:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "bbf9db6f", + "metadata": {}, + "outputs": [], + "source": [ + "class NewWriterOp(pipeline.SinkBlock):\n", + " def __init__(self, iring, *args, **kwargs):\n", + " super(NewWriterOp, self).__init__(iring, *args, **kwargs)\n", + " \n", + " self.time_tag = None\n", + " self.navg = 0\n", + " self.nbeam = 0\n", + " self.nchan = 0\n", + " self.npol = 0\n", + " \n", + " def on_sequence(self, iseq):\n", + " ihdr = iseq.header\n", + " print(\"Writer: Start of new sequence:\", str(ihdr))\n", + " \n", + " self.time_tag = iseq.time_tag\n", + " self.navg = ihdr['navg']\n", + " self.nbeam = ihdr['nbeam']\n", + " self.nchan = ihdr['nchan']\n", + " self.npol = ihdr['npol']\n", + "\n", + " def on_data(self, ispan):\n", + " idata = ispan.data.view(numpy.float32)\n", + " idata = idata.reshape(-1, self.nbeam, self.nchan, self.npol)\n", + " \n", + " with open(f\"{self.time_tag}.dat\", 'wb') as fh:\n", + " fh.write(idata.tobytes())\n", + " print(' ', fh.name, '@', os.path.getsize(fh.name))\n", + " self.time_tag += self.navg * idata.shape[0] * (int(196e6) // int(25e3))" + ] + }, + { + "cell_type": "markdown", + "id": "e0fa2439", + "metadata": {}, + "source": [ + "Since this is a data sink we only have one argument for `on_data` which gives the block the current data span/gulp.\n", + "\n", + "We then can put these new blocks all together and launch them under Bifrost's default pipeline with:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f9e295ba", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Copy: Start of new sequence: {'time_tag': 317553970916000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', '_tensor': {'dtype': 'f32', 'shape': [-1, 250, 1, 2944, 4]}, 'name': 'unnamed-sequence-0', 'gulp_nframe': 1}\n", + "Writer: Start of new sequence: {'time_tag': 317553970916000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', '_tensor': {'dtype': 'f32', 'shape': [-1, 250, 1, 2944, 4]}, 'name': 'unnamed-sequence-0', 'gulp_nframe': 1}\n", + " 317553970916000000.dat @ 11776000\n", + " 317553970963040000.dat @ 11776000\n", + " 317553971010080000.dat @ 11776000\n", + " 317553971057120000.dat @ 11776000\n", + " 317553971104160000.dat @ 11776000\n", + " 317553971151200000.dat @ 11776000\n", + " 317553971198240000.dat @ 11776000\n", + " 317553971245280000.dat @ 11776000\n", + " 317553971292320000.dat @ 11776000\n", + " 317553971339360000.dat @ 11776000\n" + ] + } + ], + "source": [ + "b_gen = NewGeneratorOp(250)\n", + "b_cpy = NewCopyOp(b_gen)\n", + "b_out = NewWriterOp(b_cpy)\n", + "\n", + "p = pipeline.get_default_pipeline()\n", + "p.run()\n", + "del p" ] } ], From fd900f79fafa5bfb00a9d2bc455509bd5b74d79d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 4 May 2021 18:37:11 -0600 Subject: [PATCH 0083/1155] Added an 'extending Bifrost' section. --- tutorial/08_extending_bifrost.ipynb | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 tutorial/08_extending_bifrost.ipynb diff --git a/tutorial/08_extending_bifrost.ipynb b/tutorial/08_extending_bifrost.ipynb new file mode 100644 index 000000000..23db884a7 --- /dev/null +++ b/tutorial/08_extending_bifrost.ipynb @@ -0,0 +1,48 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f72de036", + "metadata": {}, + "source": [ + "# Extending Bifrost\n", + "\n", + "With the overview of Bifrost and how to build pipelines within the framework out of the way we can turn our attention to extending the core functionality of Bifrost. There are currently three options:\n", + " 1. A pure Python implementation within the low or high level APIs,\n", + " 2. Using just-in-time compilation via numba or bifrost.map for the implemenations, or\n", + " 3. Adding a new C/C++/CUDA module, along with the associated Python wrapper, to Bifrost.\n", + "\n", + "The first two options are straight forward and have been demonstrated earlier in this tutorial. The third option is more involved and this section provides a brief \"how to\".\n", + "\n", + " 1. Create a new source file in `src/` that defines that functions or classes you want. In general these functions should take in C/C++ pointers to `BFarray`s and return `BFstatus` code (see `src/bifrost/common.h`).\n", + " 2. Create a C-compatible header file for your functions in `src/bifrost/`. This will be used to create the Python wrappers via `ctypesgen` that will go into `bifrost.libbifrost_generated`.\n", + " 3. Update `src/Makefile` and add the object file associated with the new source files to `LIBBIFROST_OBJS` so that they get built with `make`.\n", + " 4. Build the necessary low level Python API wrappers needed in `python/bifrost/`.\n", + " 5. Optionally, build the necessary high level Python API wrapper needed in `python/bifrost/blocks/`.\n", + " \n", + "We are also working on a plugin system for Bifrost that should make this process easier by eliminating steps 3 and 4. To get a preview of this system see: https://github.com/ledatelescope/bifrost/tree/plugin-wrapper" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From d874dc90ed6ffe4ed246d0f2cd45c2f47a357391 Mon Sep 17 00:00:00 2001 From: Danny Price Date: Wed, 5 May 2021 14:42:15 +1000 Subject: [PATCH 0084/1155] Added some headings and extra info --- tutorial/00_getting_started.ipynb | 73 ++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb index 9f2886b90..a6c11f397 100644 --- a/tutorial/00_getting_started.ipynb +++ b/tutorial/00_getting_started.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "1dfd7ec3", + "id": "productive-favor", "metadata": {}, "source": [ "# Getting started with Bifrost\n", @@ -13,7 +13,7 @@ { "cell_type": "code", "execution_count": 1, - "id": "a0e32e81", + "id": "proud-container", "metadata": {}, "outputs": [], "source": [ @@ -22,7 +22,7 @@ }, { "cell_type": "markdown", - "id": "538d312c", + "id": "rental-equipment", "metadata": {}, "source": [ "This loads the core parts of Bifrost and several useful functions. The main way of interacting with Bifrost is through the `bifrost.ndarray`, a sub-class of `numpy.ndarray`. You can create an empty array with:" @@ -31,7 +31,7 @@ { "cell_type": "code", "execution_count": 2, - "id": "ed1edd3d", + "id": "subject-quebec", "metadata": {}, "outputs": [ { @@ -54,16 +54,27 @@ }, { "cell_type": "markdown", - "id": "e22f8ee8", + "id": "eleven-omaha", "metadata": {}, "source": [ + "Note that bifrost defines datatypes differently to numpy:\n", + "```\n", + "f32: 32-bit float (equivalent to numpy float32)\n", + "cf32: complex 32-bit data (equivalent to numpy complex64)\n", + "i[8,16,32]: signed integer datatypes of 8, 16 and 32-bit width\n", + "u[8,16,32]: unsigned integer datatypes of 8, 16 and 32-bit width\n", + "ci[8,16,32]: complex 8-bit per sample, 16-bit and 32-bit datatypes\n", + "```\n", + "\n", + "The `ci8` and `ci16` datatypes do not have an equivalent numpy type, but are commonly encountered in radio astronomy.\n", + "\n", "You can also use the `bifrost.ndarray` to wrap existing numpy arrays:" ] }, { "cell_type": "code", "execution_count": 3, - "id": "555be72f", + "id": "lightweight-madrid", "metadata": {}, "outputs": [ { @@ -93,7 +104,7 @@ }, { "cell_type": "markdown", - "id": "33de4f44", + "id": "earlier-latino", "metadata": {}, "source": [ "Since `bifrost.ndarray`s are derived from numpy arrays they can do many (but not all) of the same things:" @@ -102,7 +113,7 @@ { "cell_type": "code", "execution_count": 4, - "id": "5d38a8d8", + "id": "regional-darkness", "metadata": {}, "outputs": [ { @@ -128,7 +139,7 @@ { "cell_type": "code", "execution_count": 5, - "id": "0060cff5", + "id": "artificial-spider", "metadata": {}, "outputs": [ { @@ -149,7 +160,7 @@ }, { "cell_type": "markdown", - "id": "afbb6664", + "id": "thirty-stretch", "metadata": {}, "source": [ "You can also use `bifrost.ndarray`s with [numba](https://numba.pydata.org/):" @@ -158,7 +169,7 @@ { "cell_type": "code", "execution_count": 6, - "id": "10465d3d", + "id": "smaller-organizer", "metadata": {}, "outputs": [ { @@ -187,7 +198,15 @@ }, { "cell_type": "markdown", - "id": "5496e82f", + "id": "informative-brush", + "metadata": {}, + "source": [ + "### Arrays on the CPU and GPU" + ] + }, + { + "cell_type": "markdown", + "id": "acute-efficiency", "metadata": {}, "source": [ "Unlike numpy arrays `bifrost.ndarray` are \"space aware\", meaning that they can exist in different memory spaces. What we have created so far is in system memory. `bifrost.ndarray`s can also exist in \"cuda_host\" (pinned) memory and \"cuda\" (GPU) memory:" @@ -196,7 +215,7 @@ { "cell_type": "code", "execution_count": 7, - "id": "c339a17f", + "id": "changing-enhancement", "metadata": {}, "outputs": [ { @@ -217,7 +236,7 @@ }, { "cell_type": "markdown", - "id": "c4ea2e82", + "id": "million-guess", "metadata": {}, "source": [ "To move between the different spaces the `bifrost.ndarray` class provides a `copy` method:" @@ -226,7 +245,7 @@ { "cell_type": "code", "execution_count": 8, - "id": "bae4c040", + "id": "talented-lending", "metadata": {}, "outputs": [ { @@ -244,7 +263,7 @@ }, { "cell_type": "markdown", - "id": "4412be1f", + "id": "stable-instrumentation", "metadata": {}, "source": [ "Once on the GPU you can take advantage of Bifrost's GPU-based functions, like `bifrost.map`:" @@ -253,7 +272,7 @@ { "cell_type": "code", "execution_count": 9, - "id": "79307b19", + "id": "prospective-financing", "metadata": {}, "outputs": [ { @@ -276,7 +295,7 @@ }, { "cell_type": "markdown", - "id": "10ab2a0e", + "id": "amateur-bridges", "metadata": {}, "source": [ "The `bifrost.map` call here compiles and runs a CUDA kernel that does an element-wise multiplication by ten. In order to view the results of this kernel call we need to copy the memory back to the \"system\" memory space. In the future we hope to support a \"cuda_managed\" space to make this easier." @@ -284,16 +303,18 @@ }, { "cell_type": "markdown", - "id": "17611ed2", + "id": "vocational-archives", "metadata": {}, "source": [ - "`bifrost.map` is an example of a function that does not require any additional setup to run. For some Bifrost functions, like `bifrost.fft.Fft`, some setup is required so that the function knows how to run:" + "`bifrost.map` is an example of a function that does not require any additional setup to run. This code is converted into a CUDA kernel at runtime, using [NVRTC](https://docs.nvidia.com/cuda/nvrtc/index.html). \n", + "\n", + "For some Bifrost functions, like `bifrost.fft.Fft`, some setup is required so that the function knows how to run. To show the use of the Bifrost FFT, let us first make some example data on the GPU, using `bf.map`:" ] }, { "cell_type": "code", "execution_count": 10, - "id": "6d6a9b6e", + "id": "restricted-carrier", "metadata": {}, "outputs": [ { @@ -341,16 +362,16 @@ }, { "cell_type": "markdown", - "id": "2ae1aac4", + "id": "soviet-conference", "metadata": {}, "source": [ - "Now run the FFT and plot the results:" + "Now run the FFT and plot the results. The FFT is initialised using its `.init` method, and then executed using its `.execute` method. An output data array also needs to be pre-allocated :" ] }, { "cell_type": "code", "execution_count": 11, - "id": "1e2e01dd", + "id": "moral-worship", "metadata": {}, "outputs": [ { @@ -397,7 +418,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3260ac9e", + "id": "geological-occasions", "metadata": {}, "outputs": [], "source": [] @@ -419,7 +440,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.9" + "version": "3.7.6" } }, "nbformat": 4, From 93ca2923c26655491c0a99f6b08c102d5c03a95b Mon Sep 17 00:00:00 2001 From: Danny Price Date: Wed, 5 May 2021 15:36:36 +1000 Subject: [PATCH 0085/1155] Added _tensor discussion --- tutorial/07_high_level_api.ipynb | 108 ++++++++++++++++++++++++++----- 1 file changed, 92 insertions(+), 16 deletions(-) diff --git a/tutorial/07_high_level_api.ipynb b/tutorial/07_high_level_api.ipynb index eddb55fe4..3116a9395 100644 --- a/tutorial/07_high_level_api.ipynb +++ b/tutorial/07_high_level_api.ipynb @@ -2,20 +2,45 @@ "cells": [ { "cell_type": "markdown", - "id": "38542414", + "id": "diverse-space", "metadata": {}, "source": [ "# High Level Python API\n", "\n", "Up until now we have been using the low level Python API that Bifrost has to show the inner workings of the framework and how to build a pipeline. However, Bifrost also has a high level Python API that makes building blocks and pipelines easier with less code. In this section we will look at this interface.\n", "\n", - "Let's start by revisiting the `CopyOp` block from the pipelines section:" + "The general idea of the high-level API is to allow a pipeline to be built out of processing blocks that are connected together like Lego. For example, here is a pipeline that reads from a sigproc file, performs a fast dispersion measure transform, and then writes out the data to disk:\n", + "\n", + "```python\n", + "import bifrost as bf\n", + "import sys\n", + "\n", + "filenames = sys.argv[1:]\n", + "\n", + "print \"Building pipeline\"\n", + "data = bf.blocks.read_sigproc(filenames, gulp_nframe=128)\n", + "data = bf.blocks.copy(data, 'cuda')\n", + "data = bf.blocks.transpose(data, ['pol', 'freq', 'time'])\n", + "data = bf.blocks.fdmt(data, max_dm=100.)\n", + "data = bf.blocks.copy(data, 'cuda_host')\n", + "bf.blocks.write_sigproc(data)\n", + "\n", + "print \"Running pipeline\"\n", + "bf.get_default_pipeline().run()\n", + "print \"All done\"\n", + "```\n", + "\n", + "Here we are continually passing the block's output, `data`, to the next block in the pipeline. At runtime, the blocks are connected together (as a directed graph) with ring buffers in between. \n", + "\n", + "### Creating a transform block\n", + "\n", + "Many common processing operations have bifrost blocks, but it likely that you will need to make a custom block at some stage. To see how, let's start by revisiting the `CopyOp` block from the pipelines section:" ] }, { "cell_type": "code", "execution_count": 1, - "id": "e28cdc15", + "id": "black-cruise", "metadata": {}, "outputs": [], "source": [ @@ -70,7 +95,7 @@ }, { "cell_type": "markdown", - "id": "56648b0e", + "id": "fiscal-coverage", "metadata": {}, "source": [ "There is a lot of setup in here and iteration control that is common across many of the blocks that we have looked at. In the high level API much of this can be abstracted away using the classes defined in `bifrost.pipelines`:" @@ -78,8 +103,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "e88a7c54", + "execution_count": null, + "id": "intelligent-retailer", "metadata": {}, "outputs": [], "source": [ @@ -87,7 +112,7 @@ "\n", "from bifrost import pipeline\n", "\n", - "class NewCopyOp(pipeline.TransformBlock):\n", + "class NewCopyBlock(pipeline.TransformBlock):\n", " def __init__(self, iring, *args, **kwargs):\n", " super(NewCopyOp, self).__init__(iring, *args, **kwargs)\n", " \n", @@ -111,20 +136,31 @@ }, { "cell_type": "markdown", - "id": "2a696a9f", + "id": "unique-basement", "metadata": {}, "source": [ "That is much more compact. The key things in this new class are:\n", " 1. the `on_sequence` method is called whenever a new sequence starts and is used to update the header for the output ring buffer and\n", " 2. the `on_data` method is called for each span/gulp that is processed.\n", - " \n", + "\n", + "Put another way, the `on_sequence` happens when there is new *metadata*, and `on_data` happens whenever there is new *data* to process. For example, `on_sequence` may be called when reading a new file, or starting an observation.\n", + " \n" + ] + }, + { + "cell_type": "markdown", + "id": "communist-worse", + "metadata": {}, + "source": [ + "### Creating a source block\n", + "\n", " Similarly, we can translate the `GeneratorOp` and `WriterOp` blocks as well using sub-classes of `bifrost.pipeline.SourceBlock` and `bifrost.pipeline.SinkBlock`, respectively:" ] }, { "cell_type": "code", "execution_count": 3, - "id": "246e1a6c", + "id": "grand-central", "metadata": {}, "outputs": [], "source": [ @@ -200,10 +236,50 @@ }, { "cell_type": "markdown", - "id": "44a371f1", + "id": "essential-burst", "metadata": {}, "source": [ - "For the `bifrost.pipeline.SourceBlock` we need have slightly different requirements on `on_sequence` and `on_data`. Plus, we also need to define a `create_reader` method that returns a context manager (a class with `__enter__` and `__exit__` methods). For `on_sequence` we need to accept two arguments: a context manager created by `create_reader` and an identifying name (although it is not used here). We also see in `on_sequence` here that the header dictionary has a new required `_tensor` key. This key is the key to automatically chaining blocks together into a pipeline since it defines the data type and dimensionality for the spans/gulps. For `on_data` we also have two arguments now, the context manager and a list of output spans. In here we need to grab the data from `reader` and put it into the appropriate part of the output spans.\n", + "For the `bifrost.pipeline.SourceBlock` we need have slightly different requirements on `on_sequence` and `on_data`. Plus, we also need to define a `create_reader` method that returns a context manager (a class with `__enter__` and `__exit__` methods). \n", + "\n", + "For `on_sequence` we need to accept two arguments: a context manager created by `create_reader` and an identifying name (although it is not used here). \n", + "\n", + "For `on_data` we also have two arguments now, the context manager and a list of output spans. In here we need to grab the data from `reader` and put it into the appropriate part of the output spans.\n", + "\n", + "### The all-important bifrost `_tensor` dictionary\n", + "\n", + "We also see in `on_sequence` here that the header dictionary has a new required `_tensor` key. This key is the key to automatically chaining blocks together into a pipeline since it defines the data type and dimensionality for the spans/gulps. At a minimum, the `_tensor` must define the data dtype and shape:\n", + "\n", + "```python\n", + " '_tensor': {\n", + " 'dtype': self.dtype,\n", + " 'shape': [-1, self.gulp_size],\n", + " },\n", + "```\n", + "\n", + "The first index of shape is -1, to indicate that this is a single gulp from the data stream. \n", + "\n", + "However, most block require three additional keywords: \n", + "* `labels`, which give human-friendly names to each axis (e.g. 'time' or 'frequency').\n", + "* `scales`, which defines the start value and step size for each axis (e.g. `[1420, 0.1]` sets start value 1420, step size 0.1).\n", + "* `units`, which defines the units for each axis (e.g. 's' or 'MHz'). These are parsed using [Pint](https://pint.readthedocs.io/en/stable/), and can be used for consistency checking. For example, the `bf.views.merge_axes` view won't allow axes to merge if they have different units, say 'MHz' and 'Jy'. If you attempted to merge axes with 'MHz' and 'kHz' units, this would be allowed, and the corresponding `scales` are updated consistently.\n", + "\n", + "Here is another example `_tensor` with all keywords:\n", + "\n", + "```python\n", + " t0 = 1620192408.005579 # unix timestamp from when writing this tutorial\n", + " dt = 0.1 # 0.1 second step size\n", + " '_tensor': {\n", + " 'dtype': 'cf32'\n", + " 'shape': [-1, 1024, 4],\n", + " 'labels': ['time', 'frequency', 'pol'],\n", + " 'units': ['s', 'MHz', ''],\n", + " 'scales': [[t0, dt], [1420, 0.1], [None, None]]\n", + " }\n", + "```\n", + "\n", + "A transform block reads the tensor metadata, and must output a copy of the tensor with any required changes to shape/scale/units etc. \n", + "\n", + "### Creating a sink block\n", "\n", "We can also translate the original `WriterOp`:" ] @@ -211,7 +287,7 @@ { "cell_type": "code", "execution_count": 4, - "id": "bbf9db6f", + "id": "hispanic-toddler", "metadata": {}, "outputs": [], "source": [ @@ -247,7 +323,7 @@ }, { "cell_type": "markdown", - "id": "e0fa2439", + "id": "arbitrary-dynamics", "metadata": {}, "source": [ "Since this is a data sink we only have one argument for `on_data` which gives the block the current data span/gulp.\n", @@ -258,7 +334,7 @@ { "cell_type": "code", "execution_count": 5, - "id": "f9e295ba", + "id": "objective-principal", "metadata": {}, "outputs": [ { @@ -307,7 +383,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.9" + "version": "3.7.6" } }, "nbformat": 4, From 0ba6b18381887d38236c0d2e8ae33c5780c3154a Mon Sep 17 00:00:00 2001 From: Danny Price Date: Wed, 5 May 2021 15:37:10 +1000 Subject: [PATCH 0086/1155] Updated link to plugins --- tutorial/08_extending_bifrost.ipynb | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tutorial/08_extending_bifrost.ipynb b/tutorial/08_extending_bifrost.ipynb index 23db884a7..9490079f1 100644 --- a/tutorial/08_extending_bifrost.ipynb +++ b/tutorial/08_extending_bifrost.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "f72de036", + "id": "introductory-custody", "metadata": {}, "source": [ "# Extending Bifrost\n", @@ -20,8 +20,16 @@ " 4. Build the necessary low level Python API wrappers needed in `python/bifrost/`.\n", " 5. Optionally, build the necessary high level Python API wrapper needed in `python/bifrost/blocks/`.\n", " \n", - "We are also working on a plugin system for Bifrost that should make this process easier by eliminating steps 3 and 4. To get a preview of this system see: https://github.com/ledatelescope/bifrost/tree/plugin-wrapper" + "We are also working on a plugin system for Bifrost that should make this process easier by eliminating steps 3 and 4. To get a preview of this system see: https://github.com/ledatelescope/bifrost/tree/plugin-wrapper/plugins" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "great-mercury", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -40,7 +48,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.9" + "version": "3.7.6" } }, "nbformat": 4, From 209614170c722e31a5fd6bf45591b5b4018f861d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 5 May 2021 08:09:44 -0600 Subject: [PATCH 0087/1155] Added ci4 to the list of complex integer types. --- tutorial/00_getting_started.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb index a6c11f397..3e117e6de 100644 --- a/tutorial/00_getting_started.ipynb +++ b/tutorial/00_getting_started.ipynb @@ -63,10 +63,10 @@ "cf32: complex 32-bit data (equivalent to numpy complex64)\n", "i[8,16,32]: signed integer datatypes of 8, 16 and 32-bit width\n", "u[8,16,32]: unsigned integer datatypes of 8, 16 and 32-bit width\n", - "ci[8,16,32]: complex 8-bit per sample, 16-bit and 32-bit datatypes\n", + "ci[4,8,16,32]: complex 4-bit per sample, 8-bit, 16-bit and 32-bit datatypes\n", "```\n", "\n", - "The `ci8` and `ci16` datatypes do not have an equivalent numpy type, but are commonly encountered in radio astronomy.\n", + "The `ci4`, `ci8` and `ci16` datatypes do not have an equivalent numpy type, but are commonly encountered in radio astronomy.\n", "\n", "You can also use the `bifrost.ndarray` to wrap existing numpy arrays:" ] From a214d2f8c97c28b0ea67c846aaecf181ef9b7e5b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 13:06:29 -0600 Subject: [PATCH 0088/1155] Basic test suite for the notebooks. --- tutorial/test/__init__.py | 0 tutorial/test/jenkins.sh | 3 + tutorial/test/test_notebooks.py | 121 ++++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 tutorial/test/__init__.py create mode 100755 tutorial/test/jenkins.sh create mode 100644 tutorial/test/test_notebooks.py diff --git a/tutorial/test/__init__.py b/tutorial/test/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tutorial/test/jenkins.sh b/tutorial/test/jenkins.sh new file mode 100755 index 000000000..031a40d93 --- /dev/null +++ b/tutorial/test/jenkins.sh @@ -0,0 +1,3 @@ +#!/bin/bash +# This file runs CPU and GPU tests for jenkins +python -m unittest test_notebooks diff --git a/tutorial/test/test_notebooks.py b/tutorial/test/test_notebooks.py new file mode 100644 index 000000000..6b46d0ad7 --- /dev/null +++ b/tutorial/test/test_notebooks.py @@ -0,0 +1,121 @@ +""" +Unit tests for the various Bifrost tutorial notebooks. +""" + +# Python2 compatibility +from __future__ import print_function, division, absolute_import +import sys +if sys.version_info < (3,): + range = xrange + +import unittest +import glob +import sys +import re +import os + + +run_notebooks_tests = False +try: + import jupyter_client + import nbformat + from nbconvert.preprocessors import ExecutePreprocessor + run_notebooks_tests = True +except ImportError: + pass + + +__version__ = "0.1" +__author__ = "Jayce Dowell" + + +def run_notebook(notebook_path, kernel_name=None): + """ + From: + http://www.blog.pythonlibrary.org/2018/10/16/testing-jupyter-notebooks/ + """ + + nb_name, _ = os.path.splitext(os.path.basename(notebook_path)) + dirname = os.path.dirname(notebook_path) + + with open(notebook_path) as f: + nb = nbformat.read(f, as_version=4) + + proc = ExecutePreprocessor(timeout=600, kernel_name=kernel_name) + proc.allow_errors = True + + proc.preprocess(nb, {'metadata': {'path': '/'}}) + output_path = os.path.join(dirname, '{}_all_output.ipynb'.format(nb_name)) + + with open(output_path, mode='wt') as f: + nbformat.write(nb, f) + errors = [] + for cell in nb.cells: + if 'outputs' in cell: + for output in cell['outputs']: + if output.output_type == 'error': + errors.append(output) + return nb, errors + + +@unittest.skipUnless(run_notebooks_tests, "requires the 'nbformat' and 'nbconvert' modules") +class notebooks_tests(unittest.TestCase): + """A unittest.TestCase collection of unit tests for the Bifrost tutorial notebooks.""" + + def setUp(self): + self.maxDiff = 8192 + + self._kernel = jupyter_client.KernelManager() + self._kernel.start_kernel() + self.kernel_name = self._kernel.kernel_name + + def tearDown(self): + self._kernel.shutdown_kernel() + self.kernel_name = None + + +def _test_generator(notebook): + """ + Function to build a test method for each notebook that is provided. + Returns a function that is suitable as a method inside a unittest.TestCase + class + """ + + def test(self): + nb, errors = run_notebook(notebook, kernel_name=self.kernel_name) + + message = '' + if len(errors) > 0: + for error in errors: + message += '%s: %s\n' % (error['ename'], error['evalue']) + for line in error['traceback']: + message += ' %s\n' % line + self.assertEqual(errors, [], message) + + return test + + +_NOTEBOOKS = glob.glob(os.path.join(os.path.dirname(__file__), '..', '*.ipynb')) +_NOTEBOOKS.sort() +for notebook in _NOTEBOOKS: + test = _test_generator(notebook) + name = 'test_%s' % os.path.splitext(os.path.basename(notebook))[0].replace(' ', '_') + doc = """Execution of the '%s' notebook.""" % os.path.basename(notebook) + setattr(test, '__doc__', doc) + setattr(notebooks_tests, name, test) + + +class notebooks_test_suite(unittest.TestSuite): + """A unittest.TestSuite class which contains all of the Bifrost tutorial + notebook tests.""" + + def __init__(self): + unittest.TestSuite.__init__(self) + + loader = unittest.TestLoader() + self.addTests(loader.loadTestsFromTestCase(notebooks_tests)) + + +if __name__ == '__main__': + unittest.main() + From 12ed15cb84806d89d91467790397162dbfe3c46d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 15:47:06 -0600 Subject: [PATCH 0089/1155] Temporary directory for writing the output. --- tutorial/test/test_notebooks.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tutorial/test/test_notebooks.py b/tutorial/test/test_notebooks.py index 6b46d0ad7..71df4fc66 100644 --- a/tutorial/test/test_notebooks.py +++ b/tutorial/test/test_notebooks.py @@ -13,6 +13,8 @@ import sys import re import os +from tempfile import mkdtemp +from shutil import rmtree run_notebooks_tests = False @@ -65,6 +67,10 @@ class notebooks_tests(unittest.TestCase): def setUp(self): self.maxDiff = 8192 + self.tempDir = mkdtemp(prefix='btnbt') + self.cwd = os.getcwd() + os.chdir(self.tempDir) + self._kernel = jupyter_client.KernelManager() self._kernel.start_kernel() self.kernel_name = self._kernel.kernel_name @@ -72,6 +78,12 @@ def setUp(self): def tearDown(self): self._kernel.shutdown_kernel() self.kernel_name = None + + os.chdir(self.cwd) + try: + rmtree(self.tempDir) + except OSError: + pass def _test_generator(notebook): From e5c14b7d62823c195fada8e558b787c572429f0f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 15:53:18 -0600 Subject: [PATCH 0090/1155] Why is this failing? --- tutorial/06_data_capture.ipynb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index a5fccf272..495a88064 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -144,10 +144,12 @@ } ], "source": [ + "import os\n", "import time\n", "import numpy\n", "from bifrost.packet_writer import HeaderInfo, DiskWriter\n", "\n", + "print(os.getcwd())\n", "with open('output.dat', 'wb') as fh:\n", " bfo = DiskWriter('tbn', fh, core=0)\n", " desc = HeaderInfo()\n", From 7a5ddc8bb3b587698286e325a36d857b0ee8fc27 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 15:58:24 -0600 Subject: [PATCH 0091/1155] Why is this still failing? --- tutorial/06_data_capture.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index 495a88064..79bbce511 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -149,8 +149,8 @@ "import numpy\n", "from bifrost.packet_writer import HeaderInfo, DiskWriter\n", "\n", - "print(os.getcwd())\n", - "with open('output.dat', 'wb') as fh:\n", + "print('III', os.getcwd())\n", + "with open('/tmp/output.dat', 'wb') as fh:\n", " bfo = DiskWriter('tbn', fh, core=0)\n", " desc = HeaderInfo()\n", " desc.set_tuning(int(round(38e6 / 196e6 * 2**32)))\n", @@ -177,7 +177,7 @@ " \n", "import struct\n", "print('Output:')\n", - "with open('output.dat', 'rb') as fh:\n", + "with open('/tmp/output.dat', 'rb') as fh:\n", " packet_header = fh.read(24)\n", " packet_payload = fh.read(512*2)\n", " packet_payload = struct.unpack('<1024b', packet_payload)\n", From d554e4e86664d5665f8c1317554becdf8dd2fe32 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 16:32:31 -0600 Subject: [PATCH 0092/1155] Better but still a mystery. --- tutorial/06_data_capture.ipynb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index 79bbce511..a0622097f 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -144,13 +144,11 @@ } ], "source": [ - "import os\n", "import time\n", "import numpy\n", "from bifrost.packet_writer import HeaderInfo, DiskWriter\n", "\n", - "print('III', os.getcwd())\n", - "with open('/tmp/output.dat', 'wb') as fh:\n", + "with open('./output.dat', 'wb') as fh:\n", " bfo = DiskWriter('tbn', fh, core=0)\n", " desc = HeaderInfo()\n", " desc.set_tuning(int(round(38e6 / 196e6 * 2**32)))\n", @@ -177,7 +175,7 @@ " \n", "import struct\n", "print('Output:')\n", - "with open('/tmp/output.dat', 'rb') as fh:\n", + "with open('./output.dat', 'rb') as fh:\n", " packet_header = fh.read(24)\n", " packet_payload = fh.read(512*2)\n", " packet_payload = struct.unpack('<1024b', packet_payload)\n", From 1515bfb1e690f7cc004b728ab3426de1830f7ab4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 17:45:46 -0600 Subject: [PATCH 0093/1155] Why? --- tutorial/06_data_capture.ipynb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index a0622097f..21e9d325f 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -144,11 +144,12 @@ } ], "source": [ + "import os\n", "import time\n", "import numpy\n", "from bifrost.packet_writer import HeaderInfo, DiskWriter\n", "\n", - "with open('./output.dat', 'wb') as fh:\n", + "with open(os.path.join(os.getcwd(), 'output.dat'), 'wb') as fh:\n", " bfo = DiskWriter('tbn', fh, core=0)\n", " desc = HeaderInfo()\n", " desc.set_tuning(int(round(38e6 / 196e6 * 2**32)))\n", From 633bdf302efc33948da7ebc2defedde3a53e06e4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 18:15:44 -0600 Subject: [PATCH 0094/1155] A new approach to path control. --- tutorial/test/test_notebooks.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/tutorial/test/test_notebooks.py b/tutorial/test/test_notebooks.py index 71df4fc66..63c317e8e 100644 --- a/tutorial/test/test_notebooks.py +++ b/tutorial/test/test_notebooks.py @@ -31,7 +31,7 @@ __author__ = "Jayce Dowell" -def run_notebook(notebook_path, kernel_name=None): +def run_notebook(notebook_path, run_path=None, kernel_name=None): """ From: http://www.blog.pythonlibrary.org/2018/10/16/testing-jupyter-notebooks/ @@ -43,7 +43,13 @@ def run_notebook(notebook_path, kernel_name=None): with open(notebook_path) as f: nb = nbformat.read(f, as_version=4) - proc = ExecutePreprocessor(timeout=600, kernel_name=kernel_name) + cleanup = False + if run_path is None: + run_path = mkdtemp(prefix='btnbt') + cleanup = True + + proc = ExecutePreprocessor(resources={'metadata': {'path': run_path}}, + timeout=600, kernel_name=kernel_name) proc.allow_errors = True proc.preprocess(nb, {'metadata': {'path': '/'}}) @@ -57,6 +63,13 @@ def run_notebook(notebook_path, kernel_name=None): for output in cell['outputs']: if output.output_type == 'error': errors.append(output) + + if cleanup: + try: + rmtree(run_path) + except OSError: + pass + return nb, errors @@ -67,10 +80,6 @@ class notebooks_tests(unittest.TestCase): def setUp(self): self.maxDiff = 8192 - self.tempDir = mkdtemp(prefix='btnbt') - self.cwd = os.getcwd() - os.chdir(self.tempDir) - self._kernel = jupyter_client.KernelManager() self._kernel.start_kernel() self.kernel_name = self._kernel.kernel_name @@ -78,12 +87,6 @@ def setUp(self): def tearDown(self): self._kernel.shutdown_kernel() self.kernel_name = None - - os.chdir(self.cwd) - try: - rmtree(self.tempDir) - except OSError: - pass def _test_generator(notebook): From 7aff619b07f95e8742ea9de93a382c09c3fe6802 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 18:20:59 -0600 Subject: [PATCH 0095/1155] Ah --- tutorial/test/test_notebooks.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tutorial/test/test_notebooks.py b/tutorial/test/test_notebooks.py index 63c317e8e..3642a5488 100644 --- a/tutorial/test/test_notebooks.py +++ b/tutorial/test/test_notebooks.py @@ -48,11 +48,10 @@ def run_notebook(notebook_path, run_path=None, kernel_name=None): run_path = mkdtemp(prefix='btnbt') cleanup = True - proc = ExecutePreprocessor(resources={'metadata': {'path': run_path}}, - timeout=600, kernel_name=kernel_name) + proc = ExecutePreprocessor(timeout=600, kernel_name=kernel_name) proc.allow_errors = True - proc.preprocess(nb, {'metadata': {'path': '/'}}) + proc.preprocess(nb, {'metadata': {'path': run_path}}) output_path = os.path.join(dirname, '{}_all_output.ipynb'.format(nb_name)) with open(output_path, mode='wt') as f: From 761849ba6f2f017c7ee86720930ac64b6fa3a8fc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 18:31:29 -0600 Subject: [PATCH 0096/1155] Finally\! --- tutorial/06_data_capture.ipynb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index 21e9d325f..a5fccf272 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -144,12 +144,11 @@ } ], "source": [ - "import os\n", "import time\n", "import numpy\n", "from bifrost.packet_writer import HeaderInfo, DiskWriter\n", "\n", - "with open(os.path.join(os.getcwd(), 'output.dat'), 'wb') as fh:\n", + "with open('output.dat', 'wb') as fh:\n", " bfo = DiskWriter('tbn', fh, core=0)\n", " desc = HeaderInfo()\n", " desc.set_tuning(int(round(38e6 / 196e6 * 2**32)))\n", @@ -176,7 +175,7 @@ " \n", "import struct\n", "print('Output:')\n", - "with open('./output.dat', 'rb') as fh:\n", + "with open('output.dat', 'rb') as fh:\n", " packet_header = fh.read(24)\n", " packet_payload = fh.read(512*2)\n", " packet_payload = struct.unpack('<1024b', packet_payload)\n", From d9eb01c22b665c127ecb11f6849d1db404b2d6d2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 19:54:28 -0600 Subject: [PATCH 0097/1155] Forcing a test to run. --- tutorial/00_getting_started.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb index 3e117e6de..3b7f22197 100644 --- a/tutorial/00_getting_started.ipynb +++ b/tutorial/00_getting_started.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "productive-favor", + "id": "1dfd7ec3", "metadata": {}, "source": [ "# Getting started with Bifrost\n", From 973a677de510dd0babd26585a44d2838e8eb8a8c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 19:57:47 -0600 Subject: [PATCH 0098/1155] Update the tutorial on startup. --- tutorial/docker/start-notebook.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tutorial/docker/start-notebook.sh b/tutorial/docker/start-notebook.sh index ed6d0665a..03953ded4 100644 --- a/tutorial/docker/start-notebook.sh +++ b/tutorial/docker/start-notebook.sh @@ -9,6 +9,12 @@ if [[ "${RESTARTABLE}" == "yes" ]]; then wrapper="run-one-constantly" fi +# Update the tutorial +d=`pwd` +cd /home/lwa/bifrost_tutorial +git pull +cd ${d} + if [[ ! -z "${JUPYTERHUB_API_TOKEN}" ]]; then # launched by JupyterHub, use single-user entrypoint exec /usr/local/bin/start-singleuser.sh "$@" From 49725d8e3a9287cb548614766dfb7d0ce4cba98b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 20:04:50 -0600 Subject: [PATCH 0099/1155] Block -> Op --- tutorial/07_high_level_api.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorial/07_high_level_api.ipynb b/tutorial/07_high_level_api.ipynb index 3116a9395..692415b38 100644 --- a/tutorial/07_high_level_api.ipynb +++ b/tutorial/07_high_level_api.ipynb @@ -112,7 +112,7 @@ "\n", "from bifrost import pipeline\n", "\n", - "class NewCopyBlock(pipeline.TransformBlock):\n", + "class NewCopyOp(pipeline.TransformBlock):\n", " def __init__(self, iring, *args, **kwargs):\n", " super(NewCopyOp, self).__init__(iring, *args, **kwargs)\n", " \n", From 55fb2ff66a35c1a02f3b291b63b502ec12ccae15 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 20:12:14 -0600 Subject: [PATCH 0100/1155] Added a Jenkins badge. --- tutorial/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tutorial/README.md b/tutorial/README.md index 31649da33..f2791cc5e 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -1,5 +1,7 @@ # The Bifrost Tutorial +[![Build Status](https://fornax.phys.unm.edu/jenkins/buildStatus/icon?job=BifrostTutorial)](https://fornax.phys.unm.edu/jenkins/job/BifrostTutorial/) + A collection of examples that show how to use various features in the [Bifrost framework](https://github.com/ledatelescope/bifrost/). Before beginning this tutorial it would be a good idea to famaliarize yourself with the framework and its concepts: * Bifrost is described in [Cranmer et al.](https://arxiv.org/abs/1708.00720) From 406936f93c358b8c0380c9fb19e1447de70707fc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 6 May 2021 20:26:35 -0600 Subject: [PATCH 0101/1155] Temp name change. --- tutorial/test/test_notebooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorial/test/test_notebooks.py b/tutorial/test/test_notebooks.py index 3642a5488..6f2bd97ed 100644 --- a/tutorial/test/test_notebooks.py +++ b/tutorial/test/test_notebooks.py @@ -45,7 +45,7 @@ def run_notebook(notebook_path, run_path=None, kernel_name=None): cleanup = False if run_path is None: - run_path = mkdtemp(prefix='btnbt') + run_path = mkdtemp(prefix='test-notebooks-', suffix='.tmp') cleanup = True proc = ExecutePreprocessor(timeout=600, kernel_name=kernel_name) From 3ddfbd1d1f95df8604d88f8918c08ecb29d8fe0c Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 6 May 2021 23:00:16 -0400 Subject: [PATCH 0102/1155] Just a few typos & formatting tweaks --- tutorial/01_useful_functions.ipynb | 2 +- tutorial/02_building_complexity.ipynb | 5 ++--- tutorial/03_putting_it_together.ipynb | 6 +++--- tutorial/README.md | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/tutorial/01_useful_functions.ipynb b/tutorial/01_useful_functions.ipynb index d448bd826..5f7a2f3f0 100644 --- a/tutorial/01_useful_functions.ipynb +++ b/tutorial/01_useful_functions.ipynb @@ -413,7 +413,7 @@ "source": [ "## Remaining Functions\n", "\n", - "The remaining functions of `bifrost.fir`, `bifrost.romein', `bifrost.quantize`, and `bifrost.unpack` will not be addressed here. However, `bifrost.quantize` and `bifrost.unpack` will be used later in the tutorial." + "The remaining functions of `bifrost.fir`, `bifrost.romein`, `bifrost.quantize`, and `bifrost.unpack` will not be addressed here. However, `bifrost.quantize` and `bifrost.unpack` will be used later in the tutorial." ] } ], diff --git a/tutorial/02_building_complexity.ipynb b/tutorial/02_building_complexity.ipynb index 121a35cba..a8a779375 100644 --- a/tutorial/02_building_complexity.ipynb +++ b/tutorial/02_building_complexity.ipynb @@ -142,8 +142,7 @@ "id": "f9a5fe2f", "metadata": {}, "source": [ - "This works for a single batch of data, what we call a \"gulp\" in Bifrost. \n", - "How do we extend this for working on a continuous stream of data? We can first start by wrapping everything in a `for` loop as a stand in for continuous data:" + "This works for a single batch of data, what we call a \"gulp\" in Bifrost. How do we extend this for working on a continuous stream of data? We can first start by wrapping everything in a `for` loop as a stand-in for continuous data:" ] }, { @@ -210,7 +209,7 @@ "id": "e258984c", "metadata": {}, "source": [ - "That works be it is not very efficient. For every gulp we are creating new arrays on both the CPU and GPU memories and creating new `bifrost.fft` instances. One way to deal with this is to pre-initialize the data arrays and the FFT function, and then use `bifrost.ndarray.copy_array` to copy data:" + "That works but it is not very efficient. For every gulp we are creating new arrays on both the CPU and GPU memories and creating new `bifrost.fft` instances. One way to deal with this is to pre-initialize the data arrays and the FFT function, and then use `bifrost.ndarray.copy_array` to copy data:" ] }, { diff --git a/tutorial/03_putting_it_together.ipynb b/tutorial/03_putting_it_together.ipynb index 1d8c45a6e..7f7f01af5 100644 --- a/tutorial/03_putting_it_together.ipynb +++ b/tutorial/03_putting_it_together.ipynb @@ -9,7 +9,7 @@ "\n", "In the previous section we introduced blocks, the fundamental building blocks of a pipeline in Bifrost. Now we will talk about how blocks are connected together and some of the considerations.\n", "\n", - "In Bifrost blocks are connected together by circular memory buffers called \"rings\". Like a `bifrost.ndarray`, a ring exists in a memoy space: system, cuda_host, or cuda. A ring also has a size that based on a integer number of segments of the gulp size for the ring. \n", + "In Bifrost blocks are connected together by circular memory buffers called \"rings\". Like a `bifrost.ndarray`, a ring exists in a memoy space: `system`, `cuda_host`, or `cuda`. A ring also has a size that is based on a integer number of segments of the gulp size for the ring. \n", "\n", "To create a ring in Bifrost:" ] @@ -40,7 +40,7 @@ "id": "bac3cc61", "metadata": {}, "source": [ - "This creates a new ring, called \"a_ring\", in the system memory space. Although the ring has been created it does not yet have any memory allocated to it. To allocate memory you `resize` it:" + "This creates a new ring, called `\"a_ring\"`, in the system memory space. Although the ring has been created it does not yet have any memory allocated to it. To allocate memory you `resize` it:" ] }, { @@ -157,7 +157,7 @@ " 3. Start a \"sequence\" on the ring using that time tag and JSON object. \n", " * In Bifrost a sequence is a stream of data with a single observational setup.\n", " 4. Loop over spans, also called gulps, in the output sequence and writes data to the ring.\n", - " * Writing uses a \"data_view\" of the span/gulp that exposes it as a `bifrost.ndarray`.\n", + " * Writing uses a `data_view` of the span/gulp that exposes it as a `bifrost.ndarray`.\n", "\n", "Reading from a ring follows a similar sequence:" ] diff --git a/tutorial/README.md b/tutorial/README.md index f2791cc5e..71de96443 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -2,7 +2,7 @@ [![Build Status](https://fornax.phys.unm.edu/jenkins/buildStatus/icon?job=BifrostTutorial)](https://fornax.phys.unm.edu/jenkins/job/BifrostTutorial/) -A collection of examples that show how to use various features in the [Bifrost framework](https://github.com/ledatelescope/bifrost/). Before beginning this tutorial it would be a good idea to famaliarize yourself with the framework and its concepts: +A collection of examples that show how to use various features in the [Bifrost framework](https://github.com/ledatelescope/bifrost/). Before beginning this tutorial it would be a good idea to familiarize yourself with the framework and its concepts: * Bifrost is described in [Cranmer et al.](https://arxiv.org/abs/1708.00720) * Documentation for the Python APIs can be found [here](http://ledatelescope.github.io/bifrost/) From 72791eeed0d50671b692c4126f02e9d8d8ba2ca0 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Tue, 11 May 2021 14:00:59 +0000 Subject: [PATCH 0103/1155] Re-enable NUMA memory --- user.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user.mk b/user.mk index edea22fbd..27d469d71 100644 --- a/user.mk +++ b/user.mk @@ -31,7 +31,7 @@ ALIGNMENT ?= 4096 # Memory allocation alignment #NOCUDA = 1 # Disable CUDA support #ANY_ARCH = 1 # Disable native architecture compilation #CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) -#NUMA = 1 # Enable use of numa library for setting affinity of ring memory +NUMA = 1 # Enable use of numa library for setting affinity of ring memory #HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture #VMA = 1 # Enable use of Mellanox libvma in udp_capture XGPU = 1 # build xGPU integrations (requires the xGPU library) From aa70eed212195d7f436e9484d5c2626c40cc04fe Mon Sep 17 00:00:00 2001 From: ubuntu Date: Tue, 11 May 2021 14:22:33 +0000 Subject: [PATCH 0104/1155] Add back in snap2 packet callback Got lost in the wash somewhere --- python/bifrost/packet_capture.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index 7a4ad2594..df7024ce9 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -42,6 +42,10 @@ def set_chips(self, fnc): self._ref_cache['chips'] = _bf.BFpacketcapture_chips_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetCHIPS( self.obj, self._ref_cache['chips'])) + def set_snap2(self, fnc): + self._ref_cache['snap2'] = _bf.BFpacketcapture_snap2_sequence_callback(fnc) + _check(_bf.bfPacketCaptureCallbackSetSNAP2( + self.obj, self._ref_cache['snap2'])) def set_ibeam(self, fnc): self._ref_cache['ibeam'] = _bf.BFpacketcapture_ibeam_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetIBeam( From 08f8ed869a9f3785e33f5c6d2bb038cebfc4a7c3 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Tue, 11 May 2021 17:42:31 +0000 Subject: [PATCH 0105/1155] Merge fix again -- helps if ibverbs actually uses ibverbs(!) --- python/bifrost/packet_capture.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index df7024ce9..77b22fcc1 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -133,7 +133,7 @@ def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, if core is None: core = -1 BifrostObject.__init__( - self, _bf.bfUdpSnifferCreate, _bf.bfPacketCaptureDestroy, + self, _bf.bfUdpVerbsCaptureCreate, _bf.bfPacketCaptureDestroy, fmt, sock.fileno(), ring.obj, nsrc, src0, max_payload_size, buffer_ntime, slot_ntime, sequence_callback.obj, core) From 9a42282c920cb71d76aa2939bdd799de70f80d42 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 13 May 2021 18:31:58 -0600 Subject: [PATCH 0106/1155] Version numbering fix. --- tutorial/docker/config.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorial/docker/config.mk b/tutorial/docker/config.mk index eca31b608..ea0ce4fe1 100644 --- a/tutorial/docker/config.mk +++ b/tutorial/docker/config.mk @@ -28,7 +28,7 @@ endif BIFROST_NAME = bifrost LIBBIFROST_NAME = lib$(BIFROST_NAME) LIBBIFROST_MAJOR = 0 -LIBBIFROST_MINOR = 8 +LIBBIFROST_MINOR = 9 LIBBIFROST_PATCH = 0 LIBBIFROST_SO = $(LIBBIFROST_NAME)$(SO_EXT) LIBBIFROST_SO_MAJ = $(LIBBIFROST_SO).$(LIBBIFROST_MAJOR) From 91e57fe4caa94266092a3cc2ed946f281e8c9a0e Mon Sep 17 00:00:00 2001 From: ubuntu Date: Fri, 14 May 2021 15:47:06 +0000 Subject: [PATCH 0107/1155] Add some debug prints --- src/formats/snap2.hpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index 23de0c387..ea3d04e55 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -64,13 +64,13 @@ struct snap2_hdr_type { class SNAP2Decoder : virtual public PacketDecoder { protected: inline bool valid_packet(const PacketDesc* pkt) const { -#if BFSNAP2_DEBUG - cout << "seq: "<< pkt->seq << endl; - cout << "src: "<< pkt->src << endl; - cout << "nsrc: "<< pkt->nsrc << endl; - cout << "nchan: "<< pkt->nchan << endl; - cout << "chan0: "<< pkt->chan0 << endl; -#endif +//#if BF_SNAP2_DEBUG +// cout << "seq: "<< pkt->seq << endl; +// cout << "src: "<< pkt->src << endl; +// cout << "nsrc: "<< pkt->nsrc << endl; +// cout << "nchan: "<< pkt->nchan << endl; +// cout << "chan0: "<< pkt->chan0 << endl; +//#endif return ( pkt->seq >= 0 && pkt->src >= 0 @@ -92,6 +92,12 @@ class SNAP2Decoder : virtual public PacketDecoder { int pld_size = pkt_size - sizeof(snap2_hdr_type); pkt->seq = be64toh(pkt_hdr->seq); pkt->time_tag = be32toh(pkt_hdr->sync_time); +#if BF_SNAP2_DEBUG + fprintf(stderr, "seq: %lu\t", pkt->seq); + fprintf(stderr, "sync_time: %lu\t", pkt->time_tag); + fprintf(stderr, "nchan: %lu\t", be16toh(pkt_hdr->nchan)); + fprintf(stderr, "npol: %lu\t", be16toh(pkt_hdr->npol)); +#endif int npol_blocks = (be16toh(pkt_hdr->npol_tot) / be16toh(pkt_hdr->npol)); int nchan_blocks = (be16toh(pkt_hdr->nchan_tot) / be16toh(pkt_hdr->nchan)); @@ -105,6 +111,15 @@ class SNAP2Decoder : virtual public PacketDecoder { pkt->src = (pkt->pol0 / pkt->npol) + be32toh(pkt_hdr->chan_block_id) * npol_blocks; pkt->payload_size = pld_size; pkt->payload_ptr = pkt_pld; +#if BF_SNAP2_DEBUG + fprintf(stderr, "nsrc: %lu\t", pkt->nsrc); + fprintf(stderr, "src: %lu\t", pkt->src); + fprintf(stderr, "chan0: %lu\t", pkt->chan0); + fprintf(stderr, "chan_block_id: %lu\t", be32toh(pkt_hdr->chan_block_id)); + fprintf(stderr, "nchan_tot: %lu\t", pkt->nchan_tot); + fprintf(stderr, "npol_tot: %lu\t", pkt->npol_tot); + fprintf(stderr, "pol0: %lu\n", pkt->pol0); +#endif return this->valid_packet(pkt); } }; From 4fb0d0b7ba1d3ae5bdd744215e752007d97486ed Mon Sep 17 00:00:00 2001 From: ubuntu Date: Fri, 14 May 2021 16:02:49 +0000 Subject: [PATCH 0108/1155] Enable HWLOC This makes a pretty big difference at high packet RX rates --- user.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user.mk b/user.mk index 27d469d71..b2d4dbdca 100644 --- a/user.mk +++ b/user.mk @@ -32,7 +32,7 @@ ALIGNMENT ?= 4096 # Memory allocation alignment #ANY_ARCH = 1 # Disable native architecture compilation #CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) NUMA = 1 # Enable use of numa library for setting affinity of ring memory -#HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture +HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture #VMA = 1 # Enable use of Mellanox libvma in udp_capture XGPU = 1 # build xGPU integrations (requires the xGPU library) VERBS = 1 # Enable use of IB verbs with udp_verbs_capture From 693e8407a97485335913002af053874e3f02c0fe Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 14 May 2021 14:53:12 -0400 Subject: [PATCH 0109/1155] Add Amazon EC2 instructions to README --- tutorial/README.md | 91 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 85 insertions(+), 6 deletions(-) diff --git a/tutorial/README.md b/tutorial/README.md index 71de96443..c3673acd0 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -7,18 +7,97 @@ A collection of examples that show how to use various features in the [Bifrost f * Bifrost is described in [Cranmer et al.](https://arxiv.org/abs/1708.00720) * Documentation for the Python APIs can be found [here](http://ledatelescope.github.io/bifrost/) * There is an [overview talk of Bifrost](https://www.youtube.com/watch?v=DXH89rOVVzg) from the 2019 CASPER workshop. - - ## Docker Image - + +## Docker Image + You should be able to run these tutorials in any Jupyter environment that has Bifrost installed. We also have a Docker image with Bifrost, CUDA, Jupyter, and the tutorial already installed if you want a quicker path to trying it out. Simply run: - + ``` docker pull lwaproject/bifrost_tutorial docker run -p 8888:8888 --runtime=nvidia lwaproject/bifrost_tutorial ``` - + This will start the Jupyter server on port 8888 which you can connect to with a browser running on the - host. *Note that this uses Nvidia runtime for Docker to allow access to the host's GPU for the GPU-enabled + host. *Note that this uses Nvidia runtime for Docker to allow access to the host's GPU for the GPU-enabled portions of the tutorial.* + +## Amazon EC2 image + +Another way to try the tutorials if you don't have appropriate GPU hardware is +using a virtual machine on Amazon's Elastic Compute Cloud (EC2). There are +GPU-enabled machine types that start at around US$0.53 per hour, which is pretty +affordable for playing around and learning. *Just don't forget to power down the +machine when not in active use.* + + 1. Start at the [EC2 console for region + us-west-1](https://us-west-1.console.aws.amazon.com/ec2/v2/home?region=us-west-1#Home:) + and click the **Launch instance** button. + + 2. Step 1: Choose AMI: switch to Community AMIs and paste + `ami-0d13b7e8d7a746045` into the search bar. It should appear with the label + `bifrost_tutorial`. Click **Select**. + + 3. Step 2: Choose an Instance Type: filter by family **g4dn** then choose + **g4dn.xlarge**. At the time of writing (May 2021), this instance was around + US$0.53 per hour using on-demand pricing. Click **Next: Configure Instance** + to proceed. + + 4. Step 3: Configure Instance: On this screen, make sure **Auto-assign Public IP** is + set to **Enable**. The rest of the defaults should be fine. Proceed to + **Step 6**. + + 5. Step 6: Configure Security Group. Create a **new security group** and make + sure TCP ports 22 (SSH) is open to `0.0.0.0/0` (should be, by default). + Then, **Add Rule** with **Custom TCP**, port **8888**, and source + **Anywhere**. Click **Review and Launch**. + + 6. Check the settings on the Review screen, especially **g4dn**, ports 22 and + 8888, and **Assign Public IP**. Click **Launch**. + + 7. Next you will be prompted for an SSH key pair. If you've done this before + (in us-west-1) and know you have access to the private key, you can choose + that. We'll assume you **Create a new key pair**. Enter the key pair name + `bifrost-gpu` and click **Download Key Pair**. Save the `bifrost-gpu.pem` + file someplace safe, perhaps in `~/.ssh`. Now click **Launch instance(s)**. + + 8. Back on your EC2 dashboard, it should (eventually) show it as Running, and + list a Public IPv4 address. Make not of that address and substitute it for + `MY_IP_ADDR` below. + + 9. Make sure your downloaded private key file is protected, by running: + + ``` + chmod 600 ~/.ssh/bifrost-gpu.pem + ``` + + 10. Log in to the new server's command line, like this: + + ``` + ssh -i ~/.ssh/bifrost-gpu.pem -l ubuntu MY_IP_ADDR + ``` + + 11. After successful login, type + + ``` + ./launch_jupyter.sh + ``` + + This will create a new self-signed security certificate and run the Jupyter + notebook server. It should print a URL with a hexadecimal token in the + output. + + 12. Open `https://MY_IP_ADDR:8000/` in your web browser. It will display a + security warning due to the self-signed certificate. You can select + **Advanced** and **Accept the risk** (exact prompts will depend on your + browser). + + 13. Next the page will prompt for a password or token. Copy and paste the token + from the terminal output of the launch script. After authenticating, you + should see folders including `bifrost_tutorial`. + + 14. When finished, you can use control-C to and `y` in the terminal to stop the + notebook server. Don't forget to shut down the EC2 instance using `sudo + poweroff`. (Note that each time you shut down and restart the instance, it + can have a new IP address.) From 39b0e456c626fa3c01aa1d54075078f9cb981ae4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 18 May 2021 15:59:23 -0600 Subject: [PATCH 0110/1155] Py3 not 2. --- tutorial/07_high_level_api.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorial/07_high_level_api.ipynb b/tutorial/07_high_level_api.ipynb index 692415b38..fb0fb8715 100644 --- a/tutorial/07_high_level_api.ipynb +++ b/tutorial/07_high_level_api.ipynb @@ -17,7 +17,7 @@ "\n", "filenames = sys.argv[1:]\n", "\n", - "print \"Building pipeline\"\n", + "print(\"Building pipeline\")\n", "data = bf.blocks.read_sigproc(filenames, gulp_nframe=128)\n", "data = bf.blocks.copy(data, 'cuda')\n", "data = bf.blocks.transpose(data, ['pol', 'freq', 'time'])\n", @@ -25,9 +25,9 @@ "data = bf.blocks.copy(data, 'cuda_host')\n", "bf.blocks.write_sigproc(data)\n", "\n", - "print \"Running pipeline\"\n", + "print(\"Running pipeline\")\n", "bf.get_default_pipeline().run()\n", - "print \"All done\"\n", + "print(\"All done\")\n", "```\n", "\n", "Here we are continually passing the block's output, `data`, to the next block in the pipeline. At runtime, the blocks are connected together (as a directed graph) with ring buffers in between. \n", From 7aa790e17bfcd74206330ae98d12152943662dfd Mon Sep 17 00:00:00 2001 From: ubuntu Date: Wed, 19 May 2021 15:22:08 +0000 Subject: [PATCH 0111/1155] Allow (hopefully) buffer size and slot size to be different for SNAP2 packets --- src/packet_capture.cpp | 3 ++- src/packet_capture.hpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index 0e18dde4d..115d72505 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -94,7 +94,8 @@ int PacketCaptureThread::run(uint64_t seq_beg, // If lots [TODO: what is lots] of packets are late // return. Otherwise a seq reset can lead to being stuck // here endlessly counting late packets. - if( less_than(_pkt.seq + nseq_per_obuf, seq_beg) ) { + if( less_than(_pkt.seq + 1000*nseq_per_obuf, seq_beg) ) { + fprintf(stderr, "Breaking from packet receive because of so many late packets\n"); _have_pkt = true; ret = CAPTURE_SUCCESS; break; diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index ace8d2522..0314b900d 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -686,7 +686,8 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { // packet isn't from the next block // TODO. Is this actually reasonable? Does it recover from upstream resyncs? bool is_new_seq = false; - if ( (_last_time_tag != pkt->time_tag) || (pkt->seq != _last_seq + _slot_ntime) ) { + if ( (_last_time_tag != pkt->time_tag) || (pkt->seq != _last_seq + _nseq_per_buf) ) { + //fprintf(stderr, "packet seq was %lu. Expected %lu + %lu\r\n", pkt->seq, _last_seq, _nseq_per_buf); is_new_seq = true; this->flush(); } From aebba8211717d9c20f176e3addfad4fbaae17541 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Thu, 20 May 2021 14:05:19 +0000 Subject: [PATCH 0112/1155] Tweak sequence-has-changed condition Allow two slots of loss before considering the sequence new. --- src/packet_capture.hpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 0314b900d..678fa9397 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -687,9 +687,13 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { // TODO. Is this actually reasonable? Does it recover from upstream resyncs? bool is_new_seq = false; if ( (_last_time_tag != pkt->time_tag) || (pkt->seq != _last_seq + _nseq_per_buf) ) { - //fprintf(stderr, "packet seq was %lu. Expected %lu + %lu\r\n", pkt->seq, _last_seq, _nseq_per_buf); - is_new_seq = true; - this->flush(); + // We could have a packet sequence number which isn't what we expect + // but is only wrong because of missing packets. Set an upper bound on + // two slots of loss + if (pkt->seq > _last_seq + 2*_slot_ntime) { + is_new_seq = true; + this->flush(); + } } _last_seq = pkt->seq; return is_new_seq; From 5dbad7c28e276d32c1a727bc8ba597e0873479ba Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 20 May 2021 11:33:58 -0600 Subject: [PATCH 0113/1155] Added a link to the walk-through. --- tutorial/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/tutorial/README.md b/tutorial/README.md index c3673acd0..e0c55b062 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -7,6 +7,7 @@ A collection of examples that show how to use various features in the [Bifrost f * Bifrost is described in [Cranmer et al.](https://arxiv.org/abs/1708.00720) * Documentation for the Python APIs can be found [here](http://ledatelescope.github.io/bifrost/) * There is an [overview talk of Bifrost](https://www.youtube.com/watch?v=DXH89rOVVzg) from the 2019 CASPER workshop. + * There is a [walk through of this tutorial](https://youtu.be/ktk2dkUssAA?t=20170) from the 2021 CASPER workshop. ## Docker Image From 39d133bdb22e054e2d1750835f124616e67b3480 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Tue, 8 Jun 2021 15:42:10 +0000 Subject: [PATCH 0114/1155] Remove pring when trying to blank packets --- src/formats/snap2.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index ea3d04e55..8d5420830 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -186,7 +186,7 @@ class SNAP2Processor : virtual public PacketProcessor { int nsrc, int nchan, int nseq) { - fprintf(stderr, "TRYING TO BLANK OUT A SOURCE WITH MISSING PACKETS. BUT BLANKING NOT IMPLEMENTED\n"); + //fprintf(stderr, "TRYING TO BLANK OUT A SOURCE WITH MISSING PACKETS. BUT BLANKING NOT IMPLEMENTED\n"); //typedef aligned256_type otype; //fprintf(stderr, "You really better not be here\n"); //otype* __restrict__ aligned_data = (otype*)data; From 2f4d6dc0a5023147743351e4a42df1042df1458f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 10 Jun 2021 08:41:10 -0600 Subject: [PATCH 0115/1155] Extra colon. --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 892d2d4dd..bd1c46f65 100644 --- a/src/Makefile +++ b/src/Makefile @@ -20,7 +20,7 @@ LIBBIFROST_OBJS = \ unpack.o \ quantize.o \ proclog.o -ifdef VERBS: +ifdef VERBS # These files require IB verbs to compile LIBBIFROST_OBJS += \ ib_verbs.o From bcbd25169bd6d9ce9b78b746530cd29dc5a49a2e Mon Sep 17 00:00:00 2001 From: ubuntu Date: Tue, 22 Jun 2021 19:42:50 +0000 Subject: [PATCH 0116/1155] Remove _timeout use (which causes segfaults?) --- src/ib_verbs.cpp | 3 ++- src/ib_verbs.hpp | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ib_verbs.cpp b/src/ib_verbs.cpp index 19e2bc67b..7742e706a 100644 --- a/src/ib_verbs.cpp +++ b/src/ib_verbs.cpp @@ -545,7 +545,8 @@ int Verbs::recv_packet(uint8_t** pkt_ptr, int flags) { } } while( _verbs.pkt_batch == NULL ) { - _verbs.pkt_batch = this->receive(_timeout); + //_verbs.pkt_batch = this->receive(_timeout); + _verbs.pkt_batch = this->receive(1); _verbs.pkt = _verbs.pkt_batch; } // IBV returns Eth/UDP/IP headers. Strip them off here. diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 3e52a343d..7468b834b 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -102,7 +102,7 @@ struct bf_ibv { class Verbs : public BoundThread { int _fd; size_t _pkt_size_max; - int _timeout; + //int _timeout; bf_ibv _verbs; void get_interface_name(char* name) { @@ -238,7 +238,7 @@ class Verbs : public BoundThread { Verbs(int fd, size_t pkt_size_max, int core) : BoundThread(core), _fd(fd), _pkt_size_max(pkt_size_max) { ::memset(&_verbs, 0, sizeof(_verbs)); - _timeout = get_timeout_ms(); + //_timeout = get_timeout_ms(); create_context(); create_buffers(pkt_size_max); From 16d7710997ae84cc701960bbfcb1f3740b1a6811 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jun 2021 15:42:44 -0600 Subject: [PATCH 0117/1155] Adjust the alignment because otherwise it segfaults? --- src/ib_verbs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 7fa1f52c9..f1afce752 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -103,6 +103,7 @@ class Verbs : public BoundThread { int _fd; size_t _pkt_size_max; int _timeout; + int _alignment_filler; // Why is this needed? bf_ibv _verbs; void get_interface_name(char* name) { @@ -254,4 +255,3 @@ class Verbs : public BoundThread { } int recv_packet(uint8_t** pkt_ptr, int flags=0); }; - From 877dc34bcf1728b75de41bd46d30796b14e0b7a0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Jun 2021 09:28:28 -0600 Subject: [PATCH 0118/1155] Make the decimation field int32 in the HeaderInfo setter as well. --- src/bifrost/packet_writer.h | 4 ++-- src/packet_writer.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bifrost/packet_writer.h b/src/bifrost/packet_writer.h index b600dec65..837892706 100644 --- a/src/bifrost/packet_writer.h +++ b/src/bifrost/packet_writer.h @@ -49,8 +49,8 @@ BFstatus bfHeaderInfoSetTuning(BFheaderinfo obj, int tuning); BFstatus bfHeaderInfoSetGain(BFheaderinfo obj, unsigned short int gain); -BFstatus bfHeaderInfoSetDecimation(BFheaderinfo obj, - unsigned short int decimation); +BFstatus bfHeaderInfoSetDecimation(BFheaderinfo obj, + unsigned int decimation); typedef struct BFpacketwriter_impl* BFpacketwriter; diff --git a/src/packet_writer.cpp b/src/packet_writer.cpp index a3d08998c..21bcbede5 100644 --- a/src/packet_writer.cpp +++ b/src/packet_writer.cpp @@ -124,8 +124,8 @@ BFstatus bfHeaderInfoSetGain(BFheaderinfo obj, return BF_STATUS_SUCCESS; } -BFstatus bfHeaderInfoSetDecimation(BFheaderinfo obj, - unsigned short int decimation) { +BFstatus bfHeaderInfoSetDecimation(BFheaderinfo obj, + unsigned int decimation) { BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); obj->set_decimation(decimation); return BF_STATUS_SUCCESS; From a6ed0c84a4bfab3ad24c2e09272a92a76918e105 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Jun 2021 13:41:29 -0600 Subject: [PATCH 0119/1155] Another one. --- src/packet_writer.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index a25551eed..04e4e23a2 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -183,7 +183,7 @@ class BFheaderinfo_impl { inline void set_chan0(int chan0) { _desc.chan0 = chan0; } inline void set_tuning(int tuning) { _desc.tuning = tuning; } inline void set_gain(uint16_t gain) { _desc.gain = gain; } - inline void set_decimation(uint16_t decimation) { _desc.decimation = decimation; } + inline void set_decimation(uint32_t decimation) { _desc.decimation = decimation; } }; class BFpacketwriter_impl { From 933edc161fd14e536b8b9ed8ce35154062e0fe51 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Jun 2021 10:38:41 -0600 Subject: [PATCH 0120/1155] Cleaned up the header packing. --- src/formats/chips.hpp | 3 +-- src/formats/cor.hpp | 3 +-- src/formats/drx.hpp | 3 +-- src/formats/ibeam.hpp | 3 +-- src/formats/pbeam.hpp | 3 +-- src/formats/tbf.hpp | 3 +-- src/formats/tbn.hpp | 3 +-- src/formats/vdif.hpp | 14 ++++++-------- 8 files changed, 13 insertions(+), 22 deletions(-) diff --git a/src/formats/chips.hpp b/src/formats/chips.hpp index a4e96dfdb..982584e16 100644 --- a/src/formats/chips.hpp +++ b/src/formats/chips.hpp @@ -32,8 +32,7 @@ //#include // SSE -#pragma pack(1) -struct chips_hdr_type { +struct __attribute__((packed)) chips_hdr_type { uint8_t roach; // Note: 1-based uint8_t gbe; // (AKA tuning) uint8_t nchan; // 109 diff --git a/src/formats/cor.hpp b/src/formats/cor.hpp index 4379e27af..705c6db7d 100644 --- a/src/formats/cor.hpp +++ b/src/formats/cor.hpp @@ -31,8 +31,7 @@ #include "base.hpp" #include -#pragma pack(1) -struct cor_hdr_type { +struct __attribute__((packed)) cor_hdr_type { uint32_t sync_word; uint32_t frame_count_word; uint32_t second_count; diff --git a/src/formats/drx.hpp b/src/formats/drx.hpp index 45c61ab91..10058ccf9 100644 --- a/src/formats/drx.hpp +++ b/src/formats/drx.hpp @@ -32,8 +32,7 @@ #define DRX_FRAME_SIZE 4128 -#pragma pack(1) -struct drx_hdr_type { +struct __attribute__((packed)) drx_hdr_type { uint32_t sync_word; uint32_t frame_count_word; uint32_t seconds_count; diff --git a/src/formats/ibeam.hpp b/src/formats/ibeam.hpp index a910527b6..df81a9244 100644 --- a/src/formats/ibeam.hpp +++ b/src/formats/ibeam.hpp @@ -32,8 +32,7 @@ //#include // SSE -#pragma pack(1) -struct ibeam_hdr_type { +struct __attribute__((packed)) ibeam_hdr_type { uint8_t server; // Note: 1-based uint8_t gbe; // (AKA tuning) uint8_t nchan; // 109 diff --git a/src/formats/pbeam.hpp b/src/formats/pbeam.hpp index a4a69e904..a7dc966a7 100644 --- a/src/formats/pbeam.hpp +++ b/src/formats/pbeam.hpp @@ -32,8 +32,7 @@ //#include // SSE -#pragma pack(1) -struct pbeam_hdr_type { +struct __attribute__((packed)) pbeam_hdr_type { uint8_t server; // Note: 1-based uint8_t beam; // Note: 1-based uint8_t gbe; // (AKA tuning) diff --git a/src/formats/tbf.hpp b/src/formats/tbf.hpp index 772d68def..289eda2b4 100644 --- a/src/formats/tbf.hpp +++ b/src/formats/tbf.hpp @@ -32,8 +32,7 @@ #define TBF_FRAME_SIZE 6168 -#pragma pack(1) -struct tbf_hdr_type { +struct __attribute__((packed)) tbf_hdr_type { uint32_t sync_word; uint32_t frame_count_word; uint32_t seconds_count; diff --git a/src/formats/tbn.hpp b/src/formats/tbn.hpp index 93efdb7ae..4679eb123 100644 --- a/src/formats/tbn.hpp +++ b/src/formats/tbn.hpp @@ -32,8 +32,7 @@ #define TBN_FRAME_SIZE 1048 -#pragma pack(1) -struct tbn_hdr_type { +struct __attribute__((packed)) tbn_hdr_type { uint32_t sync_word; uint32_t frame_count_word; uint32_t tuning_word; diff --git a/src/formats/vdif.hpp b/src/formats/vdif.hpp index 4b94f8998..ef0bd8f16 100644 --- a/src/formats/vdif.hpp +++ b/src/formats/vdif.hpp @@ -30,24 +30,23 @@ #include "base.hpp" -#pragma pack(1) -struct vdif_hdr_type { - struct word_1_ { +struct __attribute__((packed)) vdif_hdr_type { + struct __attribute__((packed)) word_1_ { uint32_t seconds_from_epoch:30; uint8_t is_legacy:1; uint8_t is_invalid:1; } word_1; - struct word_2_ { + struct __attribute__((packed)) word_2_ { uint32_t frame_in_second:24; uint16_t ref_epoch:6; uint8_t unassigned:2; } word_2; - struct word_3_ { + struct __attribute__((packed)) word_3_ { uint32_t frame_length:24; uint32_t log2_nchan:5; uint8_t version:3; } word_3; - struct word_4_ { + struct __attribute__((packed)) word_4_ { uint16_t station_id:16; uint16_t thread_id:10; uint8_t bits_per_sample_minus_one:5; @@ -55,8 +54,7 @@ struct vdif_hdr_type { } word_4; }; -#pragma pack(1) -struct vdif_ext_type { +struct __attribute__((packed)) vdif_ext_type { uint32_t extended_word_1; uint32_t extended_word_2; uint32_t extended_word_3; From 8c5c52d433c255829d8de69ed5378f41d9e0c727 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Tue, 29 Jun 2021 13:15:33 +0000 Subject: [PATCH 0121/1155] Hack to pass through chan0 to bifrost pipeline chan0 is used internally for the channel number within a single pipeline -- i.e., it is always 0 for the first channel in a given packet stream. Rather than messing with this, use the "tuning" packet header field to pass the actual channel number to the bifrost capture callback --- src/formats/snap2.hpp | 1 + src/packet_capture.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index 8d5420830..a8fc7350f 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -101,6 +101,7 @@ class SNAP2Decoder : virtual public PacketDecoder { int npol_blocks = (be16toh(pkt_hdr->npol_tot) / be16toh(pkt_hdr->npol)); int nchan_blocks = (be16toh(pkt_hdr->nchan_tot) / be16toh(pkt_hdr->nchan)); + pkt->tuning = be32toh(pkt_hdr->chan0); // Abuse this so we can use chan0 to reference channel within pipeline pkt->nsrc = npol_blocks * nchan_blocks;// _nsrc; pkt->nchan = be16toh(pkt_hdr->nchan); pkt->chan0 = be32toh(pkt_hdr->chan_block_id) * be16toh(pkt_hdr->nchan); diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index be06c7f4b..a554217cd 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -710,7 +710,7 @@ class BFpacketcapture_snap2_impl : public BFpacketcapture_impl { if( _sequence_callback ) { int status = (*_sequence_callback)(*seq0, - _chan0, + pkt->tuning, // Hacked to contain chan0 _nchan, _nsrc, time_tag, From 4529e9ba2553deb088783e43c4b37f92c9bd7e05 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Jun 2021 12:53:50 -0600 Subject: [PATCH 0122/1155] Added a LGTM config file. --- lgtm.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 lgtm.yml diff --git a/lgtm.yml b/lgtm.yml new file mode 100644 index 000000000..b8a3dccb4 --- /dev/null +++ b/lgtm.yml @@ -0,0 +1,10 @@ +extraction: + cpp: + prepare: + packages: + - exuberant-ctags + before_index: + - export NOCUDA=1 + index: + build_command: + - make -e libbifrost From 6b2154e5dcf3be1a86088b71e39a76fa5a7fb41c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jul 2021 17:01:04 -0600 Subject: [PATCH 0123/1155] Major re-write of Verbs support. --- src/Makefile | 5 - src/ib_verbs.cpp | 554 ----------------------------------------- src/ib_verbs.hpp | 551 +++++++++++++++++++++++++++++++++++++--- src/packet_capture.hpp | 6 +- 4 files changed, 523 insertions(+), 593 deletions(-) delete mode 100644 src/ib_verbs.cpp diff --git a/src/Makefile b/src/Makefile index bd1c46f65..b00ea3960 100644 --- a/src/Makefile +++ b/src/Makefile @@ -20,11 +20,6 @@ LIBBIFROST_OBJS = \ unpack.o \ quantize.o \ proclog.o -ifdef VERBS - # These files require IB verbs to compile - LIBBIFROST_OBJS += \ - ib_verbs.o -endif ifndef NOCUDA # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ diff --git a/src/ib_verbs.cpp b/src/ib_verbs.cpp deleted file mode 100644 index 19e2bc67b..000000000 --- a/src/ib_verbs.cpp +++ /dev/null @@ -1,554 +0,0 @@ -/* - * Copyright (c) 2020, The Bifrost Authors. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of The Bifrost Authors nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include "ib_verbs.hpp" - -void Verbs::create_context() { - int d, p, g; - int ndev, found; - ibv_device** ibv_dev_list = NULL; - ibv_context* ibv_ctx = NULL; - ibv_device_attr ibv_dev_attr; - ibv_port_attr ibv_port_attr; - union ibv_gid ibv_gid; - - // Get the interface MAC address and GID - found = 0; - uint8_t mac[6] = {0}; - this->get_mac_address(&(mac[0])); - uint64_t gid = this->get_interface_gid(); - - /* - std::cout << "MAC: " << std::hex << int(mac[0]) << ":" << int(mac[1]) << ":" << int(mac[2]) - << ":" << int(mac[3]) << ":" << int(mac[4]) << ":" << int(mac[5]) << std::dec << std::endl; - std::cout << "GID: " << std::hex << int(htons( gid & 0xFFFF)) << ":" << int(htons((gid >> 16) & 0xFFFF)) - << ":" << int(htons((gid >> 32) & 0xFFFF)) << ":" << int(htons((gid >> 48) & 0xFFFF)) << std::dec << std::endl; - */ - - // Find the right device - /* Query all devices */ - ibv_dev_list = ibv_get_device_list(&ndev); - check_null(ibv_dev_list, - "ibv_get_device_list"); - - /* Interogate */ - for(d=0; dfd, F_GETFL); - check_error(::fcntl(_verbs.cc->fd, F_SETFL, flags | O_NONBLOCK), - "set completion channel to non-blocking"); - - // Setup the completion queues - _verbs.cq = (ibv_cq**) ::malloc(BF_VERBS_NQP * sizeof(ibv_cq*)); - check_null(_verbs.cq, - "allocate completion queues"); - ::memset(_verbs.cq, 0, BF_VERBS_NQP * sizeof(ibv_cq*)); - ibv_exp_cq_init_attr cq_attr; - ::memset(&cq_attr, 0, sizeof(cq_attr)); - cq_attr.comp_mask = IBV_EXP_CQ_INIT_ATTR_FLAGS; - cq_attr.flags = IBV_EXP_CQ_TIMESTAMP; - for(i=0; ilkey; - } - } - - // Link the work requests to receive queue - for(i=0; iget_port()); - flow.udp.mask.dst_port = 0xffff; - - // Filter on IP address in the IPv4 header - uint32_t ip; - char ip_str[INET_ADDRSTRLEN]; - this->get_ip_address(&(ip_str[0])); - inet_pton(AF_INET, &(ip_str[0]), &ip); - std::cout << "IP is: " << ip << " (" << ip_str << ")" << std::endl; - ::memcpy(&(flow.ipv4.val.dst_ip), &ip, 4); - ::memset(&(flow.ipv4.mask.dst_ip), 0xff, 4); - - // Filter on the destination MAC address (actual or multicast) - uint8_t mac[6] = {0}; - this->get_mac_address(&(mac[0])); - if( ((ip & 0xFF) >= 224) && ((ip & 0xFF) < 240) ) { - ETHER_MAP_IP_MULTICAST(&ip, mac); - /* - std::cout << "Multicast MAC: " << std::hex << int(mac[0]) << ":" << int(mac[1]) << ":" << int(mac[2]) - << ":" << int(mac[3]) << ":" << int(mac[4]) << ":" << int(mac[5]) << std::dec << std::endl; - */ - } - ::memcpy(&flow.eth.val.dst_mac, &mac, 6); - ::memset(&flow.eth.mask.dst_mac, 0xff, 6); - - /* - printf("size: %i\n", flow.attr.size); - printf(" attr: %i vs %lu\n", flow.attr.size, sizeof(ibv_flow_attr)); - printf(" eth: %i vs %lu\n", flow.eth.size, sizeof(ibv_flow_spec_eth)); - printf(" ipv4: %i vs %lu\n", flow.ipv4.size, sizeof(ibv_flow_spec_ipv4)); - printf(" udp: %i vs %lu\n", flow.udp.size, sizeof(ibv_flow_spec_tcp_udp)); - printf("specs: %i\n", flow.attr.num_of_specs); - - printf("type: %i (%i)\n", flow.udp.type, IBV_FLOW_SPEC_UDP); - printf("dst_port: %u\n", flow.udp.val.dst_port); - printf("dst_port: %u\n", flow.udp.mask.dst_port); - printf("src_port: %u\n", flow.udp.val.src_port); - printf("src_port: %u\n", flow.udp.mask.src_port); - - printf("dst_ip: %u\n", flow.ipv4.val.dst_ip); - printf("dst_ip: %u\n", flow.ipv4.mask.dst_ip); - printf("src_ip: %u\n", flow.ipv4.val.src_ip); - printf("src_ip: %u\n", flow.ipv4.mask.src_ip); - - ::memcpy(&(mac[0]), &(flow.eth.val.dst_mac[0]), 6); - printf("dst_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - ::memcpy(&(mac[0]), &(flow.eth.mask.dst_mac[0]), 6); - printf("dst_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - ::memcpy(&(mac[0]), &(flow.eth.val.src_mac[0]), 6); - printf("src_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - ::memcpy(&(mac[0]), &(flow.eth.mask.src_mac[0]), 6); - printf("src_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - printf("ether_type: %u\n", flow.eth.val.ether_type); - printf("ether_type: %u\n", flow.eth.mask.ether_type); - printf("vlan_tag: %u\n", flow.eth.val.vlan_tag); - printf("vlan_tag: %u\n", flow.eth.mask.vlan_tag); - */ - - // Create the flows - _verbs.flows = (ibv_flow**) ::malloc(BF_VERBS_NQP * sizeof(ibv_flow*)); - check_null(_verbs.flows, - "allocate flows"); - ::memset(_verbs.flows, 0, BF_VERBS_NQP * sizeof(ibv_flow*)); - for(i=0; iwr.wr_id / BF_VERBS_NPKTBUF; - return ibv_post_recv(_verbs.qp[i], &recv_pkt->wr, &recv_wr_bad); -} - -bf_ibv_recv_pkt* Verbs::receive(int timeout_ms) { - int i; - int num_wce; - uint64_t wr_id; - pollfd pfd; - ibv_qp_attr qp_attr; - ibv_cq *ev_cq; - intptr_t ev_cq_ctx; - ibv_exp_wc wc[BF_VERBS_WCBATCH]; - bf_ibv_recv_pkt * recv_head = NULL; - ibv_recv_wr * recv_tail = NULL; - - // Ensure the queue pairs are in a state suitable for receiving - for(i=0; istate) { - case IBV_QPS_RESET: // Unexpected, but maybe user reset it - qp_attr.qp_state = IBV_QPS_INIT; - qp_attr.port_num = _verbs.port_num; - if( ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE|IBV_QP_PORT) ) { - return NULL; - } - case IBV_QPS_INIT: - qp_attr.qp_state = IBV_QPS_RTR; - if( ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE) ) { - return NULL; - } - break; - case IBV_QPS_RTR: - case IBV_QPS_RTS: - break; - default: - return NULL; - } - } - - // Setup for poll - pfd.fd = _verbs.cc->fd; - pfd.events = POLLIN; - pfd.revents = 0; - - // poll completion channel's fd with given timeout - if( ::poll(&pfd, 1, timeout_ms) <= 0 ) { - // Timeout or error - return NULL; - } - - // Get the completion event - if( ibv_get_cq_event(_verbs.cc, &ev_cq, (void **)&ev_cq_ctx) ) { - return NULL; - } - - // Ack the event - ibv_ack_cq_events(ev_cq, 1); - - // Request notification upon the next completion event - // Do NOT restrict to solicited-only completions - if( ibv_req_notify_cq(ev_cq, 0) ) { - return NULL; - } - - // Empty the CQ: poll all of the completions from the CQ (if any exist) - do { - num_wce = ibv_exp_poll_cq(ev_cq, BF_VERBS_WCBATCH, wc, sizeof(struct ibv_exp_wc)); - if( num_wce < 0 ) { - return NULL; - } - - // Loop through all work completions - for(i=0; iwr; - } else { - recv_tail->next = &(_verbs.pkt_buf[wr_id].wr); - recv_tail = recv_tail->next; - } - } // for each work completion - } while(num_wce); - - // Ensure list is NULL terminated (if we have a list) - if(recv_tail) { - recv_tail->next = NULL; - } - - return recv_head; -} - -int Verbs::recv_packet(uint8_t** pkt_ptr, int flags) { - // If we don't have a work-request queue on the go, - // get some new packets. - - if( _verbs.pkt != NULL) { - _verbs.pkt = (bf_ibv_recv_pkt *) _verbs.pkt->wr.next; - if( _verbs.pkt == NULL ) { - this->release(_verbs.pkt_batch); - _verbs.pkt_batch = NULL; - } - } - while( _verbs.pkt_batch == NULL ) { - _verbs.pkt_batch = this->receive(_timeout); - _verbs.pkt = _verbs.pkt_batch; - } - // IBV returns Eth/UDP/IP headers. Strip them off here. - *pkt_ptr = (uint8_t *)_verbs.pkt->wr.sg_list->addr + BF_VERBS_PAYLOAD_OFFSET; - return _verbs.pkt->length - BF_VERBS_PAYLOAD_OFFSET; -} diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index f1afce752..51da59c8c 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -28,11 +28,10 @@ #pragma once -#include "hw_locality.hpp" - #include #include #include +#include #include #include #include @@ -44,9 +43,7 @@ #include #include -extern "C" { #include -} #ifndef BF_VERBS_NQP #define BF_VERBS_NQP 1 @@ -62,12 +59,10 @@ extern "C" { #define BF_VERBS_PAYLOAD_OFFSET 42 -extern "C" { - struct bf_ibv_recv_pkt{ ibv_recv_wr wr; + ibv_sge sg; uint32_t length; - uint64_t timestamp; }; struct bf_ibv_flow { @@ -79,13 +74,11 @@ struct bf_ibv_flow { struct bf_ibv { ibv_context* ctx; - //ibv_device_attr dev_attr; uint8_t port_num; ibv_pd* pd; ibv_comp_channel* cc; ibv_cq** cq; ibv_qp** qp; - ibv_sge* sge; ibv_flow** flows; uint8_t* mr_buf; @@ -95,15 +88,12 @@ struct bf_ibv { bf_ibv_recv_pkt* pkt_buf; bf_ibv_recv_pkt* pkt; bf_ibv_recv_pkt* pkt_batch; -} __attribute((aligned(8))); - -} // extern "C" +}; -class Verbs : public BoundThread { +class Verbs { int _fd; size_t _pkt_size_max; int _timeout; - int _alignment_filler; // Why is this needed? bf_ibv _verbs; void get_interface_name(char* name) { @@ -187,17 +177,489 @@ class Verbs : public BoundThread { ::memcpy(&id, buf, 8); return id; } - void create_context(); - void destroy_context(); - void create_buffers(size_t pkt_size_max); - void destroy_buffers(); - void create_queues(); - void destroy_queues(); - void link_work_requests(size_t pkt_size_max); - void create_flows(); - void destroy_flows(); - int release(bf_ibv_recv_pkt*); - bf_ibv_recv_pkt* receive(int timeout_ms=1); + void create_context() { + int d, p, g; + int ndev, found; + ibv_device** ibv_dev_list = NULL; + ibv_context* ibv_ctx = NULL; + ibv_device_attr ibv_dev_attr; + ibv_port_attr ibv_port_attr; + union ibv_gid ibv_gid; + + // Get the interface MAC address and GID + found = 0; + uint8_t mac[6] = {0}; + this->get_mac_address(&(mac[0])); + uint64_t gid = this->get_interface_gid(); + + /* + std::cout << "MAC: " << std::hex << int(mac[0]) << ":" << int(mac[1]) << ":" << int(mac[2]) + << ":" << int(mac[3]) << ":" << int(mac[4]) << ":" << int(mac[5]) << std::dec << std::endl; + std::cout << "GID: " << std::hex << int(htons( gid & 0xFFFF)) << ":" << int(htons((gid >> 16) & 0xFFFF)) + << ":" << int(htons((gid >> 32) & 0xFFFF)) << ":" << int(htons((gid >> 48) & 0xFFFF)) << std::dec << std::endl; + */ + + // Find the right device + /* Query all devices */ + ibv_dev_list = ibv_get_device_list(&ndev); + check_null(ibv_dev_list, + "ibv_get_device_list"); + + /* Interogate */ + for(d=0; dfd, F_GETFL); + check_error(::fcntl(_verbs.cc->fd, F_SETFL, flags | O_NONBLOCK), + "set completion channel to non-blocking"); + flags = ::fcntl(_verbs.cc->fd, F_GETFD); + check_error(::fcntl(_verbs.cc->fd, F_SETFD, flags | O_CLOEXEC), + "set completion channel to non-blocking"); + ::madvise(_verbs.cc, sizeof(ibv_pd), MADV_DONTFORK); + + // Setup the completion queues + _verbs.cq = (ibv_cq**) ::malloc(BF_VERBS_NQP * sizeof(ibv_cq*)); + check_null(_verbs.cq, + "allocate completion queues"); + ::memset(_verbs.cq, 0, BF_VERBS_NQP * sizeof(ibv_cq*)); + for(i=0; ilkey; + } + } + + // Link the work requests to receive queue + for(i=0; iget_port()); + flow.udp.mask.dst_port = 0xffff; + + // Filter on IP address in the IPv4 header + uint32_t ip; + char ip_str[INET_ADDRSTRLEN]; + this->get_ip_address(&(ip_str[0])); + inet_pton(AF_INET, &(ip_str[0]), &ip); + std::cout << "IP is: " << ip << " (" << ip_str << ")" << std::endl; + ::memcpy(&(flow.ipv4.val.dst_ip), &ip, 4); + ::memset(&(flow.ipv4.mask.dst_ip), 0xff, 4); + + // Filter on the destination MAC address (actual or multicast) + uint8_t mac[6] = {0}; + this->get_mac_address(&(mac[0])); + if( ((ip & 0xFF) >= 224) && ((ip & 0xFF) < 240) ) { + ETHER_MAP_IP_MULTICAST(&ip, mac); + /* + std::cout << "Multicast MAC: " << std::hex << int(mac[0]) << ":" << int(mac[1]) << ":" << int(mac[2]) + << ":" << int(mac[3]) << ":" << int(mac[4]) << ":" << int(mac[5]) << std::dec << std::endl; + */ + } + ::memcpy(&flow.eth.val.dst_mac, &mac, 6); + ::memset(&flow.eth.mask.dst_mac, 0xff, 6); + + /* + printf("size: %i\n", flow.attr.size); + printf(" attr: %i vs %lu\n", flow.attr.size, sizeof(ibv_flow_attr)); + printf(" eth: %i vs %lu\n", flow.eth.size, sizeof(ibv_flow_spec_eth)); + printf(" ipv4: %i vs %lu\n", flow.ipv4.size, sizeof(ibv_flow_spec_ipv4)); + printf(" udp: %i vs %lu\n", flow.udp.size, sizeof(ibv_flow_spec_tcp_udp)); + printf("specs: %i\n", flow.attr.num_of_specs); + + printf("type: %i (%i)\n", flow.udp.type, IBV_FLOW_SPEC_UDP); + printf("dst_port: %u\n", flow.udp.val.dst_port); + printf("dst_port: %u\n", flow.udp.mask.dst_port); + printf("src_port: %u\n", flow.udp.val.src_port); + printf("src_port: %u\n", flow.udp.mask.src_port); + + printf("dst_ip: %u\n", flow.ipv4.val.dst_ip); + printf("dst_ip: %u\n", flow.ipv4.mask.dst_ip); + printf("src_ip: %u\n", flow.ipv4.val.src_ip); + printf("src_ip: %u\n", flow.ipv4.mask.src_ip); + + ::memcpy(&(mac[0]), &(flow.eth.val.dst_mac[0]), 6); + printf("dst_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + ::memcpy(&(mac[0]), &(flow.eth.mask.dst_mac[0]), 6); + printf("dst_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + ::memcpy(&(mac[0]), &(flow.eth.val.src_mac[0]), 6); + printf("src_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + ::memcpy(&(mac[0]), &(flow.eth.mask.src_mac[0]), 6); + printf("src_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + printf("ether_type: %u\n", flow.eth.val.ether_type); + printf("ether_type: %u\n", flow.eth.mask.ether_type); + printf("vlan_tag: %u\n", flow.eth.val.vlan_tag); + printf("vlan_tag: %u\n", flow.eth.mask.vlan_tag); + */ + + // Create the flows + _verbs.flows = (ibv_flow**) ::malloc(BF_VERBS_NQP * sizeof(ibv_flow*)); + check_null(_verbs.flows, + "allocate flows"); + ::memset(_verbs.flows, 0, BF_VERBS_NQP * sizeof(ibv_flow*)); + for(i=0; iwr.wr_id / BF_VERBS_NPKTBUF; + return ibv_post_recv(_verbs.qp[i], &recv_pkt->wr, &recv_wr_bad); + } + inline bf_ibv_recv_pkt* receive() { + int i; + int num_wce; + uint64_t wr_id; + pollfd pfd; + ibv_qp_attr qp_attr; + ibv_cq *ev_cq; + intptr_t ev_cq_ctx; + ibv_wc wc[BF_VERBS_WCBATCH]; + bf_ibv_recv_pkt * recv_head = NULL; + ibv_recv_wr * recv_tail = NULL; + + // Ensure the queue pairs are in a state suitable for receiving + for(i=0; istate) { + case IBV_QPS_RESET: // Unexpected, but maybe user reset it + qp_attr.qp_state = IBV_QPS_INIT; + qp_attr.port_num = _verbs.port_num; + if( ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE|IBV_QP_PORT) ) { + return NULL; + } + case IBV_QPS_INIT: + qp_attr.qp_state = IBV_QPS_RTR; + qp_attr.port_num = _verbs.port_num; + if( ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE) ) { + return NULL; + } + break; + case IBV_QPS_RTR: + case IBV_QPS_RTS: + break; + default: + return NULL; + } + } + + // Setup for poll + pfd.fd = _verbs.cc->fd; + pfd.events = POLLIN; + pfd.revents = 0; + + // poll completion channel's fd with given timeout + int rc = ::poll(&pfd, 1, _timeout); + if( rc == 0) { + // Timeout + errno = EAGAIN; + throw Verbs::Error("timeout"); + } else if( rc < 0) { + // Error + throw Verbs::Error("error"); + } + + // Get the completion event + if( ibv_get_cq_event(_verbs.cc, &ev_cq, (void **)&ev_cq_ctx) ) { + return NULL; + } + + // Ack the event + ibv_ack_cq_events(ev_cq, 1); + + // Request notification upon the next completion event + // Do NOT restrict to solicited-only completions + if( ibv_req_notify_cq(ev_cq, 0) ) { + return NULL; + } + + // Empty the CQ: poll all of the completions from the CQ (if any exist) + do { + num_wce = ibv_poll_cq(ev_cq, BF_VERBS_WCBATCH, &wc[0]); + if( num_wce < 0 ) { + return NULL; + } + + // Loop through all work completions + for(i=0; iwr; + } else { + recv_tail = &(_verbs.pkt_buf[wr_id].wr); + recv_tail = recv_tail->next; + } + } // for each work completion + } while(num_wce); + + // Ensure list is NULL terminated (if we have a list) + if(recv_tail) { + recv_tail->next = NULL; + } + + return recv_head; + } inline void check_error(int retval, std::string what) { if( retval < 0 ) { destroy_flows(); @@ -236,15 +698,17 @@ class Verbs : public BoundThread { : super_t(what_arg) {} }; - Verbs(int fd, size_t pkt_size_max, int core) - : BoundThread(core), _fd(fd), _pkt_size_max(pkt_size_max) { - ::memset(&_verbs, 0, sizeof(_verbs)); + Verbs(int fd, size_t pkt_size_max) + : _fd(fd), _pkt_size_max(pkt_size_max), _timeout(1) { _timeout = get_timeout_ms(); + ::memset(&_verbs, 0, sizeof(_verbs)); + check_error(ibv_fork_init(), + "make verbs fork safe"); create_context(); - create_buffers(pkt_size_max); + create_buffers(); create_queues(); - link_work_requests(pkt_size_max); + link_work_requests(); create_flows(); } ~Verbs() { @@ -253,5 +717,30 @@ class Verbs : public BoundThread { destroy_buffers(); destroy_context(); } - int recv_packet(uint8_t** pkt_ptr, int flags=0); + inline int recv_packet(uint8_t** pkt_ptr, int flags=0) { + // If we don't have a work-request queue on the go, + // get some new packets. + if( _verbs.pkt != NULL) { + _verbs.pkt = (bf_ibv_recv_pkt *) _verbs.pkt->wr.next; + if( _verbs.pkt == NULL ) { + this->release(_verbs.pkt_batch); + _verbs.pkt_batch = NULL; + } + } + + while( _verbs.pkt_batch == NULL ) { + try { + _verbs.pkt_batch = this->receive(); + } catch(Verbs::Error) { + _verbs.pkt = NULL; + errno = EAGAIN; + return -1; + } + _verbs.pkt = _verbs.pkt_batch; + } + + // IBV returns Eth/UDP/IP headers. Strip them off here + *pkt_ptr = (uint8_t *) _verbs.pkt->wr.sg_list->addr + BF_VERBS_PAYLOAD_OFFSET; + return _verbs.pkt->length - BF_VERBS_PAYLOAD_OFFSET; + } }; diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 17f51cd39..d2b2393a0 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -289,8 +289,8 @@ class UDPPacketSniffer : public PacketCaptureMethod { class UDPVerbsReceiver : public PacketCaptureMethod { Verbs _ibv; public: - UDPVerbsReceiver(int fd, size_t pkt_size_max=JUMBO_FRAME_SIZE, int core=-1) - : PacketCaptureMethod(fd, pkt_size_max, BF_IO_VERBS), _ibv(fd, pkt_size_max, core) {} + UDPVerbsReceiver(int fd, size_t pkt_size_max=JUMBO_FRAME_SIZE) + : PacketCaptureMethod(fd, pkt_size_max, BF_IO_VERBS), _ibv(fd, pkt_size_max) {} inline int recv_packet(uint8_t** pkt_ptr, int flags=0) { *pkt_ptr = 0; return _ibv.recv_packet(pkt_ptr, flags); @@ -1188,7 +1188,7 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, method = new UDPPacketSniffer(fd, max_payload_size); #if BF_VERBS_ENABLED } else if( backend == BF_IO_VERBS ) { - method = new UDPVerbsReceiver(fd, max_payload_size, core); + method = new UDPVerbsReceiver(fd, max_payload_size); #endif } else { return BF_STATUS_UNSUPPORTED; From d463a2537bae8b1c7f388fdd74cccbedc2d68def Mon Sep 17 00:00:00 2001 From: ubuntu Date: Tue, 13 Jul 2021 19:04:34 +0000 Subject: [PATCH 0124/1155] Py3 re-fixes --- tools/like_top.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/like_top.py b/tools/like_top.py index 082047424..37dc0bde0 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -192,7 +192,7 @@ def get_gpu_memory_usage(): pass else: # Parse the ouptut and turn everything into something useful, if possible - lines = output.decode().split('\n')[:-1] + lines = output.split('\n')[:-1] for line in lines: used, total, free, draw, limit, load = line.split(',') data['devCount'] += 1 From 55784eeeef8b0e9315b0b8b72d569cb3846d7940 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Thu, 15 Jul 2021 16:25:24 +0000 Subject: [PATCH 0125/1155] Remove some divergences from JD's ibverb-support branch --- python/bifrost/packet_capture.py | 10 +++++++--- src/bifrost/packet_capture.h | 13 ------------- src/ib_verbs.hpp | 2 +- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index 77b22fcc1..8454b0085 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -94,8 +94,7 @@ def end(self): class UDPCapture(_CaptureBase): def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, - buffer_ntime, slot_ntime, sequence_callback, core=None, - interface='', port=-1): + buffer_ntime, slot_ntime, sequence_callback, core=None): try: fmt = fmt.encode() except AttributeError: @@ -113,6 +112,12 @@ def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, class UDPSniffer(_CaptureBase): def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, buffer_ntime, slot_ntime, sequence_callback, core=None): + try: + fmt = fmt.encode() + except AttributeError: + # Python2 catch + pass + nsrc = self._flatten_value(nsrc) if core is None: core = -1 BifrostObject.__init__( @@ -129,7 +134,6 @@ def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, except AttributeError: # Python2 catch pass - nsrc = self._flatten_value(nsrc) if core is None: core = -1 BifrostObject.__init__( diff --git a/src/bifrost/packet_capture.h b/src/bifrost/packet_capture.h index 0e2bf0bd7..c3e5cc34d 100644 --- a/src/bifrost/packet_capture.h +++ b/src/bifrost/packet_capture.h @@ -111,19 +111,6 @@ BFstatus bfUdpCaptureCreate(BFpacketcapture* obj, BFsize slot_ntime, BFpacketcapture_callback sequence_callback, int core); - -BFstatus bfIbvUdpCaptureCreate(BFpacketcapture* obj, - const char* format, - int fd, - BFring ring, - BFsize nsrc, - BFsize src0, - BFsize max_payload_size, - BFsize buffer_ntime, - BFsize slot_ntime, - BFpacketcapture_callback sequence_callback, - int core); - BFstatus bfUdpSnifferCreate(BFpacketcapture* obj, const char* format, int fd, diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index da76df4cb..51da59c8c 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -50,7 +50,7 @@ #endif #ifndef BF_VERBS_NPKTBUF -#define BF_VERBS_NPKTBUF 32768 +#define BF_VERBS_NPKTBUF 8192 #endif #ifndef BF_VERBS_WCBATCH From e39cf99756a38c5e1b577736628c892cedd08b7d Mon Sep 17 00:00:00 2001 From: ubuntu Date: Thu, 15 Jul 2021 17:10:24 +0000 Subject: [PATCH 0126/1155] Make compiling actually work when XGPU isn't used --- src/Makefile | 3 ++- src/bifrost/bf_xgpu.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index ec1b137c1..00b3bf893 100644 --- a/src/Makefile +++ b/src/Makefile @@ -121,8 +121,9 @@ endif ifndef NOCUDA CPPFLAGS += -DBF_CUDA_ENABLED=1 - LIB += -L$(CUDA_LIBDIR64) -L$(CUDA_LIBDIR) -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt -lxgpu + LIB += -L$(CUDA_LIBDIR64) -L$(CUDA_LIBDIR) -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt ifdef XGPU + CPPFLAGS += -DBF_XGPU_ENABLED=1 LIB += -lxgpu endif endif diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h index e06b5be61..39dbbfdb5 100644 --- a/src/bifrost/bf_xgpu.h +++ b/src/bifrost/bf_xgpu.h @@ -1,9 +1,11 @@ #include #include +#if BF_XGPU_ENABLED BFstatus bfXgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); BFstatus bfXgpuCorrelate(BFarray *in, BFarray *out, int doDump); BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump); BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *conj, int nchan_sum); BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray *is_conj); BFstatus bfXgpuReorder(BFarray *xgpu_output, BFarray *reordered, BFarray *baselines, BFarray *is_conjugated); +#endif From 2e7fb1c831aed2c9d4b9e5fd869bd59c105715a5 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Thu, 15 Jul 2021 18:51:10 +0000 Subject: [PATCH 0127/1155] Don't use "pragma pack" Parroting JD: The pragma pack compiler directive affects all structures following the pragma. So, an innocent struct in a header file which wants to be packed can mess up other code in fun ways, depending on orders of header includes. For some reason, IB Verbs configuration seems to be easily broken by this kind of thing. Use struct __attribute__((packed)) {...} instead --- src/formats/lwa352_vbeam.hpp | 3 +-- src/formats/snap2.hpp | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/formats/lwa352_vbeam.hpp b/src/formats/lwa352_vbeam.hpp index 8cccef753..e7c7fe402 100644 --- a/src/formats/lwa352_vbeam.hpp +++ b/src/formats/lwa352_vbeam.hpp @@ -30,8 +30,7 @@ #include "base.hpp" -#pragma pack(1) -struct lwa352_vbeam_hdr_type { +struct __attribute__((packed)) lwa352_vbeam_hdr_type { uint64_t sync_word; uint64_t sync_time; uint64_t time_tag; diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index a8fc7350f..ea93244b3 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -38,9 +38,8 @@ #define PIPELINE_NPOL 704 #define PIPELINE_NCHAN 32 -#pragma pack(1) // All entries are network (i.e. big) endian -struct snap2_hdr_type { +struct __attribute__((packed)) snap2_hdr_type { uint64_t seq; // Spectra counter == packet counter uint32_t sync_time; // UNIX sync time uint16_t npol; // Number of pols in this packet From f46f3649fc2051e79aea0b39849d1f08c40e04d5 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Thu, 15 Jul 2021 19:28:04 +0000 Subject: [PATCH 0128/1155] Always include xgpu header file I'm not smart enough to make the python bindings get generated when the header entries are wrapped in #if's --- src/bifrost/bf_xgpu.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h index 39dbbfdb5..fa9504a4b 100644 --- a/src/bifrost/bf_xgpu.h +++ b/src/bifrost/bf_xgpu.h @@ -1,11 +1,25 @@ +#ifndef BF_XGPU_H_INCLUDE_GUARD_ +#define BF_XGPU_H_INCLUDE_GUARD_ + #include #include -#if BF_XGPU_ENABLED +#ifdef __cplusplus +extern "C" { +#endif + +//TODO: figure out how to make ctypesgen to the right thing with python generation +//#if(BF_XGPU_ENABLED) BFstatus bfXgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); BFstatus bfXgpuCorrelate(BFarray *in, BFarray *out, int doDump); BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump); BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *conj, int nchan_sum); BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray *is_conj); BFstatus bfXgpuReorder(BFarray *xgpu_output, BFarray *reordered, BFarray *baselines, BFarray *is_conjugated); +//#endif // BF_XGPU_ENABLED + +#ifdef __cplusplus +} // extern "C" #endif + +#endif // BF_XGPU_H_INCLUDE_GUARD From 5767a0ed99bbbe94390fef8b2ca0f8dfb0d97b23 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Thu, 15 Jul 2021 19:38:22 +0000 Subject: [PATCH 0129/1155] Bigger packet buffers --- src/ib_verbs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 51da59c8c..da76df4cb 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -50,7 +50,7 @@ #endif #ifndef BF_VERBS_NPKTBUF -#define BF_VERBS_NPKTBUF 8192 +#define BF_VERBS_NPKTBUF 32768 #endif #ifndef BF_VERBS_WCBATCH From fc4704b21f13e2112d64824456a6c2171e669ffa Mon Sep 17 00:00:00 2001 From: ubuntu Date: Tue, 20 Jul 2021 10:24:45 +0000 Subject: [PATCH 0130/1155] re-speedup IBV (and presumably fix a bug) Blindly copied from the now-deprecated implementation in ib_verbs.cpp --- src/ib_verbs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index da76df4cb..8db58fe25 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -647,7 +647,7 @@ class Verbs { recv_head = &(_verbs.pkt_buf[wr_id]); recv_tail = &recv_head->wr; } else { - recv_tail = &(_verbs.pkt_buf[wr_id].wr); + recv_tail->next = &(_verbs.pkt_buf[wr_id].wr); recv_tail = recv_tail->next; } } // for each work completion From 15ef4d28dec7487d65c873c54d88a8cad8af6e32 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 20 Jul 2021 04:55:55 -0600 Subject: [PATCH 0131/1155] @realtimeradio found a missing "->next". --- src/ib_verbs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 51da59c8c..e2019d559 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -647,7 +647,7 @@ class Verbs { recv_head = &(_verbs.pkt_buf[wr_id]); recv_tail = &recv_head->wr; } else { - recv_tail = &(_verbs.pkt_buf[wr_id].wr); + recv_tail->next = &(_verbs.pkt_buf[wr_id].wr); recv_tail = recv_tail->next; } } // for each work completion From b482898b7581a1a7026687fae486a014973db3e0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 20 Jul 2021 15:00:57 -0600 Subject: [PATCH 0132/1155] Use the upper 8 bits in the COR frame_count word to store the channel decimation value. --- src/formats/cor.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/formats/cor.hpp b/src/formats/cor.hpp index 705c6db7d..b6b21ae6c 100644 --- a/src/formats/cor.hpp +++ b/src/formats/cor.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2021, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,6 +62,7 @@ class CORDecoder : virtual public PacketDecoder { const cor_hdr_type* pkt_hdr = (cor_hdr_type*)pkt_ptr; const uint8_t* pkt_pld = pkt_ptr + sizeof(cor_hdr_type); int pld_size = pkt_size - sizeof(cor_hdr_type); + uint8_t chan_decim = (be32toh(pkt_hdr->frame_count_word) >> 16) & 0xFF; uint8_t nserver = (be32toh(pkt_hdr->frame_count_word) >> 8) & 0xFF; uint8_t server = be32toh(pkt_hdr->frame_count_word) & 0xFF; uint16_t nchan_pkt = (pld_size/(8*4)); @@ -76,7 +77,7 @@ class CORDecoder : virtual public PacketDecoder { pkt->src = (stand0*(2*(nstand-1)+1-stand0)/2 + stand1 + 1 - _src0)*nserver \ + (server - 1); pkt->chan0 = be16toh(pkt_hdr->first_chan) \ - - nchan_pkt * (server - 1); + - nchan_decim*nchan_pkt * (server - 1); pkt->nchan = nchan_pkt; pkt->tuning = (nserver << 8) | (server - 1); // Stores the number of servers and // the server that sent this packet From 4347ab9ffb1c4e5ce15d01f0e0fdfa0ce8c8f24c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 20 Jul 2021 15:18:11 -0600 Subject: [PATCH 0133/1155] Missing 'n'. --- src/formats/cor.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/cor.hpp b/src/formats/cor.hpp index b6b21ae6c..bf1660ded 100644 --- a/src/formats/cor.hpp +++ b/src/formats/cor.hpp @@ -62,7 +62,7 @@ class CORDecoder : virtual public PacketDecoder { const cor_hdr_type* pkt_hdr = (cor_hdr_type*)pkt_ptr; const uint8_t* pkt_pld = pkt_ptr + sizeof(cor_hdr_type); int pld_size = pkt_size - sizeof(cor_hdr_type); - uint8_t chan_decim = (be32toh(pkt_hdr->frame_count_word) >> 16) & 0xFF; + uint8_t nchan_decim = (be32toh(pkt_hdr->frame_count_word) >> 16) & 0xFF; uint8_t nserver = (be32toh(pkt_hdr->frame_count_word) >> 8) & 0xFF; uint8_t server = be32toh(pkt_hdr->frame_count_word) & 0xFF; uint16_t nchan_pkt = (pld_size/(8*4)); From 35a7b46ec8e3132d643293e68470fad35db69f7c Mon Sep 17 00:00:00 2001 From: ubuntu Date: Tue, 17 Aug 2021 15:47:15 +0000 Subject: [PATCH 0134/1155] Make beamformer GEMM do the right thing TODO: Is there a more sensible (less-transposey) data ordering. [Probably] --- src/cublas_beamform.cu | 62 +++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 13 deletions(-) diff --git a/src/cublas_beamform.cu b/src/cublas_beamform.cu index 4be7aedb6..ff8fe85dd 100644 --- a/src/cublas_beamform.cu +++ b/src/cublas_beamform.cu @@ -21,8 +21,8 @@ __global__ void trans_4bit_to_float(unsigned char *in, int time = blockIdx.x; int chan = blockIdx.y; int pol = TRANSPOSE_POL_BLOCK_SIZE*threadIdx.x; - unsigned char *in_off = in + time*n_chan*n_pol + chan*n_pol + pol; - float *out_off = out + 2*( chan*n_pol*n_time + pol*n_time + time); + unsigned char *in_off = in + time*n_chan*n_pol + chan*n_pol + pol; // 4+4 bit + float *out_off = out + 2*( chan*n_pol*n_time + pol*n_time + time); // 32+32 bit //long long int old_index = time*n_chan*n_pol + chan*n_pol + pol; //long long int new_index = chan*n_pol*n_time + pol*n_time + time; float real, imag; @@ -34,10 +34,11 @@ __global__ void trans_4bit_to_float(unsigned char *in, //imag = lut[in[old_index+i] & 0b1111]; //out[2*(new_index+i)] = real; //out[2*(new_index+i)+1] = imag; - real = lut[temp >> 4]; - imag = lut[temp & 255]; - *out_off++ = real; - *out_off++ = imag; + real = lut[(temp >> 4) & 0b1111]; + imag = lut[temp & 0b1111]; + out_off[0] = real; + out_off[1] = imag; + out_off += 2*n_time; } } @@ -191,7 +192,7 @@ void cublas_beamform_init(int device, int ninputs, int nchans, int ntimes, int n gpuBLASchk(cublasCreate(&(context.handle))); gpuBLASchk(cublasSetStream(context.handle, context.stream)); gpuBLASchk(cublasSetPointerMode(context.handle, CUBLAS_POINTER_MODE_HOST)); - //gpuBLASchk(cublasSetPointerMode(handle, CUBLAS_POINTER_MODE_DEVICE)); + //gpuBLASchk(cublasSetPointerMode(context.handle, CUBLAS_POINTER_MODE_DEVICE)); gpuBLASchk(cublasSetMathMode(context.handle, CUBLAS_TENSOR_OP_MATH)); context.ninputs = ninputs; @@ -202,6 +203,7 @@ void cublas_beamform_init(int device, int ninputs, int nchans, int ntimes, int n // Internally allocate intermediate buffers gpuErrchk( cudaMalloc(&context.in32_d, ninputs * nchans * ntimes * 2 * sizeof(float)) ); + //gpuErrchk( cudaMemcpy(context.in32_d, in32_h, ninputs * nchans * ntimes * 2 * sizeof(float), cudaMemcpyHostToDevice) ); // If the context is initialized with ntimeblocks=0, then we do no summing so don't // need the intermediate buffer allocated internally. if (ntimeblocks > 0) { @@ -244,23 +246,24 @@ void cublas_beamform(unsigned char *in4_d, float *out_d, float *weights_d) { // A matrix: beamforming coeffs (NBEAMS * NANTS) // B matrix: data matrix (NANTS * NTIMES) + /* gpuBLASchk(cublasGemmStridedBatchedEx( context.handle, - CUBLAS_OP_N, // transpose A? - CUBLAS_OP_N, // transpose B? + CUBLAS_OP_T, // transpose A? + CUBLAS_OP_T, // transpose B? context.nbeams, // m context.ntimes, // n context.ninputs, // k - // Coeffs + // Coeffs: [nchans x] nbeams x ninputs (m x k) &alpha, // alpha weights_d, // A CUDA_C_32F, // A type - context.nbeams, // Lda + context.ninputs, // Lda context.nbeams*context.ninputs,// strideA : stride size - // Data + // Data: [nchans x] ninputs x ntimes (k x n) context.in32_d, // B CUDA_C_32F, // B type - context.ninputs, // Ldb + context.ntimes, // Ldb context.ninputs*context.ntimes,// strideB : stride size &beta, // beta // Results @@ -272,6 +275,39 @@ void cublas_beamform(unsigned char *in4_d, float *out_d, float *weights_d) { CUDA_C_32F, // compute type CUBLAS_GEMM_DEFAULT_TENSOR_OP // algo )); + */ + + gpuBLASchk(cublasGemmStridedBatchedEx( + context.handle, + CUBLAS_OP_N, // transpose A? + CUBLAS_OP_T, // transpose B? + context.ntimes, // n + context.nbeams, // m + context.ninputs, // k + &alpha, // alpha + // + // Data: [nchans x] ninputs x ntimes (k x n) + context.in32_d, // B + CUDA_C_32F, // B type + context.ntimes, // Ldb + context.ninputs*context.ntimes,// strideB : stride size + // + // Coeffs: [nchans x] nbeams x ninputs (m x k) + weights_d, // A + CUDA_C_32F, // A type + context.nbeams, // Lda + context.nbeams*context.ninputs,// strideA : stride size + // + &beta, // beta + // Results + gem_out_d, // C + CUDA_C_32F, // Ctype + context.ntimes, // Ldc + context.nbeams*context.ntimes,// Stride C + context.nchans, // batchCount + CUDA_C_32F, // compute type + CUBLAS_GEMM_DEFAULT_TENSOR_OP // algo + )); cudaStreamSynchronize(context.stream); // Optionally: From e2b3b9701b38cf9a68a27e8fcfb1e81c67b4e0ab Mon Sep 17 00:00:00 2001 From: ubuntu Date: Tue, 17 Aug 2021 16:57:30 +0000 Subject: [PATCH 0135/1155] Update beamformer calls to match actual data ordering --- src/bifrost/beamform.h | 6 +++--- src/cublas_beamform.cu | 29 ++++++++++++++++++++--------- src/cublas_beamform.cuh | 2 +- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/bifrost/beamform.h b/src/bifrost/beamform.h index 7a5e4d297..8002a691a 100644 --- a/src/bifrost/beamform.h +++ b/src/bifrost/beamform.h @@ -24,7 +24,7 @@ BFstatus bfBeamformInitialize( /* * in: Pointer to ntime x nchan x ninputs x 4+4 bit data block * out: Pointer to output data. - * If ntime_blocks > 0: + * If ntime_blocks > 0: !!!!UNTESTED, probably broken!!!! * For the purposes of generating dynamic spectra, beam 2n and 2n+1 are considered * to be two pols of the same pointing, and are cross-multipled and summed over * ntimes/ntime_blocks to form the output array: @@ -35,7 +35,7 @@ BFstatus bfBeamformInitialize( * coefficients can make appropriate single-pol beam pairs). * If ntime_blocks = 0: * Data are returned as voltages, in order: - * ntimes x nchan x nbeam x complex64 beamformer block + * nchan x nbeam x ntime x complex64 beamformer block * * weights -- pointer to nbeams x nchans x ninputs x complex64 weights */ @@ -49,7 +49,7 @@ BFstatus bfBeamformRun( * Take the output of bfBeamformRun with ntime_blocks = 0, and perform transposing and integration * of data, to deliver a time integrated dual-pol dynamic spectra of the form: * nbeam/2 x ntime/ntimes_sum x nchan x 4 x float32 (powers, XX, YY, re(XY, im(XY)) - * I.e., the format which would be returned by bfBeamformRun is ntime_blocks > 0 + * I.e., the format which would be returned by bfBeamformRun if ntime_blocks > 0 */ BFstatus bfBeamformIntegrate( BFarray *in, diff --git a/src/cublas_beamform.cu b/src/cublas_beamform.cu index ff8fe85dd..3f635eda9 100644 --- a/src/cublas_beamform.cu +++ b/src/cublas_beamform.cu @@ -45,6 +45,7 @@ __global__ void trans_4bit_to_float(unsigned char *in, // Transpose chan x beam x pol x time x 32+32 float to // beam x time[part-summed] x chan x [XX,YY,XY*_r,XY*_i] x 32 float // Each thread deals with two pols of a beam, and sums over n_time_sum time samples +// n_beam is the _output_ number of beams. I.e., the number of dual-pol beams __global__ void trans_output_and_sum(float *in, float *out, int n_chan, @@ -55,25 +56,28 @@ __global__ void trans_output_and_sum(float *in, int chan = blockIdx.x; int beam = blockIdx.y; int time = threadIdx.x; - long long int old_index = chan*n_beam*n_time*2 + beam*n_time*2 + time*n_time_sum*2; // start index for n_time/n_time_sum samples - long long int new_index = beam*(n_time / n_time_sum)*n_chan + time*n_chan + chan; - float xx=0., yy=0., xy_r=0., xy_i=0.; + // n_beam here is a dual pol beam + // input is: chan x beam x pol [2] x time x complexity + long long int old_index = 2*(chan*n_beam*2*n_time + beam*2*n_time + time*n_time_sum); // start index for n_time/n_time_sum samples + // output is: beam x time x chan x pol-products [4] + long long int new_index = 4*(beam*(n_time / n_time_sum)*n_chan + time*n_chan + chan); + float xx=0., yy=0., xy_r=0., xy_i=0.; // accumulator registers float x_r, x_i, y_r, y_i; int t; for (t=0; t Date: Tue, 17 Aug 2021 15:46:55 -0600 Subject: [PATCH 0136/1155] The COR packets 'navg' field has the same units as 'time_tag'. --- src/formats/cor.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/cor.hpp b/src/formats/cor.hpp index bf1660ded..c7c7b0787 100644 --- a/src/formats/cor.hpp +++ b/src/formats/cor.hpp @@ -72,7 +72,7 @@ class CORDecoder : virtual public PacketDecoder { pkt->sync = pkt_hdr->sync_word; pkt->time_tag = be64toh(pkt_hdr->time_tag); pkt->decimation = be32toh(pkt_hdr->navg); - pkt->seq = pkt->time_tag / 196000000 / (pkt->decimation / 100); + pkt->seq = pkt->time_tag / pkt->decimation; pkt->nsrc = _nsrc; pkt->src = (stand0*(2*(nstand-1)+1-stand0)/2 + stand1 + 1 - _src0)*nserver \ + (server - 1); From 9a6e56a7bfe3df15b82433795dbebb46a11a19f8 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Wed, 18 Aug 2021 14:55:33 +0000 Subject: [PATCH 0137/1155] Supply beam coeffs in chan x beam x input [C-ordered] order --- src/cublas_beamform.cu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cublas_beamform.cu b/src/cublas_beamform.cu index 3f635eda9..7e2b7bdbb 100644 --- a/src/cublas_beamform.cu +++ b/src/cublas_beamform.cu @@ -284,7 +284,7 @@ void cublas_beamform(unsigned char *in4_d, float *out_d, float *weights_d) { gpuBLASchk(cublasGemmStridedBatchedEx( context.handle, CUBLAS_OP_N, // transpose A? - CUBLAS_OP_T, // transpose B? + CUBLAS_OP_N, // transpose B? context.ntimes, // n context.nbeams, // m context.ninputs, // k @@ -299,7 +299,7 @@ void cublas_beamform(unsigned char *in4_d, float *out_d, float *weights_d) { // Coeffs: [nchans x] nbeams x ninputs (m x k) weights_d, // A CUDA_C_32F, // A type - context.nbeams, // Lda + context.ninputs, // Lda context.nbeams*context.ninputs,// strideA : stride size // &beta, // beta From b9bda798896c3b779b5731f578cea38e6e608ae8 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Fri, 27 Aug 2021 12:14:55 +0000 Subject: [PATCH 0138/1155] Catch mmap error --- src/ib_verbs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 8db58fe25..eb6f61152 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -277,7 +277,7 @@ class Verbs { _verbs.mr_size = (size_t) BF_VERBS_NPKTBUF*BF_VERBS_NQP * _pkt_size_max; _verbs.mr_buf = (uint8_t *) ::mmap(NULL, _verbs.mr_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED, -1, 0); - check_error(_verbs.mr_buf == MAP_FAILED, + check_error(_verbs.mr_buf == MAP_FAILED ? -1 : 0, "allocate memory region buffer"); check_error(::mlock(_verbs.mr_buf, _verbs.mr_size), "lock memory region buffer"); From 4202f0a29a2d446f9450f4b2170e8d0b3c96265a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Oct 2021 19:04:56 -0600 Subject: [PATCH 0139/1155] First attempts at making a configure script for Bifrost. --- configure | 7021 ++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 169 ++ 2 files changed, 7190 insertions(+) create mode 100755 configure create mode 100644 configure.ac diff --git a/configure b/configure new file mode 100755 index 000000000..28a03eef2 --- /dev/null +++ b/configure @@ -0,0 +1,7021 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='bifrost' +PACKAGE_TARNAME='bifrost' +PACKAGE_VERSION='0.9.0' +PACKAGE_STRING='bifrost 0.9.0' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="src/cuda.cpp" +ac_subst_vars='LTLIBOBJS +LIBOBJS +DX_RULES +PAPER_SIZE +DOXYGEN_PAPER_SIZE +GENERATE_LATEX +DX_PDFLATEX +DX_FLAG_pdf +DX_EGREP +DX_DVIPS +DX_MAKEINDEX +DX_LATEX +DX_FLAG_ps +DX_FLAG_html +GENERATE_CHI +DX_FLAG_chi +GENERATE_HTMLHELP +GENERATE_HTML +HHC_PATH +DX_HHC +DX_FLAG_chm +GENERATE_XML +DX_FLAG_xml +GENERATE_RTF +DX_FLAG_rtf +GENERATE_MAN +DX_FLAG_man +DOT_PATH +HAVE_DOT +DX_DOT +DX_FLAG_dot +PERL_PATH +DX_PERL +DX_DOXYGEN +DX_FLAG_doc +PROJECT +SRCDIR +DX_ENV +DX_DOCDIR +DX_CONFIG +DX_PROJECT +PYINSTALLFLAGS +PYBUILDFLAGS +PYTHON_LIB +PYTHON_INCLUDE_DIR +PYTHON_BIN +ARCH_NVCCFLAGS +ARCH_CXXFLAGS +TRACE_CPPFLAGS +DEBUG_NVCCFLAGS +DEBUG_CXXFLAGS +DEBUG_CPPFLAGS +ALIGNMENT +GPU_SHAREDMEM +GPU_ARCHS +VMA_CPPFLAGS +VMA_LIB +HWLOC_CPPFLAGS +HWLOC_LIB +NUMA_CPPFLAGS +NUMA_LIB +CTAGS +AWK +NVCCFLAGS +HAVE_CUDA +CUOBJDUMP +NVPRUNE +NVCC +RANLIB +CXXCPP +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_cuda +with_nvcc +with_nvprune +with_cuobjdump +with_nvcc_flags +with_awk +with_ctags +enable_numa +enable_hwloc +enable_vma +with_gpu_archs +with_shared_mem +with_alignment +enable_debug +enable_trace +enable_native_arch +enable_cuda_debug +with_pybuild_flags +with_pyinstall_flags +enable_doxygen_doc +enable_doxygen_dot +enable_doxygen_man +enable_doxygen_rtf +enable_doxygen_xml +enable_doxygen_chm +enable_doxygen_chi +enable_doxygen_html +enable_doxygen_ps +enable_doxygen_pdf +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CXXCPP +NVCC +NVPRUNE +CUOBJDUMP +AWK +CTAGS +DOXYGEN_PAPER_SIZE' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures bifrost 0.9.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/bifrost] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of bifrost 0.9.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-cuda enable cuda support (default=yes) + --enable-numa enable NUMA support (default=yes) + --enable-hwloc enable hwloc support (default=yes) + --enable-vma enable vma support (default=no) + --enable-debug enable debugging mode (default=no) + --enable-trace enable tracing mode for nvprof/nvvp (default=no) + --enable-native-arch enable native architecture compilation (default=yes) + --enable-cuda-debug enable CUDA debugging (nvcc -G; default=no) + --disable-doxygen-doc don't generate any doxygen documentation + --enable-doxygen-dot generate graphics for doxygen documentation + --disable-doxygen-man don't generate doxygen manual pages + --enable-doxygen-rtf generate doxygen RTF documentation + --enable-doxygen-xml generate doxygen XML documentation + --enable-doxygen-chm generate doxygen compressed HTML help documentation + --enable-doxygen-chi generate doxygen separate compressed HTML help index + file + --disable-doxygen-html don't generate doxygen plain HTML documentation + --disable-doxygen-ps don't generate doxygen PostScript documentation + --disable-doxygen-pdf don't generate doxygen PDF documentation + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-nvcc=[PATH] absolute path to nvcc executable + --with-nvprune=[PATH] absolute path to nvprune executable + --with-cuobjdump=[PATH] + absolute path to cuobjdump executable + --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler + -Wall') + --with-awk=[PATH] absolute path to awk executable + --with-ctags=[PATH] absolute path to ctags executable + --with-gpu-archs=... default GPU architectures (default='35 61') + --with-shared-mem=N default GPU shared memory in bytes (default=16384) + --with-alignment=N default memory alignment in bytes (default=4096) + --with-pybuild-flags build flags for python (default='') + --with-pyintall-flags install flags for python (default='') + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXXCPP C++ preprocessor + NVCC Absolute path to nvcc executable + NVPRUNE Absolute path to nvprune executable + CUOBJDUMP Absolute path to cuobjdump executable + AWK Absolute path to awk executable + CTAGS Absolute path to ctags executable + DOXYGEN_PAPER_SIZE + a4wide (default), a4, letter, legal or executive + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +bifrost configure 0.9.0 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by bifrost $as_me 0.9.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + +: ${CXXFLAGS="-O3 -Wall -pedantic"} + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C++ compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + +# Check whether --enable-cuda was given. +if test "${enable_cuda+set}" = set; then : + enableval=$enable_cuda; +else + enable_cuda=yes +fi + +if test "x$enable_cuda" != xno; then : + + + + + + + + + + + if test -z "$NVCC"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvcc executable path has been provided" >&5 +$as_echo_n "checking whether nvcc executable path has been provided... " >&6; } + +# Check whether --with-nvcc was given. +if test "${with_nvcc+set}" = set; then : + withval=$with_nvcc; + if test "$withval" != yes && test "$withval" != no; then : + + NVCC="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } + +else + + NVCC="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVCC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NVCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVCC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NVCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + + + + + + + + + + + if test -z "$NVPRUNE"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvprune executable path has been provided" >&5 +$as_echo_n "checking whether nvprune executable path has been provided... " >&6; } + +# Check whether --with-nvprune was given. +if test "${with_nvprune+set}" = set; then : + withval=$with_nvprune; + if test "$withval" != yes && test "$withval" != no; then : + + NVPRUNE="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } + +else + + NVPRUNE="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "nvprune", so it can be a program name with args. +set dummy nvprune; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVPRUNE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NVPRUNE in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NVPRUNE=$ac_cv_path_NVPRUNE +if test -n "$NVPRUNE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "nvprune", so it can be a program name with args. +set dummy nvprune; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVPRUNE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NVPRUNE in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NVPRUNE=$ac_cv_path_NVPRUNE +if test -n "$NVPRUNE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + + + + + + + + + + + if test -z "$CUOBJDUMP"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cuobjdump executable path has been provided" >&5 +$as_echo_n "checking whether cuobjdump executable path has been provided... " >&6; } + +# Check whether --with-cuobjdump was given. +if test "${with_cuobjdump+set}" = set; then : + withval=$with_cuobjdump; + if test "$withval" != yes && test "$withval" != no; then : + + CUOBJDUMP="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } + +else + + CUOBJDUMP="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "cuobjdump", so it can be a program name with args. +set dummy cuobjdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUOBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CUOBJDUMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUOBJDUMP=$ac_cv_path_CUOBJDUMP +if test -n "$CUOBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "cuobjdump", so it can be a program name with args. +set dummy cuobjdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUOBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CUOBJDUMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUOBJDUMP=$ac_cv_path_CUOBJDUMP +if test -n "$CUOBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + HAVE_CUDA=1 + +fi + +# Check whether --with-nvcc_flags was given. +if test "${with_nvcc_flags+set}" = set; then : + withval=$with_nvcc_flags; +else + with_nvcc_flags='-O3 -Xcompiler -Wall' +fi + +NVCCFLAGS=$with_nvcc_flags + + + + + + + + + + + + + if test -z "$AWK"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether awk executable path has been provided" >&5 +$as_echo_n "checking whether awk executable path has been provided... " >&6; } + +# Check whether --with-awk was given. +if test "${with_awk+set}" = set; then : + withval=$with_awk; + if test "$withval" != yes && test "$withval" != no; then : + + AWK="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } + +else + + AWK="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "awk", so it can be a program name with args. +set dummy awk; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AWK=$ac_cv_path_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "awk", so it can be a program name with args. +set dummy awk; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AWK=$ac_cv_path_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + + + + + + + + + + + + if test -z "$CTAGS"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + +# Check whether --with-ctags was given. +if test "${with_ctags+set}" = set; then : + withval=$with_ctags; + if test "$withval" != yes && test "$withval" != no; then : + + CTAGS="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } + +else + + CTAGS="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + +if test "x${CTAGS}" = x; then : + as_fn_error $? "Required program ctags was not found" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } +if ${ax_cv_cxx_openmp+:} false; then : + $as_echo_n "(cached) " >&6 +else + saveCXXFLAGS=$CXXFLAGS +ax_cv_cxx_openmp=unknown +# Flags to try: -fopenmp (gcc), -mp (SGI & PGI), +# -qopenmp (icc>=15), -openmp (icc), +# -xopenmp (Sun), -omp (Tru64), +# -qsmp=omp (AIX), +# none +ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none" +if test "x$OPENMP_CXXFLAGS" != x; then + ax_openmp_flags="$OPENMP_CXXFLAGS $ax_openmp_flags" +fi +for ax_openmp_flag in $ax_openmp_flags; do + case $ax_openmp_flag in + none) CXXFLAGS=$saveCXX ;; + *) CXXFLAGS="$saveCXXFLAGS $ax_openmp_flag" ;; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +static void +parallel_fill(int * data, int n) +{ + int i; +#pragma omp parallel for + for (i = 0; i < n; ++i) + data[i] = i; +} + +int +main() +{ + int arr[100000]; + omp_set_num_threads(2); + parallel_fill(arr, 100000); + return 0; +} + +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ax_cv_cxx_openmp=$ax_openmp_flag; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +done +CXXFLAGS=$saveCXXFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +$as_echo "$ax_cv_cxx_openmp" >&6; } +if test "x$ax_cv_cxx_openmp" = "xunknown"; then + : +else + if test "x$ax_cv_cxx_openmp" != "xnone"; then + OPENMP_CXXFLAGS=$ax_cv_cxx_openmp + fi + +$as_echo "#define HAVE_OPENMP 1" >>confdefs.h + +fi + + + +# Check whether --enable-numa was given. +if test "${enable_numa+set}" = set; then : + enableval=$enable_numa; +else + enable_numa=yes +fi + +if test "x$enable_numa" != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_tonode_memory in -lnuma" >&5 +$as_echo_n "checking for numa_tonode_memory in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_tonode_memory+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnuma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char numa_tonode_memory (); +int +main () +{ +return numa_tonode_memory (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_numa_numa_tonode_memory=yes +else + ac_cv_lib_numa_numa_tonode_memory=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_tonode_memory" >&5 +$as_echo "$ac_cv_lib_numa_numa_tonode_memory" >&6; } +if test "x$ac_cv_lib_numa_numa_tonode_memory" = xyes; then : + NUMA_LIB=-lnuma + + NUMA_CPPFLAGS=-DBF_NUMA_ENABLED=1 + +fi + +fi + +# Check whether --enable-hwloc was given. +if test "${enable_hwloc+set}" = set; then : + enableval=$enable_hwloc; +else + enable_hwloc=yes +fi + +if test "x$enable_hwloc" != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } +if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lhwloc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char hwloc_topology_init (); +int +main () +{ +return hwloc_topology_init (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_hwloc_hwloc_topology_init=yes +else + ac_cv_lib_hwloc_hwloc_topology_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : + HWLOC_LIB=-lhwloc + + HWLOC_CPPFLAGS=-DBF_HWLOC_ENABLED=1 + +fi + +fi + +# Check whether --enable-vma was given. +if test "${enable_vma+set}" = set; then : + enableval=$enable_vma; +else + enable_vma=no +fi + +if test "x$enable_vma" != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } +if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lvma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char recvfrom_zcopy (); +int +main () +{ +return recvfrom_zcopy (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_vma_recvfrom_zcopy=yes +else + ac_cv_lib_vma_recvfrom_zcopy=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : + VMA_LIB=-lvma + + VMA_CPPFLAGS=-DBF_VMA_ENABLED=1 + +fi + +fi + + +# Check whether --with-gpu_archs was given. +if test "${with_gpu_archs+set}" = set; then : + withval=$with_gpu_archs; +else + with_gpu_archs='35 61' +fi + +GPU_ARCHS=$with_gpu_archs + + + +# Check whether --with-shared_mem was given. +if test "${with_shared_mem+set}" = set; then : + withval=$with_shared_mem; +else + with_shared_mem=16384 +fi + +GPU_SHAREDMEM=$with_shared_mem + + + +# Check whether --with-alignment was given. +if test "${with_alignment+set}" = set; then : + withval=$with_alignment; +else + with_alignment=4096 +fi + +ALIGNMENT=$with_alignment + + +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; +else + enable_debug=no +fi + +if test "x$enable_debug" != xno; then : + DEBUG_CPPFLAGS=-DBF_DEBUG=1 + + DEBUG_CXXFLAGS=-g + + DEBUG_NVCCFLAGS=-g + +fi + +# Check whether --enable-trace was given. +if test "${enable_trace+set}" = set; then : + enableval=$enable_trace; +else + enable_trace=no +fi + +if test "x$enable_trace" != xno; then : + TRACE_CPPFLAGS=-DBF_TRACE_ENABLED=1 + +fi + +# Check whether --enable-native_arch was given. +if test "${enable_native_arch+set}" = set; then : + enableval=$enable_native_arch; +else + enable_native_arch=yes +fi + +if test "x$enable_native_arch" != xno; then : + ARCH_CXXFLAGS=-march=native + + ARCH_NVCCFLAGS=-Xcompiler -march=native + +fi + +# Check whether --enable-cuda_debug was given. +if test "${enable_cuda_debug+set}" = set; then : + enableval=$enable_cuda_debug; +else + enable_cuda_debug=no +fi + +if test "x$enable_cuda_debug" != xno; then : + DEBUG_NVCCFLAGS=-G + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build information" >&5 +$as_echo_n "checking for python build information... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } +for python in python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python; do +for ac_prog in $python +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PYTHON_BIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PYTHON_BIN"; then + ac_cv_prog_PYTHON_BIN="$PYTHON_BIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_PYTHON_BIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PYTHON_BIN=$ac_cv_prog_PYTHON_BIN +if test -n "$PYTHON_BIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_BIN" >&5 +$as_echo "$PYTHON_BIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON_BIN" && break +done + +ax_python_bin=$PYTHON_BIN +if test x$ax_python_bin != x; then + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_python_bin''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_python_bin" >&5 +$as_echo_n "checking for main in -l$ax_python_bin... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_python_bin $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_python_lib=$ax_python_bin +else + ax_python_lib=no +fi + + if test x$ax_python_lib == xno; then + as_ac_Lib=`$as_echo "ac_cv_lib_${ax_python_bin}m''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${ax_python_bin}m" >&5 +$as_echo_n "checking for main in -l${ax_python_bin}m... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${ax_python_bin}m $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_python_lib=${ax_python_bin}m +else + ax_python_lib=no +fi + + fi + if test x$ax_python_lib != xno; then + ax_python_header=`$ax_python_bin -c "from distutils.sysconfig import *; print(get_config_var('CONFINCLUDEPY'))"` + if test x$ax_python_header != x; then + break; + fi + fi +fi +done +if test x$ax_python_bin = x; then + ax_python_bin=no +fi +if test x$ax_python_header = x; then + ax_python_header=no +fi +if test x$ax_python_lib = x; then + ax_python_lib=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: results of the Python check:" >&5 +$as_echo " results of the Python check:" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Binary: $ax_python_bin" >&5 +$as_echo " Binary: $ax_python_bin" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Library: $ax_python_lib" >&5 +$as_echo " Library: $ax_python_lib" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Include Dir: $ax_python_header" >&5 +$as_echo " Include Dir: $ax_python_header" >&6; } + +if test x$ax_python_header != xno; then + PYTHON_INCLUDE_DIR=$ax_python_header + +fi +if test x$ax_python_lib != xno; then + PYTHON_LIB=$ax_python_lib + +fi + + + +# Check whether --with-pybuild_flags was given. +if test "${with_pybuild_flags+set}" = set; then : + withval=$with_pybuild_flags; +fi + +PYBUILDFLAGS=$with_pybuild_flags + + + +# Check whether --with-pyinstall_flags was given. +if test "${with_pyinstall_flags+set}" = set; then : + withval=$with_pyinstall_flags; +fi + +PYINSTALLFLAGS=$with_pyinstall_flags + + + + + + + + + + + + + +# Files: +DX_PROJECT=bifrost + +DX_CONFIG='$(srcdir)/Doxyfile' + +DX_DOCDIR='doxygen-doc' + + +# Environment variables used inside doxygen.cfg: +DX_ENV="$DX_ENV SRCDIR='$srcdir'" +SRCDIR=$srcdir + +DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'" +PROJECT=$DX_PROJECT + +DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" + + +# Doxygen itself: + + + + # Check whether --enable-doxygen-doc was given. +if test "${enable_doxygen_doc+set}" = set; then : + enableval=$enable_doxygen_doc; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_doc=1 + + +;; #( +n|N|no|No|NO) + DX_FLAG_doc=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-doc" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_doc=1 + + + +fi + +if test "$DX_FLAG_doc" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. +set dummy ${ac_tool_prefix}doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN +if test -n "$DX_DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +$as_echo "$DX_DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DOXYGEN"; then + ac_pt_DX_DOXYGEN=$DX_DOXYGEN + # Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN +if test -n "$ac_pt_DX_DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +$as_echo "$ac_pt_DX_DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_DOXYGEN" = x; then + DX_DOXYGEN="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DOXYGEN=$ac_pt_DX_DOXYGEN + fi +else + DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN" +fi + +if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + DX_FLAG_doc=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. +set dummy ${ac_tool_prefix}perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_PERL=$ac_cv_path_DX_PERL +if test -n "$DX_PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +$as_echo "$DX_PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_PERL"; then + ac_pt_DX_PERL=$DX_PERL + # Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL +if test -n "$ac_pt_DX_PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +$as_echo "$ac_pt_DX_PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_PERL" = x; then + DX_PERL="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_PERL=$ac_pt_DX_PERL + fi +else + DX_PERL="$ac_cv_path_DX_PERL" +fi + +if test "$DX_FLAG_doc$DX_PERL" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + DX_FLAG_doc=0 + +fi + + : +fi +if test "$DX_FLAG_doc" = 1; then + DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'" +PERL_PATH=$DX_PERL + + : +else + + : +fi + + +# Dot for graphics: + + + + # Check whether --enable-doxygen-dot was given. +if test "${enable_doxygen_dot+set}" = set; then : + enableval=$enable_doxygen_dot; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_dot=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_dot=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-dot" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_dot=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0 + + + +fi + +if test "$DX_FLAG_dot" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. +set dummy ${ac_tool_prefix}dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DOT=$ac_cv_path_DX_DOT +if test -n "$DX_DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +$as_echo "$DX_DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DOT"; then + ac_pt_DX_DOT=$DX_DOT + # Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT +if test -n "$ac_pt_DX_DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +$as_echo "$ac_pt_DX_DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_DOT" = x; then + DX_DOT="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DOT=$ac_pt_DX_DOT + fi +else + DX_DOT="$ac_cv_path_DX_DOT" +fi + +if test "$DX_FLAG_dot$DX_DOT" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + DX_FLAG_dot=0 + +fi + + : +fi +if test "$DX_FLAG_dot" = 1; then + DX_ENV="$DX_ENV HAVE_DOT='YES'" +HAVE_DOT=YES + + DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'" +DOT_PATH=`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'` + + : +else + DX_ENV="$DX_ENV HAVE_DOT='NO'" +HAVE_DOT=NO + + : +fi + + +# Man pages generation: + + + + # Check whether --enable-doxygen-man was given. +if test "${enable_doxygen_man+set}" = set; then : + enableval=$enable_doxygen_man; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_man=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_man=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-man" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_man=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 + + + +fi + +if test "$DX_FLAG_man" = 1; then + + : +fi +if test "$DX_FLAG_man" = 1; then + DX_ENV="$DX_ENV GENERATE_MAN='YES'" +GENERATE_MAN=YES + + : +else + DX_ENV="$DX_ENV GENERATE_MAN='NO'" +GENERATE_MAN=NO + + : +fi + + +# RTF file generation: + + + + # Check whether --enable-doxygen-rtf was given. +if test "${enable_doxygen_rtf+set}" = set; then : + enableval=$enable_doxygen_rtf; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_rtf=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_rtf=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-rtf" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_rtf=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0 + + + +fi + +if test "$DX_FLAG_rtf" = 1; then + + : +fi +if test "$DX_FLAG_rtf" = 1; then + DX_ENV="$DX_ENV GENERATE_RTF='YES'" +GENERATE_RTF=YES + + : +else + DX_ENV="$DX_ENV GENERATE_RTF='NO'" +GENERATE_RTF=NO + + : +fi + + +# XML file generation: + + + + # Check whether --enable-doxygen-xml was given. +if test "${enable_doxygen_xml+set}" = set; then : + enableval=$enable_doxygen_xml; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_xml=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_xml=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-xml" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_xml=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0 + + + +fi + +if test "$DX_FLAG_xml" = 1; then + + : +fi +if test "$DX_FLAG_xml" = 1; then + DX_ENV="$DX_ENV GENERATE_XML='YES'" +GENERATE_XML=YES + + : +else + DX_ENV="$DX_ENV GENERATE_XML='NO'" +GENERATE_XML=NO + + : +fi + + +# (Compressed) HTML help generation: + + + + # Check whether --enable-doxygen-chm was given. +if test "${enable_doxygen_chm+set}" = set; then : + enableval=$enable_doxygen_chm; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_chm=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_chm=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-chm" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_chm=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0 + + + +fi + +if test "$DX_FLAG_chm" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. +set dummy ${ac_tool_prefix}hhc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_HHC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_HHC in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_HHC=$ac_cv_path_DX_HHC +if test -n "$DX_HHC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +$as_echo "$DX_HHC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_HHC"; then + ac_pt_DX_HHC=$DX_HHC + # Extract the first word of "hhc", so it can be a program name with args. +set dummy hhc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_HHC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_HHC in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC +if test -n "$ac_pt_DX_HHC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +$as_echo "$ac_pt_DX_HHC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_HHC" = x; then + DX_HHC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_HHC=$ac_pt_DX_HHC + fi +else + DX_HHC="$ac_cv_path_DX_HHC" +fi + +if test "$DX_FLAG_chm$DX_HHC" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + DX_FLAG_chm=0 + +fi + + : +fi +if test "$DX_FLAG_chm" = 1; then + DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'" +HHC_PATH=$DX_HHC + + DX_ENV="$DX_ENV GENERATE_HTML='YES'" +GENERATE_HTML=YES + + DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'" +GENERATE_HTMLHELP=YES + + : +else + DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'" +GENERATE_HTMLHELP=NO + + : +fi + + +# Separate CHI file generation. + + + + # Check whether --enable-doxygen-chi was given. +if test "${enable_doxygen_chi+set}" = set; then : + enableval=$enable_doxygen_chi; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_chi=1 + + +test "$DX_FLAG_chm" = "1" \ +|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_chi=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-chi" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_chi=0 + + +test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0 + + + +fi + +if test "$DX_FLAG_chi" = 1; then + + : +fi +if test "$DX_FLAG_chi" = 1; then + DX_ENV="$DX_ENV GENERATE_CHI='YES'" +GENERATE_CHI=YES + + : +else + DX_ENV="$DX_ENV GENERATE_CHI='NO'" +GENERATE_CHI=NO + + : +fi + + +# Plain HTML pages generation: + + + + # Check whether --enable-doxygen-html was given. +if test "${enable_doxygen_html+set}" = set; then : + enableval=$enable_doxygen_html; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_html=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 + +test "$DX_FLAG_chm" = "0" \ +|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_html=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-html" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_html=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0 + + +test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0 + + + +fi + +if test "$DX_FLAG_html" = 1; then + + : +fi +if test "$DX_FLAG_html" = 1; then + DX_ENV="$DX_ENV GENERATE_HTML='YES'" +GENERATE_HTML=YES + + : +else + test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'" +GENERATE_HTML=NO + + : +fi + + +# PostScript file generation: + + + + # Check whether --enable-doxygen-ps was given. +if test "${enable_doxygen_ps+set}" = set; then : + enableval=$enable_doxygen_ps; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_ps=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_ps=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-ps" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_ps=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0 + + + +fi + +if test "$DX_FLAG_ps" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. +set dummy ${ac_tool_prefix}latex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_LATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_LATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_LATEX=$ac_cv_path_DX_LATEX +if test -n "$DX_LATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +$as_echo "$DX_LATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_LATEX"; then + ac_pt_DX_LATEX=$DX_LATEX + # Extract the first word of "latex", so it can be a program name with args. +set dummy latex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_LATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_LATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX +if test -n "$ac_pt_DX_LATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +$as_echo "$ac_pt_DX_LATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_LATEX" = x; then + DX_LATEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_LATEX=$ac_pt_DX_LATEX + fi +else + DX_LATEX="$ac_cv_path_DX_LATEX" +fi + +if test "$DX_FLAG_ps$DX_LATEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. +set dummy ${ac_tool_prefix}makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX +if test -n "$DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_MAKEINDEX"; then + ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX + # Extract the first word of "makeindex", so it can be a program name with args. +set dummy makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX +if test -n "$ac_pt_DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_MAKEINDEX" = x; then + DX_MAKEINDEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX + fi +else + DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" +fi + +if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. +set dummy ${ac_tool_prefix}dvips; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DVIPS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_DVIPS in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DVIPS=$ac_cv_path_DX_DVIPS +if test -n "$DX_DVIPS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +$as_echo "$DX_DVIPS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DVIPS"; then + ac_pt_DX_DVIPS=$DX_DVIPS + # Extract the first word of "dvips", so it can be a program name with args. +set dummy dvips; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DVIPS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_DVIPS in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS +if test -n "$ac_pt_DX_DVIPS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +$as_echo "$ac_pt_DX_DVIPS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_DVIPS" = x; then + DX_DVIPS="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DVIPS=$ac_pt_DX_DVIPS + fi +else + DX_DVIPS="$ac_cv_path_DX_DVIPS" +fi + +if test "$DX_FLAG_ps$DX_DVIPS" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. +set dummy ${ac_tool_prefix}egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_EGREP=$ac_cv_path_DX_EGREP +if test -n "$DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_EGREP"; then + ac_pt_DX_EGREP=$DX_EGREP + # Extract the first word of "egrep", so it can be a program name with args. +set dummy egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP +if test -n "$ac_pt_DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_EGREP" = x; then + DX_EGREP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_EGREP=$ac_pt_DX_EGREP + fi +else + DX_EGREP="$ac_cv_path_DX_EGREP" +fi + +if test "$DX_FLAG_ps$DX_EGREP" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + : +fi +if test "$DX_FLAG_ps" = 1; then + + : +else + + : +fi + + +# PDF file generation: + + + + # Check whether --enable-doxygen-pdf was given. +if test "${enable_doxygen_pdf+set}" = set; then : + enableval=$enable_doxygen_pdf; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_pdf=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_pdf=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-pdf" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_pdf=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0 + + + +fi + +if test "$DX_FLAG_pdf" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. +set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_PDFLATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_PDFLATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX +if test -n "$DX_PDFLATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +$as_echo "$DX_PDFLATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_PDFLATEX"; then + ac_pt_DX_PDFLATEX=$DX_PDFLATEX + # Extract the first word of "pdflatex", so it can be a program name with args. +set dummy pdflatex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_PDFLATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_PDFLATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX +if test -n "$ac_pt_DX_PDFLATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +$as_echo "$ac_pt_DX_PDFLATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_PDFLATEX" = x; then + DX_PDFLATEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_PDFLATEX=$ac_pt_DX_PDFLATEX + fi +else + DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX" +fi + +if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. +set dummy ${ac_tool_prefix}makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX +if test -n "$DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_MAKEINDEX"; then + ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX + # Extract the first word of "makeindex", so it can be a program name with args. +set dummy makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX +if test -n "$ac_pt_DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_MAKEINDEX" = x; then + DX_MAKEINDEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX + fi +else + DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" +fi + +if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. +set dummy ${ac_tool_prefix}egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_EGREP=$ac_cv_path_DX_EGREP +if test -n "$DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_EGREP"; then + ac_pt_DX_EGREP=$DX_EGREP + # Extract the first word of "egrep", so it can be a program name with args. +set dummy egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP +if test -n "$ac_pt_DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_EGREP" = x; then + DX_EGREP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_EGREP=$ac_pt_DX_EGREP + fi +else + DX_EGREP="$ac_cv_path_DX_EGREP" +fi + +if test "$DX_FLAG_pdf$DX_EGREP" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + : +fi +if test "$DX_FLAG_pdf" = 1; then + + : +else + + : +fi + + +# LaTeX generation for PS and/or PDF: +if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then + DX_ENV="$DX_ENV GENERATE_LATEX='YES'" +GENERATE_LATEX=YES + +else + DX_ENV="$DX_ENV GENERATE_LATEX='NO'" +GENERATE_LATEX=NO + +fi + +# Paper size for PS and/or PDF: + +case "$DOXYGEN_PAPER_SIZE" in +#( +"") + DOXYGEN_PAPER_SIZE="" + +;; #( +a4wide|a4|letter|legal|executive) + DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" +PAPER_SIZE=$DOXYGEN_PAPER_SIZE + +;; #( +*) + as_fn_error $? "unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" "$LINENO" 5 +;; +esac + +# Rules: +if test $DX_FLAG_html -eq 1; then : + DX_SNIPPET_html="## ------------------------------- ## + +DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ + \$(DX_DOCDIR)/html + +" +else + DX_SNIPPET_html="" +fi +if test $DX_FLAG_chi -eq 1; then : + DX_SNIPPET_chi=" +DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ + \$(DX_DOCDIR)/\$(PACKAGE).chi" +else + DX_SNIPPET_chi="" +fi +if test $DX_FLAG_chm -eq 1; then : + DX_SNIPPET_chm="## ------------------------------ ## + +DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ + \$(DX_DOCDIR)/chm\ +${DX_SNIPPET_chi} + +" +else + DX_SNIPPET_chm="" +fi +if test $DX_FLAG_man -eq 1; then : + DX_SNIPPET_man="## ------------------------------ ## + +DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ + \$(DX_DOCDIR)/man + +" +else + DX_SNIPPET_man="" +fi +if test $DX_FLAG_rtf -eq 1; then : + DX_SNIPPET_rtf="## ------------------------------ ## + +DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ + \$(DX_DOCDIR)/rtf + +" +else + DX_SNIPPET_rtf="" +fi +if test $DX_FLAG_xml -eq 1; then : + DX_SNIPPET_xml="## ------------------------------ ## + +DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ + \$(DX_DOCDIR)/xml + +" +else + DX_SNIPPET_xml="" +fi +if test $DX_FLAG_ps -eq 1; then : + DX_SNIPPET_ps="## ----------------------------- ## + +DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ + \$(DX_DOCDIR)/\$(PACKAGE).ps + +DX_PS_GOAL = doxygen-ps + +doxygen-ps: \$(DX_CLEAN_PS) + +\$(DX_DOCDIR)/\$(PACKAGE).ps: \$(DX_DOCDIR)/\$(PACKAGE).tag + \$(DX_V_LATEX)cd \$(DX_DOCDIR)/latex; \\ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ + \$(DX_LATEX) refman.tex; \\ + \$(DX_MAKEINDEX) refman.idx; \\ + \$(DX_LATEX) refman.tex; \\ + countdown=5; \\ + while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ + refman.log > /dev/null 2>&1 \\ + && test \$\$countdown -gt 0; do \\ + \$(DX_LATEX) refman.tex; \\ + countdown=\`expr \$\$countdown - 1\`; \\ + done; \\ + \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi + +" +else + DX_SNIPPET_ps="" +fi +if test $DX_FLAG_pdf -eq 1; then : + DX_SNIPPET_pdf="## ------------------------------ ## + +DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ + \$(DX_DOCDIR)/\$(PACKAGE).pdf + +DX_PDF_GOAL = doxygen-pdf + +doxygen-pdf: \$(DX_CLEAN_PDF) + +\$(DX_DOCDIR)/\$(PACKAGE).pdf: \$(DX_DOCDIR)/\$(PACKAGE).tag + \$(DX_V_LATEX)cd \$(DX_DOCDIR)/latex; \\ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ + \$(DX_PDFLATEX) refman.tex; \\ + \$(DX_MAKEINDEX) refman.idx; \\ + \$(DX_PDFLATEX) refman.tex; \\ + countdown=5; \\ + while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ + refman.log > /dev/null 2>&1 \\ + && test \$\$countdown -gt 0; do \\ + \$(DX_PDFLATEX) refman.tex; \\ + countdown=\`expr \$\$countdown - 1\`; \\ + done; \\ + mv refman.pdf ../\$(PACKAGE).pdf + +" +else + DX_SNIPPET_pdf="" +fi +if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1; then : + DX_SNIPPET_latex="## ------------------------------------------------- ## + +DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) +_DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) +_DX_v_LATEX_0 = @echo \" LATEX \" \$@; + +DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ + \$(DX_DOCDIR)/latex + +" +else + DX_SNIPPET_latex="" +fi + +if test $DX_FLAG_doc -eq 1; then : + DX_SNIPPET_doc="## --------------------------------- ## + +${DX_SNIPPET_html}\ +${DX_SNIPPET_chm}\ +${DX_SNIPPET_man}\ +${DX_SNIPPET_rtf}\ +${DX_SNIPPET_xml}\ +${DX_SNIPPET_ps}\ +${DX_SNIPPET_pdf}\ +${DX_SNIPPET_latex}\ +DX_V_DXGEN = \$(_DX_v_DXGEN_\$(V)) +_DX_v_DXGEN_ = \$(_DX_v_DXGEN_\$(AM_DEFAULT_VERBOSITY)) +_DX_v_DXGEN_0 = @echo \" DXGEN \" \$<; + +.PHONY: doxygen-run doxygen-doc \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +.INTERMEDIATE: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +doxygen-run: \$(DX_DOCDIR)/\$(PACKAGE).tag + +doxygen-doc: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +\$(DX_DOCDIR)/\$(PACKAGE).tag: \$(DX_CONFIG) \$(pkginclude_HEADERS) + \$(A""M_V_at)rm -rf \$(DX_DOCDIR) + \$(DX_V_DXGEN)\$(DX_ENV) DOCDIR=\$(DX_DOCDIR) \$(DX_DOXYGEN) \$(DX_CONFIG) + \$(A""M_V_at)echo Timestamp >\$@ + +DX_CLEANFILES = \\ + \$(DX_DOCDIR)/doxygen_sqlite3.db \\ + \$(DX_DOCDIR)/\$(PACKAGE).tag \\ + -r \\ + \$(DX_CLEAN_HTML) \\ + \$(DX_CLEAN_CHM) \\ + \$(DX_CLEAN_CHI) \\ + \$(DX_CLEAN_MAN) \\ + \$(DX_CLEAN_RTF) \\ + \$(DX_CLEAN_XML) \\ + \$(DX_CLEAN_PS) \\ + \$(DX_CLEAN_PDF) \\ + \$(DX_CLEAN_LATEX)" +else + DX_SNIPPET_doc="" +fi +DX_RULES="${DX_SNIPPET_doc}" + + +#For debugging: +#echo DX_FLAG_doc=$DX_FLAG_doc +#echo DX_FLAG_dot=$DX_FLAG_dot +#echo DX_FLAG_man=$DX_FLAG_man +#echo DX_FLAG_html=$DX_FLAG_html +#echo DX_FLAG_chm=$DX_FLAG_chm +#echo DX_FLAG_chi=$DX_FLAG_chi +#echo DX_FLAG_rtf=$DX_FLAG_rtf +#echo DX_FLAG_xml=$DX_FLAG_xml +#echo DX_FLAG_pdf=$DX_FLAG_pdf +#echo DX_FLAG_ps=$DX_FLAG_ps +#echo DX_ENV=$DX_ENV + + +ac_config_files="$ac_config_files user2.mk" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by bifrost $as_me 0.9.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +bifrost config.status 0.9.0 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "user2.mk") CONFIG_FILES="$CONFIG_FILES user2.mk" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 000000000..61c45548a --- /dev/null +++ b/configure.ac @@ -0,0 +1,169 @@ +AC_INIT([bifrost], [0.9.0]) +AC_LANG(C++) +AC_CONFIG_SRCDIR([src/cuda.cpp]) + +: ${CXXFLAGS="-O3 -Wall -pedantic"} + +AC_PROG_CXX +AC_REQUIRE_CPP +AC_PROG_RANLIB + +AC_ARG_ENABLE([cuda], + [AS_HELP_STRING([--enable-cuda], + [enable cuda support (default=yes)])], + [], + [enable_cuda=yes]) +AS_IF([test "x$enable_cuda" != xno], + [AX_WITH_PROG(NVCC, nvcc) + AX_WITH_PROG(NVPRUNE, nvprune) + AX_WITH_PROG(CUOBJDUMP, cuobjdump) + AC_SUBST([HAVE_CUDA], [1])], + []) +AC_ARG_WITH([nvcc_flags], + [AS_HELP_STRING([--with-nvcc-flags], + [flags to pass to NVCC (default='-O3 -Xcompiler -Wall')])], + [], + [with_nvcc_flags='-O3 -Xcompiler -Wall']) +AC_SUBST(NVCCFLAGS, $with_nvcc_flags) + +AX_WITH_PROG(AWK, awk) + +AX_WITH_PROG(CTAGS, ctags) +AS_IF([test "x${CTAGS}" = x], + [AC_MSG_ERROR([Required program ctags was not found])], + []) +AC_MSG_CHECKING([whether ${CTAGS} is exuberant]) +AS_IF([! ${CTAGS} --version | grep -q Exuberant], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([exhuberant ctags is required, but ${CTAGS} is a different version])], + [AC_MSG_RESULT([yes])]) + +AX_OPENMP + + +AC_ARG_ENABLE([numa], + AS_HELP_STRING([--enable-numa], + [enable NUMA support (default=yes)]), + [], + [enable_numa=yes]) +AS_IF([test "x$enable_numa" != xno], + [AC_CHECK_LIB([numa], [numa_tonode_memory], + [AC_SUBST([NUMA_LIB], [-lnuma]) + AC_SUBST([NUMA_CPPFLAGS], [-DBF_NUMA_ENABLED=1])], + [])], + []) + +AC_ARG_ENABLE([hwloc], + AS_HELP_STRING([--enable-hwloc], + [enable hwloc support (default=yes)]), + [], + [enable_hwloc=yes]) +AS_IF([test "x$enable_hwloc" != xno], + [AC_CHECK_LIB([hwloc], [hwloc_topology_init], + [AC_SUBST([HWLOC_LIB], [-lhwloc]) + AC_SUBST([HWLOC_CPPFLAGS], [-DBF_HWLOC_ENABLED=1])], + [])], + []) + +AC_ARG_ENABLE([vma], + AS_HELP_STRING([--enable-vma], + [enable vma support (default=no)]), + [], + [enable_vma=no]) +AS_IF([test "x$enable_vma" != xno], + [AC_CHECK_LIB([vma], [recvfrom_zcopy], + [AC_SUBST([VMA_LIB], [-lvma]) + AC_SUBST([VMA_CPPFLAGS], [-DBF_VMA_ENABLED=1])], + [])], + []) + +AC_ARG_WITH([gpu_archs], + [AS_HELP_STRING([--with-gpu-archs=...], + [default GPU architectures (default='35 61')])], + [], + [with_gpu_archs='35 61']) +AC_SUBST(GPU_ARCHS, $with_gpu_archs) + +AC_ARG_WITH([shared_mem], + [AS_HELP_STRING([--with-shared-mem=N], + [default GPU shared memory in bytes (default=16384)])], + [], + [with_shared_mem=16384]) +AC_SUBST(GPU_SHAREDMEM, $with_shared_mem) + +AC_ARG_WITH([alignment], + [AS_HELP_STRING([--with-alignment=N], + [default memory alignment in bytes (default=4096)])], + [], + [with_alignment=4096]) +AC_SUBST(ALIGNMENT, $with_alignment) + +AC_ARG_ENABLE([debug], + [AS_HELP_STRING([--enable-debug], + [enable debugging mode (default=no)])], + [], + [enable_debug=no]) +AS_IF([test "x$enable_debug" != xno], + [AC_SUBST(DEBUG_CPPFLAGS, [-DBF_DEBUG=1]) + AC_SUBST(DEBUG_CXXFLAGS, [-g]) + AC_SUBST(DEBUG_NVCCFLAGS, [-g])], + []) + +AC_ARG_ENABLE([trace], + [AS_HELP_STRING([--enable-trace], + [enable tracing mode for nvprof/nvvp (default=no)])], + [], + [enable_trace=no]) +AS_IF([test "x$enable_trace" != xno], + [AC_SUBST(TRACE_CPPFLAGS, [-DBF_TRACE_ENABLED=1])], + []) + +AC_ARG_ENABLE([native_arch], + [AS_HELP_STRING([--enable-native-arch], + [enable native architecture compilation (default=yes)])], + [], + [enable_native_arch=yes]) +AS_IF([test "x$enable_native_arch" != xno], + [AC_SUBST(ARCH_CXXFLAGS, [-march=native]) + AC_SUBST(ARCH_NVCCFLAGS, [-Xcompiler -march=native])], + []) + +AC_ARG_ENABLE([cuda_debug], + [AS_HELP_STRING([--enable-cuda-debug], + [enable CUDA debugging (nvcc -G; default=no)])], + [], + [enable_cuda_debug=no]) +AS_IF([test "x$enable_cuda_debug" != xno], + [AC_SUBST(DEBUG_NVCCFLAGS, [-G])], + []) + +AX_PYTHON + +AC_ARG_WITH([pybuild_flags], + [AS_HELP_STRING([--with-pybuild-flags], + [build flags for python (default='')])], + [], + []) +AC_SUBST(PYBUILDFLAGS, $with_pybuild_flags) + +AC_ARG_WITH([pyinstall_flags], + [AS_HELP_STRING([--with-pyintall-flags], + [install flags for python (default='')])], + [], + []) +AC_SUBST(PYINSTALLFLAGS, $with_pyinstall_flags) + +DX_DOT_FEATURE(OFF) +DX_HTML_FEATURE(ON) +DX_CHM_FEATURE(OFF) +DX_CHI_FEATURE(OFF) +DX_MAN_FEATURE(ON) +DX_RTF_FEATURE(OFF) +DX_XML_FEATURE(OFF) +DX_PDF_FEATURE(ON) +DX_PS_FEATURE(ON) +DX_INIT_DOXYGEN([bifrost]) + +AC_CONFIG_FILES([user2.mk]) + +AC_OUTPUT From 9eb4bdfb8f8c8d0e084d404160cab8216fd81925 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 16:19:59 -0600 Subject: [PATCH 0140/1155] More progress. --- config.mk => config.mk.in | 20 +- config/config.guess | 1530 ++++ config/config.sub | 1773 ++++ config/install-sh | 527 ++ config/ltmain.sh | 11156 +++++++++++++++++++++++ configure | 15507 ++++++++++++++++++++++++++++++-- configure.ac | 144 +- src/{Makefile => Makefile.in} | 84 +- user.mk | 32 - 9 files changed, 29932 insertions(+), 841 deletions(-) rename config.mk => config.mk.in (57%) create mode 100755 config/config.guess create mode 100755 config/config.sub create mode 100755 config/install-sh create mode 100644 config/ltmain.sh rename src/{Makefile => Makefile.in} (77%) delete mode 100644 user.mk diff --git a/config.mk b/config.mk.in similarity index 57% rename from config.mk rename to config.mk.in index 4ca448915..dbe9d97c2 100644 --- a/config.mk +++ b/config.mk.in @@ -1,10 +1,9 @@ - ifndef OS OS := $(shell uname -s) endif ifeq ($(OS),Linux) - SO_EXT = .so + SO_EXT = @SO_EXT@ SHARED_FLAG = -shared SONAME_FLAG = -soname else ifeq ($(OS),Darwin) @@ -17,19 +16,16 @@ else $(error Unsupported OS) endif -ifndef INSTALL_LIB_DIR - INSTALL_LIB_DIR = /usr/local/lib -endif -ifndef INSTALL_INC_DIR - INSTALL_INC_DIR = /usr/local/include -endif +PREFIX_DIR = @prefix@ +INSTALL_LIB_DIR = @LIBDIR@ +INSTALL_INC_DIR = @includedir@ -BIFROST_NAME = bifrost +BIFROST_NAME = @PACKAGE_NAME@ LIBBIFROST_NAME = lib$(BIFROST_NAME) -LIBBIFROST_MAJOR = 0 -LIBBIFROST_MINOR = 9 -LIBBIFROST_PATCH = 0 +LIBBIFROST_MAJOR = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $1}') +LIBBIFROST_MINOR = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $2}') +LIBBIFROST_PATCH = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $3}') LIBBIFROST_SO = $(LIBBIFROST_NAME)$(SO_EXT) LIBBIFROST_SO_MAJ = $(LIBBIFROST_SO).$(LIBBIFROST_MAJOR) LIBBIFROST_SO_MAJ_MIN = $(LIBBIFROST_SO_MAJ).$(LIBBIFROST_MINOR) diff --git a/config/config.guess b/config/config.guess new file mode 100755 index 000000000..d622a44e5 --- /dev/null +++ b/config/config.guess @@ -0,0 +1,1530 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. + +timestamp='2012-02-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/config.sub b/config/config.sub new file mode 100755 index 000000000..c894da455 --- /dev/null +++ b/config/config.sub @@ -0,0 +1,1773 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. + +timestamp='2012-02-10' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | open8 \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i386-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/install-sh b/config/install-sh new file mode 100755 index 000000000..a9244eb07 --- /dev/null +++ b/config/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-01-19.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for `test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config/ltmain.sh b/config/ltmain.sh new file mode 100644 index 000000000..a736cf994 --- /dev/null +++ b/config/ltmain.sh @@ -0,0 +1,11156 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.6 Debian-2.4.6-2" +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname $scriptversion Debian-2.4.6-2 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files + # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/configure b/configure index 28a03eef2..0679cb724 100755 --- a/configure +++ b/configure @@ -195,7 +195,16 @@ test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else @@ -552,6 +561,8 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +SHELL=${CONFIG_SHELL-/bin/sh} + test -n "$DJDIR" || exec 7<&0 &1 @@ -579,11 +590,46 @@ PACKAGE_TARNAME='bifrost' PACKAGE_VERSION='0.9.0' PACKAGE_STRING='bifrost 0.9.0' PACKAGE_BUGREPORT='' -PACKAGE_URL='' +PACKAGE_URL='https://github.com/ledatelescope/bifrost/' ac_unique_file="src/cuda.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + ac_subst_vars='LTLIBOBJS -LIBOBJS DX_RULES PAPER_SIZE DOXYGEN_PAPER_SIZE @@ -628,37 +674,64 @@ PYBUILDFLAGS PYTHON_LIB PYTHON_INCLUDE_DIR PYTHON_BIN -ARCH_NVCCFLAGS -ARCH_CXXFLAGS -TRACE_CPPFLAGS -DEBUG_NVCCFLAGS -DEBUG_CXXFLAGS -DEBUG_CPPFLAGS -ALIGNMENT -GPU_SHAREDMEM GPU_ARCHS -VMA_CPPFLAGS -VMA_LIB -HWLOC_CPPFLAGS -HWLOC_LIB -NUMA_CPPFLAGS -NUMA_LIB -CTAGS -AWK NVCCFLAGS HAVE_CUDA CUOBJDUMP NVPRUNE NVCC -RANLIB +CUDA_HOME +LIBOBJS +SO_EXT +CTAGS +SET_MAKE CXXCPP +CPP +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +STRIP +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +AWK +ac_ct_CXX +CXXFLAGS +CXX OBJEXT EXEEXT -ac_ct_CXX +ac_ct_CC CPPFLAGS LDFLAGS -CXXFLAGS -CXX +CFLAGS +CC target_alias host_alias build_alias @@ -701,13 +774,21 @@ SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking +enable_shared +enable_static +with_pic +enable_fast_install +with_aix_soname +with_gnu_ld +with_sysroot +enable_libtool_lock +with_ctags +with_cuda_home enable_cuda with_nvcc with_nvprune with_cuobjdump with_nvcc_flags -with_awk -with_ctags enable_numa enable_hwloc enable_vma @@ -734,18 +815,21 @@ enable_doxygen_pdf ac_precious_vars='build_alias host_alias target_alias -CXX -CXXFLAGS +CC +CFLAGS LDFLAGS LIBS CPPFLAGS +CXX +CXXFLAGS CCC +LT_SYS_LIBRARY_PATH +CPP CXXCPP +CTAGS NVCC NVPRUNE CUOBJDUMP -AWK -CTAGS DOXYGEN_PAPER_SIZE' @@ -1354,6 +1438,10 @@ Fine tuning of the installation directories: _ACEOF cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi @@ -1367,6 +1455,11 @@ 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-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) --enable-cuda enable cuda support (default=yes) --enable-numa enable NUMA support (default=yes) --enable-hwloc enable hwloc support (default=yes) @@ -1390,14 +1483,22 @@ Optional Features: Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + --with-ctags=[PATH] absolute path to ctags executable + --with-cuda-home CUDA install path (default=/usr/local/cuda) --with-nvcc=[PATH] absolute path to nvcc executable --with-nvprune=[PATH] absolute path to nvprune executable --with-cuobjdump=[PATH] absolute path to cuobjdump executable --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler -Wall') - --with-awk=[PATH] absolute path to awk executable - --with-ctags=[PATH] absolute path to ctags executable --with-gpu-archs=... default GPU architectures (default='35 61') --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) @@ -1405,19 +1506,23 @@ Optional Packages: --with-pyintall-flags install flags for python (default='') Some influential environment variables: - CXX C++ compiler command - CXXFLAGS C++ compiler flags + CC C compiler command + CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + CPP C preprocessor CXXCPP C++ preprocessor + CTAGS Absolute path to ctags executable NVCC Absolute path to nvcc executable NVPRUNE Absolute path to nvprune executable CUOBJDUMP Absolute path to cuobjdump executable - AWK Absolute path to awk executable - CTAGS Absolute path to ctags executable DOXYGEN_PAPER_SIZE a4wide (default), a4, letter, legal or executive @@ -1425,6 +1530,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. +bifrost home page: . _ACEOF ac_status=$? fi @@ -1501,6 +1607,44 @@ fi ## Autoconf initialization. ## ## ------------------------ ## +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. @@ -1539,6 +1683,229 @@ fi } # ac_fn_cxx_try_compile +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. @@ -1621,19 +1988,399 @@ fi as_fn_set_status $ac_retval } # ac_fn_cxx_try_link -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -It was created by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.69. Invocation command line was +# ac_fn_cxx_check_func LINENO FUNC VAR +# ------------------------------------ +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_cxx_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 - $ $0 $@ +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_func + +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# --------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_header_mongrel + +# ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES +# --------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_cxx_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_type + +# ac_fn_cxx_try_run LINENO +# ------------------------ +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_run + +# ac_fn_c_find_intX_t LINENO BITS VAR +# ----------------------------------- +# Finds a signed integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_intX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +$as_echo_n "checking for int$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + # Order is important - never check a type that is potentially smaller + # than half of the expected target width. + for ac_type in int$2_t 'int' 'long int' \ + 'long long int' 'short int' 'signed char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + enum { N = $2 / 2 - 1 }; +int +main () +{ +static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + enum { N = $2 / 2 - 1 }; +int +main () +{ +static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) + < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + case $ac_type in #( + int$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : + +else + break +fi + done +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_find_intX_t + +# ac_fn_c_find_uintX_t LINENO BITS VAR +# ------------------------------------ +# Finds an unsigned integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_uintX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +$as_echo_n "checking for uint$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + # Order is important - never check a type that is potentially smaller + # than half of the expected target width. + for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ + 'unsigned long long int' 'unsigned short int' 'unsigned char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + case $ac_type in #( + uint$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : + +else + break +fi + done +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_find_uintX_t +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by bifrost $as_me 0.9.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## @@ -1981,29 +2728,54 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + : ${CXXFLAGS="-O3 -Wall -pedantic"} -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +# Programs +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -2012,7 +2784,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -2022,32 +2794,224 @@ IFS=$as_save_IFS fi fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$CXX" && break +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done +IFS=$as_save_IFS + fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -2056,7 +3020,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" + ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -2066,21 +3030,21 @@ IFS=$as_save_IFS fi fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$ac_ct_CXX" && break + test -n "$ac_ct_CC" && break done - if test "x$ac_ct_CXX" = x; then - CXX="g++" + if test "x$ac_ct_CC" = x; then + CC="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -2088,14 +3052,20 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - CXX=$ac_ct_CXX + CC=$ac_ct_CC fi fi - fi fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do @@ -2135,8 +3105,8 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 -$as_echo_n "checking whether the C++ compiler works... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: @@ -2206,14 +3176,14 @@ sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C++ compiler cannot create executables +as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 -$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext @@ -2307,7 +3277,7 @@ $as_echo "$ac_try_echo"; } >&5 else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C++ compiled programs. +as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi @@ -2369,9 +3339,9 @@ fi $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -2388,33 +3358,33 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu +ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then - GXX=yes + GCC=yes else - GXX= + GCC= fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2426,10 +3396,10 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes else - CXXFLAGS="" + CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2441,11 +3411,11 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO"; then : else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2457,194 +3427,159 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" else - CXXFLAGS="-g" + CFLAGS="-g" fi else - if test "$GXX" = yes; then - CXXFLAGS="-O2" + if test "$GCC" = yes; then + CFLAGS="-O2" else - CXXFLAGS= + CFLAGS= fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -2654,28 +3589,32 @@ IFS=$as_save_IFS fi fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi + test -n "$CXX" && break + done fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : +if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -2684,7 +3623,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" + ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -2694,17 +3633,21 @@ IFS=$as_save_IFS fi fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) @@ -2712,62 +3655,11836 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - RANLIB=$ac_ct_RANLIB + CXX=$ac_ct_CXX fi -else - RANLIB="$ac_cv_prog_RANLIB" fi - -# Check whether --enable-cuda was given. -if test "${enable_cuda+set}" = set; then : - enableval=$enable_cuda; -else - enable_cuda=yes + fi fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -if test "x$enable_cuda" != xno; then : - - - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ - if test -z "$NVCC"; then : + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +func_stripname_cnf () +{ + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; + esac +} # func_stripname_cnf + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + pic_mode=default +fi + + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + link_all_deplibs=no + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen=shl_load +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen=dlopen +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +CC=$lt_save_CC + + if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct_CXX=no + hardcode_direct_absolute_CXX=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec_CXX='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + no_undefined_flag_CXX='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' $wl-bernotok' + allow_undefined_flag_CXX=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='$wl--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + if test yes != "$lt_cv_apple_cc_single_mod"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + os2*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_minus_L_CXX=yes + allow_undefined_flag_CXX=unsupported + shrext_cmds=.dll + archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes_CXX=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='$wl-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='$wl-E' + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + no_undefined_flag_CXX=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='$wl-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='$wl-z,text' + allow_undefined_flag_CXX='$wl-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test no = "$ld_shlibs_CXX" && can_build_shared=no + + GCC_CXX=$GXX + LD_CXX=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX=$prev$p + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX=$prev$p + else + postdeps_CXX="${postdeps_CXX} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX=$p + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX=$p + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + lt_prog_compiler_pic_CXX='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static_CXX='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test no = "$ld_shlibs_CXX" && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + + + + + + + + + + + + if test -z "$CTAGS"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + +# Check whether --with-ctags was given. +if test "${with_ctags+set}" = set; then : + withval=$with_ctags; + if test "$withval" != yes && test "$withval" != no; then : + + CTAGS="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } + +else + + CTAGS="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvcc executable path has been provided" >&5 -$as_echo_n "checking whether nvcc executable path has been provided... " >&6; } + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -# Check whether --with-nvcc was given. -if test "${with_nvcc+set}" = set; then : - withval=$with_nvcc; - if test "$withval" != yes && test "$withval" != no; then : - NVCC="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } + +fi + +fi else - NVCC="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - if test "$withval" != no; then : - - # Extract the first word of "nvcc", so it can be a program name with args. -set dummy nvcc; ac_word=$2 + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : +if ${ac_cv_path_CTAGS+:} false; then : $as_echo_n "(cached) " >&6 else - case $NVCC in + case $CTAGS in [\\/]* | ?:[\\/]*) - ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2777,7 +15494,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -2788,10 +15505,10 @@ IFS=$as_save_IFS ;; esac fi -NVCC=$ac_cv_path_NVCC -if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -2799,196 +15516,590 @@ fi -fi +fi + + +fi + + + + + + +if test x${CTAGS} = x; then : + as_fn_error $? "Required program ctags was not found" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + +SO_EXT=$shrext_cmds + + +# Features +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +for ac_func in memset +do : + ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMSET 1 +_ACEOF + +fi +done + +for ac_func in rint +do : + ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RINT 1 +_ACEOF + +fi +done + +for ac_func in socket +do : + ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKET 1 +_ACEOF + +fi +done + +for ac_func in sqrt +do : + ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SQRT 1 +_ACEOF + +fi +done + +for ac_func in strerror +do : + ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR 1 +_ACEOF + +fi +done + + +for ac_header in arpa/inet.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ARPA_INET_H 1 +_ACEOF + +fi + +done + +for ac_header in netdb.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETDB_H 1 +_ACEOF + +fi + +done + +for ac_header in netinet/in.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETINET_IN_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/file.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_FILE_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/ioctl.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_IOCTL_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/socket.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_SOCKET_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + +for ac_header in stdlib.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS malloc.$ac_objext" + ;; +esac + + +$as_echo "#define malloc rpl_malloc" >>confdefs.h + +fi + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } +if ${ax_cv_cxx_openmp+:} false; then : + $as_echo_n "(cached) " >&6 +else + saveCXXFLAGS=$CXXFLAGS +ax_cv_cxx_openmp=unknown +# Flags to try: -fopenmp (gcc), -mp (SGI & PGI), +# -qopenmp (icc>=15), -openmp (icc), +# -xopenmp (Sun), -omp (Tru64), +# -qsmp=omp (AIX), +# none +ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none" +if test "x$OPENMP_CXXFLAGS" != x; then + ax_openmp_flags="$OPENMP_CXXFLAGS $ax_openmp_flags" +fi +for ax_openmp_flag in $ax_openmp_flags; do + case $ax_openmp_flag in + none) CXXFLAGS=$saveCXX ;; + *) CXXFLAGS="$saveCXXFLAGS $ax_openmp_flag" ;; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +static void +parallel_fill(int * data, int n) +{ + int i; +#pragma omp parallel for + for (i = 0; i < n; ++i) + data[i] = i; +} + +int +main() +{ + int arr[100000]; + omp_set_num_threads(2); + parallel_fill(arr, 100000); + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ax_cv_cxx_openmp=$ax_openmp_flag; break fi - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "nvcc", so it can be a program name with args. -set dummy nvcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $NVCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext done - done -IFS=$as_save_IFS +CXXFLAGS=$saveCXXFLAGS - ;; -esac fi -NVCC=$ac_cv_path_NVCC -if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +$as_echo "$ax_cv_cxx_openmp" >&6; } +if test "x$ax_cv_cxx_openmp" = "xunknown"; then + : else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - + if test "x$ax_cv_cxx_openmp" != "xnone"; then + OPENMP_CXXFLAGS=$ax_cv_cxx_openmp + fi +$as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi -fi +ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +cat >>confdefs.h <<_ACEOF +#define HAVE_PTRDIFF_T 1 +_ACEOF +fi +ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" +case $ac_cv_c_int16_t in #( + no|yes) ;; #( + *) +cat >>confdefs.h <<_ACEOF +#define int16_t $ac_cv_c_int16_t +_ACEOF +;; +esac +ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" +case $ac_cv_c_int32_t in #( + no|yes) ;; #( + *) +cat >>confdefs.h <<_ACEOF +#define int32_t $ac_cv_c_int32_t +_ACEOF +;; +esac +ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" +case $ac_cv_c_int64_t in #( + no|yes) ;; #( + *) +cat >>confdefs.h <<_ACEOF +#define int64_t $ac_cv_c_int64_t +_ACEOF +;; +esac +ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t" +case $ac_cv_c_int8_t in #( + no|yes) ;; #( + *) +cat >>confdefs.h <<_ACEOF +#define int8_t $ac_cv_c_int8_t +_ACEOF +;; +esac +ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : +else +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF +fi - if test -z "$NVPRUNE"; then : +ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvprune executable path has been provided" >&5 -$as_echo_n "checking whether nvprune executable path has been provided... " >&6; } +else -# Check whether --with-nvprune was given. -if test "${with_nvprune+set}" = set; then : - withval=$with_nvprune; - if test "$withval" != yes && test "$withval" != no; then : +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF - NVPRUNE="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } +fi + +ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" +if test "x$ac_cv_type_ssize_t" = xyes; then : else - NVPRUNE="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : +cat >>confdefs.h <<_ACEOF +#define ssize_t int +_ACEOF - # Extract the first word of "nvprune", so it can be a program name with args. -set dummy nvprune; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVPRUNE+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $NVPRUNE in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. - ;; +fi + +ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" +case $ac_cv_c_uint16_t in #( + no|yes) ;; #( *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - ;; -esac -fi -NVPRUNE=$ac_cv_path_NVPRUNE -if test -n "$NVPRUNE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +cat >>confdefs.h <<_ACEOF +#define uint16_t $ac_cv_c_uint16_t +_ACEOF +;; + esac +ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" +case $ac_cv_c_uint32_t in #( + no|yes) ;; #( + *) -fi +$as_echo "#define _UINT32_T 1" >>confdefs.h -fi -else +cat >>confdefs.h <<_ACEOF +#define uint32_t $ac_cv_c_uint32_t +_ACEOF +;; + esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "nvprune", so it can be a program name with args. -set dummy nvprune; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVPRUNE+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $NVPRUNE in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. - ;; +ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" +case $ac_cv_c_uint64_t in #( + no|yes) ;; #( *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - ;; -esac -fi -NVPRUNE=$ac_cv_path_NVPRUNE -if test -n "$NVPRUNE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +$as_echo "#define _UINT64_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint64_t $ac_cv_c_uint64_t +_ACEOF +;; + esac -fi +ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" +case $ac_cv_c_uint8_t in #( + no|yes) ;; #( + *) +$as_echo "#define _UINT8_T 1" >>confdefs.h -fi + +cat >>confdefs.h <<_ACEOF +#define uint8_t $ac_cv_c_uint8_t +_ACEOF +;; + esac +# Extras +# Check whether --with-cuda_home was given. +if test "${with_cuda_home+set}" = set; then : + withval=$with_cuda_home; +else + with_cuda_home=/usr/local/cuda +fi +CUDA_HOME=$with_cuda_home +# Check whether --enable-cuda was given. +if test "${enable_cuda+set}" = set; then : + enableval=$enable_cuda; +else + enable_cuda=yes +fi +if test x$enable_cuda != xno; then : @@ -2999,37 +16110,37 @@ fi - if test -z "$CUOBJDUMP"; then : + if test -z "$NVCC"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cuobjdump executable path has been provided" >&5 -$as_echo_n "checking whether cuobjdump executable path has been provided... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvcc executable path has been provided" >&5 +$as_echo_n "checking whether nvcc executable path has been provided... " >&6; } -# Check whether --with-cuobjdump was given. -if test "${with_cuobjdump+set}" = set; then : - withval=$with_cuobjdump; +# Check whether --with-nvcc was given. +if test "${with_nvcc+set}" = set; then : + withval=$with_nvcc; if test "$withval" != yes && test "$withval" != no; then : - CUOBJDUMP="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } + NVCC="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else - CUOBJDUMP="" + NVCC="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$withval" != no; then : - # Extract the first word of "cuobjdump", so it can be a program name with args. -set dummy cuobjdump; ac_word=$2 + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CUOBJDUMP+:} false; then : +if ${ac_cv_path_NVCC+:} false; then : $as_echo_n "(cached) " >&6 else - case $CUOBJDUMP in + case $NVCC in [\\/]* | ?:[\\/]*) - ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3039,7 +16150,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3050,10 +16161,10 @@ IFS=$as_save_IFS ;; esac fi -CUOBJDUMP=$ac_cv_path_CUOBJDUMP -if test -n "$CUOBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3069,16 +16180,16 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - # Extract the first word of "cuobjdump", so it can be a program name with args. -set dummy cuobjdump; ac_word=$2 + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CUOBJDUMP+:} false; then : +if ${ac_cv_path_NVCC+:} false; then : $as_echo_n "(cached) " >&6 else - case $CUOBJDUMP in + case $NVCC in [\\/]* | ?:[\\/]*) - ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3088,7 +16199,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3099,10 +16210,10 @@ IFS=$as_save_IFS ;; esac fi -CUOBJDUMP=$ac_cv_path_CUOBJDUMP -if test -n "$CUOBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3120,18 +16231,6 @@ fi - HAVE_CUDA=1 - -fi - -# Check whether --with-nvcc_flags was given. -if test "${with_nvcc_flags+set}" = set; then : - withval=$with_nvcc_flags; -else - with_nvcc_flags='-O3 -Xcompiler -Wall' -fi - -NVCCFLAGS=$with_nvcc_flags @@ -3142,39 +16241,37 @@ NVCCFLAGS=$with_nvcc_flags + if test -z "$NVPRUNE"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvprune executable path has been provided" >&5 +$as_echo_n "checking whether nvprune executable path has been provided... " >&6; } - if test -z "$AWK"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether awk executable path has been provided" >&5 -$as_echo_n "checking whether awk executable path has been provided... " >&6; } - -# Check whether --with-awk was given. -if test "${with_awk+set}" = set; then : - withval=$with_awk; +# Check whether --with-nvprune was given. +if test "${with_nvprune+set}" = set; then : + withval=$with_nvprune; if test "$withval" != yes && test "$withval" != no; then : - AWK="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + NVPRUNE="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } else - AWK="" + NVPRUNE="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$withval" != no; then : - # Extract the first word of "awk", so it can be a program name with args. -set dummy awk; ac_word=$2 + # Extract the first word of "nvprune", so it can be a program name with args. +set dummy nvprune; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_AWK+:} false; then : +if ${ac_cv_path_NVPRUNE+:} false; then : $as_echo_n "(cached) " >&6 else - case $AWK in + case $NVPRUNE in [\\/]* | ?:[\\/]*) - ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3184,7 +16281,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3195,10 +16292,10 @@ IFS=$as_save_IFS ;; esac fi -AWK=$ac_cv_path_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } +NVPRUNE=$ac_cv_path_NVPRUNE +if test -n "$NVPRUNE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3214,16 +16311,16 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - # Extract the first word of "awk", so it can be a program name with args. -set dummy awk; ac_word=$2 + # Extract the first word of "nvprune", so it can be a program name with args. +set dummy nvprune; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_AWK+:} false; then : +if ${ac_cv_path_NVPRUNE+:} false; then : $as_echo_n "(cached) " >&6 else - case $AWK in + case $NVPRUNE in [\\/]* | ?:[\\/]*) - ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3233,7 +16330,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3244,10 +16341,10 @@ IFS=$as_save_IFS ;; esac fi -AWK=$ac_cv_path_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } +NVPRUNE=$ac_cv_path_NVPRUNE +if test -n "$NVPRUNE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3275,38 +16372,37 @@ fi + if test -z "$CUOBJDUMP"; then : - if test -z "$CTAGS"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 -$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cuobjdump executable path has been provided" >&5 +$as_echo_n "checking whether cuobjdump executable path has been provided... " >&6; } -# Check whether --with-ctags was given. -if test "${with_ctags+set}" = set; then : - withval=$with_ctags; +# Check whether --with-cuobjdump was given. +if test "${with_cuobjdump+set}" = set; then : + withval=$with_cuobjdump; if test "$withval" != yes && test "$withval" != no; then : - CTAGS="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } + CUOBJDUMP="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } else - CTAGS="" + CUOBJDUMP="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$withval" != no; then : - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 + # Extract the first word of "cuobjdump", so it can be a program name with args. +set dummy cuobjdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : +if ${ac_cv_path_CUOBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else - case $CTAGS in + case $CUOBJDUMP in [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3316,7 +16412,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3327,10 +16423,10 @@ IFS=$as_save_IFS ;; esac fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } +CUOBJDUMP=$ac_cv_path_CUOBJDUMP +if test -n "$CUOBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3346,16 +16442,16 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 + # Extract the first word of "cuobjdump", so it can be a program name with args. +set dummy cuobjdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : +if ${ac_cv_path_CUOBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else - case $CTAGS in + case $CUOBJDUMP in [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3365,7 +16461,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3376,10 +16472,10 @@ IFS=$as_save_IFS ;; esac fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } +CUOBJDUMP=$ac_cv_path_CUOBJDUMP +if test -n "$CUOBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3397,89 +16493,25 @@ fi -if test "x${CTAGS}" = x; then : - as_fn_error $? "Required program ctags was not found" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } -if ! ${CTAGS} --version | grep -q Exuberant; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi - - + HAVE_CUDA=1 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 -$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } -if ${ax_cv_cxx_openmp+:} false; then : - $as_echo_n "(cached) " >&6 + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" else - saveCXXFLAGS=$CXXFLAGS -ax_cv_cxx_openmp=unknown -# Flags to try: -fopenmp (gcc), -mp (SGI & PGI), -# -qopenmp (icc>=15), -openmp (icc), -# -xopenmp (Sun), -omp (Tru64), -# -qsmp=omp (AIX), -# none -ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none" -if test "x$OPENMP_CXXFLAGS" != x; then - ax_openmp_flags="$OPENMP_CXXFLAGS $ax_openmp_flags" -fi -for ax_openmp_flag in $ax_openmp_flags; do - case $ax_openmp_flag in - none) CXXFLAGS=$saveCXX ;; - *) CXXFLAGS="$saveCXXFLAGS $ax_openmp_flag" ;; - esac - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include - -static void -parallel_fill(int * data, int n) -{ - int i; -#pragma omp parallel for - for (i = 0; i < n; ++i) - data[i] = i; -} + HAVE_CUDA=0 -int -main() -{ - int arr[100000]; - omp_set_num_threads(2); - parallel_fill(arr, 100000); - return 0; -} - -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ax_cv_cxx_openmp=$ax_openmp_flag; break fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -done -CXXFLAGS=$saveCXXFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 -$as_echo "$ax_cv_cxx_openmp" >&6; } -if test "x$ax_cv_cxx_openmp" = "xunknown"; then - : +# Check whether --with-nvcc_flags was given. +if test "${with_nvcc_flags+set}" = set; then : + withval=$with_nvcc_flags; else - if test "x$ax_cv_cxx_openmp" != "xnone"; then - OPENMP_CXXFLAGS=$ax_cv_cxx_openmp - fi - -$as_echo "#define HAVE_OPENMP 1" >>confdefs.h - + with_nvcc_flags='-O3 -Xcompiler -Wall' fi +NVCCFLAGS=$with_nvcc_flags + # Check whether --enable-numa was given. @@ -3489,7 +16521,7 @@ else enable_numa=yes fi -if test "x$enable_numa" != xno; then : +if test x$enable_numa != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_tonode_memory in -lnuma" >&5 $as_echo_n "checking for numa_tonode_memory in -lnuma... " >&6; } if ${ac_cv_lib_numa_numa_tonode_memory+:} false; then : @@ -3527,10 +16559,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_tonode_memory" >&5 $as_echo "$ac_cv_lib_numa_numa_tonode_memory" >&6; } if test "x$ac_cv_lib_numa_numa_tonode_memory" = xyes; then : - NUMA_LIB=-lnuma - - NUMA_CPPFLAGS=-DBF_NUMA_ENABLED=1 - + CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" + LIBS="$LIBS -lnuma" fi fi @@ -3542,7 +16572,7 @@ else enable_hwloc=yes fi -if test "x$enable_hwloc" != xno; then : +if test x$enable_hwloc != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 $as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : @@ -3580,10 +16610,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 $as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : - HWLOC_LIB=-lhwloc - - HWLOC_CPPFLAGS=-DBF_HWLOC_ENABLED=1 - + CPPFLAGS="$CPPFLAGS -DBF_HWLOC_ENABLED=1" + LIBS="$LIBS -lhwloc" fi fi @@ -3595,7 +16623,7 @@ else enable_vma=no fi -if test "x$enable_vma" != xno; then : +if test x$enable_vma != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 $as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : @@ -3633,10 +16661,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 $as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : - VMA_LIB=-lvma - - VMA_CPPFLAGS=-DBF_VMA_ENABLED=1 - + CPPFLAGS="$CPPFLAGS -DBF_VMA_ENABLED=1" + LIBS="$LIBS -lvma" fi fi @@ -3660,8 +16686,9 @@ else with_shared_mem=16384 fi -GPU_SHAREDMEM=$with_shared_mem - +if test x$HAVE_CUDA = x1; then : + NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem" +fi # Check whether --with-alignment was given. @@ -3671,8 +16698,7 @@ else with_alignment=4096 fi -ALIGNMENT=$with_alignment - +CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : @@ -3681,13 +16707,10 @@ else enable_debug=no fi -if test "x$enable_debug" != xno; then : - DEBUG_CPPFLAGS=-DBF_DEBUG=1 - - DEBUG_CXXFLAGS=-g - - DEBUG_NVCCFLAGS=-g - +if test x$enable_debug != xno; then : + CPPFLAGS="$CPPFLAGS -DBF_DEBUG=1" + CXXFLAGS="$CXXFLAGS -g" + NVCCFLAGS="$NVCCFLAGS -g" fi # Check whether --enable-trace was given. @@ -3697,9 +16720,8 @@ else enable_trace=no fi -if test "x$enable_trace" != xno; then : - TRACE_CPPFLAGS=-DBF_TRACE_ENABLED=1 - +if test x$enable_trace != xno; then : + CPPFLAGS="$CPPFLAGS -DBF_TRACE_ENABLED=1" fi # Check whether --enable-native_arch was given. @@ -3709,11 +16731,11 @@ else enable_native_arch=yes fi -if test "x$enable_native_arch" != xno; then : - ARCH_CXXFLAGS=-march=native - - ARCH_NVCCFLAGS=-Xcompiler -march=native +if test x$enable_native_arch != xyes; then : +else + CXXFLAGS="$CXXFLAGS -march=native" + NVCCFLAGS="$NVCCFLAGS -Xcompiler -march=native" fi # Check whether --enable-cuda_debug was given. @@ -3723,9 +16745,8 @@ else enable_cuda_debug=no fi -if test "x$enable_cuda_debug" != xno; then : - DEBUG_NVCCFLAGS=-G - +if test x$enable_cuda_debug != xno; then : + NVCCFLAGS="$NVCCFLAGS -G" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build information" >&5 @@ -3910,6 +16931,7 @@ fi PYINSTALLFLAGS=$with_pyinstall_flags +# Documentation @@ -5861,7 +18883,7 @@ DX_RULES="${DX_SNIPPET_doc}" #echo DX_ENV=$DX_ENV -ac_config_files="$ac_config_files user2.mk" +ac_config_files="$ac_config_files config.mk src/Makefile" cat >confcache <<\_ACEOF @@ -6429,6 +19451,7 @@ esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" +config_commands="$ac_config_commands" _ACEOF @@ -6453,7 +19476,11 @@ Usage: $0 [OPTION]... [TAG]... Configuration files: $config_files -Report bugs to the package provider." +Configuration commands: +$config_commands + +Report bugs to the package provider. +bifrost home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -6469,6 +19496,8 @@ gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' +INSTALL='$INSTALL' +AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF @@ -6561,6 +19590,391 @@ _ASBOX _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + + + + _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 @@ -6569,7 +19983,9 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 for ac_config_target in $ac_config_targets do case $ac_config_target in - "user2.mk") CONFIG_FILES="$CONFIG_FILES user2.mk" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "config.mk") CONFIG_FILES="$CONFIG_FILES config.mk" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac @@ -6582,6 +19998,7 @@ done # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -6770,7 +20187,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" -eval set X " :F $CONFIG_FILES " +eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do @@ -6904,6 +20321,10 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix # CONFIG_FILE # + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 @@ -6957,6 +20378,7 @@ s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ @@ -6980,9 +20402,724 @@ which seems to be undefined. Please make sure it is defined" >&2;} ;; + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='CXX ' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; esac + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac done # for ac_tag diff --git a/configure.ac b/configure.ac index 61c45548a..f9d6e96ac 100644 --- a/configure.ac +++ b/configure.ac @@ -1,24 +1,83 @@ -AC_INIT([bifrost], [0.9.0]) +AC_INIT([bifrost], [0.9.0], [], [], [https://github.com/ledatelescope/bifrost/]) AC_LANG(C++) AC_CONFIG_SRCDIR([src/cuda.cpp]) +AC_CONFIG_AUX_DIR([config]) + : ${CXXFLAGS="-O3 -Wall -pedantic"} +# Programs +AC_PROG_CC AC_PROG_CXX -AC_REQUIRE_CPP -AC_PROG_RANLIB +AC_PROG_AWK +AC_PROG_INSTALL +AC_PROG_LIBTOOL +AC_PROG_LN_S +AC_PROG_MAKE_SET +AX_WITH_PROG(CTAGS, ctags) +AS_IF([test x${CTAGS} = x], + [AC_MSG_ERROR([Required program ctags was not found])], + []) +AC_MSG_CHECKING([whether ${CTAGS} is exuberant]) +AS_IF([! ${CTAGS} --version | grep -q Exuberant], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([exhuberant ctags is required, but ${CTAGS} is a different version])], + [AC_MSG_RESULT([yes])]) +AC_SUBST(SO_EXT, $shrext_cmds) + +# Features +AC_C_INLINE +AC_CHECK_FUNCS([memset]) +AC_CHECK_FUNCS([rint]) +AC_CHECK_FUNCS([socket]) +AC_CHECK_FUNCS([sqrt]) +AC_CHECK_FUNCS([strerror]) +AC_CHECK_HEADERS([arpa/inet.h]) +AC_CHECK_HEADERS([netdb.h]) +AC_CHECK_HEADERS([netinet/in.h]) +AC_CHECK_HEADERS([sys/file.h]) +AC_CHECK_HEADERS([sys/ioctl.h]) +AC_CHECK_HEADERS([sys/socket.h]) +AC_CHECK_HEADER_STDBOOL +AC_FUNC_MALLOC + +AX_OPENMP + +AC_CHECK_TYPES([ptrdiff_t]) +AC_TYPE_INT16_T +AC_TYPE_INT32_T +AC_TYPE_INT64_T +AC_TYPE_INT8_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_TYPE_SSIZE_T +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT64_T +AC_TYPE_UINT8_T + +# Extras +AC_ARG_WITH([cuda_home], + [AS_HELP_STRING([--with-cuda-home], + [CUDA install path (default=/usr/local/cuda)])], + [], + [with_cuda_home=/usr/local/cuda]) +AC_SUBST(CUDA_HOME, $with_cuda_home) AC_ARG_ENABLE([cuda], [AS_HELP_STRING([--enable-cuda], [enable cuda support (default=yes)])], [], [enable_cuda=yes]) -AS_IF([test "x$enable_cuda" != xno], +AS_IF([test x$enable_cuda != xno], [AX_WITH_PROG(NVCC, nvcc) AX_WITH_PROG(NVPRUNE, nvprune) AX_WITH_PROG(CUOBJDUMP, cuobjdump) - AC_SUBST([HAVE_CUDA], [1])], - []) + AC_SUBST(HAVE_CUDA, 1) + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt"], + [AC_SUBST(HAVE_CUDA, 0)]) AC_ARG_WITH([nvcc_flags], [AS_HELP_STRING([--with-nvcc-flags], [flags to pass to NVCC (default='-O3 -Xcompiler -Wall')])], @@ -26,56 +85,36 @@ AC_ARG_WITH([nvcc_flags], [with_nvcc_flags='-O3 -Xcompiler -Wall']) AC_SUBST(NVCCFLAGS, $with_nvcc_flags) -AX_WITH_PROG(AWK, awk) - -AX_WITH_PROG(CTAGS, ctags) -AS_IF([test "x${CTAGS}" = x], - [AC_MSG_ERROR([Required program ctags was not found])], - []) -AC_MSG_CHECKING([whether ${CTAGS} is exuberant]) -AS_IF([! ${CTAGS} --version | grep -q Exuberant], - [AC_MSG_RESULT([no]) - AC_MSG_ERROR([exhuberant ctags is required, but ${CTAGS} is a different version])], - [AC_MSG_RESULT([yes])]) - -AX_OPENMP - AC_ARG_ENABLE([numa], AS_HELP_STRING([--enable-numa], [enable NUMA support (default=yes)]), [], [enable_numa=yes]) -AS_IF([test "x$enable_numa" != xno], +AS_IF([test x$enable_numa != xno], [AC_CHECK_LIB([numa], [numa_tonode_memory], - [AC_SUBST([NUMA_LIB], [-lnuma]) - AC_SUBST([NUMA_CPPFLAGS], [-DBF_NUMA_ENABLED=1])], - [])], - []) + [CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" + LIBS="$LIBS -lnuma"])]) AC_ARG_ENABLE([hwloc], AS_HELP_STRING([--enable-hwloc], [enable hwloc support (default=yes)]), [], [enable_hwloc=yes]) -AS_IF([test "x$enable_hwloc" != xno], +AS_IF([test x$enable_hwloc != xno], [AC_CHECK_LIB([hwloc], [hwloc_topology_init], - [AC_SUBST([HWLOC_LIB], [-lhwloc]) - AC_SUBST([HWLOC_CPPFLAGS], [-DBF_HWLOC_ENABLED=1])], - [])], - []) + [CPPFLAGS="$CPPFLAGS -DBF_HWLOC_ENABLED=1" + LIBS="$LIBS -lhwloc"])]) AC_ARG_ENABLE([vma], AS_HELP_STRING([--enable-vma], [enable vma support (default=no)]), [], [enable_vma=no]) -AS_IF([test "x$enable_vma" != xno], +AS_IF([test x$enable_vma != xno], [AC_CHECK_LIB([vma], [recvfrom_zcopy], - [AC_SUBST([VMA_LIB], [-lvma]) - AC_SUBST([VMA_CPPFLAGS], [-DBF_VMA_ENABLED=1])], - [])], - []) + [CPPFLAGS="$CPPFLAGS -DBF_VMA_ENABLED=1" + LIBS="$LIBS -lvma"])]) AC_ARG_WITH([gpu_archs], [AS_HELP_STRING([--with-gpu-archs=...], @@ -89,53 +128,51 @@ AC_ARG_WITH([shared_mem], [default GPU shared memory in bytes (default=16384)])], [], [with_shared_mem=16384]) -AC_SUBST(GPU_SHAREDMEM, $with_shared_mem) +AS_IF([test x$HAVE_CUDA = x1], + [NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem"]) AC_ARG_WITH([alignment], [AS_HELP_STRING([--with-alignment=N], [default memory alignment in bytes (default=4096)])], [], [with_alignment=4096]) -AC_SUBST(ALIGNMENT, $with_alignment) +CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], [enable debugging mode (default=no)])], [], [enable_debug=no]) -AS_IF([test "x$enable_debug" != xno], - [AC_SUBST(DEBUG_CPPFLAGS, [-DBF_DEBUG=1]) - AC_SUBST(DEBUG_CXXFLAGS, [-g]) - AC_SUBST(DEBUG_NVCCFLAGS, [-g])], - []) +AS_IF([test x$enable_debug != xno], + [CPPFLAGS="$CPPFLAGS -DBF_DEBUG=1" + CXXFLAGS="$CXXFLAGS -g" + NVCCFLAGS="$NVCCFLAGS -g"]) AC_ARG_ENABLE([trace], [AS_HELP_STRING([--enable-trace], [enable tracing mode for nvprof/nvvp (default=no)])], [], [enable_trace=no]) -AS_IF([test "x$enable_trace" != xno], - [AC_SUBST(TRACE_CPPFLAGS, [-DBF_TRACE_ENABLED=1])], - []) +AS_IF([test x$enable_trace != xno], + [CPPFLAGS="$CPPFLAGS -DBF_TRACE_ENABLED=1"]) AC_ARG_ENABLE([native_arch], [AS_HELP_STRING([--enable-native-arch], [enable native architecture compilation (default=yes)])], [], [enable_native_arch=yes]) -AS_IF([test "x$enable_native_arch" != xno], - [AC_SUBST(ARCH_CXXFLAGS, [-march=native]) - AC_SUBST(ARCH_NVCCFLAGS, [-Xcompiler -march=native])], - []) +AS_IF([test x$enable_native_arch != xyes], + [], + [CXXFLAGS="$CXXFLAGS -march=native" + NVCCFLAGS="$NVCCFLAGS -Xcompiler -march=native"]) AC_ARG_ENABLE([cuda_debug], [AS_HELP_STRING([--enable-cuda-debug], [enable CUDA debugging (nvcc -G; default=no)])], [], [enable_cuda_debug=no]) -AS_IF([test "x$enable_cuda_debug" != xno], - [AC_SUBST(DEBUG_NVCCFLAGS, [-G])], - []) +AS_IF([test x$enable_cuda_debug != xno], + [NVCCFLAGS="$NVCCFLAGS -G"]) AX_PYTHON @@ -153,6 +190,7 @@ AC_ARG_WITH([pyinstall_flags], []) AC_SUBST(PYINSTALLFLAGS, $with_pyinstall_flags) +# Documentation DX_DOT_FEATURE(OFF) DX_HTML_FEATURE(ON) DX_CHM_FEATURE(OFF) @@ -164,6 +202,6 @@ DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) DX_INIT_DOXYGEN([bifrost]) -AC_CONFIG_FILES([user2.mk]) +AC_CONFIG_FILES([config.mk src/Makefile]) AC_OUTPUT diff --git a/src/Makefile b/src/Makefile.in similarity index 77% rename from src/Makefile rename to src/Makefile.in index 6fcc5db97..3dcd5a92a 100644 --- a/src/Makefile +++ b/src/Makefile.in @@ -2,7 +2,26 @@ .SILENT: include ../config.mk -include ../user.mk + +CXX ?= @CXX@ +NVCC ?= @NVCC@ +LINKER ?= @LD@ +CPPFLAGS ?= @CPPFLAGS@ +CXXFLAGS ?= @CXXFLAGS@ +NVCCFLAGS ?= @NVCCFLAGS@ +LDFLAGS ?= @LDFLAGS@ @LIBS@ +DOXYGEN ?= @DX_DOXYGEN@ +PYBUILDFLAGS ?= @PYBUILDFLAGS@ +PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ + +GPU_ARCHS ?= @GPU_ARCHS@ + +GPU_SHAREDMEM ?= @GPU_SHAREDMEM@ + +CUDA_HOME ?= @CUDA_HOME@ +CUDA_LIBDIR ?= $(CUDA_HOME)/lib +CUDA_LIBDIR64 ?= $(CUDA_HOME)/lib64 +CUDA_INCDIR ?= $(CUDA_HOME)/include LIBBIFROST_OBJS = \ common.o \ @@ -19,7 +38,7 @@ LIBBIFROST_OBJS = \ unpack.o \ quantize.o \ proclog.o -ifndef NOCUDA +ifeq (HAVE_CUDA,1) # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ transpose.o \ @@ -48,7 +67,7 @@ JIT_SOURCES ?= \ MAKEFILES = ../config.mk ../user.mk Makefile -ifndef NOCUDA +ifeq (NOCUDA,0) # All CUDA archs supported by this version of nvcc GPU_ARCHS_SUPPORTED := $(shell $(NVCC) -h | grep -Po "compute_[0-9]{2}" | cut -d_ -f2 | sort | uniq) # Intersection of user-specified archs and supported archs @@ -68,54 +87,6 @@ NVCCFLAGS += -std=c++11 -Xcompiler "-fPIC" $(NVCC_GENCODE) -DBF_GPU_SHAREDMEM=$( #NVCCFLAGS += -Xcudafe "--diag_suppress=unrecognized_gcc_pragma" #NVCCFLAGS += --expt-relaxed-constexpr -ifndef NODEBUG - CPPFLAGS += -DBF_DEBUG=1 - CXXFLAGS += -g - NVCCFLAGS += -g -endif - -LIB += -lgomp - -ifdef TRACE - CPPFLAGS += -DBF_TRACE_ENABLED=1 -endif - -ifdef NUMA - # Requires libnuma-dev to be installed - LIB += -lnuma - CPPFLAGS += -DBF_NUMA_ENABLED=1 -endif - -ifdef HWLOC - # Requires libhwloc-dev to be installed - LIB += -lhwloc - CPPFLAGS += -DBF_HWLOC_ENABLED=1 -endif - -ifdef VMA - # Requires Mellanox libvma to be installed - LIB += -lvma - CPPFLAGS += -DBF_VMA_ENABLED=1 -endif - -ifdef ALIGNMENT - CPPFLAGS += -DBF_ALIGNMENT=$(ALIGNMENT) -endif - -ifdef CUDA_DEBUG - NVCCFLAGS += -G -endif - -ifndef NOCUDA - CPPFLAGS += -DBF_CUDA_ENABLED=1 - LIB += -L$(CUDA_LIBDIR64) -L$(CUDA_LIBDIR) -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt -endif - -ifndef ANY_ARCH - CXXFLAGS += -march=native - NVCCFLAGS += -Xcompiler "-march=native" -endif - LIB_DIR = ../lib INC_DIR = . CPPFLAGS += -I. -I$(INC_DIR) -I$(CUDA_INCDIR) @@ -131,11 +102,6 @@ all: $(LIBBIFROST_SO) $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h $(CLEAR_LINE) @echo -n "Generating $(LIBBIFROST_VERSION_FILE)\r" - ctags --version | grep -q "Exuberant" || {\ - echo "*************************************" && \ - echo "ERROR: Please install exuberant-ctags" && \ - echo "*************************************" && \ - false; } echo "VERS_$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) {" > $@ echo " global:" >> $@ ctags -x --c-kinds=p $^ | awk '{print " " $$1 ";"}' >> $@ @@ -147,7 +113,7 @@ ifndef NOCUDA # TODO: Need to deal with 32/64 detection here LIBCUFFT_STATIC = $(CUDA_LIBDIR64)/libcufft_static.a # All PTX archs included in the lib (typically only one) -CUFFT_PTX_ARCHS := $(shell cuobjdump --list-ptx $(LIBCUFFT_STATIC) | grep -Po "sm_[0-9]{2}" | cut -d_ -f2 | sort | uniq) +CUFFT_PTX_ARCHS := $(shell @CUOBJDUMP@ --list-ptx $(LIBCUFFT_STATIC) | grep -Po "sm_[0-9]{2}" | cut -d_ -f2 | sort | uniq) # Latest PTX arch included in the lib CUFFT_PTX_LATEST_ARCH := $(shell echo $(CUFFT_PTX_ARCHS) | rev | cut -d' ' -f1 | rev) CUFFT_STATIC_GENCODE = -gencode arch=compute_$(CUFFT_PTX_LATEST_ARCH),\"code=compute_$(CUFFT_PTX_LATEST_ARCH)\" @@ -157,7 +123,7 @@ libcufft_static_pruned.a: $(LIBCUFFT_STATIC) Makefile # E.g., We may have GPU_ARCHS="35 61" but libcufft_static might only # include sm_60 and compute_60, so we need to keep compute_60 in order # to support sm_61. - nvprune -o $@ $(NVCC_GENCODE) $(CUFFT_STATIC_GENCODE) $< + @NVPRUNE@ -o $@ $(NVCC_GENCODE) $(CUFFT_STATIC_GENCODE) $< fft_kernels.o: fft_kernels.cu fft_kernels.h Makefile # Note: This needs to be compiled with "-dc" to make CUFFT callbacks work $(NVCC) $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(GCCFLAGS)" -dc $(OUTPUT_OPTION) $< @@ -188,7 +154,7 @@ $(LIBBIFROST_SO): $(LIBBIFROST_OBJS) $(LIBBIFROST_VERSION_FILE) $(CUDA_DEVICE_LI map.o: $(JIT_SOURCES) stringify: stringify.cpp - g++ -o stringify -Wall -O3 stringify.cpp + $(CXX) -o stringify -Wall -O3 stringify.cpp %.jit: % stringify @$(CLEAR_LINE) @echo -n "Building JIT version of $<\r" diff --git a/user.mk b/user.mk deleted file mode 100644 index 49cc2a199..000000000 --- a/user.mk +++ /dev/null @@ -1,32 +0,0 @@ -CXX ?= g++ -NVCC ?= nvcc -LINKER ?= g++ -CPPFLAGS ?= -CXXFLAGS ?= -O3 -Wall -pedantic -NVCCFLAGS ?= -O3 -Xcompiler "-Wall" #-Xptxas -v -LDFLAGS ?= -DOXYGEN ?= doxygen -PYBUILDFLAGS ?= -PYINSTALLFLAGS ?= - -#GPU_ARCHS ?= 30 32 35 37 50 52 53 # Nap time! -#GPU_ARCHS ?= 35 52 -GPU_ARCHS ?= 35 61 - -GPU_SHAREDMEM ?= 16384 # GPU shared memory size - -CUDA_HOME ?= /usr/local/cuda -CUDA_LIBDIR ?= $(CUDA_HOME)/lib -CUDA_LIBDIR64 ?= $(CUDA_HOME)/lib64 -CUDA_INCDIR ?= $(CUDA_HOME)/include - -ALIGNMENT ?= 4096 # Memory allocation alignment - -#NODEBUG = 1 # Disable debugging mode (use this for production releases) -#TRACE = 1 # Enable tracing mode (generates annotations for use with nvprof/nvvp) -#NOCUDA = 1 # Disable CUDA support -#ANY_ARCH = 1 # Disable native architecture compilation -#CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) -#NUMA = 1 # Enable use of numa library for setting affinity of ring memory -#HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture -#VMA = 1 # Enable use of Mellanox libvma in udp_capture From b8d95671b3e047f941f1ca522af212c8e032bd8d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 16:24:42 -0600 Subject: [PATCH 0141/1155] Run configure first. --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 43cd5d1fb..9d17b8cad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,7 +45,8 @@ script: git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ coveralls \ codecov - - sudo make -j NOCUDA=1 + - sudo ./configure --disable-cuda + - sudo make -j - sudo make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - cd test && sudo -E bash ./travis.sh && cd .. From ad4130457745529a5d56d8e52560f814943d51b5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 19:23:25 -0600 Subject: [PATCH 0142/1155] Closer. --- Makefile | 1 - config.mk.in | 4 +- configure | 4453 +++++++++++++++++++++++++++++------------------ configure.ac | 20 +- src/Makefile.in | 6 +- 5 files changed, 2825 insertions(+), 1659 deletions(-) diff --git a/Makefile b/Makefile index 6ec05752c..bb75f0c09 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ include config.mk -include user.mk LIB_DIR = lib INC_DIR = src diff --git a/config.mk.in b/config.mk.in index dbe9d97c2..415e7633c 100644 --- a/config.mk.in +++ b/config.mk.in @@ -3,11 +3,11 @@ ifndef OS endif ifeq ($(OS),Linux) - SO_EXT = @SO_EXT@ + SO_EXT = .so SHARED_FLAG = -shared SONAME_FLAG = -soname else ifeq ($(OS),Darwin) - SO_EXT = .dylib + SO_EXT = .dylib SHARED_FLAG = -dynamiclib SONAME_FLAG = -install_name #else ifeq ($(OS),Windows_NT) diff --git a/configure b/configure index 0679cb724..12f64ff20 100755 --- a/configure +++ b/configure @@ -676,15 +676,19 @@ PYTHON_INCLUDE_DIR PYTHON_BIN GPU_ARCHS NVCCFLAGS -HAVE_CUDA CUOBJDUMP NVPRUNE NVCC +HAVE_CUDA CUDA_HOME LIBOBJS +HAVE_CXX11 SO_EXT CTAGS SET_MAKE +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM CXXCPP CPP LT_SYS_LIBRARY_PATH @@ -694,8 +698,12 @@ LIPO NMEDIT DSYMUTIL MANIFEST_TOOL +AWK RANLIB STRIP +ac_ct_CXX +CXXFLAGS +CXX ac_ct_AR AR DLLTOOL @@ -709,6 +717,13 @@ FGREP EGREP GREP SED +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC host_os host_vendor host_cpu @@ -718,20 +733,6 @@ build_vendor build_cpu build LIBTOOL -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -AWK -ac_ct_CXX -CXXFLAGS -CXX -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC target_alias host_alias build_alias @@ -751,7 +752,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -869,7 +869,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1122,15 +1121,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1268,7 +1258,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1421,7 +1411,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -2761,6 +2750,171 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. : ${CXXFLAGS="-O3 -Wall -pedantic"} # Programs +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -3550,408 +3704,290 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - CXX=$ac_ct_CXX + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi +else + ac_cv_path_SED=$SED fi - fi fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + ac_cv_path_GREP=$GREP fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" - test -n "$AWK" && break -done -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac + $ac_path_EGREP_found && break 3 + done + done done IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi -rm -rf conftest.one conftest.two conftest.dir - + fi fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi +else + ac_cv_path_FGREP=$FGREP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' +test -z "$GREP" && GREP=grep -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac -macro_version='2.4.6' -macro_revision='2.4.6' @@ -3965,134 +4001,110 @@ macro_revision='2.4.6' -ltmain=$ac_aux_dir/ltmain.sh -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - + with_gnu_ld=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' +LD=$lt_cv_path_LD +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld @@ -4102,412 +4114,507 @@ esac - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi done + IFS=$lt_save_ifs done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED + : ${lt_cv_path_NM=no} fi - fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } else - ac_cv_path_EGREP=$EGREP + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" + test -n "$ac_ct_DUMPBIN" && break +done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + DUMPBIN=$ac_ct_DUMPBIN fi -else - ac_cv_path_FGREP=$FGREP fi - fi + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" +test -z "$NM" && NM=nm -test -z "$GREP" && GREP=grep +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +fi +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset else - with_gnu_ld=no + lt_unset=false fi -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac ;; - esac -elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + fi -if ${lt_cv_path_LD+:} false; then : + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac @@ -4517,92 +4624,27 @@ with_gnu_ld=$lt_cv_prog_gnu_ld -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi done done @@ -4610,32 +4652,28 @@ IFS=$as_save_IFS fi fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$DUMPBIN" && break - done fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -4644,7 +4682,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -4654,21 +4692,17 @@ IFS=$as_save_IFS fi fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) @@ -4676,348 +4710,255 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - DUMPBIN=$ac_ct_DUMPBIN + OBJDUMP=$ac_ct_OBJDUMP fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi +test -z "$OBJDUMP" && OBJDUMP=objdump - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi -fi -test -z "$NM" && NM=nm -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else - i=0 - teststring=ABCD - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; +beos*) + lt_cv_deplibs_check_method=pass_all + ;; - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac + ;; -fi - -if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' +tpf*) + lt_cv_deplibs_check_method=pass_all ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' +os2*) + lt_cv_deplibs_check_method=pass_all ;; esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -fi -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test yes != "$GCC"; then - reload_cmds=false - fi - ;; - darwin*) - if test yes = "$GCC"; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac @@ -5028,15 +4969,15 @@ esac if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : +if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5045,7 +4986,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5055,10 +4996,10 @@ IFS=$as_save_IFS fi fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -5066,17 +5007,17 @@ fi fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5085,7 +5026,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" + ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5095,17 +5036,17 @@ IFS=$as_save_IFS fi fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) @@ -5113,13 +5054,13 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - OBJDUMP=$ac_ct_OBJDUMP + DLLTOOL=$ac_ct_DLLTOOL fi else - OBJDUMP="$ac_cv_prog_OBJDUMP" + DLLTOOL="$ac_cv_prog_DLLTOOL" fi -test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$DLLTOOL" && DLLTOOL=dlltool @@ -5129,258 +5070,66 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. + lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; +esac -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -os2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : +if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5389,7 +5138,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5399,28 +5148,32 @@ IFS=$as_save_IFS fi fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi + test -n "$CXX" && break + done fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : +if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5429,7 +5182,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" + ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5439,17 +5192,21 @@ IFS=$as_save_IFS fi fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) @@ -5457,60 +5214,157 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - DLLTOOL=$ac_ct_DLLTOOL + CXX=$ac_ct_CXX fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" fi -test -z "$DLLTOOL" && DLLTOOL=dlltool - + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 else - lt_cv_sharedlib_from_linklib_cmd='unknown' + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then @@ -5925,6 +5779,48 @@ esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done @@ -7367,16 +7263,11 @@ $as_echo "$lt_cv_ld_force_load" >&6; } _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[012][,.]*) + darwin*) + case ${MACOSX_DEPLOYMENT_TARGET},$host in + 10.[012],*|,*powerpc*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) + *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; @@ -8951,9 +8842,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie openbsd* | bitrig*) with_gnu_ld=no ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs=no - ;; esac ld_shlibs=yes @@ -9208,7 +9096,7 @@ _LT_EOF fi ;; - netbsd* | netbsdelf*-gnu) + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -9878,7 +9766,6 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi - link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' @@ -9900,7 +9787,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } esac ;; - netbsd* | netbsdelf*-gnu) + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else @@ -11015,18 +10902,6 @@ fi dynamic_linker='GNU/Linux ld.so' ;; -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - netbsd*) version_type=sunos need_lib_prefix=no @@ -13921,7 +13796,7 @@ lt_prog_compiler_static_CXX= ;; esac ;; - netbsd* | netbsdelf*-gnu) + netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise @@ -14296,9 +14171,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie ;; esac ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs_CXX=no - ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; @@ -14992,18 +14864,6 @@ fi dynamic_linker='GNU/Linux ld.so' ;; -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - netbsd*) version_type=sunos need_lib_prefix=no @@ -15267,90 +15127,1022 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test yes = "$hardcode_automatic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif - # We can hardcode non-existent directories. - if test no != "$hardcode_direct_CXX" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && - test no != "$hardcode_minus_L_CXX"; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported + ac_compiler_gnu=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu -if test relink = "$hardcode_action_CXX" || - test yes = "$inherit_rpath_CXX"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test yes != "$_lt_caught_CXX_error" - + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + test -n "$AWK" && break +done +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + done +IFS=$as_save_IFS +rm -rf conftest.one conftest.two conftest.dir +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 @@ -15586,6 +16378,364 @@ _ACEOF ;; esac + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + + + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX11=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +$as_echo "#define HAVE_CXX11 1" >>confdefs.h + + fi + + for ac_func in memset do : ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" @@ -15938,6 +17088,7 @@ $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi +CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : @@ -16144,7 +17295,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16193,7 +17345,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16275,7 +17428,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16324,7 +17478,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16406,7 +17561,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16455,7 +17611,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16493,15 +17650,15 @@ fi - HAVE_CUDA=1 - - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" else HAVE_CUDA=0 fi +if test x$HAVE_CUDA = x1; then : + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" +fi # Check whether --with-nvcc_flags was given. if test "${with_nvcc_flags+set}" = set; then : @@ -17232,7 +18389,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17394,7 +18551,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17448,7 +18605,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17502,7 +18659,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17556,7 +18713,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17721,7 +18878,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17775,10 +18932,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17835,7 +18992,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18308,7 +19465,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18883,6 +20040,9 @@ DX_RULES="${DX_SNIPPET_doc}" #echo DX_ENV=$DX_ENV +CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" +NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" + ac_config_files="$ac_config_files config.mk src/Makefile" @@ -20424,6 +21584,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. diff --git a/configure.ac b/configure.ac index f9d6e96ac..0af5d4111 100644 --- a/configure.ac +++ b/configure.ac @@ -7,6 +7,7 @@ AC_CONFIG_AUX_DIR([config]) : ${CXXFLAGS="-O3 -Wall -pedantic"} # Programs +LT_INIT AC_PROG_CC AC_PROG_CXX AC_PROG_AWK @@ -28,6 +29,7 @@ AC_SUBST(SO_EXT, $shrext_cmds) # Features AC_C_INLINE +AX_CXX_COMPILE_STDCXX(11, noext, mandatory) AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) @@ -43,6 +45,7 @@ AC_CHECK_HEADER_STDBOOL AC_FUNC_MALLOC AX_OPENMP +CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" AC_CHECK_TYPES([ptrdiff_t]) AC_TYPE_INT16_T @@ -70,14 +73,14 @@ AC_ARG_ENABLE([cuda], [], [enable_cuda=yes]) AS_IF([test x$enable_cuda != xno], - [AX_WITH_PROG(NVCC, nvcc) - AX_WITH_PROG(NVPRUNE, nvprune) - AX_WITH_PROG(CUOBJDUMP, cuobjdump) - AC_SUBST(HAVE_CUDA, 1) - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt"], + [AX_WITH_PROG(NVCC, nvcc, [], [AC_SUBST(HAVE_CUDA, 0)]) + AX_WITH_PROG(NVPRUNE, nvprune, [], [AC_SUBST(HAVE_CUDA, 0)]) + AX_WITH_PROG(CUOBJDUMP, cuobjdump, [], [AC_SUBST(HAVE_CUDA, 0)])], [AC_SUBST(HAVE_CUDA, 0)]) +AS_IF([test x$HAVE_CUDA = x1], + [CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt"]) AC_ARG_WITH([nvcc_flags], [AS_HELP_STRING([--with-nvcc-flags], [flags to pass to NVCC (default='-O3 -Xcompiler -Wall')])], @@ -202,6 +205,9 @@ DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) DX_INIT_DOXYGEN([bifrost]) +CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" +NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" + AC_CONFIG_FILES([config.mk src/Makefile]) AC_OUTPUT diff --git a/src/Makefile.in b/src/Makefile.in index 3dcd5a92a..f28ef7c15 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -65,7 +65,7 @@ JIT_SOURCES ?= \ ShapeIndexer.cuh.jit \ int_fastdiv.h.jit -MAKEFILES = ../config.mk ../user.mk Makefile +MAKEFILES = ../config.mk Makefile ifeq (NOCUDA,0) # All CUDA archs supported by this version of nvcc @@ -81,8 +81,8 @@ NVCC_GENCODE ?= $(foreach arch, $(GPU_ARCHS_VALID), \ -gencode arch=compute_$(GPU_ARCH_LATEST),\"code=compute_$(GPU_ARCH_LATEST)\" endif -CXXFLAGS += -std=c++11 -fPIC -fopenmp -NVCCFLAGS += -std=c++11 -Xcompiler "-fPIC" $(NVCC_GENCODE) -DBF_GPU_SHAREDMEM=$(GPU_SHAREDMEM) +CXXFLAGS += -std=c++11 +NVCCFLAGS += -std=c++11 $(NVCC_GENCODE) -DBF_GPU_SHAREDMEM=$(GPU_SHAREDMEM) #NVCCFLAGS += -Xcudafe "--diag_suppress=unrecognized_gcc_pragma" #NVCCFLAGS += --expt-relaxed-constexpr From a5cadda186732f88e11cd891869eac7fd2301d8d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 19:23:53 -0600 Subject: [PATCH 0143/1155] Missing include according to clang. --- src/assert.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/assert.hpp b/src/assert.hpp index 1328fc1db..1acc135a0 100644 --- a/src/assert.hpp +++ b/src/assert.hpp @@ -31,6 +31,7 @@ #include +#include #include class BFexception : public std::runtime_error { From d9aec33256fffa55dca7480993d48ed283fdf613 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 19:39:15 -0600 Subject: [PATCH 0144/1155] CUDA fixes. --- configure | 27 +++++++++++++++------------ configure.ac | 30 ++++++++++++++++-------------- src/Makefile.in | 4 ++-- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/configure b/configure index 12f64ff20..38b685800 100755 --- a/configure +++ b/configure @@ -1449,13 +1449,13 @@ Optional Features: --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) - --enable-cuda enable cuda support (default=yes) + --disable-cuda disable cuda support (default=no) --enable-numa enable NUMA support (default=yes) --enable-hwloc enable hwloc support (default=yes) --enable-vma enable vma support (default=no) --enable-debug enable debugging mode (default=no) --enable-trace enable tracing mode for nvprof/nvvp (default=no) - --enable-native-arch enable native architecture compilation (default=yes) + --disable-native-arch disable native architecture compilation (default=no) --enable-cuda-debug enable CUDA debugging (nvcc -G; default=no) --disable-doxygen-doc don't generate any doxygen documentation --enable-doxygen-dot generate graphics for doxygen documentation @@ -1487,12 +1487,12 @@ Optional Packages: --with-cuobjdump=[PATH] absolute path to cuobjdump executable --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler - -Wall') + "-Wall"') --with-gpu-archs=... default GPU architectures (default='35 61') --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) --with-pybuild-flags build flags for python (default='') - --with-pyintall-flags install flags for python (default='') + --with-pyinstall-flags install flags for python (default='') Some influential environment variables: CC C compiler command @@ -17088,7 +17088,10 @@ $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi -CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +if test x$HAVE_OPENMP != x1; then : + CPPFLAGS="$CPPFLAGS -DBF_NO_OPENMP=1" + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : @@ -17245,7 +17248,7 @@ CUDA_HOME=$with_cuda_home # Check whether --enable-cuda was given. if test "${enable_cuda+set}" = set; then : - enableval=$enable_cuda; + enableval=$enable_cuda; enable_cuda=no else enable_cuda=yes fi @@ -17664,7 +17667,7 @@ fi if test "${with_nvcc_flags+set}" = set; then : withval=$with_nvcc_flags; else - with_nvcc_flags='-O3 -Xcompiler -Wall' + with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi NVCCFLAGS=$with_nvcc_flags @@ -17859,7 +17862,7 @@ CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; + enableval=$enable_debug; enable_debug=yes else enable_debug=no fi @@ -17872,7 +17875,7 @@ fi # Check whether --enable-trace was given. if test "${enable_trace+set}" = set; then : - enableval=$enable_trace; + enableval=$enable_trace; enable_trace=yes else enable_trace=no fi @@ -17883,7 +17886,7 @@ fi # Check whether --enable-native_arch was given. if test "${enable_native_arch+set}" = set; then : - enableval=$enable_native_arch; + enableval=$enable_native_arch; enable_native_arch=no else enable_native_arch=yes fi @@ -17892,12 +17895,12 @@ if test x$enable_native_arch != xyes; then : else CXXFLAGS="$CXXFLAGS -march=native" - NVCCFLAGS="$NVCCFLAGS -Xcompiler -march=native" + NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" fi # Check whether --enable-cuda_debug was given. if test "${enable_cuda_debug+set}" = set; then : - enableval=$enable_cuda_debug; + enableval=$enable_cuda_debug; enable_cuda_debug=yes else enable_cuda_debug=no fi diff --git a/configure.ac b/configure.ac index 0af5d4111..a904375d4 100644 --- a/configure.ac +++ b/configure.ac @@ -45,7 +45,9 @@ AC_CHECK_HEADER_STDBOOL AC_FUNC_MALLOC AX_OPENMP -CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +AS_IF([test x$HAVE_OPENMP != x1], + [CPPFLAGS="$CPPFLAGS -DBF_NO_OPENMP=1" + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"]) AC_CHECK_TYPES([ptrdiff_t]) AC_TYPE_INT16_T @@ -68,9 +70,9 @@ AC_ARG_WITH([cuda_home], [with_cuda_home=/usr/local/cuda]) AC_SUBST(CUDA_HOME, $with_cuda_home) AC_ARG_ENABLE([cuda], - [AS_HELP_STRING([--enable-cuda], - [enable cuda support (default=yes)])], - [], + [AS_HELP_STRING([--disable-cuda], + [disable cuda support (default=no)])], + [enable_cuda=no], [enable_cuda=yes]) AS_IF([test x$enable_cuda != xno], [AX_WITH_PROG(NVCC, nvcc, [], [AC_SUBST(HAVE_CUDA, 0)]) @@ -83,9 +85,9 @@ AS_IF([test x$HAVE_CUDA = x1], LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt"]) AC_ARG_WITH([nvcc_flags], [AS_HELP_STRING([--with-nvcc-flags], - [flags to pass to NVCC (default='-O3 -Xcompiler -Wall')])], + [flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"')])], [], - [with_nvcc_flags='-O3 -Xcompiler -Wall']) + [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) AC_SUBST(NVCCFLAGS, $with_nvcc_flags) @@ -144,7 +146,7 @@ CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], [enable debugging mode (default=no)])], - [], + [enable_debug=yes], [enable_debug=no]) AS_IF([test x$enable_debug != xno], [CPPFLAGS="$CPPFLAGS -DBF_DEBUG=1" @@ -154,25 +156,25 @@ AS_IF([test x$enable_debug != xno], AC_ARG_ENABLE([trace], [AS_HELP_STRING([--enable-trace], [enable tracing mode for nvprof/nvvp (default=no)])], - [], + [enable_trace=yes], [enable_trace=no]) AS_IF([test x$enable_trace != xno], [CPPFLAGS="$CPPFLAGS -DBF_TRACE_ENABLED=1"]) AC_ARG_ENABLE([native_arch], - [AS_HELP_STRING([--enable-native-arch], - [enable native architecture compilation (default=yes)])], - [], + [AS_HELP_STRING([--disable-native-arch], + [disable native architecture compilation (default=no)])], + [enable_native_arch=no], [enable_native_arch=yes]) AS_IF([test x$enable_native_arch != xyes], [], [CXXFLAGS="$CXXFLAGS -march=native" - NVCCFLAGS="$NVCCFLAGS -Xcompiler -march=native"]) + NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\""]) AC_ARG_ENABLE([cuda_debug], [AS_HELP_STRING([--enable-cuda-debug], [enable CUDA debugging (nvcc -G; default=no)])], - [], + [enable_cuda_debug=yes], [enable_cuda_debug=no]) AS_IF([test x$enable_cuda_debug != xno], [NVCCFLAGS="$NVCCFLAGS -G"]) @@ -187,7 +189,7 @@ AC_ARG_WITH([pybuild_flags], AC_SUBST(PYBUILDFLAGS, $with_pybuild_flags) AC_ARG_WITH([pyinstall_flags], - [AS_HELP_STRING([--with-pyintall-flags], + [AS_HELP_STRING([--with-pyinstall-flags], [install flags for python (default='')])], [], []) diff --git a/src/Makefile.in b/src/Makefile.in index f28ef7c15..c5e724fda 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -67,7 +67,7 @@ JIT_SOURCES ?= \ MAKEFILES = ../config.mk Makefile -ifeq (NOCUDA,0) +ifeq (HAVE_CUDA,1) # All CUDA archs supported by this version of nvcc GPU_ARCHS_SUPPORTED := $(shell $(NVCC) -h | grep -Po "compute_[0-9]{2}" | cut -d_ -f2 | sort | uniq) # Intersection of user-specified archs and supported archs @@ -109,7 +109,7 @@ $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h echo " *;" >> $@ echo "};" >> $@ -ifndef NOCUDA +ifeq (HAVE_CUDA,1) # TODO: Need to deal with 32/64 detection here LIBCUFFT_STATIC = $(CUDA_LIBDIR64)/libcufft_static.a # All PTX archs included in the lib (typically only one) From 84bab8e1df447b74b5564ad9422459a5443e92e3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 19:42:02 -0600 Subject: [PATCH 0145/1155] CUDA fixes. --- src/Makefile.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Makefile.in b/src/Makefile.in index c5e724fda..80d9fc2d2 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -14,6 +14,8 @@ DOXYGEN ?= @DX_DOXYGEN@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ +HAVE_CUDA ?= @HAVE_CUDA@ + GPU_ARCHS ?= @GPU_ARCHS@ GPU_SHAREDMEM ?= @GPU_SHAREDMEM@ From 12b3ae60e54f5bc3a78e9a01124170b1310a2455 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 08:11:52 -0600 Subject: [PATCH 0146/1155] More OpenMP cleanup and linking cleanup. --- config.mk.in | 8 +++---- configure | 63 ++++++++++++++++++++++++++++++++----------------- configure.ac | 14 +++++++++-- src/Makefile.in | 14 +++++++---- 4 files changed, 66 insertions(+), 33 deletions(-) diff --git a/config.mk.in b/config.mk.in index 415e7633c..a8ed1d807 100644 --- a/config.mk.in +++ b/config.mk.in @@ -21,11 +21,11 @@ PREFIX_DIR = @prefix@ INSTALL_LIB_DIR = @LIBDIR@ INSTALL_INC_DIR = @includedir@ -BIFROST_NAME = @PACKAGE_NAME@ +BIFROST_NAME = bifrost LIBBIFROST_NAME = lib$(BIFROST_NAME) -LIBBIFROST_MAJOR = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $1}') -LIBBIFROST_MINOR = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $2}') -LIBBIFROST_PATCH = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $3}') +LIBBIFROST_MAJOR = 0 +LIBBIFROST_MINOR = 9 +LIBBIFROST_PATCH = 0 LIBBIFROST_SO = $(LIBBIFROST_NAME)$(SO_EXT) LIBBIFROST_SO_MAJ = $(LIBBIFROST_SO).$(LIBBIFROST_MAJOR) LIBBIFROST_SO_MAJ_MIN = $(LIBBIFROST_SO_MAJ).$(LIBBIFROST_MINOR) diff --git a/configure b/configure index 38b685800..6fe76436b 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. +# Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -585,13 +585,14 @@ MFLAGS= MAKEFLAGS= # Identity of this package. -PACKAGE_NAME='bifrost' -PACKAGE_TARNAME='bifrost' -PACKAGE_VERSION='0.9.0' -PACKAGE_STRING='bifrost 0.9.0' -PACKAGE_BUGREPORT='' -PACKAGE_URL='https://github.com/ledatelescope/bifrost/' - +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="bifrost" ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ @@ -681,6 +682,7 @@ NVPRUNE NVCC HAVE_CUDA CUDA_HOME +HAVE_MMSG LIBOBJS HAVE_CXX11 SO_EXT @@ -871,7 +873,7 @@ sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' @@ -1371,7 +1373,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bifrost 0.9.0 to adapt to many kinds of systems. +\`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1419,7 +1421,7 @@ Fine tuning of the installation directories: --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/bifrost] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1435,9 +1437,7 @@ _ACEOF fi if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of bifrost 0.9.0:";; - esac + cat <<\_ACEOF Optional Features: @@ -1519,7 +1519,6 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. -bifrost home page: . _ACEOF ac_status=$? fi @@ -1582,7 +1581,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bifrost configure 0.9.0 +configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2361,7 +2360,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bifrost $as_me 0.9.0, which was +It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -17089,7 +17088,7 @@ $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi if test x$HAVE_OPENMP != x1; then : - CPPFLAGS="$CPPFLAGS -DBF_NO_OPENMP=1" + CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" fi @@ -17235,6 +17234,27 @@ _ACEOF esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sys/socket.h supports recvmmsg" >&5 +$as_echo_n "checking if sys/socket.h supports recvmmsg... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + int main(void) { + struct mmsghdr *mmsg = NULL; + return 0; + } +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_MMSG=1 + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # Extras # Check whether --with-cuda_home was given. @@ -20591,7 +20611,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bifrost $as_me 0.9.0, which was +This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20642,14 +20662,13 @@ $config_files Configuration commands: $config_commands -Report bugs to the package provider. -bifrost home page: ." +Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -bifrost config.status 0.9.0 +config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index a904375d4..9e8a65f1d 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([bifrost], [0.9.0], [], [], [https://github.com/ledatelescope/bifrost/]) +AC_INIT([bifrost], [], [], [], [https://github.com/ledatelescope/bifrost/]) AC_LANG(C++) AC_CONFIG_SRCDIR([src/cuda.cpp]) @@ -46,7 +46,7 @@ AC_FUNC_MALLOC AX_OPENMP AS_IF([test x$HAVE_OPENMP != x1], - [CPPFLAGS="$CPPFLAGS -DBF_NO_OPENMP=1" + [CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"]) AC_CHECK_TYPES([ptrdiff_t]) @@ -62,6 +62,16 @@ AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_UINT8_T +AC_MSG_CHECKING([if sys/socket.h supports recvmmsg]) +AC_COMPILE_IFELSE([#include + int main(void) { + struct mmsghdr *mmsg = NULL; + return 0; + }], + [AC_MSG_RESULT([yes]) + AC_SUBST(HAVE_MMSG, 1)], + [AC_MSG_RESULT([no])]) + # Extras AC_ARG_WITH([cuda_home], [AS_HELP_STRING([--with-cuda-home], diff --git a/src/Makefile.in b/src/Makefile.in index 80d9fc2d2..8d9f2307d 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -5,7 +5,7 @@ include ../config.mk CXX ?= @CXX@ NVCC ?= @NVCC@ -LINKER ?= @LD@ +LINKER ?= @CXX@ CPPFLAGS ?= @CPPFLAGS@ CXXFLAGS ?= @CXXFLAGS@ NVCCFLAGS ?= @NVCCFLAGS@ @@ -15,6 +15,7 @@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ HAVE_CUDA ?= @HAVE_CUDA@ +HAVE_MMSG ?= @HAVE_MMSG@ GPU_ARCHS ?= @GPU_ARCHS@ @@ -33,13 +34,16 @@ LIBBIFROST_OBJS = \ ring.o \ ring_impl.o \ array.o \ - address.o \ - udp_socket.o \ - udp_capture.o \ - udp_transmit.o \ unpack.o \ quantize.o \ proclog.o +ifeq (HAVE_MMSG,1) + LIBBIFROST_OBJS += \ + address.o \ + udp_socket.o \ + udp_capture.o \ + udp_transmit.o +endif ifeq (HAVE_CUDA,1) # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ From 990e655204a6b09db95c0688ea55a03068ea2270 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 08:13:21 -0600 Subject: [PATCH 0147/1155] BF_OPENMP support toggle. --- src/affinity.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/affinity.cpp b/src/affinity.cpp index 36030c486..00e499ccf 100644 --- a/src/affinity.cpp +++ b/src/affinity.cpp @@ -30,7 +30,13 @@ #include #include "assert.hpp" +#ifndef BF_OPENMP +#define BF_OPENMP 1 +#endif + +#if BF_OPENMP == 1 #include +#endif #include //#include @@ -73,6 +79,7 @@ BFstatus bfAffinitySetCore(int core) { #endif } BFstatus bfAffinityGetCore(int* core) { +#if defined __linux__ && __linux__ BF_ASSERT(core, BF_STATUS_INVALID_POINTER); pthread_t tid = pthread_self(); cpu_set_t cpuset; @@ -95,9 +102,14 @@ BFstatus bfAffinityGetCore(int* core) { } // No cores are set! (Not sure if this is possible) return BF_STATUS_INVALID_STATE; +#else +#warning CPU core binding/affinity not supported on this OS + return BF_STATUS_UNSUPPORTED; +#endif } BFstatus bfAffinitySetOpenMPCores(BFsize nthread, const int* thread_cores) { +#if BF_OPENMP == 1 int host_core = -1; // TODO: Check these for errors bfAffinityGetCore(&host_core); @@ -109,4 +121,8 @@ BFstatus bfAffinitySetOpenMPCores(BFsize nthread, bfAffinitySetCore(thread_cores[tid]); } return bfAffinitySetCore(host_core); +#else +#warning CPU core binding/affinity not supported on this OS + return BF_STATUS_UNSUPPORTED; +#endif } From c6a6ad125295e3fbbc2f1745eaca29e04e7453d9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 09:57:51 -0600 Subject: [PATCH 0148/1155] Will this work? --- config.mk.in | 5 +++-- src/Makefile.in | 7 ++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/config.mk.in b/config.mk.in index a8ed1d807..bedcb1880 100644 --- a/config.mk.in +++ b/config.mk.in @@ -17,8 +17,9 @@ else endif -PREFIX_DIR = @prefix@ -INSTALL_LIB_DIR = @LIBDIR@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +INSTALL_LIB_DIR = @libdir@ INSTALL_INC_DIR = @includedir@ BIFROST_NAME = bifrost diff --git a/src/Makefile.in b/src/Makefile.in index 8d9f2307d..dcf82fad0 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -144,12 +144,17 @@ else CUDA_DEVICE_LINK_OBJ = endif +WLFLAGS ?= $(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) +ifeq ($(OS),Linux) + WLFLAGS = --version-script=$(LIBBIFROST_VERSION_FILE),$(WLFLAGS) +endif + # Note: $(LIB) must go at after OBJS $(LIBBIFROST_SO): $(LIBBIFROST_OBJS) $(LIBBIFROST_VERSION_FILE) $(CUDA_DEVICE_LINK_OBJ) $(CLEAR_LINE) @echo -n "Linking $(LIBBIFROST_SO_NAME)\r" mkdir -p $(LIB_DIR) - $(LINKER) $(SHARED_FLAG) -Wl,--version-script=$(LIBBIFROST_VERSION_FILE),$(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) -o $@ $(LIBBIFROST_OBJS) $(CUDA_DEVICE_LINK_OBJ) $(LIB) $(LDFLAGS) + $(LINKER) $(SHARED_FLAG) -Wl,$(WLFLAGS) -o $@ $(LIBBIFROST_OBJS) $(CUDA_DEVICE_LINK_OBJ) $(LIB) $(LDFLAGS) ln -s -f $(LIBBIFROST_SO_NAME) $(LIBBIFROST_SO_STEM).$(LIBBIFROST_MAJOR) ln -s -f $(LIBBIFROST_SO_NAME) $(LIBBIFROST_SO_STEM) $(CLEAR_LINE) From f70df6679302beab1c2b5dc9876fbfc357e6b132 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 10:55:23 -0600 Subject: [PATCH 0149/1155] Worked on bringing affinity to mac. --- src/affinity.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 5 deletions(-) diff --git a/src/affinity.cpp b/src/affinity.cpp index 00e499ccf..a547f0ebc 100644 --- a/src/affinity.cpp +++ b/src/affinity.cpp @@ -43,9 +43,77 @@ #include #include +#if defined __APPLE__ && __APPLE__ + +// Based on information from: +// http://www.hybridkernel.com/2015/01/18/binding_threads_to_cores_osx.html + +#include +#include +#include +#include +#include + +typedef struct cpu_set { + uint32_t count; +} cpu_set_t; + +static inline void +CPU_ZERO(cpu_set_t *cs) { cs->count = 0; } + +static inline void +CPU_SET(int num, cpu_set_t *cs) { cs->count |= (1 << num); } + +static inline int +CPU_ISSET(int num, cpu_set_t *cs) { return (cs->count & (1 << num)); } + +static inline int +CPU_COUNT(cpu_set_t *cs) { + int count = 0; + for(int i=0; i<8*sizeof(cpu_set_t); i++) { + count += CPU_ISSET(i, cs); + } + return count; +} + +int pthread_getaffinity_np(pthread_t thread, + size_t cpu_size, + cpu_set_t *cpu_set) { + thread_port_t mach_thread; + mach_msg_type_number_t count; + boolean_t get_default; + + thread_affinity_policy_data_t policy; + mach_thread = pthread_mach_thread_np(thread); + thread_policy_get(mach_thread, THREAD_AFFINITY_POLICY, + (thread_policy_t)&policy, &count, + &get_default); + + cpu_set->count |= (1<<(policy.affinity_tag)); + return 0; +} + +int pthread_setaffinity_np(pthread_t thread, + size_t cpu_size, + cpu_set_t *cpu_set) { + thread_port_t mach_thread; + int core = 0; + + for (core=0; core<8*cpu_size; core++) { + if (CPU_ISSET(core, cpu_set)) break; + } + thread_affinity_policy_data_t policy = { core }; + mach_thread = pthread_mach_thread_np(thread); + thread_policy_set(mach_thread, THREAD_AFFINITY_POLICY, + (thread_policy_t)&policy, 1); + return 0; +} + +#endif + // Note: Pass core_id = -1 to unbind BFstatus bfAffinitySetCore(int core) { -#if defined __linux__ && __linux__ +#if (defined __linux__ && __linux__) || (defined __APPLE__ && __APPLE__) // Check for valid core int ncore = sysconf(_SC_NPROCESSORS_ONLN); BF_ASSERT(core >= -1 && core < ncore, BF_STATUS_INVALID_ARGUMENT); @@ -75,11 +143,11 @@ BFstatus bfAffinitySetCore(int core) { } #else #warning CPU core binding/affinity not supported on this OS - return BF_STATUS_UNSUPPORTED; + return BF_STATUS_UNSUPPORTED; #endif } BFstatus bfAffinityGetCore(int* core) { -#if defined __linux__ && __linux__ +#if (defined __linux__ && __linux__) || (defined __APPLE__ && __APPLE__) BF_ASSERT(core, BF_STATUS_INVALID_POINTER); pthread_t tid = pthread_self(); cpu_set_t cpuset; @@ -104,7 +172,7 @@ BFstatus bfAffinityGetCore(int* core) { return BF_STATUS_INVALID_STATE; #else #warning CPU core binding/affinity not supported on this OS - return BF_STATUS_UNSUPPORTED; + return BF_STATUS_UNSUPPORTED; #endif } BFstatus bfAffinitySetOpenMPCores(BFsize nthread, @@ -122,7 +190,6 @@ BFstatus bfAffinitySetOpenMPCores(BFsize nthread, } return bfAffinitySetCore(host_core); #else -#warning CPU core binding/affinity not supported on this OS return BF_STATUS_UNSUPPORTED; #endif } From 4dec0efdbdf7ff880bbae08daa73d340f8506845 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 11:32:59 -0600 Subject: [PATCH 0150/1155] Even more cleanup. --- .gitignore | 9 + Makefile => Makefile.in | 13 +- config/libtool.m4 | 8364 ++++++++++++++++++++++++++++++ config/ltoptions.m4 | 437 ++ config/ltsugar.m4 | 124 + config/ltversion.m4 | 23 + config/lt~obsolete.m4 | 99 + configure | 472 +- configure.ac | 37 +- python/{Makefile => Makefile.in} | 10 +- src/Makefile.in | 2 +- 11 files changed, 9457 insertions(+), 133 deletions(-) rename Makefile => Makefile.in (92%) create mode 100644 config/libtool.m4 create mode 100644 config/ltoptions.m4 create mode 100644 config/ltsugar.m4 create mode 100644 config/ltversion.m4 create mode 100644 config/lt~obsolete.m4 rename python/{Makefile => Makefile.in} (89%) diff --git a/.gitignore b/.gitignore index 74a87e23a..e66e6c010 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,15 @@ version.py test/data/ *.bin +# Local configuration +aclocal.m4 +autom4te.cache +config.status +config.mk +Makefile +src/Makefile +python/Makefile + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/Makefile b/Makefile.in similarity index 92% rename from Makefile rename to Makefile.in index bb75f0c09..7babc22ec 100644 --- a/Makefile +++ b/Makefile.in @@ -5,6 +5,9 @@ LIB_DIR = lib INC_DIR = src SRC_DIR = src +HAVE_PYTHON ?= @HAVE_PYTHON@ +HAVE_DOCKER ?= @HAVE_DOCKER@ + BIFROST_PYTHON_DIR = python all: libbifrost python @@ -34,30 +37,38 @@ uninstall: .PHONY: uninstall doc: $(INC_DIR)/bifrost/*.h Doxyfile - $(DOXYGEN) Doxyfile + @DX_DOXYGEN@ Doxyfile .PHONY: doc python: libbifrost +ifeq ($HAVE_PYTHON,1) $(MAKE) -C $(BIFROST_PYTHON_DIR) build +endif .PHONY: python #GPU Docker build IMAGE_NAME ?= ledatelescope/bifrost docker: +ifeq ($HAVE_DOCKER,1) docker build --pull -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile.gpu -t $(IMAGE_NAME) . +endif .PHONY: docker #GPU Docker prereq build # (To be used for testing new builds rapidly) IMAGE_NAME ?= ledatelescope/bifrost docker_prereq: +ifeq ($HAVE_DOCKER,1) docker build --pull -t $(IMAGE_NAME)_prereq:$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile_prereq.gpu -t $(IMAGE_NAME)_prereq . +endif .PHONY: docker_prereq #CPU-only Docker build IMAGE_NAME ?= ledatelescope/bifrost docker-cpu: +ifeq ($HAVE_DOCKER,1) docker build --pull -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile.cpu -t $(IMAGE_NAME) . +endif .PHONY: docker # TODO: Consider adding a mode 'develop=1' that makes symlinks instead of copying diff --git a/config/libtool.m4 b/config/libtool.m4 new file mode 100644 index 000000000..92060119f --- /dev/null +++ b/config/libtool.m4 @@ -0,0 +1,8364 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) + case ${MACOSX_DEPLOYMENT_TARGET},$host in + 10.[[012]],*|,*powerpc*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/config/ltoptions.m4 b/config/ltoptions.m4 new file mode 100644 index 000000000..94b082976 --- /dev/null +++ b/config/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/config/ltsugar.m4 b/config/ltsugar.m4 new file mode 100644 index 000000000..48bc9344a --- /dev/null +++ b/config/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/config/ltversion.m4 b/config/ltversion.m4 new file mode 100644 index 000000000..fa04b52a3 --- /dev/null +++ b/config/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/config/lt~obsolete.m4 b/config/lt~obsolete.m4 new file mode 100644 index 000000000..c6b26f88f --- /dev/null +++ b/config/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/configure b/configure index 6fe76436b..7942b9038 100755 --- a/configure +++ b/configure @@ -670,11 +670,12 @@ DX_ENV DX_DOCDIR DX_CONFIG DX_PROJECT +HAVE_DOCKER +DOCKER PYINSTALLFLAGS PYBUILDFLAGS -PYTHON_LIB -PYTHON_INCLUDE_DIR -PYTHON_BIN +HAVE_PYTHON +PYTHON GPU_ARCHS NVCCFLAGS CUOBJDUMP @@ -801,8 +802,10 @@ enable_debug enable_trace enable_native_arch enable_cuda_debug +with_python with_pybuild_flags with_pyinstall_flags +with_docker enable_doxygen_doc enable_doxygen_dot enable_doxygen_man @@ -832,6 +835,8 @@ CTAGS NVCC NVPRUNE CUOBJDUMP +PYTHON +DOCKER DOXYGEN_PAPER_SIZE' @@ -1491,8 +1496,10 @@ Optional Packages: --with-gpu-archs=... default GPU architectures (default='35 61') --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) + --with-python=[PATH] absolute path to python executable --with-pybuild-flags build flags for python (default='') --with-pyinstall-flags install flags for python (default='') + --with-docker=[PATH] absolute path to docker executable Some influential environment variables: CC C compiler command @@ -1512,6 +1519,8 @@ Some influential environment variables: NVCC Absolute path to nvcc executable NVPRUNE Absolute path to nvprune executable CUOBJDUMP Absolute path to cuobjdump executable + PYTHON Absolute path to python executable + DOCKER Absolute path to docker executable DOXYGEN_PAPER_SIZE a4wide (default), a4, letter, legal or executive @@ -2746,9 +2755,13 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + : ${CXXFLAGS="-O3 -Wall -pedantic"} +# # Programs +# + case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 @@ -8120,6 +8133,10 @@ _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= @@ -16050,6 +16067,75 @@ fi test -n "$AWK" && break done +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: @@ -16334,7 +16420,10 @@ fi SO_EXT=$shrext_cmds +# # Features +# + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : @@ -17255,7 +17344,10 @@ $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# # Extras +# + # Check whether --with-cuda_home was given. if test "${with_cuda_home+set}" = set; then : @@ -17929,31 +18021,61 @@ if test x$enable_cuda_debug != xno; then : NVCCFLAGS="$NVCCFLAGS -G" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build information" >&5 -$as_echo_n "checking for python build information... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } -for python in python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python; do -for ac_prog in $python -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 +# +# Python +# + + + + + + + + + + + + if test -z "$PYTHON"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +$as_echo_n "checking whether python executable path has been provided... " >&6; } + +# Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; + if test "$withval" != yes && test "$withval" != no; then : + + PYTHON="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } + +else + + PYTHON="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PYTHON_BIN+:} false; then : +if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$PYTHON_BIN"; then - ac_cv_prog_PYTHON_BIN="$PYTHON_BIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PYTHON_BIN="$ac_prog" + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -17961,138 +18083,95 @@ done done IFS=$as_save_IFS + ;; +esac fi -fi -PYTHON_BIN=$ac_cv_prog_PYTHON_BIN -if test -n "$PYTHON_BIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_BIN" >&5 -$as_echo "$PYTHON_BIN" >&6; } +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$PYTHON_BIN" && break -done - -ax_python_bin=$PYTHON_BIN -if test x$ax_python_bin != x; then - as_ac_Lib=`$as_echo "ac_cv_lib_$ax_python_bin''_main" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_python_bin" >&5 -$as_echo_n "checking for main in -l$ax_python_bin... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$ax_python_bin $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - ax_python_lib=$ax_python_bin + else - ax_python_lib=no -fi - if test x$ax_python_lib == xno; then - as_ac_Lib=`$as_echo "ac_cv_lib_${ax_python_bin}m''_main" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${ax_python_bin}m" >&5 -$as_echo_n "checking for main in -l${ax_python_bin}m... " >&6; } -if eval \${$as_ac_Lib+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ax_python_bin}m $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + ;; +esac fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - ax_python_lib=${ax_python_bin}m +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } else - ax_python_lib=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - fi - if test x$ax_python_lib != xno; then - ax_python_header=`$ax_python_bin -c "from distutils.sysconfig import *; print(get_config_var('CONFINCLUDEPY'))"` - if test x$ax_python_header != x; then - break; - fi - fi -fi -done -if test x$ax_python_bin = x; then - ax_python_bin=no -fi -if test x$ax_python_header = x; then - ax_python_header=no + + fi -if test x$ax_python_lib = x; then - ax_python_lib=no + + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: results of the Python check:" >&5 -$as_echo " results of the Python check:" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Binary: $ax_python_bin" >&5 -$as_echo " Binary: $ax_python_bin" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Library: $ax_python_lib" >&5 -$as_echo " Library: $ax_python_lib" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Include Dir: $ax_python_header" >&5 -$as_echo " Include Dir: $ax_python_header" >&6; } -if test x$ax_python_header != xno; then - PYTHON_INCLUDE_DIR=$ax_python_header -fi -if test x$ax_python_lib != xno; then - PYTHON_LIB=$ax_python_lib -fi +if test x${PYTHON} != x; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +$as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } + if ! test $(PYTHON) -c "import ctypesgen"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +$as_echo "$as_me: WARNING: python module will not be built" >&2;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_PYTHON=1 + +fi +fi + # Check whether --with-pybuild_flags was given. if test "${with_pybuild_flags+set}" = set; then : @@ -18111,7 +18190,150 @@ fi PYINSTALLFLAGS=$with_pyinstall_flags +# +# Docker +# + + + + + + + + + + + + if test -z "$DOCKER"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 +$as_echo_n "checking whether docker executable path has been provided... " >&6; } + +# Check whether --with-docker was given. +if test "${with_docker+set}" = set; then : + withval=$with_docker; + if test "$withval" != yes && test "$withval" != no; then : + + DOCKER="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } + +else + + DOCKER="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "docker", so it can be a program name with args. +set dummy docker; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOCKER+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DOCKER in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DOCKER=$ac_cv_path_DOCKER +if test -n "$DOCKER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "docker", so it can be a program name with args. +set dummy docker; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOCKER+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DOCKER in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DOCKER=$ac_cv_path_DOCKER +if test -n "$DOCKER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + +if test x${PYTHON} != x; then : + HAVE_DOCKER=1 + +fi + +# # Documentation +# + @@ -20066,7 +20288,7 @@ DX_RULES="${DX_SNIPPET_doc}" CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -ac_config_files="$ac_config_files config.mk src/Makefile" +ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile" cat >confcache <<\_ACEOF @@ -21167,7 +21389,9 @@ do case $ac_config_target in "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "config.mk") CONFIG_FILES="$CONFIG_FILES config.mk" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac diff --git a/configure.ac b/configure.ac index 9e8a65f1d..b46deb372 100644 --- a/configure.ac +++ b/configure.ac @@ -3,14 +3,19 @@ AC_LANG(C++) AC_CONFIG_SRCDIR([src/cuda.cpp]) AC_CONFIG_AUX_DIR([config]) +AC_CONFIG_MACRO_DIR([config]) : ${CXXFLAGS="-O3 -Wall -pedantic"} +# # Programs +# + LT_INIT AC_PROG_CC AC_PROG_CXX AC_PROG_AWK +AC_PROG_SED AC_PROG_INSTALL AC_PROG_LIBTOOL AC_PROG_LN_S @@ -27,7 +32,10 @@ AS_IF([! ${CTAGS} --version | grep -q Exuberant], AC_SUBST(SO_EXT, $shrext_cmds) +# # Features +# + AC_C_INLINE AX_CXX_COMPILE_STDCXX(11, noext, mandatory) AC_CHECK_FUNCS([memset]) @@ -72,7 +80,10 @@ AC_COMPILE_IFELSE([#include AC_SUBST(HAVE_MMSG, 1)], [AC_MSG_RESULT([no])]) +# # Extras +# + AC_ARG_WITH([cuda_home], [AS_HELP_STRING([--with-cuda-home], [CUDA install path (default=/usr/local/cuda)])], @@ -189,7 +200,18 @@ AC_ARG_ENABLE([cuda_debug], AS_IF([test x$enable_cuda_debug != xno], [NVCCFLAGS="$NVCCFLAGS -G"]) -AX_PYTHON +# +# Python +# + +AX_WITH_PROG(PYTHON, python) +AS_IF([test x${PYTHON} != x], + [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) + AS_IF([! test $(PYTHON) -c "import ctypesgen"], + [AC_MSG_RESULT([no]) + AC_MSG_WARN([python module will not be built])], + [AC_MSG_RESULT([yes]) + AC_SUBST(HAVE_PYTHON, 1)])]) AC_ARG_WITH([pybuild_flags], [AS_HELP_STRING([--with-pybuild-flags], @@ -205,7 +227,18 @@ AC_ARG_WITH([pyinstall_flags], []) AC_SUBST(PYINSTALLFLAGS, $with_pyinstall_flags) +# +# Docker +# + +AX_WITH_PROG(DOCKER, docker) +AS_IF([test x${PYTHON} != x], + [AC_SUBST(HAVE_DOCKER, 1)]) + +# # Documentation +# + DX_DOT_FEATURE(OFF) DX_HTML_FEATURE(ON) DX_CHM_FEATURE(OFF) @@ -220,6 +253,6 @@ DX_INIT_DOXYGEN([bifrost]) CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -AC_CONFIG_FILES([config.mk src/Makefile]) +AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile]) AC_OUTPUT diff --git a/python/Makefile b/python/Makefile.in similarity index 89% rename from python/Makefile rename to python/Makefile.in index 6f41494ef..1e242de85 100644 --- a/python/Makefile +++ b/python/Makefile.in @@ -21,7 +21,7 @@ $(BIFROST_PYTHON_VERSION_FILE): ../config.mk @echo "__version__ = \"$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR).$(LIBBIFROST_PATCH)\"" > $@ define run_ctypesgen - python -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -l$1 -I$2 $^ -o $@ + @PYTHON@ -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -l$1 -I$2 $^ -o $@ # WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p) sed -i 's/POINTER(c_char)/c_char_p/g' $@ # WAR for a buggy WAR in ctypesgen that breaks type checking and auto-byref functionality @@ -47,19 +47,19 @@ $(BIFROST_PYTHON_BINDINGS_FILE): $(INC_DIR)/bifrost/*.h $(call run_ctypesgen,$(BIFROST_NAME),$(INC_DIR)) build: bifrost/*.py Makefile $(BIFROST_PYTHON_VERSION_FILE) $(BIFROST_PYTHON_BINDINGS_FILE) $(PSRDADA_PYTHON_BINDINGS_FILE) - python setup.py build $(PYBUILDFLAGS) + @PYTHON@ setup.py build $(PYBUILDFLAGS) .PHONY: build install: build - python setup.py install $(PYINSTALLFLAGS) + @PYTHON@ setup.py install $(PYINSTALLFLAGS) .PHONY: install clean: - python setup.py clean --all + @PYTHON@ setup.py clean --all rm -f $(BIFROST_PYTHON_VERSION_FILE) rm -f $(BIFROST_PYTHON_BINDINGS_FILE) rm -f $(PSRDADA_PYTHON_BINDINGS_FILE) .PHONY: clean uninstall: - pip uninstall bifrost + @PYTHON@ -m pip uninstall bifrost diff --git a/src/Makefile.in b/src/Makefile.in index dcf82fad0..fb07d2d8f 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -110,7 +110,7 @@ $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h @echo -n "Generating $(LIBBIFROST_VERSION_FILE)\r" echo "VERS_$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) {" > $@ echo " global:" >> $@ - ctags -x --c-kinds=p $^ | awk '{print " " $$1 ";"}' >> $@ + @CTAGS@ -x --c-kinds=p $^ | awk '{print " " $$1 ";"}' >> $@ echo " local:" >> $@ echo " *;" >> $@ echo "};" >> $@ From a45e78f49348d407e6087389b7fe6e07c02366e4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 13:00:58 -0600 Subject: [PATCH 0151/1155] Switched some enables to disables and more cleanup. --- configure | 85 +++++++++++++++++++++++++++++++++------------------- configure.ac | 69 ++++++++++++++++++++++++++++-------------- 2 files changed, 100 insertions(+), 54 deletions(-) diff --git a/configure b/configure index 7942b9038..3a8cfe8c8 100755 --- a/configure +++ b/configure @@ -792,11 +792,11 @@ with_nvcc with_nvprune with_cuobjdump with_nvcc_flags +with_gpu_archs +with_shared_mem enable_numa enable_hwloc enable_vma -with_gpu_archs -with_shared_mem with_alignment enable_debug enable_trace @@ -1455,8 +1455,8 @@ Optional Features: optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-cuda disable cuda support (default=no) - --enable-numa enable NUMA support (default=yes) - --enable-hwloc enable hwloc support (default=yes) + --disable-numa disable NUMA support (default=no) + --disable-hwloc disable hwloc support (default=no) --enable-vma enable vma support (default=no) --enable-debug enable debugging mode (default=no) --enable-trace enable tracing mode for nvprof/nvvp (default=no) @@ -16421,7 +16421,7 @@ SO_EXT=$shrext_cmds # -# Features +# System/Compiler Features # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 @@ -17345,7 +17345,7 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # -# Extras +# CUDA # @@ -17786,9 +17786,35 @@ NVCCFLAGS=$with_nvcc_flags +# Check whether --with-gpu_archs was given. +if test "${with_gpu_archs+set}" = set; then : + withval=$with_gpu_archs; +else + with_gpu_archs='35 61' +fi + +GPU_ARCHS=$with_gpu_archs + + + +# Check whether --with-shared_mem was given. +if test "${with_shared_mem+set}" = set; then : + withval=$with_shared_mem; +else + with_shared_mem=16384 +fi + +if test x$HAVE_CUDA = x1; then : + NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem" +fi + +# +# NUMA +# + # Check whether --enable-numa was given. if test "${enable_numa+set}" = set; then : - enableval=$enable_numa; + enableval=$enable_numa; enable_numa=no else enable_numa=yes fi @@ -17837,9 +17863,13 @@ fi fi +# +# HWLOC +# + # Check whether --enable-hwloc was given. if test "${enable_hwloc+set}" = set; then : - enableval=$enable_hwloc; + enableval=$enable_hwloc; enable_hwloc=no else enable_hwloc=yes fi @@ -17888,9 +17918,13 @@ fi fi +# +# VMA +# + # Check whether --enable-vma was given. if test "${enable_vma+set}" = set; then : - enableval=$enable_vma; + enableval=$enable_vma; enable_vma=yes else enable_vma=no fi @@ -17939,28 +17973,9 @@ fi fi - -# Check whether --with-gpu_archs was given. -if test "${with_gpu_archs+set}" = set; then : - withval=$with_gpu_archs; -else - with_gpu_archs='35 61' -fi - -GPU_ARCHS=$with_gpu_archs - - - -# Check whether --with-shared_mem was given. -if test "${with_shared_mem+set}" = set; then : - withval=$with_shared_mem; -else - with_shared_mem=16384 -fi - -if test x$HAVE_CUDA = x1; then : - NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem" -fi +# +# Bifrost memory alignment +# # Check whether --with-alignment was given. @@ -17972,6 +17987,10 @@ fi CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" +# +# Bifrost Features +# + # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; enable_debug=yes @@ -20285,6 +20304,10 @@ DX_RULES="${DX_SNIPPET_doc}" #echo DX_ENV=$DX_ENV +# +# Linking flags +# + CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" diff --git a/configure.ac b/configure.ac index b46deb372..5d61ddd9f 100644 --- a/configure.ac +++ b/configure.ac @@ -33,7 +33,7 @@ AS_IF([! ${CTAGS} --version | grep -q Exuberant], AC_SUBST(SO_EXT, $shrext_cmds) # -# Features +# System/Compiler Features # AC_C_INLINE @@ -81,7 +81,7 @@ AC_COMPILE_IFELSE([#include [AC_MSG_RESULT([no])]) # -# Extras +# CUDA # AC_ARG_WITH([cuda_home], @@ -111,51 +111,66 @@ AC_ARG_WITH([nvcc_flags], [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) AC_SUBST(NVCCFLAGS, $with_nvcc_flags) +AC_ARG_WITH([gpu_archs], + [AS_HELP_STRING([--with-gpu-archs=...], + [default GPU architectures (default='35 61')])], + [], + [with_gpu_archs='35 61']) +AC_SUBST(GPU_ARCHS, $with_gpu_archs) + +AC_ARG_WITH([shared_mem], + [AS_HELP_STRING([--with-shared-mem=N], + [default GPU shared memory in bytes (default=16384)])], + [], + [with_shared_mem=16384]) +AS_IF([test x$HAVE_CUDA = x1], + [NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem"]) + +# +# NUMA +# AC_ARG_ENABLE([numa], - AS_HELP_STRING([--enable-numa], - [enable NUMA support (default=yes)]), - [], + AS_HELP_STRING([--disable-numa], + [disable NUMA support (default=no)]), + [enable_numa=no], [enable_numa=yes]) AS_IF([test x$enable_numa != xno], [AC_CHECK_LIB([numa], [numa_tonode_memory], [CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" LIBS="$LIBS -lnuma"])]) +# +# HWLOC +# + AC_ARG_ENABLE([hwloc], - AS_HELP_STRING([--enable-hwloc], - [enable hwloc support (default=yes)]), - [], + AS_HELP_STRING([--disable-hwloc], + [disable hwloc support (default=no)]), + [enable_hwloc=no], [enable_hwloc=yes]) AS_IF([test x$enable_hwloc != xno], [AC_CHECK_LIB([hwloc], [hwloc_topology_init], [CPPFLAGS="$CPPFLAGS -DBF_HWLOC_ENABLED=1" LIBS="$LIBS -lhwloc"])]) +# +# VMA +# + AC_ARG_ENABLE([vma], AS_HELP_STRING([--enable-vma], [enable vma support (default=no)]), - [], + [enable_vma=yes], [enable_vma=no]) AS_IF([test x$enable_vma != xno], [AC_CHECK_LIB([vma], [recvfrom_zcopy], [CPPFLAGS="$CPPFLAGS -DBF_VMA_ENABLED=1" LIBS="$LIBS -lvma"])]) -AC_ARG_WITH([gpu_archs], - [AS_HELP_STRING([--with-gpu-archs=...], - [default GPU architectures (default='35 61')])], - [], - [with_gpu_archs='35 61']) -AC_SUBST(GPU_ARCHS, $with_gpu_archs) - -AC_ARG_WITH([shared_mem], - [AS_HELP_STRING([--with-shared-mem=N], - [default GPU shared memory in bytes (default=16384)])], - [], - [with_shared_mem=16384]) -AS_IF([test x$HAVE_CUDA = x1], - [NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem"]) +# +# Bifrost memory alignment +# AC_ARG_WITH([alignment], [AS_HELP_STRING([--with-alignment=N], @@ -164,6 +179,10 @@ AC_ARG_WITH([alignment], [with_alignment=4096]) CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" +# +# Bifrost Features +# + AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], [enable debugging mode (default=no)])], @@ -250,6 +269,10 @@ DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) DX_INIT_DOXYGEN([bifrost]) +# +# Linking flags +# + CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" From 7fe091f7095a7b8204e93cdd33f15a4d064530ee Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 15:15:43 -0600 Subject: [PATCH 0152/1155] More MacOS work. --- configure | 22 ----------- configure.ac | 10 ----- src/Makefile.in | 6 +-- src/Socket.hpp | 91 +++++++++++++++++++++++++++++++++++++++++++- src/udp_capture.cpp | 12 +++++- src/udp_socket.cpp | 4 +- src/udp_transmit.cpp | 9 +++-- 7 files changed, 107 insertions(+), 47 deletions(-) diff --git a/configure b/configure index 3a8cfe8c8..397e41f16 100755 --- a/configure +++ b/configure @@ -683,7 +683,6 @@ NVPRUNE NVCC HAVE_CUDA CUDA_HOME -HAVE_MMSG LIBOBJS HAVE_CXX11 SO_EXT @@ -17323,27 +17322,6 @@ _ACEOF esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sys/socket.h supports recvmmsg" >&5 -$as_echo_n "checking if sys/socket.h supports recvmmsg... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - int main(void) { - struct mmsghdr *mmsg = NULL; - return 0; - } -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - HAVE_MMSG=1 - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - # # CUDA # diff --git a/configure.ac b/configure.ac index 5d61ddd9f..118c26779 100644 --- a/configure.ac +++ b/configure.ac @@ -70,16 +70,6 @@ AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_UINT8_T -AC_MSG_CHECKING([if sys/socket.h supports recvmmsg]) -AC_COMPILE_IFELSE([#include - int main(void) { - struct mmsghdr *mmsg = NULL; - return 0; - }], - [AC_MSG_RESULT([yes]) - AC_SUBST(HAVE_MMSG, 1)], - [AC_MSG_RESULT([no])]) - # # CUDA # diff --git a/src/Makefile.in b/src/Makefile.in index fb07d2d8f..c4f92a8f7 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -15,7 +15,6 @@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ HAVE_CUDA ?= @HAVE_CUDA@ -HAVE_MMSG ?= @HAVE_MMSG@ GPU_ARCHS ?= @GPU_ARCHS@ @@ -36,14 +35,11 @@ LIBBIFROST_OBJS = \ array.o \ unpack.o \ quantize.o \ - proclog.o -ifeq (HAVE_MMSG,1) - LIBBIFROST_OBJS += \ + proclog.o \ address.o \ udp_socket.o \ udp_capture.o \ udp_transmit.o -endif ifeq (HAVE_CUDA,1) # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ diff --git a/src/Socket.hpp b/src/Socket.hpp index da145e898..4b694c264 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -126,6 +126,81 @@ client.send/recv_block/packet(...); #include //#include +#if defined __APPLE__ && __APPLE__ + +#include +#include + +#define SOCK_NONBLOCK O_NONBLOCK + +inline static int accept4(int sockfd, + struct sockaddr *addr, + socklen_t *addrlen, + int flags) { + return ::accept(sockfd, addr, addrlen); +} + +inline static sa_family_t get_family(int sockfd) { + int ret; + sockaddr addr; + socklen_t len; + ret = ::getsockname(sockfd, &addr, &len); + if(ret<0) { + return AF_UNSPEC; + } + + sockaddr_in* sa = reinterpret_cast (&addr); + return sa->sin_family; +} + +inline static int get_mtu(int sockfd) { + ifreq ifr; + int mtu = 0; + if( ::ioctl(sockfd, SIOCGIFMTU, &ifr) != -1) { + mtu = ifr.ifr_mtu; + } + return mtu; +} + +typedef struct mmsghdr { + struct msghdr msg_hdr; /* Message header */ + unsigned int msg_len; /* Number of bytes transmitted */ +} mmsghdr; + +// TODO: What about recvmsg_x? +inline static int recvmmsg(int sockfd, + struct mmsghdr *msgvec, + unsigned int vlen, + int flags, + struct timespec *timeout) { + int count = 0; + int recv; + for(int i=0; i 0) { + count++; + } + } + return count; +} + +// TODO: What about sendmsg_x? +inline static int sendmmsg(int sockfd, + struct mmsghdr *msgvec, + unsigned int vlen, + int flags) { + int count = 0; + int sent; + for(int i=0; iget_option(IP_MTU, IPPROTO_IP); +#endif } template inline void set_option(int optname, T value, int level=SOL_SOCKET) { @@ -429,7 +508,11 @@ std::string Socket::address_string(sockaddr_storage addr) { int Socket::discover_mtu(sockaddr_storage remote_address) { Socket s(SOCK_DGRAM); s.connect(remote_address); +#if defined __APPLE__ && __APPLE__ + return ::get_mtu(s._fd); +#else return s.get_option(IP_MTU, IPPROTO_IP); +#endif } void Socket::bind(sockaddr_storage local_address, int max_conn_queue) { @@ -820,7 +903,11 @@ void Socket::swap(Socket& s) { } Socket::Socket(int fd, ManageTag ) : _fd(fd) { _type = this->get_option(SO_TYPE); +#if defined __APPLE__ && __APPLE__ + _family = get_family(fd); +#else _family = this->get_option(SO_DOMAIN); +#endif if( this->get_option(SO_ACCEPTCONN) ) { _mode = Socket::MODE_LISTENING; } diff --git a/src/udp_capture.cpp b/src/udp_capture.cpp index ce393cd3b..87ca89133 100644 --- a/src/udp_capture.cpp +++ b/src/udp_capture.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -70,6 +70,14 @@ enum { JUMBO_FRAME_SIZE = 9000 }; +#if defined __APPLE__ && __APPLE__ + +#include + +#define be64toh(x) OSSwapBigToHostInt64(x) + +#endif + template inline T atomic_add_and_fetch(T* dst, T val) { return __sync_add_and_fetch(dst, val); // GCC builtin @@ -572,7 +580,7 @@ class BFudpcapture_impl { if( payload_size == -1 ) { payload_size = _payload_size; } - return _nseq_per_buf * _nsrc * payload_size * BF_UNPACK_FACTOR; + return (size_t) _nseq_per_buf * _nsrc * payload_size * BF_UNPACK_FACTOR; } inline void reserve_buf() { _buf_ngood_bytes.push(0); diff --git a/src/udp_socket.cpp b/src/udp_socket.cpp index 4af7babbe..c07410e09 100644 --- a/src/udp_socket.cpp +++ b/src/udp_socket.cpp @@ -32,12 +32,12 @@ #include struct BFudpsocket_impl : public Socket { - BFudpsocket_impl() : Socket(SOCK_DGRAM) {} + BFudpsocket_impl() : Socket(BF_SOCK_DGRAM) {} }; BFstatus bfUdpSocketCreate(BFudpsocket* obj) { BF_ASSERT(obj, BF_STATUS_INVALID_POINTER); - BF_TRY_RETURN_ELSE(*obj = (BFudpsocket)new BFudpsocket_impl(),//BFudpsocket_impl::SOCK_DGRAM), + BF_TRY_RETURN_ELSE(*obj = (BFudpsocket)new BFudpsocket_impl(),//BFudpsocket_impl::BF_SOCK_DGRAM), *obj = 0); } BFstatus bfUdpSocketDestroy(BFudpsocket obj) { diff --git a/src/udp_transmit.cpp b/src/udp_transmit.cpp index a470c8e76..ef6ad9adb 100644 --- a/src/udp_transmit.cpp +++ b/src/udp_transmit.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2017, The Bifrost Authors. All rights reserved. - * Copyright (c) 2017, The University of New Mexico. All rights reserved. + * Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. + * Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,6 +31,7 @@ #include #include #include "proclog.hpp" +#include "Socket.hpp" #include // For ntohs #include // For recvfrom @@ -125,10 +126,10 @@ class UDPTransmitThread : public BoundThread { ssize_t nsent = sendmmsg(_fd, packets, npackets, 0); if( nsent == -1 ) { _stats.ninvalid += npackets; - _stats.ninvalid_bytes += npackets * packets->msg_len; + _stats.ninvalid_bytes += (size_t) npackets * packets->msg_len; } else { _stats.nvalid += npackets; - _stats.nvalid_bytes += npackets * packets->msg_len; + _stats.nvalid_bytes += (size_t) npackets * packets->msg_len; } return nsent; } From beffd6cf6d80f5da249ae99d39842420ed46f847 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Oct 2021 07:47:06 -0600 Subject: [PATCH 0153/1155] Try an update. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 9d17b8cad..0b8d6df8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ services: addons: apt: + update: true packages: - build-essential - curl From fb2877614e22745770d16ac252efcf7f44ccfae8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Oct 2021 07:49:48 -0600 Subject: [PATCH 0154/1155] Try to make the certificate update explicit. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 0b8d6df8b..5ec1d5997 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,7 @@ addons: update: true packages: - build-essential + - ca-certificates - curl - git - pkg-config From 4810b134d66f6930930722c21db755560ef432f7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Oct 2021 07:55:34 -0600 Subject: [PATCH 0155/1155] Try Bionic. --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 5ec1d5997..d449142ab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ sudo: required +dist: bionic + language: python python: From 916c49c1bea9eb3995f6249de4c091280a17e00a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Oct 2021 08:02:29 -0600 Subject: [PATCH 0156/1155] Reorder linking flags. --- src/Makefile.in | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index c4f92a8f7..fef9fd32e 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -140,10 +140,11 @@ else CUDA_DEVICE_LINK_OBJ = endif -WLFLAGS ?= $(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) +WLFLAGS ?= ifeq ($(OS),Linux) - WLFLAGS = --version-script=$(LIBBIFROST_VERSION_FILE),$(WLFLAGS) + WLFLAGS += --version-script=$(LIBBIFROST_VERSION_FILE) endif +WLFLAGS += $(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) # Note: $(LIB) must go at after OBJS $(LIBBIFROST_SO): $(LIBBIFROST_OBJS) $(LIBBIFROST_VERSION_FILE) $(CUDA_DEVICE_LINK_OBJ) From b14b6b20763ccf42138bf3bb79a79cbf9ea03636 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Oct 2021 08:45:34 -0600 Subject: [PATCH 0157/1155] Revert. --- src/Makefile.in | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index fef9fd32e..675fed232 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -140,11 +140,10 @@ else CUDA_DEVICE_LINK_OBJ = endif -WLFLAGS ?= +WLFLAGS ?= $(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) ifeq ($(OS),Linux) - WLFLAGS += --version-script=$(LIBBIFROST_VERSION_FILE) + WLFLAGS := --version-script=$(LIBBIFROST_VERSION_FILE),$(WLFLAGS) endif -WLFLAGS += $(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) # Note: $(LIB) must go at after OBJS $(LIBBIFROST_SO): $(LIBBIFROST_OBJS) $(LIBBIFROST_VERSION_FILE) $(CUDA_DEVICE_LINK_OBJ) From 17c6c1dc42a8324c7efc7f8bef475abe51ccfb3e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 17:17:37 -0600 Subject: [PATCH 0158/1155] A lot of fixes to configure.ac. --- config/cuda.m4 | 61 +++ configure | 1193 +++++++++++++++++++++++++---------------------- configure.ac | 43 +- src/Makefile.in | 10 +- 4 files changed, 719 insertions(+), 588 deletions(-) create mode 100644 config/cuda.m4 diff --git a/config/cuda.m4 b/config/cuda.m4 new file mode 100644 index 000000000..4f4cbff1d --- /dev/null +++ b/config/cuda.m4 @@ -0,0 +1,61 @@ +AC_DEFUN([AX_CHECK_CUDA], +[ + AC_PROVIDE([AX_CHECK_CUDA]) + AC_ARG_WITH([cuda_home], + [AS_HELP_STRING([--with-cuda-home], + [CUDA install path (default=/usr/local/cuda)])], + [], + [with_cuda_home=/usr/local/cuda]) + AC_SUBST(CUDA_HOME, $with_cuda_home) + + AC_ARG_ENABLE([cuda], + [AS_HELP_STRING([--disable-cuda], + [disable cuda support (default=no)])], + [enable_cuda=no], + [enable_cuda=yes]) + + AC_SUBST([HAVE_CUDA], [0]) + if test "$enable_cuda" != "no"; then + AC_SUBST([HAVE_CUDA], [1]) + + AC_PATH_PROG(NVCC, nvcc, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) + AC_PATH_PROG(NVPRUNE, nvprune, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) + AC_PATH_PROG(CUOBJDUMP, cuobjdump, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) + fi + + if test "$HAVE_CUDA" = "1"; then + AC_MSG_CHECKING([for a working CUDA installation]) + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include ]], + [[cudaMalloc(0, 0);]])], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_SUBST([HAVE_CUDA], [0])]) + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + fi + + if test "$HAVE_CUDA" = "1"; then + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -lculibos -lnvToolsExt" + fi + + AC_ARG_WITH([nvcc_flags], + [AS_HELP_STRING([--with-nvcc-flags], + [flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"')])], + [], + [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) + AC_SUBST(NVCCFLAGS, $with_nvcc_flags) +]) + diff --git a/configure b/configure index 397e41f16..c18183a95 100755 --- a/configure +++ b/configure @@ -683,6 +683,7 @@ NVPRUNE NVCC HAVE_CUDA CUDA_HOME +HAVE_OPENMP LIBOBJS HAVE_CXX11 SO_EXT @@ -754,6 +755,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -787,9 +789,6 @@ enable_libtool_lock with_ctags with_cuda_home enable_cuda -with_nvcc -with_nvprune -with_cuobjdump with_nvcc_flags with_gpu_archs with_shared_mem @@ -831,9 +830,6 @@ LT_SYS_LIBRARY_PATH CPP CXXCPP CTAGS -NVCC -NVPRUNE -CUOBJDUMP PYTHON DOCKER DOXYGEN_PAPER_SIZE' @@ -875,6 +871,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1127,6 +1124,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1264,7 +1270,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1417,6 +1423,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1454,7 +1461,7 @@ Optional Features: optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-cuda disable cuda support (default=no) - --disable-numa disable NUMA support (default=no) + --disable-numa disable numa support (default=no) --disable-hwloc disable hwloc support (default=no) --enable-vma enable vma support (default=no) --enable-debug enable debugging mode (default=no) @@ -1486,10 +1493,6 @@ Optional Packages: compiler's sysroot if not specified). --with-ctags=[PATH] absolute path to ctags executable --with-cuda-home CUDA install path (default=/usr/local/cuda) - --with-nvcc=[PATH] absolute path to nvcc executable - --with-nvprune=[PATH] absolute path to nvprune executable - --with-cuobjdump=[PATH] - absolute path to cuobjdump executable --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"') --with-gpu-archs=... default GPU architectures (default='35 61') @@ -1515,9 +1518,6 @@ Some influential environment variables: CPP C preprocessor CXXCPP C++ preprocessor CTAGS Absolute path to ctags executable - NVCC Absolute path to nvcc executable - NVPRUNE Absolute path to nvprune executable - CUOBJDUMP Absolute path to cuobjdump executable PYTHON Absolute path to python executable DOCKER Absolute path to docker executable DOXYGEN_PAPER_SIZE @@ -16472,21 +16472,12 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no - - - - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : $as_echo_n "(cached) " >&6 else - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16776,183 +16767,499 @@ namespace cxx11 _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : - eval $cachevar=yes + ax_cv_cxx_compile_cxx11=yes else - eval $cachevar=no + ax_cv_cxx_compile_cxx11=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CXX="$ac_save_CXX" fi -eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$ax_cxx_compile_cxx11_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX11=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -$as_echo "$as_me: No compiler with C++11 support was found" >&6;} - else - HAVE_CXX11=1 -$as_echo "#define HAVE_CXX11 1" >>confdefs.h - fi + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -for ac_func in memset -do : - ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMSET 1 -_ACEOF +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. -fi -done +#ifndef __cplusplus -for ac_func in rint -do : - ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_RINT 1 -_ACEOF +#error "This is not a C++ compiler" -fi -done +#elif __cplusplus < 201103L -for ac_func in socket -do : - ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SOCKET 1 -_ACEOF +#error "This is not a C++11 compiler" -fi -done +#else -for ac_func in sqrt -do : - ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQRT 1 -_ACEOF +namespace cxx11 +{ -fi -done + namespace test_static_assert + { -for ac_func in strerror -do : - ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRERROR 1 -_ACEOF + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; -fi -done + } + namespace test_final_override + { -for ac_header in arpa/inet.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ARPA_INET_H 1 -_ACEOF + struct Base + { + virtual void f() {} + }; -fi + struct Derived : public Base + { + virtual void f() override {} + }; -done + } -for ac_header in netdb.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETDB_H 1 -_ACEOF + namespace test_double_right_angle_brackets + { -fi + template < typename T > + struct check {}; -done + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; -for ac_header in netinet/in.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETINET_IN_H 1 -_ACEOF + } -fi + namespace test_decltype + { -done + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } -for ac_header in sys/file.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_FILE_H 1 -_ACEOF + } -fi + namespace test_type_deduction + { -done + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; -for ac_header in sys/ioctl.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_IOCTL_H 1 -_ACEOF + template < typename T > + struct is_same + { + static const bool value = true; + }; -fi + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } -done + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } -for ac_header in sys/socket.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_SOCKET_H 1 -_ACEOF + } -fi + namespace test_noexcept + { -done + int f() { return 0; } + int g() noexcept { return 0; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX11=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +$as_echo "#define HAVE_CXX11 1" >>confdefs.h + + fi + + + +for ac_func in memset +do : + ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMSET 1 +_ACEOF + +fi +done + +for ac_func in rint +do : + ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RINT 1 +_ACEOF + +fi +done + +for ac_func in socket +do : + ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKET 1 +_ACEOF + +fi +done + +for ac_func in sqrt +do : + ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SQRT 1 +_ACEOF + +fi +done + +for ac_func in strerror +do : + ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR 1 +_ACEOF + +fi +done + + +for ac_header in arpa/inet.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ARPA_INET_H 1 +_ACEOF + +fi + +done + +for ac_header in netdb.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETDB_H 1 +_ACEOF + +fi + +done + +for ac_header in netinet/in.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETINET_IN_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/file.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_FILE_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/ioctl.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_IOCTL_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/socket.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_SOCKET_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else @@ -17175,9 +17482,14 @@ $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi +if ! echo $DEFS | grep OPENMP; then : + HAVE_OPENMP=1 + +fi if test x$HAVE_OPENMP != x1; then : CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" - CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +else + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" @@ -17235,300 +17547,145 @@ _ACEOF esac ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define pid_t int -_ACEOF - -fi - -ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define ssize_t int -_ACEOF - -fi - -ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" -case $ac_cv_c_uint16_t in #( - no|yes) ;; #( - *) - - -cat >>confdefs.h <<_ACEOF -#define uint16_t $ac_cv_c_uint16_t -_ACEOF -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" -case $ac_cv_c_uint32_t in #( - no|yes) ;; #( - *) - -$as_echo "#define _UINT32_T 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define uint32_t $ac_cv_c_uint32_t -_ACEOF -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" -case $ac_cv_c_uint64_t in #( - no|yes) ;; #( - *) - -$as_echo "#define _UINT64_T 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define uint64_t $ac_cv_c_uint64_t -_ACEOF -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" -case $ac_cv_c_uint8_t in #( - no|yes) ;; #( - *) - -$as_echo "#define _UINT8_T 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define uint8_t $ac_cv_c_uint8_t -_ACEOF -;; - esac - - -# -# CUDA -# - - -# Check whether --with-cuda_home was given. -if test "${with_cuda_home+set}" = set; then : - withval=$with_cuda_home; -else - with_cuda_home=/usr/local/cuda -fi - -CUDA_HOME=$with_cuda_home - -# Check whether --enable-cuda was given. -if test "${enable_cuda+set}" = set; then : - enableval=$enable_cuda; enable_cuda=no -else - enable_cuda=yes -fi - -if test x$enable_cuda != xno; then : - - - - - - - - - - - if test -z "$NVCC"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvcc executable path has been provided" >&5 -$as_echo_n "checking whether nvcc executable path has been provided... " >&6; } - -# Check whether --with-nvcc was given. -if test "${with_nvcc+set}" = set; then : - withval=$with_nvcc; - if test "$withval" != yes && test "$withval" != no; then : - - NVCC="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } - -else - - NVCC="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : - - # Extract the first word of "nvcc", so it can be a program name with args. -set dummy nvcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $NVCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 - -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -NVCC=$ac_cv_path_NVCC -if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - +if test "x$ac_cv_type_pid_t" = xyes; then : +else -fi +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF fi -else +ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "nvcc", so it can be a program name with args. -set dummy nvcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : - $as_echo_n "(cached) " >&6 else - case $NVCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF - ;; -esac -fi -NVCC=$ac_cv_path_NVCC -if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } fi +ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" +if test "x$ac_cv_type_ssize_t" = xyes; then : + +else +cat >>confdefs.h <<_ACEOF +#define ssize_t int +_ACEOF fi +ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" +case $ac_cv_c_uint16_t in #( + no|yes) ;; #( + *) + -fi +cat >>confdefs.h <<_ACEOF +#define uint16_t $ac_cv_c_uint16_t +_ACEOF +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" +case $ac_cv_c_uint32_t in #( + no|yes) ;; #( + *) +$as_echo "#define _UINT32_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint32_t $ac_cv_c_uint32_t +_ACEOF +;; + esac +ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" +case $ac_cv_c_uint64_t in #( + no|yes) ;; #( + *) +$as_echo "#define _UINT64_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint64_t $ac_cv_c_uint64_t +_ACEOF +;; + esac +ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" +case $ac_cv_c_uint8_t in #( + no|yes) ;; #( + *) +$as_echo "#define _UINT8_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint8_t $ac_cv_c_uint8_t +_ACEOF +;; + esac +# +# CUDA +# - if test -z "$NVPRUNE"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvprune executable path has been provided" >&5 -$as_echo_n "checking whether nvprune executable path has been provided... " >&6; } +# Check whether --with-cuda_home was given. +if test "${with_cuda_home+set}" = set; then : + withval=$with_cuda_home; +else + with_cuda_home=/usr/local/cuda +fi -# Check whether --with-nvprune was given. -if test "${with_nvprune+set}" = set; then : - withval=$with_nvprune; - if test "$withval" != yes && test "$withval" != no; then : + CUDA_HOME=$with_cuda_home - NVPRUNE="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } + # Check whether --enable-cuda was given. +if test "${enable_cuda+set}" = set; then : + enableval=$enable_cuda; enable_cuda=no else + enable_cuda=yes +fi - NVPRUNE="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : - # Extract the first word of "nvprune", so it can be a program name with args. -set dummy nvprune; ac_word=$2 + HAVE_CUDA=0 + + if test "$enable_cuda" != "no"; then + HAVE_CUDA=1 + + + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVPRUNE+:} false; then : +if ${ac_cv_path_NVCC+:} false; then : $as_echo_n "(cached) " >&6 else - case $NVPRUNE in + case $NVCC in [\\/]* | ?:[\\/]*) - ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 - +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -17536,29 +17693,22 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="HAVE_CUDA=0 +" ;; esac fi -NVPRUNE=$ac_cv_path_NVPRUNE -if test -n "$NVPRUNE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - -fi - -fi - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "nvprune", so it can be a program name with args. + # Extract the first word of "nvprune", so it can be a program name with args. set dummy nvprune; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } @@ -17571,8 +17721,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 - +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -17586,6 +17736,8 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="HAVE_CUDA=0 +" ;; esac fi @@ -17599,49 +17751,7 @@ $as_echo "no" >&6; } fi - -fi - - -fi - - - - - - - - - - - - - - - - - if test -z "$CUOBJDUMP"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cuobjdump executable path has been provided" >&5 -$as_echo_n "checking whether cuobjdump executable path has been provided... " >&6; } - -# Check whether --with-cuobjdump was given. -if test "${with_cuobjdump+set}" = set; then : - withval=$with_cuobjdump; - if test "$withval" != yes && test "$withval" != no; then : - - CUOBJDUMP="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } - -else - - CUOBJDUMP="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : - - # Extract the first word of "cuobjdump", so it can be a program name with args. + # Extract the first word of "cuobjdump", so it can be a program name with args. set dummy cuobjdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } @@ -17654,8 +17764,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 - +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -17669,6 +17779,8 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="HAVE_CUDA=0 +" ;; esac fi @@ -17682,77 +17794,54 @@ $as_echo "no" >&6; } fi + fi -fi - -fi + if test "$HAVE_CUDA" = "1"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +$as_echo_n "checking for a working CUDA installation... " >&6; } -else + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "cuobjdump", so it can be a program name with args. -set dummy cuobjdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CUOBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $CUOBJDUMP in - [\\/]* | ?:[\\/]*) - ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 + ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - ;; -esac -fi -CUOBJDUMP=$ac_cv_path_CUOBJDUMP -if test -n "$CUOBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } + #include + #include +int +main () +{ +cudaMalloc(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } -fi - - - -fi - + HAVE_CUDA=0 fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + fi + if test "$HAVE_CUDA" = "1"; then + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -lculibos -lnvToolsExt" + fi - - -else - HAVE_CUDA=0 - -fi -if test x$HAVE_CUDA = x1; then : - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" -fi - # Check whether --with-nvcc_flags was given. if test "${with_nvcc_flags+set}" = set; then : withval=$with_nvcc_flags; @@ -17760,7 +17849,8 @@ else with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi -NVCCFLAGS=$with_nvcc_flags + NVCCFLAGS=$with_nvcc_flags + @@ -17798,9 +17888,9 @@ else fi if test x$enable_numa != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_tonode_memory in -lnuma" >&5 -$as_echo_n "checking for numa_tonode_memory in -lnuma... " >&6; } -if ${ac_cv_lib_numa_numa_tonode_memory+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -17814,27 +17904,27 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #ifdef __cplusplus extern "C" #endif -char numa_tonode_memory (); +char numa_node_of_cpu (); int main () { -return numa_tonode_memory (); +return numa_node_of_cpu (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_numa_numa_tonode_memory=yes + ac_cv_lib_numa_numa_node_of_cpu=yes else - ac_cv_lib_numa_numa_tonode_memory=no + ac_cv_lib_numa_numa_node_of_cpu=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_tonode_memory" >&5 -$as_echo "$ac_cv_lib_numa_numa_tonode_memory" >&6; } -if test "x$ac_cv_lib_numa_numa_tonode_memory" = xyes; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" LIBS="$LIBS -lnuma" fi @@ -18156,7 +18246,7 @@ fi if test x${PYTHON} != x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 $as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } - if ! test $(PYTHON) -c "import ctypesgen"; then : + if ! ${PYTHON} -c "import ctypesgen"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 @@ -18322,7 +18412,7 @@ fi -if test x${PYTHON} != x; then : +if test x${DOCKER} != x; then : HAVE_DOCKER=1 fi @@ -18631,7 +18721,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18793,7 +18883,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18847,7 +18937,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18901,7 +18991,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18955,7 +19045,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19120,7 +19210,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19174,10 +19264,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19234,7 +19324,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19707,7 +19797,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20288,6 +20378,9 @@ DX_RULES="${DX_SNIPPET_doc}" CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" +if test x$HAVE_CUDA = x1; then : + LIBS="$LIBS -L. -lcufft_static_pruned" +fi ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile" diff --git a/configure.ac b/configure.ac index 118c26779..69d17f351 100644 --- a/configure.ac +++ b/configure.ac @@ -53,9 +53,11 @@ AC_CHECK_HEADER_STDBOOL AC_FUNC_MALLOC AX_OPENMP +AS_IF([! echo $DEFS | grep OPENMP], + [AC_SUBST(HAVE_OPENMP, 1)]) AS_IF([test x$HAVE_OPENMP != x1], - [CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" - CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"]) + [CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0"], + [CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"]) AC_CHECK_TYPES([ptrdiff_t]) AC_TYPE_INT16_T @@ -74,32 +76,7 @@ AC_TYPE_UINT8_T # CUDA # -AC_ARG_WITH([cuda_home], - [AS_HELP_STRING([--with-cuda-home], - [CUDA install path (default=/usr/local/cuda)])], - [], - [with_cuda_home=/usr/local/cuda]) -AC_SUBST(CUDA_HOME, $with_cuda_home) -AC_ARG_ENABLE([cuda], - [AS_HELP_STRING([--disable-cuda], - [disable cuda support (default=no)])], - [enable_cuda=no], - [enable_cuda=yes]) -AS_IF([test x$enable_cuda != xno], - [AX_WITH_PROG(NVCC, nvcc, [], [AC_SUBST(HAVE_CUDA, 0)]) - AX_WITH_PROG(NVPRUNE, nvprune, [], [AC_SUBST(HAVE_CUDA, 0)]) - AX_WITH_PROG(CUOBJDUMP, cuobjdump, [], [AC_SUBST(HAVE_CUDA, 0)])], - [AC_SUBST(HAVE_CUDA, 0)]) -AS_IF([test x$HAVE_CUDA = x1], - [CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt"]) -AC_ARG_WITH([nvcc_flags], - [AS_HELP_STRING([--with-nvcc-flags], - [flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"')])], - [], - [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) -AC_SUBST(NVCCFLAGS, $with_nvcc_flags) +AX_CHECK_CUDA AC_ARG_WITH([gpu_archs], [AS_HELP_STRING([--with-gpu-archs=...], @@ -122,11 +99,11 @@ AS_IF([test x$HAVE_CUDA = x1], AC_ARG_ENABLE([numa], AS_HELP_STRING([--disable-numa], - [disable NUMA support (default=no)]), + [disable numa support (default=no)]), [enable_numa=no], [enable_numa=yes]) AS_IF([test x$enable_numa != xno], - [AC_CHECK_LIB([numa], [numa_tonode_memory], + [AC_CHECK_LIB([numa], [numa_node_of_cpu], [CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" LIBS="$LIBS -lnuma"])]) @@ -216,7 +193,7 @@ AS_IF([test x$enable_cuda_debug != xno], AX_WITH_PROG(PYTHON, python) AS_IF([test x${PYTHON} != x], [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) - AS_IF([! test $(PYTHON) -c "import ctypesgen"], + AS_IF([! ${PYTHON} -c "import ctypesgen"], [AC_MSG_RESULT([no]) AC_MSG_WARN([python module will not be built])], [AC_MSG_RESULT([yes]) @@ -241,7 +218,7 @@ AC_SUBST(PYINSTALLFLAGS, $with_pyinstall_flags) # AX_WITH_PROG(DOCKER, docker) -AS_IF([test x${PYTHON} != x], +AS_IF([test x${DOCKER} != x], [AC_SUBST(HAVE_DOCKER, 1)]) # @@ -265,6 +242,8 @@ DX_INIT_DOXYGEN([bifrost]) CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" +AS_IF([test x$HAVE_CUDA = x1], + [LIBS="$LIBS -L. -lcufft_static_pruned"]) AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile]) diff --git a/src/Makefile.in b/src/Makefile.in index 675fed232..936a19642 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -18,8 +18,6 @@ HAVE_CUDA ?= @HAVE_CUDA@ GPU_ARCHS ?= @GPU_ARCHS@ -GPU_SHAREDMEM ?= @GPU_SHAREDMEM@ - CUDA_HOME ?= @CUDA_HOME@ CUDA_LIBDIR ?= $(CUDA_HOME)/lib CUDA_LIBDIR64 ?= $(CUDA_HOME)/lib64 @@ -40,7 +38,7 @@ LIBBIFROST_OBJS = \ udp_socket.o \ udp_capture.o \ udp_transmit.o -ifeq (HAVE_CUDA,1) +ifeq ($(HAVE_CUDA),1) # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ transpose.o \ @@ -69,7 +67,7 @@ JIT_SOURCES ?= \ MAKEFILES = ../config.mk Makefile -ifeq (HAVE_CUDA,1) +ifeq ($(HAVE_CUDA),1) # All CUDA archs supported by this version of nvcc GPU_ARCHS_SUPPORTED := $(shell $(NVCC) -h | grep -Po "compute_[0-9]{2}" | cut -d_ -f2 | sort | uniq) # Intersection of user-specified archs and supported archs @@ -84,7 +82,7 @@ NVCC_GENCODE ?= $(foreach arch, $(GPU_ARCHS_VALID), \ endif CXXFLAGS += -std=c++11 -NVCCFLAGS += -std=c++11 $(NVCC_GENCODE) -DBF_GPU_SHAREDMEM=$(GPU_SHAREDMEM) +NVCCFLAGS += -std=c++11 $(NVCC_GENCODE) #NVCCFLAGS += -Xcudafe "--diag_suppress=unrecognized_gcc_pragma" #NVCCFLAGS += --expt-relaxed-constexpr @@ -111,7 +109,7 @@ $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h echo " *;" >> $@ echo "};" >> $@ -ifeq (HAVE_CUDA,1) +ifeq ($(HAVE_CUDA),1) # TODO: Need to deal with 32/64 detection here LIBCUFFT_STATIC = $(CUDA_LIBDIR64)/libcufft_static.a # All PTX archs included in the lib (typically only one) From c81694a6caf84e548c1b645123d119ea581de25e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 17:38:47 -0600 Subject: [PATCH 0159/1155] More fixes for CUDA and OpenMP detection. --- config/cuda.m4 | 6 +++--- configure | 14 ++++++-------- configure.ac | 7 ++++--- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 4f4cbff1d..ffc4df83e 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -18,9 +18,9 @@ AC_DEFUN([AX_CHECK_CUDA], if test "$enable_cuda" != "no"; then AC_SUBST([HAVE_CUDA], [1]) - AC_PATH_PROG(NVCC, nvcc, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) - AC_PATH_PROG(NVPRUNE, nvprune, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) - AC_PATH_PROG(CUOBJDUMP, cuobjdump, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) + AC_PATH_PROG(NVCC, nvcc, no, [$CUDA_HOME/bin:$PATH]) + AC_PATH_PROG(NVPRUNE, nvprune, no, [$CUDA_HOME/bin:$PATH]) + AC_PATH_PROG(CUOBJDUMP, cuobjdump, no, [$CUDA_HOME/bin:$PATH]) fi if test "$HAVE_CUDA" = "1"; then diff --git a/configure b/configure index c18183a95..7c62dd7da 100755 --- a/configure +++ b/configure @@ -17482,7 +17482,7 @@ $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi -if ! echo $DEFS | grep OPENMP; then : +if test x$OPENMP_CXXFLAGS != x; then : HAVE_OPENMP=1 fi @@ -17490,6 +17490,7 @@ if test x$HAVE_OPENMP != x1; then : CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" else CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" + LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" @@ -17693,8 +17694,7 @@ done done IFS=$as_save_IFS - test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="HAVE_CUDA=0 -" + test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="no" ;; esac fi @@ -17736,8 +17736,7 @@ done done IFS=$as_save_IFS - test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="HAVE_CUDA=0 -" + test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="no" ;; esac fi @@ -17779,8 +17778,7 @@ done done IFS=$as_save_IFS - test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="HAVE_CUDA=0 -" + test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="no" ;; esac fi @@ -18246,7 +18244,7 @@ fi if test x${PYTHON} != x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 $as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen"; then : + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 diff --git a/configure.ac b/configure.ac index 69d17f351..238048581 100644 --- a/configure.ac +++ b/configure.ac @@ -53,11 +53,12 @@ AC_CHECK_HEADER_STDBOOL AC_FUNC_MALLOC AX_OPENMP -AS_IF([! echo $DEFS | grep OPENMP], +AS_IF([test x$OPENMP_CXXFLAGS != x], [AC_SUBST(HAVE_OPENMP, 1)]) AS_IF([test x$HAVE_OPENMP != x1], [CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0"], - [CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"]) + [CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" + LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS"]) AC_CHECK_TYPES([ptrdiff_t]) AC_TYPE_INT16_T @@ -193,7 +194,7 @@ AS_IF([test x$enable_cuda_debug != xno], AX_WITH_PROG(PYTHON, python) AS_IF([test x${PYTHON} != x], [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) - AS_IF([! ${PYTHON} -c "import ctypesgen"], + AS_IF([! ${PYTHON} -c "import ctypesgen" 2>/dev/null], [AC_MSG_RESULT([no]) AC_MSG_WARN([python module will not be built])], [AC_MSG_RESULT([yes]) From f9eef1db7457f4f40082545fe1d3e6a29bfb6742 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 17:50:05 -0600 Subject: [PATCH 0160/1155] Allow Py2 to fail and try OSX. --- .travis.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.travis.yml b/.travis.yml index d449142ab..a0f179bbf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,18 @@ python: services: - docker +jobs: + include: + - os: osx + osx_image: xcode12 + language: sh + env: + - HOMEBREW_NO_INSTALL_CLEANUP=1 + - HOMEBREW_NO_ANALYTICS=1 + allow_failures: + - python: 2.7 + - python: pypy2.7-6.0 + addons: apt: update: true @@ -27,6 +39,13 @@ addons: - exuberant-ctags - python-dev - pylint + homebrew: + update: false + packages: + - curl + - git + - pkg-config + - python3 jobs: include: From c80f41703a781057a1104d29a8081410dc4b2033 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 17:52:59 -0600 Subject: [PATCH 0161/1155] Merge the two jobs sections. --- .travis.yml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index a0f179bbf..84a07e5cb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,12 @@ jobs: env: - HOMEBREW_NO_INSTALL_CLEANUP=1 - HOMEBREW_NO_ANALYTICS=1 + - stage: docker and deploy docs + python: 2.7 + script: + - make docker-cpu + - make docker + - bash ./.travis_deploy_docs.sh allow_failures: - python: 2.7 - python: pypy2.7-6.0 @@ -47,15 +53,6 @@ addons: - pkg-config - python3 -jobs: - include: - - stage: docker and deploy docs - python: 2.7 - script: - - make docker-cpu - - make docker - - bash ./.travis_deploy_docs.sh - script: - sudo pip --no-cache-dir install \ setuptools \ From 20450c219352c73694873c3a557c763f07a401e3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 18:06:19 -0600 Subject: [PATCH 0162/1155] Makefile.in fixes. --- Makefile.in | 8 ++++---- python/Makefile.in | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Makefile.in b/Makefile.in index 7babc22ec..e6409fd0b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -41,7 +41,7 @@ doc: $(INC_DIR)/bifrost/*.h Doxyfile .PHONY: doc python: libbifrost -ifeq ($HAVE_PYTHON,1) +ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) build endif .PHONY: python @@ -49,7 +49,7 @@ endif #GPU Docker build IMAGE_NAME ?= ledatelescope/bifrost docker: -ifeq ($HAVE_DOCKER,1) +ifeq ($(HAVE_DOCKER),1) docker build --pull -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile.gpu -t $(IMAGE_NAME) . endif .PHONY: docker @@ -58,7 +58,7 @@ endif # (To be used for testing new builds rapidly) IMAGE_NAME ?= ledatelescope/bifrost docker_prereq: -ifeq ($HAVE_DOCKER,1) +ifeq ($(HAVE_DOCKER),1) docker build --pull -t $(IMAGE_NAME)_prereq:$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile_prereq.gpu -t $(IMAGE_NAME)_prereq . endif .PHONY: docker_prereq @@ -66,7 +66,7 @@ endif #CPU-only Docker build IMAGE_NAME ?= ledatelescope/bifrost docker-cpu: -ifeq ($HAVE_DOCKER,1) +ifeq ($(HAVE_DOCKER),1) docker build --pull -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile.cpu -t $(IMAGE_NAME) . endif .PHONY: docker diff --git a/python/Makefile.in b/python/Makefile.in index 1e242de85..61702fabe 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -23,14 +23,14 @@ $(BIFROST_PYTHON_VERSION_FILE): ../config.mk define run_ctypesgen @PYTHON@ -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -l$1 -I$2 $^ -o $@ # WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p) - sed -i 's/POINTER(c_char)/c_char_p/g' $@ + sed -i -e 's/POINTER(c_char)/c_char_p/g' $@ # WAR for a buggy WAR in ctypesgen that breaks type checking and auto-byref functionality - sed -i 's/def POINTER/def POINTER_not_used/' $@ + sed -i -e 's/def POINTER/def POINTER_not_used/' $@ # WAR for a buggy WAR in ctypesgen that breaks string buffer arguments (e.g., as in address.py) - sed -i 's/class String/String = c_char_p\nclass String_not_used/' $@ - sed -i 's/String.from_param/String_not_used.from_param/g' $@ - sed -i 's/def ReturnString/ReturnString = c_char_p\ndef ReturnString_not_used/' $@ - sed -i '/errcheck = ReturnString/s/^/#/' $@ + sed -i -e 's/class String/String = c_char_p\nclass String_not_used/' $@ + sed -i -e 's/String.from_param/String_not_used.from_param/g' $@ + sed -i -e 's/def ReturnString/ReturnString = c_char_p\ndef ReturnString_not_used/' $@ + sed -i -e '/errcheck = ReturnString/s/^/#/' $@ endef ifeq "$(wildcard $(PSRDADA_HEADERS))" "" @@ -41,7 +41,7 @@ $(PSRDADA_PYTHON_BINDINGS_FILE): $(PSRDADA_HEADERS) $(call run_ctypesgen,psrdada,$(PSRHOME)/include) # WAR for psrdada API using char* instead of void* for buffer pointers, which # otherwise get inadvertently converted to Python strings. - sed -i 's/c_char_p/POINTER(c_char)/g' $@ + sed -i -e 's/c_char_p/POINTER(c_char)/g' $@ $(BIFROST_PYTHON_BINDINGS_FILE): $(INC_DIR)/bifrost/*.h $(call run_ctypesgen,$(BIFROST_NAME),$(INC_DIR)) From 67b4cc6c4fbacb9cb8ac8dea4deab77d57417399 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 18:25:43 -0600 Subject: [PATCH 0163/1155] More Python building cleanups. --- python/Makefile.in | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/python/Makefile.in b/python/Makefile.in index 61702fabe..a0577d6d8 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -23,14 +23,14 @@ $(BIFROST_PYTHON_VERSION_FILE): ../config.mk define run_ctypesgen @PYTHON@ -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -l$1 -I$2 $^ -o $@ # WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p) - sed -i -e 's/POINTER(c_char)/c_char_p/g' $@ + @SED@ -i.orig -e 's/POINTER(c_char)/c_char_p/g' $@ # WAR for a buggy WAR in ctypesgen that breaks type checking and auto-byref functionality - sed -i -e 's/def POINTER/def POINTER_not_used/' $@ + @SED@ -i.orig -e 's/def POINTER/def POINTER_not_used/' $@ # WAR for a buggy WAR in ctypesgen that breaks string buffer arguments (e.g., as in address.py) - sed -i -e 's/class String/String = c_char_p\nclass String_not_used/' $@ - sed -i -e 's/String.from_param/String_not_used.from_param/g' $@ - sed -i -e 's/def ReturnString/ReturnString = c_char_p\ndef ReturnString_not_used/' $@ - sed -i -e '/errcheck = ReturnString/s/^/#/' $@ + @SED@ -i.orig -e 's/class String/String = c_char_p\nclass String_not_used/' $@ + @SED@ -i.orig -e 's/String.from_param/String_not_used.from_param/g' $@ + @SED@ -i.orig -e 's/def ReturnString/ReturnString = c_char_p\ndef ReturnString_not_used/' $@ + @SED@ -i.orig -e '/errcheck = ReturnString/s/^/#/' $@ endef ifeq "$(wildcard $(PSRDADA_HEADERS))" "" @@ -41,17 +41,17 @@ $(PSRDADA_PYTHON_BINDINGS_FILE): $(PSRDADA_HEADERS) $(call run_ctypesgen,psrdada,$(PSRHOME)/include) # WAR for psrdada API using char* instead of void* for buffer pointers, which # otherwise get inadvertently converted to Python strings. - sed -i -e 's/c_char_p/POINTER(c_char)/g' $@ + @SED@ -i.orig -e 's/c_char_p/POINTER(c_char)/g' $@ $(BIFROST_PYTHON_BINDINGS_FILE): $(INC_DIR)/bifrost/*.h $(call run_ctypesgen,$(BIFROST_NAME),$(INC_DIR)) build: bifrost/*.py Makefile $(BIFROST_PYTHON_VERSION_FILE) $(BIFROST_PYTHON_BINDINGS_FILE) $(PSRDADA_PYTHON_BINDINGS_FILE) - @PYTHON@ setup.py build $(PYBUILDFLAGS) + @PYTHON@ setup.py build @PYBUILDFLAGS@ .PHONY: build install: build - @PYTHON@ setup.py install $(PYINSTALLFLAGS) + @PYTHON@ setup.py install @PYINSTALLFLAGS@ .PHONY: install clean: From ffbe75e96abc3aa4a804f3341377d70549dbf7c4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 18:30:27 -0600 Subject: [PATCH 0164/1155] Fill in awk as needed. --- src/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.in b/src/Makefile.in index 936a19642..e115b354c 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -104,7 +104,7 @@ $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h @echo -n "Generating $(LIBBIFROST_VERSION_FILE)\r" echo "VERS_$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) {" > $@ echo " global:" >> $@ - @CTAGS@ -x --c-kinds=p $^ | awk '{print " " $$1 ";"}' >> $@ + @CTAGS@ -x --c-kinds=p $^ | @AWK@ '{print " " $$1 ";"}' >> $@ echo " local:" >> $@ echo " *;" >> $@ echo "};" >> $@ From fc3556f73b5c65c7c5d729522a7053facf513869 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Oct 2021 09:21:11 -0600 Subject: [PATCH 0165/1155] Fixed ProcLog logging on OSX and added a config.h to control how Bifrost is built. --- config/tmpfs.m4 | 25 ++ configure | 482 +++++++++++--------------------------- configure.ac | 35 ++- python/bifrost/proclog.py | 4 +- src/Complex.hpp | 2 + src/affinity.cpp | 9 +- src/assert.hpp | 1 + src/bifrost/config.h.in | 67 ++++++ src/bifrost/memory.h | 4 - src/common.cpp | 3 +- src/cuda.hpp | 1 + src/map.cpp | 1 + src/memory.cpp | 1 + src/proclog.cpp | 3 +- src/quantize.cpp | 26 +- src/ring.cpp | 1 + src/ring_impl.cpp | 1 + src/romein.cu | 1 + src/trace.hpp | 1 + src/transpose.cu | 1 + src/udp_capture.cpp | 1 + src/udp_transmit.cpp | 1 + src/unpack.cpp | 32 +-- src/utils.hpp | 1 + tools/like_bmon.py | 8 +- tools/like_ps.py | 4 +- tools/like_top.py | 4 +- tools/pipeline2dot.py | 4 +- 28 files changed, 319 insertions(+), 405 deletions(-) create mode 100644 config/tmpfs.m4 create mode 100644 src/bifrost/config.h.in diff --git a/config/tmpfs.m4 b/config/tmpfs.m4 new file mode 100644 index 000000000..1ee5ffcb1 --- /dev/null +++ b/config/tmpfs.m4 @@ -0,0 +1,25 @@ +AC_DEFUN([AX_CHECK_TMPFS], +[ + AC_PROVIDE([AX_CHECK_TMPFS]) + + AC_SUBST([HAVE_TMPFS], [/tmp]) + + if test "$HAVE_TMPFS" = "/tmp"; then + AC_CHECK_FILE([/dev/shm], + [AC_SUBST([HAVE_TMPFS], [/dev/shm/bifrost])]) + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + AC_CHECK_FILE([/Volumes/RAMDisk], + [AC_SUBST([HAVE_TMPFS], [/Volumes/RAMDisk/bifrost])]) + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + AC_CHECK_FILE([/tmp], + [AC_SUBST([HAVE_TMPFS], [/tmp])]) + AC_MSG_WARN([$HAVE_TMPFS may have performance problems for logging]) + AC_SUBST([HAVE_TMPFS], [/tmp/bifrost]) + fi + + CPPFLAGS="$CPPFLAGS -DBF_PROCLOG_DIR='\"$HAVE_TMPFS\"'" +]) diff --git a/configure b/configure index 7c62dd7da..b75a112db 100755 --- a/configure +++ b/configure @@ -676,6 +676,15 @@ PYINSTALLFLAGS PYBUILDFLAGS HAVE_PYTHON PYTHON +HAVE_CUDA_DEBUG +HAVE_TRACE +HAVE_DEBUG +HAVE_TMPFS +ALIGNMENT +HAVE_VMA +HAVE_HWLOC +HAVE_NUMA +GPU_SHAREDMEM GPU_ARCHS NVCCFLAGS CUOBJDUMP @@ -755,7 +764,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -871,7 +879,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1124,15 +1131,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1270,7 +1268,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1423,7 +1421,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -16472,312 +16469,6 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 -$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } -if ${ax_cv_cxx_compile_cxx11+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201103L - -#error "This is not a C++11 compiler" - -#else - -namespace cxx11 -{ - - namespace test_static_assert - { - - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; - - } - - namespace test_final_override - { - - struct Base - { - virtual void f() {} - }; - - struct Derived : public Base - { - virtual void f() override {} - }; - - } - - namespace test_double_right_angle_brackets - { - - template < typename T > - struct check {}; - - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; - - } - - namespace test_decltype - { - - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - - } - - namespace test_type_deduction - { - - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - - template < typename T > - struct is_same - { - static const bool value = true; - }; - - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - - } - - namespace test_noexcept - { - - int f() { return 0; } - int g() noexcept { return 0; } - - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); - - } - - namespace test_constexpr - { - - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } - - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); - - } - - namespace test_rvalue_references - { - - template < int N > - struct answer - { - static constexpr int value = N; - }; - - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } - - } - - namespace test_uniform_initialization - { - - struct test - { - static const int zero {}; - static const int one {1}; - }; - - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - - } - - namespace test_lambdas - { - - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } - - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } - - } - - namespace test_variadic_templates - { - - template - struct sum; - - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; - - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - - } - - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - - struct foo {}; - - template - using member = typename T::member_type; - - template - void func(...) {} - - template - void func(member*) {} - - void test(); - - void test() { func(0); } - - } - -} // namespace cxx11 - -#endif // __cplusplus >= 201103L - - - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ax_cv_cxx_compile_cxx11=yes -else - ax_cv_cxx_compile_cxx11=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 -$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } - if test x$ax_cv_cxx_compile_cxx11 = xyes; then - ac_success=yes - fi @@ -17129,7 +16820,6 @@ $as_echo "#define HAVE_CXX11 1" >>confdefs.h fi - for ac_func in memset do : ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" @@ -17413,6 +17103,8 @@ fi +HAVE_OPENMP=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 @@ -17487,7 +17179,7 @@ if test x$OPENMP_CXXFLAGS != x; then : fi if test x$HAVE_OPENMP != x1; then : - CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" + else CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" @@ -17870,9 +17562,8 @@ else with_shared_mem=16384 fi -if test x$HAVE_CUDA = x1; then : - NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem" -fi +GPU_SHAREDMEM=$with_shared_mem + # # NUMA @@ -17885,6 +17576,8 @@ else enable_numa=yes fi +HAVE_NUMA=0 + if test x$enable_numa != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 $as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } @@ -17923,7 +17616,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 $as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : - CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" + HAVE_NUMA=1 + LIBS="$LIBS -lnuma" fi @@ -17940,6 +17634,8 @@ else enable_hwloc=yes fi +HAVE_HWLOC=0 + if test x$enable_hwloc != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 $as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } @@ -17978,7 +17674,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 $as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : - CPPFLAGS="$CPPFLAGS -DBF_HWLOC_ENABLED=1" + HAVE_HWLOC=1 + LIBS="$LIBS -lhwloc" fi @@ -17995,6 +17692,8 @@ else enable_vma=no fi +HAVE_VMA=0 + if test x$enable_vma != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 $as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } @@ -18033,7 +17732,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 $as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : - CPPFLAGS="$CPPFLAGS -DBF_VMA_ENABLED=1" + HAVE_VMA=1 + LIBS="$LIBS -lvma" fi @@ -18051,7 +17751,94 @@ else with_alignment=4096 fi -CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" +ALIGNMENT=$with_alignment + + +# +# Bifrost proclog location +# + + + + + HAVE_TMPFS=/tmp + + + if test "$HAVE_TMPFS" = "/tmp"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +$as_echo_n "checking for /dev/shm... " >&6; } +if ${ac_cv_file__dev_shm+:} false; then : + $as_echo_n "(cached) " >&6 +else + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/dev/shm"; then + ac_cv_file__dev_shm=yes +else + ac_cv_file__dev_shm=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +$as_echo "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes; then : + HAVE_TMPFS=/dev/shm/bifrost + +fi + + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +$as_echo_n "checking for /Volumes/RAMDisk... " >&6; } +if ${ac_cv_file__Volumes_RAMDisk+:} false; then : + $as_echo_n "(cached) " >&6 +else + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/Volumes/RAMDisk"; then + ac_cv_file__Volumes_RAMDisk=yes +else + ac_cv_file__Volumes_RAMDisk=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +$as_echo "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes; then : + HAVE_TMPFS=/Volumes/RAMDisk/bifrost + +fi + + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +$as_echo_n "checking for /tmp... " >&6; } +if ${ac_cv_file__tmp+:} false; then : + $as_echo_n "(cached) " >&6 +else + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/tmp"; then + ac_cv_file__tmp=yes +else + ac_cv_file__tmp=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +$as_echo "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes; then : + HAVE_TMPFS=/tmp + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +$as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + HAVE_TMPFS=/tmp/bifrost + + fi + + CPPFLAGS="$CPPFLAGS -DBF_PROCLOG_DIR='\"$HAVE_TMPFS\"'" + # # Bifrost Features @@ -18064,8 +17851,11 @@ else enable_debug=no fi +HAVE_DEBUG=0 + if test x$enable_debug != xno; then : - CPPFLAGS="$CPPFLAGS -DBF_DEBUG=1" + HAVE_DEBUG=1 + CXXFLAGS="$CXXFLAGS -g" NVCCFLAGS="$NVCCFLAGS -g" fi @@ -18077,8 +17867,11 @@ else enable_trace=no fi +HAVE_TRACE=0 + if test x$enable_trace != xno; then : - CPPFLAGS="$CPPFLAGS -DBF_TRACE_ENABLED=1" + HAVE_TRACE=1 + fi # Check whether --enable-native_arch was given. @@ -18102,8 +17895,12 @@ else enable_cuda_debug=no fi +HAVE_CUDA_DEBUG=0 + if test x$enable_cuda_debug != xno; then : - NVCCFLAGS="$NVCCFLAGS -G" + HAVE_CUDA_DEBUG=1 + + NVCCFLAGS="$NVCCFLAGS -G" fi # @@ -18719,7 +18516,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18881,7 +18678,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18935,7 +18732,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18989,7 +18786,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19043,7 +18840,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19208,7 +19005,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19262,10 +19059,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19322,7 +19119,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19795,7 +19592,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20380,7 +20177,7 @@ if test x$HAVE_CUDA = x1; then : LIBS="$LIBS -L. -lcufft_static_pruned" fi -ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile" +ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h" cat >confcache <<\_ACEOF @@ -21484,6 +21281,7 @@ do "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; + "src/bifrost/config.h") CONFIG_FILES="$CONFIG_FILES src/bifrost/config.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac diff --git a/configure.ac b/configure.ac index 238048581..2bd5ef0b3 100644 --- a/configure.ac +++ b/configure.ac @@ -52,11 +52,12 @@ AC_CHECK_HEADERS([sys/socket.h]) AC_CHECK_HEADER_STDBOOL AC_FUNC_MALLOC +AC_SUBST(HAVE_OPENMP, 0) AX_OPENMP AS_IF([test x$OPENMP_CXXFLAGS != x], [AC_SUBST(HAVE_OPENMP, 1)]) AS_IF([test x$HAVE_OPENMP != x1], - [CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0"], + [], [CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS"]) @@ -91,8 +92,7 @@ AC_ARG_WITH([shared_mem], [default GPU shared memory in bytes (default=16384)])], [], [with_shared_mem=16384]) -AS_IF([test x$HAVE_CUDA = x1], - [NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem"]) +AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) # # NUMA @@ -103,9 +103,10 @@ AC_ARG_ENABLE([numa], [disable numa support (default=no)]), [enable_numa=no], [enable_numa=yes]) +AC_SUBST([HAVE_NUMA], [0]) AS_IF([test x$enable_numa != xno], [AC_CHECK_LIB([numa], [numa_node_of_cpu], - [CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" + [AC_SUBST([HAVE_NUMA], [1]) LIBS="$LIBS -lnuma"])]) # @@ -117,9 +118,10 @@ AC_ARG_ENABLE([hwloc], [disable hwloc support (default=no)]), [enable_hwloc=no], [enable_hwloc=yes]) +AC_SUBST([HAVE_HWLOC], [0]) AS_IF([test x$enable_hwloc != xno], [AC_CHECK_LIB([hwloc], [hwloc_topology_init], - [CPPFLAGS="$CPPFLAGS -DBF_HWLOC_ENABLED=1" + [AC_SUBST([HAVE_HWLOC], [1]) LIBS="$LIBS -lhwloc"])]) # @@ -131,9 +133,10 @@ AC_ARG_ENABLE([vma], [enable vma support (default=no)]), [enable_vma=yes], [enable_vma=no]) +AC_SUBST([HAVE_VMA], [0]) AS_IF([test x$enable_vma != xno], [AC_CHECK_LIB([vma], [recvfrom_zcopy], - [CPPFLAGS="$CPPFLAGS -DBF_VMA_ENABLED=1" + [AC_SUBST([HAVE_VMA], [1]) LIBS="$LIBS -lvma"])]) # @@ -145,7 +148,13 @@ AC_ARG_WITH([alignment], [default memory alignment in bytes (default=4096)])], [], [with_alignment=4096]) -CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" +AC_SUBST([ALIGNMENT], [$with_alignment]) + +# +# Bifrost proclog location +# + +AX_CHECK_TMPFS # # Bifrost Features @@ -156,8 +165,9 @@ AC_ARG_ENABLE([debug], [enable debugging mode (default=no)])], [enable_debug=yes], [enable_debug=no]) +AC_SUBST([HAVE_DEBUG], [0]) AS_IF([test x$enable_debug != xno], - [CPPFLAGS="$CPPFLAGS -DBF_DEBUG=1" + [AC_SUBST([HAVE_DEBUG], [1]) CXXFLAGS="$CXXFLAGS -g" NVCCFLAGS="$NVCCFLAGS -g"]) @@ -166,8 +176,9 @@ AC_ARG_ENABLE([trace], [enable tracing mode for nvprof/nvvp (default=no)])], [enable_trace=yes], [enable_trace=no]) +AC_SUBST([HAVE_TRACE], [0]) AS_IF([test x$enable_trace != xno], - [CPPFLAGS="$CPPFLAGS -DBF_TRACE_ENABLED=1"]) + [AC_SUBST([HAVE_TRACE], [1])]) AC_ARG_ENABLE([native_arch], [AS_HELP_STRING([--disable-native-arch], @@ -184,8 +195,10 @@ AC_ARG_ENABLE([cuda_debug], [enable CUDA debugging (nvcc -G; default=no)])], [enable_cuda_debug=yes], [enable_cuda_debug=no]) +AC_SUBST([HAVE_CUDA_DEBUG], [0]) AS_IF([test x$enable_cuda_debug != xno], - [NVCCFLAGS="$NVCCFLAGS -G"]) + [AC_SUBST([HAVE_CUDA_DEBUG], [1]) + NVCCFLAGS="$NVCCFLAGS -G"]) # # Python @@ -246,6 +259,6 @@ NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" AS_IF([test x$HAVE_CUDA = x1], [LIBS="$LIBS -L. -lcufft_static_pruned"]) -AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile]) +AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h]) AC_OUTPUT diff --git a/python/bifrost/proclog.py b/python/bifrost/proclog.py index 490962d45..91bbd2c0f 100644 --- a/python/bifrost/proclog.py +++ b/python/bifrost/proclog.py @@ -36,6 +36,8 @@ import os import time +PROCLOG_DIR = _bf.BF_PROCLOG_DIR + class ProcLog(BifrostObject): def __init__(self, name): try: @@ -120,7 +122,7 @@ def load_by_pid(pid, include_rings=False): # Make sure we have a directory to load from - baseDir = os.path.join('/dev/shm/bifrost/', str(pid)) + baseDir = os.path.join(PROCLOG_DIR, str(pid)) if not os.path.isdir(baseDir): raise RuntimeError("Cannot find log directory associated with PID %s" % pid) diff --git a/src/Complex.hpp b/src/Complex.hpp index 47f218f3c..7f5ecc2c0 100644 --- a/src/Complex.hpp +++ b/src/Complex.hpp @@ -28,6 +28,8 @@ #pragma once +#include + #if BF_CUDA_ENABLED #include #endif diff --git a/src/affinity.cpp b/src/affinity.cpp index a547f0ebc..39f143a5f 100644 --- a/src/affinity.cpp +++ b/src/affinity.cpp @@ -27,14 +27,11 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include "assert.hpp" -#ifndef BF_OPENMP -#define BF_OPENMP 1 -#endif - -#if BF_OPENMP == 1 +#if BF_OPENMP_ENABLED #include #endif @@ -177,7 +174,7 @@ BFstatus bfAffinityGetCore(int* core) { } BFstatus bfAffinitySetOpenMPCores(BFsize nthread, const int* thread_cores) { -#if BF_OPENMP == 1 +#if BF_OPENMP_ENABLED int host_core = -1; // TODO: Check these for errors bfAffinityGetCore(&host_core); diff --git a/src/assert.hpp b/src/assert.hpp index 1acc135a0..e2d76e151 100644 --- a/src/assert.hpp +++ b/src/assert.hpp @@ -29,6 +29,7 @@ #pragma once +#include #include #include diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in new file mode 100644 index 000000000..3748db126 --- /dev/null +++ b/src/bifrost/config.h.in @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021, The Bifrost Authors. All rights reserved. + * Copyright (c) 2021, The University of New Mexico. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/*! \file config.h + * \brief Configuration parameters used for building the library + */ + +#ifndef BF_CONFIG_H_INCLUDE_GUARD_ +#define BF_CONFIG_H_INCLUDE_GUARD_ + +#ifdef __cplusplus +extern "C" { +#endif + +// Memory alignment +#define BF_ALIGNMENT @ALIGNMENT@ + +// CUDA support +#define BF_CUDA_ENABLED @HAVE_CUDA@ +#define BF_GPU_ARCHS "@GPU_ARCHS@" +#define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ + +// Features +#define BF_OPENMP_ENABLED @HAVE_OPENMP@ +#define BF_NUMA_ENABLED @HAVE_NUMA@ +#define BF_HWLOC_ENABLED @HAVE_HWLOC@ +#define BF_VMA_ENABLED @HAVE_VMA@ + +// Debugging features +#define BF_DEBUG_ENABLED @HAVE_DEBUG@ +#define BF_HAVE_TRACE @HAVE_TRACE@ +#define BF_CUDA_DEBUG_ENABLED @HAVE_CUDA_DEBUG@ + +// Logging directory +#define BF_PROCLOG_DIR "@HAVE_TMPFS@" + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // BF_CONFIG_H_INCLUDE_GUARD_ diff --git a/src/bifrost/memory.h b/src/bifrost/memory.h index 653a701f0..48624ae3c 100644 --- a/src/bifrost/memory.h +++ b/src/bifrost/memory.h @@ -40,10 +40,6 @@ extern "C" { #endif -#ifndef BF_ALIGNMENT - #define BF_ALIGNMENT 4096//512 -#endif - typedef enum BFspace_ { BF_SPACE_AUTO = 0, BF_SPACE_SYSTEM = 1, // aligned_alloc diff --git a/src/common.cpp b/src/common.cpp index a595de8ed..ac75391af 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -27,6 +27,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include @@ -83,7 +84,7 @@ BFstatus bfSetDebugEnabled(BFbool b) { #endif } BFbool bfGetCudaEnabled() { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED return BF_CUDA_ENABLED; #else return false; diff --git a/src/cuda.hpp b/src/cuda.hpp index a410ecb7a..0f0be3ea8 100644 --- a/src/cuda.hpp +++ b/src/cuda.hpp @@ -28,6 +28,7 @@ #pragma once +#include #include #include "assert.hpp" diff --git a/src/map.cpp b/src/map.cpp index a8b627b3e..f49dfc414 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -42,6 +42,7 @@ bfMap(3, c.shape, {"dm", "t"}, #define BF_MAP_KERNEL_CACHE_SIZE 128 #endif +#include #include #include "cuda.hpp" diff --git a/src/memory.cpp b/src/memory.cpp index 881b328c5..2b2abb57b 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -27,6 +27,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include "utils.hpp" #include "cuda.hpp" diff --git a/src/proclog.cpp b/src/proclog.cpp index e0380dfe7..dfd900063 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -26,6 +26,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include "trace.hpp" #include "proclog.hpp" @@ -101,7 +102,7 @@ class LockFile { }; class ProcLogMgr { - static constexpr const char* base_logdir = "/dev/shm/bifrost"; + static constexpr const char* base_logdir = BF_PROCLOG_DIR; std::string _logdir; std::set _logs; std::set _created_dirs; diff --git a/src/quantize.cpp b/src/quantize.cpp index ebdfede9f..f73ef6390 100644 --- a/src/quantize.cpp +++ b/src/quantize.cpp @@ -34,7 +34,7 @@ #include -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED #include "cuda.hpp" #include "trace.hpp" #include @@ -251,7 +251,7 @@ BFstatus bfQuantize(BFarray const* in, BF_ASSERT(is_contiguous(in), BF_STATUS_UNSUPPORTED_STRIDE); BF_ASSERT(is_contiguous(out), BF_STATUS_UNSUPPORTED_STRIDE); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED BF_ASSERT(space_accessible_from(in->space, BF_SPACE_SYSTEM) || (space_accessible_from(in->space, BF_SPACE_CUDA) && space_accessible_from(out->space, BF_SPACE_CUDA)), BF_STATUS_UNSUPPORTED_SPACE); BF_ASSERT(space_accessible_from(out->space, BF_SPACE_SYSTEM) || (space_accessible_from(in->space, BF_SPACE_CUDA) && space_accessible_from(out->space, BF_SPACE_CUDA)), @@ -267,7 +267,7 @@ BFstatus bfQuantize(BFarray const* in, bool byteswap_in = ( in->big_endian != is_big_endian()); bool byteswap_out = (out->big_endian != is_big_endian()); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { BF_ASSERT(nelement<=(size_t)512*65535*65535, BF_STATUS_UNSUPPORTED_SHAPE); } @@ -280,7 +280,7 @@ BFstatus bfQuantize(BFarray const* in, QuantizeFunctor \ (scale,byteswap_in,byteswap_out)) -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED #define CALL_FOREACH_SIMPLE_GPU_QUANTIZE(itype,stype,otype) \ { \ BF_TRACE(); \ @@ -301,7 +301,7 @@ BFstatus bfQuantize(BFarray const* in, case BF_DTYPE_CI1: nelement *= 2; case BF_DTYPE_I1: { BF_ASSERT(nelement % 8 == 0, BF_STATUS_INVALID_SHAPE); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { BF_TRACE(); BF_TRACE_STREAM(g_cuda_stream); @@ -330,7 +330,7 @@ BFstatus bfQuantize(BFarray const* in, case BF_DTYPE_CI2: nelement *= 2; case BF_DTYPE_I2: { BF_ASSERT(nelement % 4 == 0, BF_STATUS_INVALID_SHAPE); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { BF_TRACE(); BF_TRACE_STREAM(g_cuda_stream); @@ -359,7 +359,7 @@ BFstatus bfQuantize(BFarray const* in, case BF_DTYPE_CI4: nelement *= 2; case BF_DTYPE_I4: { BF_ASSERT(nelement % 2 == 0, BF_STATUS_INVALID_SHAPE); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { BF_TRACE(); BF_TRACE_STREAM(g_cuda_stream); @@ -387,7 +387,7 @@ BFstatus bfQuantize(BFarray const* in, } case BF_DTYPE_CI8: nelement *= 2; case BF_DTYPE_I8: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_QUANTIZE(float,float,int8_t); } else { @@ -400,7 +400,7 @@ BFstatus bfQuantize(BFarray const* in, } case BF_DTYPE_CI16: nelement *= 2; case BF_DTYPE_I16: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_QUANTIZE(float,float,int16_t); } else { @@ -413,7 +413,7 @@ BFstatus bfQuantize(BFarray const* in, } case BF_DTYPE_CI32: nelement *= 2; case BF_DTYPE_I32: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_QUANTIZE(float,double,int32_t); } else { @@ -425,7 +425,7 @@ BFstatus bfQuantize(BFarray const* in, break; } case BF_DTYPE_U8: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { } else { @@ -437,7 +437,7 @@ BFstatus bfQuantize(BFarray const* in, break; } case BF_DTYPE_U16: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_QUANTIZE(float,float,uint16_t); } else { @@ -449,7 +449,7 @@ BFstatus bfQuantize(BFarray const* in, break; } case BF_DTYPE_U32: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_QUANTIZE(float,double,uint32_t); } else { diff --git a/src/ring.cpp b/src/ring.cpp index ce0614b4a..cf96eb372 100644 --- a/src/ring.cpp +++ b/src/ring.cpp @@ -29,6 +29,7 @@ // TODO: Consider adding Add BF_TRY( ) to destructors too to ease debugging +#include #include #include "ring_impl.hpp" #include "assert.hpp" diff --git a/src/ring_impl.cpp b/src/ring_impl.cpp index 57da516df..cf80e854a 100644 --- a/src/ring_impl.cpp +++ b/src/ring_impl.cpp @@ -48,6 +48,7 @@ #include "ring_impl.hpp" #include "utils.hpp" #include "assert.hpp" +#include #include #include diff --git a/src/romein.cu b/src/romein.cu index 866bf869b..5e8ab85ee 100644 --- a/src/romein.cu +++ b/src/romein.cu @@ -32,6 +32,7 @@ Implements the Romein convolutional algorithm onto a GPU using CUDA. */ #include +#include #include #include "romein_kernels.cuh" diff --git a/src/trace.hpp b/src/trace.hpp index 783bf9489..13a127d0a 100644 --- a/src/trace.hpp +++ b/src/trace.hpp @@ -28,6 +28,7 @@ #pragma once +#include #include "cuda.hpp" #if BF_CUDA_ENABLED diff --git a/src/transpose.cu b/src/transpose.cu index 4acaafd96..67baecfc7 100644 --- a/src/transpose.cu +++ b/src/transpose.cu @@ -27,6 +27,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include "assert.hpp" diff --git a/src/udp_capture.cpp b/src/udp_capture.cpp index 87ca89133..aef972785 100644 --- a/src/udp_capture.cpp +++ b/src/udp_capture.cpp @@ -27,6 +27,7 @@ */ #include "assert.hpp" +#include #include #include #include diff --git a/src/udp_transmit.cpp b/src/udp_transmit.cpp index ef6ad9adb..7d91ee210 100644 --- a/src/udp_transmit.cpp +++ b/src/udp_transmit.cpp @@ -28,6 +28,7 @@ */ #include "assert.hpp" +#include #include #include #include "proclog.hpp" diff --git a/src/unpack.cpp b/src/unpack.cpp index 7266bd3f3..6095c185b 100644 --- a/src/unpack.cpp +++ b/src/unpack.cpp @@ -29,7 +29,7 @@ #include #include "utils.hpp" -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED #include "cuda.hpp" #include "trace.hpp" #include @@ -264,7 +264,7 @@ BFstatus bfUnpack(BFarray const* in, BF_ASSERT(is_contiguous(in), BF_STATUS_UNSUPPORTED_STRIDE); BF_ASSERT(is_contiguous(out), BF_STATUS_UNSUPPORTED_STRIDE); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED BF_ASSERT(space_accessible_from(in->space, BF_SPACE_SYSTEM) || (space_accessible_from(in->space, BF_SPACE_CUDA) && space_accessible_from(out->space, BF_SPACE_CUDA)), BF_STATUS_UNSUPPORTED_SPACE); BF_ASSERT(space_accessible_from(out->space, BF_SPACE_SYSTEM) || (space_accessible_from(in->space, BF_SPACE_CUDA) && space_accessible_from(out->space, BF_SPACE_CUDA)), @@ -280,7 +280,7 @@ BFstatus bfUnpack(BFarray const* in, bool byteswap = ( in->big_endian != is_big_endian()); bool conjugate = (in->conjugated != out->conjugated); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { BF_ASSERT(nelement<=(size_t)512*65535*65535, BF_STATUS_UNSUPPORTED_SHAPE); } @@ -305,7 +305,7 @@ BFstatus bfUnpack(BFarray const* in, align_msb, \ conjugate)) -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED #define CALL_FOREACH_SIMPLE_GPU_UNPACK(itype,otype) \ { \ BF_TRACE(); \ @@ -343,7 +343,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I1: { BF_ASSERT(nelement % 8 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 8; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_UNPACK(uint8_t,int64_t); } else { @@ -358,7 +358,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I2: { BF_ASSERT(nelement % 4 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 4; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_UNPACK(uint8_t,int32_t); } else { @@ -373,7 +373,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I4: { BF_ASSERT(nelement % 2 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 2; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_UNPACK(uint8_t,int16_t); } else { @@ -390,7 +390,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_U2: { BF_ASSERT(nelement % 4 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 4; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_UNPACK(uint8_t,uint32_t); } else { @@ -404,7 +404,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_U4: { BF_ASSERT(nelement % 2 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 2; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_UNPACK(uint8_t,uint16_t); } else { @@ -426,7 +426,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I1: { BF_ASSERT(nelement % 8 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 8; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int64_t,float); } else { @@ -441,7 +441,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I2: { BF_ASSERT(nelement % 4 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 4; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int32_t,float); } else { @@ -456,7 +456,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I4: { BF_ASSERT(nelement % 2 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 2; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int16_t,float); } else { @@ -478,7 +478,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I1: { BF_ASSERT(nelement % 8 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 8; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int64_t,double); } else { @@ -492,7 +492,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I2: { BF_ASSERT(nelement % 4 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 4; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int32_t,double); } else { @@ -507,7 +507,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I4: { BF_ASSERT(nelement % 2 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 2; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int16_t,double); } else { @@ -526,7 +526,7 @@ BFstatus bfUnpack(BFarray const* in, } #undef CALL_FOREACH_SIMPLE_CPU_UNPACK #undef CALL_FOREACH_PROMOTE_CPU_UNPACK -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED #undef CALL_FOREACH_SIMPLE_GPU_UNPACK #undef CALL_FOREACH_PROMOTE_GPU_UNPACK #endif diff --git a/src/utils.hpp b/src/utils.hpp index 710e3488b..c79bc2295 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -29,6 +29,7 @@ #pragma once +#include #include #include #include diff --git a/tools/like_bmon.py b/tools/like_bmon.py index 0448c7468..e89a9abf3 100755 --- a/tools/like_bmon.py +++ b/tools/like_bmon.py @@ -1,7 +1,7 @@ #!/usr/bin/env python -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2020, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -45,10 +45,10 @@ from io import StringIO os.environ['VMA_TRACELEVEL'] = '0' -from bifrost.proclog import load_by_pid +from bifrost.proclog import PROCLOG_DIR, load_by_pid -BIFROST_STATS_BASE_DIR = '/dev/shm/bifrost/' +BIFROST_STATS_BASE_DIR = PROCLOG_DIR def get_transmit_receive(): diff --git a/tools/like_ps.py b/tools/like_ps.py index 8fb0529e6..62da498de 100755 --- a/tools/like_ps.py +++ b/tools/like_ps.py @@ -36,10 +36,10 @@ import subprocess os.environ['VMA_TRACELEVEL'] = '0' -from bifrost.proclog import load_by_pid +from bifrost.proclog import PROCLOG_DIR, load_by_pid -BIFROST_STATS_BASE_DIR = '/dev/shm/bifrost/' +BIFROST_STATS_BASE_DIR = PROCLOG_DIR def get_process_details(pid): diff --git a/tools/like_top.py b/tools/like_top.py index b0dee865f..c29daaf4f 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -48,10 +48,10 @@ from io import StringIO os.environ['VMA_TRACELEVEL'] = '0' -from bifrost.proclog import load_by_pid +from bifrost.proclog import PROCLOG_DIR, load_by_pid -BIFROST_STATS_BASE_DIR = '/dev/shm/bifrost/' +BIFROST_STATS_BASE_DIR = PROCLOG_DIR def get_load_average(): diff --git a/tools/pipeline2dot.py b/tools/pipeline2dot.py index a254954b3..4cf47e5b0 100755 --- a/tools/pipeline2dot.py +++ b/tools/pipeline2dot.py @@ -36,10 +36,10 @@ import argparse import subprocess -from bifrost.proclog import load_by_pid +from bifrost.proclog import PROCLOG_DIR, load_by_pid -BIFROST_STATS_BASE_DIR = '/dev/shm/bifrost/' +BIFROST_STATS_BASE_DIR = PROCLOG_DIR def get_process_details(pid): From 62f9ab29c2311f249fee52c2de427519e48de093 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Oct 2021 09:46:38 -0600 Subject: [PATCH 0166/1155] Started on a m4 file that can be installed to help others find Bifrost. --- .gitignore | 1 + Makefile.in | 12 +++++++++++- config.mk.in | 1 + share/bifrost.m4 | 45 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 share/bifrost.m4 diff --git a/.gitignore b/.gitignore index e66e6c010..3af2b2a93 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ config.mk Makefile src/Makefile python/Makefile +src/bifrost/config.h # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/Makefile.in b/Makefile.in index e6409fd0b..34b3610af 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3,6 +3,7 @@ include config.mk LIB_DIR = lib INC_DIR = src +DAT_DIR = share SRC_DIR = src HAVE_PYTHON ?= @HAVE_PYTHON@ @@ -25,7 +26,7 @@ clean: $(MAKE) -C $(BIFROST_PYTHON_DIR) clean || true $(MAKE) -C $(SRC_DIR) clean .PHONY: clean -install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) +install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) $(INSTALL_DAT_DIR)/$(BIFROST_NAME) $(MAKE) -C $(BIFROST_PYTHON_DIR) install .PHONY: install uninstall: @@ -95,3 +96,12 @@ else @echo "mkdir -p $@" @echo "cp $? $@/" endif + +$(INSTALL_DAT_DIR)/bifrost: $(DAT_DIR)/* +ifeq ($(DRY_RUN),0) + mkdir -p $@ + cp $? $@/ +else + @echo "mkdir -p $@" + @echo "cp $? $@/" +endif diff --git a/config.mk.in b/config.mk.in index bedcb1880..9e86358b8 100644 --- a/config.mk.in +++ b/config.mk.in @@ -21,6 +21,7 @@ prefix = @prefix@ exec_prefix = @exec_prefix@ INSTALL_LIB_DIR = @libdir@ INSTALL_INC_DIR = @includedir@ +INSTALL_DAT_DIR = @datadir@ BIFROST_NAME = bifrost LIBBIFROST_NAME = lib$(BIFROST_NAME) diff --git a/share/bifrost.m4 b/share/bifrost.m4 new file mode 100644 index 000000000..db8ec6c6b --- /dev/null +++ b/share/bifrost.m4 @@ -0,0 +1,45 @@ +AC_DEFUN([AX_CHECK_BIFROST], +[ + AC_PROVIDE([AX_CHECK_BIFROST]) + AC_ARG_WITH([bifrost], + [AS_HELP_STRING([--with-bifrost], + [Bifrost install path (default=/usr/local)])], + [], + [with_bifrost=/usr/local/]) + AC_SUBST([BIFROST_PATH], [$with_bifrost]) + + AS_SUBST([HAVE_BIFROST], [1]) + AC_CHECK_HEADER([bifrost/config.h], [], [AC_SUBST([HAVE_BIFROST], [0])]) + if test "$HAVE_BIFROST" = "1"; then + AC_MSG_CHECKING([for a working Bifrost installation]) + + CPPFLAGS_save="$CPPFLAGS" + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + CPPFLAGS="$CPPFLAGS -L$with_bifrost" + LDFLAGS="$LDFLAGS -L$with_bifrost" + LIBS="$LIBS -lbifrost" + + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include ]], + [[bfGetCudaEnabled();]])], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_SUBST([HAVE_BIFROST], [0])]) + + CPPFLAGS="$CPPFLAGS_save" + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + fi + + if test "$HAVE_BIFROST" = "1"; then + CPPFLAGS="$CPPFLAGS -L$with_bifrost" + LDFLAGS="$LDFLAGS -L$with_bifrost" + LIBS="$LIBS -lbifrost" + fi +]) From a6c81a9f3d26d07d8044938fe8dc004e3f9ec75a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Oct 2021 10:09:31 -0600 Subject: [PATCH 0167/1155] Indentation fix. --- .travis.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 84a07e5cb..d0b34d954 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,11 +23,11 @@ jobs: - HOMEBREW_NO_INSTALL_CLEANUP=1 - HOMEBREW_NO_ANALYTICS=1 - stage: docker and deploy docs - python: 2.7 - script: - - make docker-cpu - - make docker - - bash ./.travis_deploy_docs.sh + python: 2.7 + script: + - make docker-cpu + - make docker + - bash ./.travis_deploy_docs.sh allow_failures: - python: 2.7 - python: pypy2.7-6.0 From fb41cb24340ad89e2b5e10a8d4b1fd8a10bae8a6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Oct 2021 10:31:36 -0600 Subject: [PATCH 0168/1155] Disable homebrew auto-update. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index d0b34d954..9f58c1612 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ jobs: env: - HOMEBREW_NO_INSTALL_CLEANUP=1 - HOMEBREW_NO_ANALYTICS=1 + - HOMEBREW_NO_AUTO_UPDATE=1 - stage: docker and deploy docs python: 2.7 script: From af055cc93044b54f45ada1f36477bc21161c5dce Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Oct 2021 10:48:46 -0600 Subject: [PATCH 0169/1155] Added ctags-exuberant to the homebrew install. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 9f58c1612..07ffb463d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,6 +50,7 @@ addons: update: false packages: - curl + - ctags-exuberant - git - pkg-config - python3 From f88e17f844711a7b32b87940ed28c2a3d41f76e8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 13 Oct 2021 11:14:49 -0600 Subject: [PATCH 0170/1155] Switch to datarootdir to avoid a warning. --- config.mk.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.mk.in b/config.mk.in index 9e86358b8..08749d957 100644 --- a/config.mk.in +++ b/config.mk.in @@ -21,7 +21,7 @@ prefix = @prefix@ exec_prefix = @exec_prefix@ INSTALL_LIB_DIR = @libdir@ INSTALL_INC_DIR = @includedir@ -INSTALL_DAT_DIR = @datadir@ +INSTALL_DAT_DIR = @datarootdir@ BIFROST_NAME = bifrost LIBBIFROST_NAME = lib$(BIFROST_NAME) From 4a1ded1285cb86d43e28af24851fa1de3d1e0268 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 13 Oct 2021 11:15:22 -0600 Subject: [PATCH 0171/1155] Allow the user to specify a specific proclog location. --- config/tmpfs.m4 | 10 ++++++---- configure | 13 +++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/config/tmpfs.m4 b/config/tmpfs.m4 index 1ee5ffcb1..7791a3f1c 100644 --- a/config/tmpfs.m4 +++ b/config/tmpfs.m4 @@ -1,8 +1,12 @@ AC_DEFUN([AX_CHECK_TMPFS], [ AC_PROVIDE([AX_CHECK_TMPFS]) - - AC_SUBST([HAVE_TMPFS], [/tmp]) + + AC_ARG_WITH([logging_dir], + [AS_HELP_STRING([--with-logging-dir=[DIR]], + [directory for Bifrost proclog logging (default=autodetect)])], + [AC_SUBST([HAVE_TMPFS], [$with_logging_dir])], + [AC_SUBST([HAVE_TMPFS], [/tmp])]) if test "$HAVE_TMPFS" = "/tmp"; then AC_CHECK_FILE([/dev/shm], @@ -20,6 +24,4 @@ AC_DEFUN([AX_CHECK_TMPFS], AC_MSG_WARN([$HAVE_TMPFS may have performance problems for logging]) AC_SUBST([HAVE_TMPFS], [/tmp/bifrost]) fi - - CPPFLAGS="$CPPFLAGS -DBF_PROCLOG_DIR='\"$HAVE_TMPFS\"'" ]) diff --git a/configure b/configure index b75a112db..fc918a292 100755 --- a/configure +++ b/configure @@ -804,6 +804,7 @@ enable_numa enable_hwloc enable_vma with_alignment +with_logging_dir enable_debug enable_trace enable_native_arch @@ -1495,6 +1496,8 @@ Optional Packages: --with-gpu-archs=... default GPU architectures (default='35 61') --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) + --with-logging-dir=DIR directory for Bifrost proclog logging + (default=autodetect) --with-python=[PATH] absolute path to python executable --with-pybuild-flags build flags for python (default='') --with-pyinstall-flags install flags for python (default='') @@ -17761,8 +17764,16 @@ ALIGNMENT=$with_alignment + +# Check whether --with-logging_dir was given. +if test "${with_logging_dir+set}" = set; then : + withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir + +else HAVE_TMPFS=/tmp +fi + if test "$HAVE_TMPFS" = "/tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 @@ -17837,8 +17848,6 @@ $as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging fi - CPPFLAGS="$CPPFLAGS -DBF_PROCLOG_DIR='\"$HAVE_TMPFS\"'" - # # Bifrost Features From 340e3edf8435837ae24494c122daa38b7127d881 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 13 Oct 2021 11:32:02 -0600 Subject: [PATCH 0172/1155] Add gawk and gsed to the homebrew install. --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 07ffb463d..c3178092f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,7 +51,9 @@ addons: packages: - curl - ctags-exuberant + - gawk - git + - gnu-sed - pkg-config - python3 From bb1f7c58e150c47fecabaa17208ef11c6bbba6b3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 13 Oct 2021 13:14:27 -0600 Subject: [PATCH 0173/1155] A couple of residual Py3 things. --- python/bifrost/blocks/print_header.py | 2 +- python/bifrost/sigproc.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/bifrost/blocks/print_header.py b/python/bifrost/blocks/print_header.py index 21713aebe..bd1e8d26f 100644 --- a/python/bifrost/blocks/print_header.py +++ b/python/bifrost/blocks/print_header.py @@ -24,7 +24,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import +from __future__ import absolute_import, print_function import pprint from bifrost.pipeline import SinkBlock diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index 82e7de42b..8fbc6ce0f 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -249,9 +249,9 @@ def pack(data, nbit): raise ValueError("unpack: nbit must divide into 8") if data.dtype not in (np.uint8, np.int8): raise TypeError("unpack: dtype must be 8-bit") - outdata = np.zeros(data.size / (8 / nbit)).astype('uint8') - for index in range(1, 8 / nbit): - outdata += data[index::8 / nbit] / (2**nbit)**index + outdata = np.zeros(data.size // (8 // nbit)).astype('uint8') + for index in range(1, 8 // nbit): + outdata += data[index::8 // nbit] // (2**nbit)**index return outdata def _write_data(data, nbit, file_object): From d3f99c4061cc54bed3c1d94a9cdfa8b4d2698908 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Oct 2021 13:03:31 -0600 Subject: [PATCH 0174/1155] Rearragned the CUDA linking flags to fix build problems. --- config/cuda.m4 | 2 +- configure | 346 ++++++++++++++++++++++++++++++++++++++++++++++--- configure.ac | 2 - 3 files changed, 332 insertions(+), 18 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index ffc4df83e..01d67aedc 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -48,7 +48,7 @@ AC_DEFUN([AX_CHECK_CUDA], if test "$HAVE_CUDA" = "1"; then CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -lculibos -lnvToolsExt" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" fi AC_ARG_WITH([nvcc_flags], diff --git a/configure b/configure index fc918a292..4774e5ecd 100755 --- a/configure +++ b/configure @@ -764,6 +764,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -880,6 +881,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1132,6 +1134,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1269,7 +1280,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1422,6 +1433,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -16472,6 +16484,312 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi @@ -16823,6 +17141,7 @@ $as_echo "#define HAVE_CXX11 1" >>confdefs.h fi + for ac_func in memset do : ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" @@ -17531,7 +17850,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -lculibos -lnvToolsExt" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" fi @@ -18525,7 +18844,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18687,7 +19006,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18741,7 +19060,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18795,7 +19114,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18849,7 +19168,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19014,7 +19333,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19068,10 +19387,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19128,7 +19447,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19601,7 +19920,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20182,9 +20501,6 @@ DX_RULES="${DX_SNIPPET_doc}" CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -if test x$HAVE_CUDA = x1; then : - LIBS="$LIBS -L. -lcufft_static_pruned" -fi ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h" diff --git a/configure.ac b/configure.ac index 2bd5ef0b3..f41a1b70f 100644 --- a/configure.ac +++ b/configure.ac @@ -256,8 +256,6 @@ DX_INIT_DOXYGEN([bifrost]) CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -AS_IF([test x$HAVE_CUDA = x1], - [LIBS="$LIBS -L. -lcufft_static_pruned"]) AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h]) From 1eec0e1f98b9da82f1e5898d1a302d2f8167c89b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Oct 2021 14:36:57 -0600 Subject: [PATCH 0175/1155] bifrost/config.h breaks map. This should fix that. --- config/cuda.m4 | 16 +++++++++------- configure | 15 +++++++++------ src/Complex.hpp | 2 -- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 01d67aedc..a497d8eea 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -45,17 +45,19 @@ AC_DEFUN([AX_CHECK_CUDA], LIBS="$LIBS_save" fi - if test "$HAVE_CUDA" = "1"; then - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" - fi - AC_ARG_WITH([nvcc_flags], [AS_HELP_STRING([--with-nvcc-flags], [flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"')])], [], [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) AC_SUBST(NVCCFLAGS, $with_nvcc_flags) + + if test "$HAVE_CUDA" = "1"; then + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" + NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" + fi + ]) - diff --git a/configure b/configure index 4774e5ecd..db01b33a2 100755 --- a/configure +++ b/configure @@ -17847,12 +17847,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext LIBS="$LIBS_save" fi - if test "$HAVE_CUDA" = "1"; then - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" - fi - # Check whether --with-nvcc_flags was given. if test "${with_nvcc_flags+set}" = set; then : @@ -17864,6 +17858,15 @@ fi NVCCFLAGS=$with_nvcc_flags + if test "$HAVE_CUDA" = "1"; then + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" + NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" + fi + + # Check whether --with-gpu_archs was given. diff --git a/src/Complex.hpp b/src/Complex.hpp index 7f5ecc2c0..47f218f3c 100644 --- a/src/Complex.hpp +++ b/src/Complex.hpp @@ -28,8 +28,6 @@ #pragma once -#include - #if BF_CUDA_ENABLED #include #endif From f01c0915c7248f4bdeff156f65109771c5a69399 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Oct 2021 12:51:12 -0600 Subject: [PATCH 0176/1155] Added a feature to try to auto-determine which CUDA architectures to target. --- config/cuda.m4 | 81 ++++++++- configure | 470 +++++++++++++++++++++++++++++++------------------ configure.ac | 41 ++--- 3 files changed, 393 insertions(+), 199 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index a497d8eea..1780886e8 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -36,9 +36,26 @@ AC_DEFUN([AX_CHECK_CUDA], #include #include ]], [[cudaMalloc(0, 0);]])], - [AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no) - AC_SUBST([HAVE_CUDA], [0])]) + [], + [AC_SUBST([HAVE_CUDA], [0])]) + + if test "$HAVE_CUDA" = "1"; then + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart" + + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include ]], + [[cudaMalloc(0, 0);]])], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_SUBST([HAVE_CUDA], [0])]) + else + AC_MSG_RESULT(no) + AC_SUBST([HAVE_CUDA], [0]) + fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" @@ -60,4 +77,62 @@ AC_DEFUN([AX_CHECK_CUDA], LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" fi + AC_ARG_WITH([gpu_archs], + [AS_HELP_STRING([--with-gpu-archs=...], + [default GPU architectures (default=dectect)])], + [], + [with_gpu_archs='auto']) + if test "$HAVE_CUDA" = "1"; then + if test "$with_gpu_archs" = "auto"; then + AC_MSG_CHECKING([which CUDA architectures to target]) + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include + #include + #include + #include ]], + [[ + std::set archs; + int major, minor, arch; + int deviceCount = 0; + cudaGetDeviceCount(&deviceCount); + if( deviceCount == 0 ) { + return 1; + } + std::ofstream fh; + fh.open("confarchs.out"); + for(int dev=0; dev 0 ) { + fh << " "; + } + fh << arch; + } + } + fh.close();]])], + [AC_SUBST([GPU_ARCHS], [`cat confarchs.out`]) + AC_MSG_RESULT([$GPU_ARCHS])], + [AC_MSG_ERROR(failed to find any)]) + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + else + AC_SUBST([GPU_ARCHS], [$with_gpu_archs]) + fi + fi ]) diff --git a/configure b/configure index db01b33a2..e9ea89ccc 100755 --- a/configure +++ b/configure @@ -681,9 +681,6 @@ HAVE_TRACE HAVE_DEBUG HAVE_TMPFS ALIGNMENT -HAVE_VMA -HAVE_HWLOC -HAVE_NUMA GPU_SHAREDMEM GPU_ARCHS NVCCFLAGS @@ -692,6 +689,9 @@ NVPRUNE NVCC HAVE_CUDA CUDA_HOME +HAVE_VMA +HAVE_HWLOC +HAVE_NUMA HAVE_OPENMP LIBOBJS HAVE_CXX11 @@ -796,14 +796,14 @@ with_gnu_ld with_sysroot enable_libtool_lock with_ctags +enable_numa +enable_hwloc +enable_vma with_cuda_home enable_cuda with_nvcc_flags with_gpu_archs with_shared_mem -enable_numa -enable_hwloc -enable_vma with_alignment with_logging_dir enable_debug @@ -1470,10 +1470,10 @@ Optional Features: --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) - --disable-cuda disable cuda support (default=no) --disable-numa disable numa support (default=no) --disable-hwloc disable hwloc support (default=no) --enable-vma enable vma support (default=no) + --disable-cuda disable cuda support (default=no) --enable-debug enable debugging mode (default=no) --enable-trace enable tracing mode for nvprof/nvvp (default=no) --disable-native-arch disable native architecture compilation (default=no) @@ -1505,7 +1505,7 @@ Optional Packages: --with-cuda-home CUDA install path (default=/usr/local/cuda) --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"') - --with-gpu-archs=... default GPU architectures (default='35 61') + --with-gpu-archs=... default GPU architectures (default=dectect) --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) --with-logging-dir=DIR directory for Bifrost proclog logging @@ -17649,10 +17649,192 @@ _ACEOF esac +# +# NUMA +# + +# Check whether --enable-numa was given. +if test "${enable_numa+set}" = set; then : + enableval=$enable_numa; enable_numa=no +else + enable_numa=yes +fi + +HAVE_NUMA=0 + +if test x$enable_numa != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnuma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char numa_node_of_cpu (); +int +main () +{ +return numa_node_of_cpu (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_numa_numa_node_of_cpu=yes +else + ac_cv_lib_numa_numa_node_of_cpu=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : + HAVE_NUMA=1 + + LIBS="$LIBS -lnuma" +fi + +fi + +# +# HWLOC +# + +# Check whether --enable-hwloc was given. +if test "${enable_hwloc+set}" = set; then : + enableval=$enable_hwloc; enable_hwloc=no +else + enable_hwloc=yes +fi + +HAVE_HWLOC=0 + +if test x$enable_hwloc != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } +if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lhwloc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char hwloc_topology_init (); +int +main () +{ +return hwloc_topology_init (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_hwloc_hwloc_topology_init=yes +else + ac_cv_lib_hwloc_hwloc_topology_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : + HAVE_HWLOC=1 + + LIBS="$LIBS -lhwloc" +fi + +fi + +# +# VMA +# + +# Check whether --enable-vma was given. +if test "${enable_vma+set}" = set; then : + enableval=$enable_vma; enable_vma=yes +else + enable_vma=no +fi + +HAVE_VMA=0 + +if test x$enable_vma != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } +if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lvma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char recvfrom_zcopy (); +int +main () +{ +return recvfrom_zcopy (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_vma_recvfrom_zcopy=yes +else + ac_cv_lib_vma_recvfrom_zcopy=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : + HAVE_VMA=1 + + LIBS="$LIBS -lvma" +fi + +fi + # # CUDA # +################################# +# NOTE # +# This needs to come after all # +# other compiler/library tests # +# since it changes LIB to # +# include CUDA-specific entries # +################################# + @@ -17832,15 +18014,49 @@ cudaMalloc(0, 0); } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : + +else + HAVE_CUDA=0 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + if test "$HAVE_CUDA" = "1"; then + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart" + + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #include +int +main () +{ +cudaMalloc(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - HAVE_CUDA=0 + HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_CUDA=0 + + fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" @@ -17867,202 +18083,104 @@ fi fi - - # Check whether --with-gpu_archs was given. if test "${with_gpu_archs+set}" = set; then : withval=$with_gpu_archs; else - with_gpu_archs='35 61' -fi - -GPU_ARCHS=$with_gpu_archs - - - -# Check whether --with-shared_mem was given. -if test "${with_shared_mem+set}" = set; then : - withval=$with_shared_mem; -else - with_shared_mem=16384 + with_gpu_archs='auto' fi -GPU_SHAREDMEM=$with_shared_mem - - -# -# NUMA -# - -# Check whether --enable-numa was given. -if test "${enable_numa+set}" = set; then : - enableval=$enable_numa; enable_numa=no -else - enable_numa=yes -fi - -HAVE_NUMA=0 - -if test x$enable_numa != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } -if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : - $as_echo_n "(cached) " >&6 + if test "$HAVE_CUDA" = "1"; then + if test "$with_gpu_archs" = "auto"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +$as_echo_n "checking which CUDA architectures to target... " >&6; } + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnuma $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char numa_node_of_cpu (); -int -main () -{ -return numa_node_of_cpu (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_numa_numa_node_of_cpu=yes -else - ac_cv_lib_numa_numa_node_of_cpu=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : - HAVE_NUMA=1 - - LIBS="$LIBS -lnuma" -fi - -fi - -# -# HWLOC -# - -# Check whether --enable-hwloc was given. -if test "${enable_hwloc+set}" = set; then : - enableval=$enable_hwloc; enable_hwloc=no -else - enable_hwloc=yes -fi - -HAVE_HWLOC=0 -if test x$enable_hwloc != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } -if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lhwloc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char hwloc_topology_init (); + #include + #include + #include + #include + #include int main () { -return hwloc_topology_init (); + + std::set archs; + int major, minor, arch; + int deviceCount = 0; + cudaGetDeviceCount(&deviceCount); + if( deviceCount == 0 ) { + return 1; + } + std::ofstream fh; + fh.open("confarchs.out"); + for(int dev=0; dev 0 ) { + fh << " "; + } + fh << arch; + } + } + fh.close(); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_hwloc_hwloc_topology_init=yes +if ac_fn_cxx_try_run "$LINENO"; then : + GPU_ARCHS=`cat confarchs.out` + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +$as_echo "$GPU_ARCHS" >&6; } else - ac_cv_lib_hwloc_hwloc_topology_init=no + as_fn_error $? "failed to find any" "$LINENO" 5 fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : - HAVE_HWLOC=1 - - LIBS="$LIBS -lhwloc" +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -fi -# -# VMA -# + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + else + GPU_ARCHS=$with_gpu_archs -# Check whether --enable-vma was given. -if test "${enable_vma+set}" = set; then : - enableval=$enable_vma; enable_vma=yes -else - enable_vma=no -fi + fi + fi -HAVE_VMA=0 -if test x$enable_vma != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } -if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lvma $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char recvfrom_zcopy (); -int -main () -{ -return recvfrom_zcopy (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_vma_recvfrom_zcopy=yes +# Check whether --with-shared_mem was given. +if test "${with_shared_mem+set}" = set; then : + withval=$with_shared_mem; else - ac_cv_lib_vma_recvfrom_zcopy=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + with_shared_mem=16384 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : - HAVE_VMA=1 - LIBS="$LIBS -lvma" -fi +GPU_SHAREDMEM=$with_shared_mem -fi # # Bifrost memory alignment diff --git a/configure.ac b/configure.ac index f41a1b70f..6f2978972 100644 --- a/configure.ac +++ b/configure.ac @@ -74,26 +74,6 @@ AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_UINT8_T -# -# CUDA -# - -AX_CHECK_CUDA - -AC_ARG_WITH([gpu_archs], - [AS_HELP_STRING([--with-gpu-archs=...], - [default GPU architectures (default='35 61')])], - [], - [with_gpu_archs='35 61']) -AC_SUBST(GPU_ARCHS, $with_gpu_archs) - -AC_ARG_WITH([shared_mem], - [AS_HELP_STRING([--with-shared-mem=N], - [default GPU shared memory in bytes (default=16384)])], - [], - [with_shared_mem=16384]) -AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) - # # NUMA # @@ -139,6 +119,27 @@ AS_IF([test x$enable_vma != xno], [AC_SUBST([HAVE_VMA], [1]) LIBS="$LIBS -lvma"])]) +# +# CUDA +# + +################################# +# NOTE # +# This needs to come after all # +# other compiler/library tests # +# since it changes LIB to # +# include CUDA-specific entries # +################################# + +AX_CHECK_CUDA + +AC_ARG_WITH([shared_mem], + [AS_HELP_STRING([--with-shared-mem=N], + [default GPU shared memory in bytes (default=16384)])], + [], + [with_shared_mem=16384]) +AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) + # # Bifrost memory alignment # From e79e2ce3d55e339e6d9e800d3efa50679fe1ac74 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Oct 2021 13:04:01 -0600 Subject: [PATCH 0177/1155] BF_DEBUG -> BF_DEBUG_ENABLED. --- src/assert.hpp | 4 ++-- src/common.cpp | 14 +++----------- src/map.cpp | 4 ++-- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/assert.hpp b/src/assert.hpp index e2d76e151..b3cdcc5a5 100644 --- a/src/assert.hpp +++ b/src/assert.hpp @@ -55,7 +55,7 @@ inline bool should_report_error(BFstatus err) { #include using std::cout; using std::endl; -#if defined(BF_DEBUG) && BF_DEBUG +#if defined(BF_DEBUG_ENABLED) && BF_DEBUG_ENABLED #define BF_REPORT_ERROR(err) do { \ if( bfGetDebugEnabled() && \ should_report_error(err) ) { \ @@ -82,7 +82,7 @@ using std::endl; #define BF_REPORT_ERROR(err) #define BF_DEBUG_PRINT(x) #define BF_REPORT_PREDFAIL(pred, err) -#endif // BF_DEBUG +#endif // BF_DEBUG_ENABLED #define BF_REPORT_INTERNAL_ERROR(msg) do { \ std::cerr << __FILE__ << ":" << __LINE__ \ << " internal error: " \ diff --git a/src/common.cpp b/src/common.cpp index ac75391af..bf6419261 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -66,17 +66,13 @@ const char* bfGetStatusString(BFstatus status) { #undef BF_STATUS_STRING_CASE } -static thread_local bool g_debug_enabled = true; +static thread_local bool g_debug_enabled = BF_DEBUG_ENABLED; BFbool bfGetDebugEnabled() { -#if BF_DEBUG return g_debug_enabled; -#else - return false; -#endif } BFstatus bfSetDebugEnabled(BFbool b) { -#if !BF_DEBUG +#if !BF_DEBUG_ENABLED return BF_STATUS_INVALID_STATE; #else g_debug_enabled = b; @@ -84,9 +80,5 @@ BFstatus bfSetDebugEnabled(BFbool b) { #endif } BFbool bfGetCudaEnabled() { -#if BF_CUDA_ENABLED - return BF_CUDA_ENABLED; -#else - return false; -#endif + return BF_CUDA_ENABLED; } diff --git a/src/map.cpp b/src/map.cpp index f49dfc414..1d96566eb 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -344,7 +344,7 @@ BFstatus build_map_kernel(int* external_ndim, nvrtcResult ret = nvrtcCompileProgram(program, options_c.size(), &options_c[0]); -#if BF_DEBUG +#if BF_DEBUG_ENABLED size_t logsize; // Note: Includes the trailing NULL BF_CHECK_NVRTC( nvrtcGetProgramLogSize(program, &logsize) ); @@ -374,7 +374,7 @@ BFstatus build_map_kernel(int* external_ndim, char* ptx = &vptx[0]; BF_CHECK_NVRTC( nvrtcGetPTX(program, &ptx[0]) ); BF_CHECK_NVRTC( nvrtcDestroyProgram(&program) ); -#if BF_DEBUG +#if BF_DEBUG_ENABLED if( EnvVars::get("BF_PRINT_MAP_KERNELS_PTX", "0") != "0" ) { std::cout << ptx << std::endl; } From 4af110773de4c83ab0c396ef8eec7d4f0b9f927c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Oct 2021 16:02:25 -0600 Subject: [PATCH 0178/1155] Switch over to fornax for the test data. --- test/download_test_data.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/download_test_data.sh b/test/download_test_data.sh index 0fc93517b..9ae9fbbc3 100755 --- a/test/download_test_data.sh +++ b/test/download_test_data.sh @@ -1,8 +1,5 @@ #!/bin/bash -curl -L -O http://mcranmer.com/data/bf_test_files.tar.gz -if [[ "$?" != "0" ]]; then - curl -L -O https://fornax.phys.unm.edu/lwa/data/bf_test_files.tar.gz -fi +curl -L -O https://fornax.phys.unm.edu/lwa/data/bf_test_files.tar.gz tar xzf bf_test_files.tar.gz mv for_test_suite data rm bf_test_files.tar.gz From ffc10840ceb734b54642dd96bd9c557607103190 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 09:27:55 -0600 Subject: [PATCH 0179/1155] Moved the versioning into AC_INIT. --- config.mk.in | 6 +++--- configure | 53 ++++++++++++++++++++++++++++++++++------------------ configure.ac | 10 +++++++++- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/config.mk.in b/config.mk.in index 08749d957..cff27d162 100644 --- a/config.mk.in +++ b/config.mk.in @@ -25,9 +25,9 @@ INSTALL_DAT_DIR = @datarootdir@ BIFROST_NAME = bifrost LIBBIFROST_NAME = lib$(BIFROST_NAME) -LIBBIFROST_MAJOR = 0 -LIBBIFROST_MINOR = 9 -LIBBIFROST_PATCH = 0 +LIBBIFROST_MAJOR = @PACKAGE_VERSION_MAJOR@ +LIBBIFROST_MINOR = @PACKAGE_VERSION_MINOR@ +LIBBIFROST_PATCH = @PACKAGE_VERSION_MICRO@ LIBBIFROST_SO = $(LIBBIFROST_NAME)$(SO_EXT) LIBBIFROST_SO_MAJ = $(LIBBIFROST_SO).$(LIBBIFROST_MAJOR) LIBBIFROST_SO_MAJ_MIN = $(LIBBIFROST_SO_MAJ).$(LIBBIFROST_MINOR) diff --git a/configure b/configure index e9ea89ccc..05f4b5d12 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69. +# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -585,14 +585,13 @@ MFLAGS= MAKEFLAGS= # Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="bifrost" +PACKAGE_NAME='bifrost' +PACKAGE_TARNAME='bifrost' +PACKAGE_VERSION='0.9.0' +PACKAGE_STRING='bifrost 0.9.0' +PACKAGE_BUGREPORT='' +PACKAGE_URL='https://github.com/ledatelescope/bifrost/' + ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ @@ -631,6 +630,9 @@ ac_includes_default="\ #endif" ac_subst_vars='LTLIBOBJS +PACKAGE_VERSION_MICRO +PACKAGE_VERSION_MINOR +PACKAGE_VERSION_MAJOR DX_RULES PAPER_SIZE DOXYGEN_PAPER_SIZE @@ -884,7 +886,7 @@ localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' @@ -1393,7 +1395,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. +\`configure' configures bifrost 0.9.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1442,7 +1444,7 @@ Fine tuning of the installation directories: --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --docdir=DIR documentation root [DATAROOTDIR/doc/bifrost] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1458,7 +1460,9 @@ _ACEOF fi if test -n "$ac_init_help"; then - + case $ac_init_help in + short | recursive ) echo "Configuration of bifrost 0.9.0:";; + esac cat <<\_ACEOF Optional Features: @@ -1539,6 +1543,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. +bifrost home page: . _ACEOF ac_status=$? fi @@ -1601,7 +1606,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -configure +bifrost configure 0.9.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2380,7 +2385,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by $as_me, which was +It was created by bifrost $as_me 0.9.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -20616,6 +20621,17 @@ DX_RULES="${DX_SNIPPET_doc}" #echo DX_ENV=$DX_ENV +# +# Version splitting +# + +PACKAGE_VERSION_MAJOR=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $1}'` + +PACKAGE_VERSION_MINOR=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $2}'` + +PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $3}'` + + # # Linking flags # @@ -21168,7 +21184,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by $as_me, which was +This file was extended by bifrost $as_me 0.9.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21219,13 +21235,14 @@ $config_files Configuration commands: $config_commands -Report bugs to the package provider." +Report bugs to the package provider. +bifrost home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -config.status +bifrost config.status 0.9.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 6f2978972..a488bbb57 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([bifrost], [], [], [], [https://github.com/ledatelescope/bifrost/]) +AC_INIT([bifrost], [0.9.0], [], [], [https://github.com/ledatelescope/bifrost/]) AC_LANG(C++) AC_CONFIG_SRCDIR([src/cuda.cpp]) @@ -251,6 +251,14 @@ DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) DX_INIT_DOXYGEN([bifrost]) +# +# Version splitting +# + +AC_SUBST([PACKAGE_VERSION_MAJOR], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $1}'`]) +AC_SUBST([PACKAGE_VERSION_MINOR], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $2}'`]) +AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $3}'`]) + # # Linking flags # From 05947da8f54ecd71c4b037e7fc27b1d5190759cc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 09:49:15 -0600 Subject: [PATCH 0180/1155] Allow DRY_RUN to also control the Python install. --- python/Makefile.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/Makefile.in b/python/Makefile.in index a0577d6d8..f9a1510ac 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -51,7 +51,11 @@ build: bifrost/*.py Makefile $(BIFROST_PYTHON_VERSION_FILE) $(BIFROST_PYTHON_BIN .PHONY: build install: build +ifeq ($(DRY_RUN),0) @PYTHON@ setup.py install @PYINSTALLFLAGS@ +else + @echo "@PYTHON@ setup.py install @PYINSTALLFLAGS@" +endif .PHONY: install clean: From 2d50b9741334d625c89de85e1de5263429d1ca4c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 09:50:16 -0600 Subject: [PATCH 0181/1155] Added in a pkgconfig file for Bifrost. --- .gitignore | 1 + Makefile.in | 13 +++++++++++-- configure | 3 ++- configure.ac | 2 +- share/bifrost.pc.in | 11 +++++++++++ 5 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 share/bifrost.pc.in diff --git a/.gitignore b/.gitignore index 3af2b2a93..e91378b43 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ config.mk Makefile src/Makefile python/Makefile +share/bifrost.pc src/bifrost/config.h # Byte-compiled / optimized / DLL files diff --git a/Makefile.in b/Makefile.in index 34b3610af..efb043b73 100644 --- a/Makefile.in +++ b/Makefile.in @@ -26,7 +26,7 @@ clean: $(MAKE) -C $(BIFROST_PYTHON_DIR) clean || true $(MAKE) -C $(SRC_DIR) clean .PHONY: clean -install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) $(INSTALL_DAT_DIR)/$(BIFROST_NAME) +install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) $(INSTALL_DAT_DIR)/$(BIFROST_NAME) $(INSTALL_LIB_DIR)/pkgconfig $(MAKE) -C $(BIFROST_PYTHON_DIR) install .PHONY: install uninstall: @@ -97,7 +97,16 @@ else @echo "cp $? $@/" endif -$(INSTALL_DAT_DIR)/bifrost: $(DAT_DIR)/* +$(INSTALL_DAT_DIR)/bifrost: $(DAT_DIR)/*.m4 +ifeq ($(DRY_RUN),0) + mkdir -p $@ + cp $? $@/ +else + @echo "mkdir -p $@" + @echo "cp $? $@/" +endif + +$(INSTALL_LIB_DIR)/pkgconfig: $(DAT_DIR)/*.pc ifeq ($(DRY_RUN),0) mkdir -p $@ cp $? $@/ diff --git a/configure b/configure index 05f4b5d12..c8b115e39 100755 --- a/configure +++ b/configure @@ -20639,7 +20639,7 @@ PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $3}'` CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h" +ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h" cat >confcache <<\_ACEOF @@ -21744,6 +21744,7 @@ do "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; + "share/bifrost.pc") CONFIG_FILES="$CONFIG_FILES share/bifrost.pc" ;; "src/bifrost/config.h") CONFIG_FILES="$CONFIG_FILES src/bifrost/config.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; diff --git a/configure.ac b/configure.ac index a488bbb57..c6d728dab 100644 --- a/configure.ac +++ b/configure.ac @@ -266,6 +266,6 @@ AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h]) +AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h]) AC_OUTPUT diff --git a/share/bifrost.pc.in b/share/bifrost.pc.in new file mode 100644 index 000000000..1a038acc9 --- /dev/null +++ b/share/bifrost.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: bifrost +Description: A stream processing framework for high-throughput applications. +Requires: +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lbifrost +Cflags: -I${includedir} From e4ecec228ef0d0477bebe31c419845039fd7c0d2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 10:34:23 -0600 Subject: [PATCH 0182/1155] Added an option to disable build the Python bindings. --- Makefile.in | 14 ++++++++++++-- configure | 30 +++++++++++++++++++++++------- configure.ac | 28 +++++++++++++++++----------- 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/Makefile.in b/Makefile.in index efb043b73..751a0050d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -6,8 +6,8 @@ INC_DIR = src DAT_DIR = share SRC_DIR = src -HAVE_PYTHON ?= @HAVE_PYTHON@ -HAVE_DOCKER ?= @HAVE_DOCKER@ +HAVE_PYTHON = @HAVE_PYTHON@ +HAVE_DOCKER = @HAVE_DOCKER@ BIFROST_PYTHON_DIR = python @@ -20,21 +20,31 @@ libbifrost: test: #$(MAKE) -C $(SRC_DIR) test +ifeq ($(HAVE_PYTHON),1) cd test && ./download_test_data.sh ; python -m unittest discover +endif .PHONY: test clean: +ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) clean || true +endif $(MAKE) -C $(SRC_DIR) clean .PHONY: clean install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) $(INSTALL_DAT_DIR)/$(BIFROST_NAME) $(INSTALL_LIB_DIR)/pkgconfig +ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) install +endif .PHONY: install uninstall: rm -f $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO) rm -f $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ) rm -f $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) rm -rf $(INSTALL_INC_DIR)/bifrost/ + rm -ff $(INSTALL_DAT_DIR)/bifrost/ + rm -f $(INSTALL_LIB_DIR)/pkgconfig/bifrost.pc +ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) uninstall +endif .PHONY: uninstall doc: $(INC_DIR)/bifrost/*.h Doxyfile diff --git a/configure b/configure index c8b115e39..a0abf3b36 100755 --- a/configure +++ b/configure @@ -676,8 +676,8 @@ HAVE_DOCKER DOCKER PYINSTALLFLAGS PYBUILDFLAGS -HAVE_PYTHON PYTHON +HAVE_PYTHON HAVE_CUDA_DEBUG HAVE_TRACE HAVE_DEBUG @@ -812,6 +812,7 @@ enable_debug enable_trace enable_native_arch enable_cuda_debug +enable_python with_python with_pybuild_flags with_pyinstall_flags @@ -1482,6 +1483,7 @@ Optional Features: --enable-trace enable tracing mode for nvprof/nvvp (default=no) --disable-native-arch disable native architecture compilation (default=no) --enable-cuda-debug enable CUDA debugging (nvcc -G; default=no) + --disable-python disable building the Python bindings (default=no) --disable-doxygen-doc don't generate any doxygen documentation --enable-doxygen-dot generate graphics for doxygen documentation --disable-doxygen-man don't generate doxygen manual pages @@ -18361,6 +18363,16 @@ fi # Python # +# Check whether --enable-python was given. +if test "${enable_python+set}" = set; then : + enableval=$enable_python; enable_python=no +else + enable_python=yes +fi + +HAVE_PYTHON=0 + +if test x$enable_python != xno; then : @@ -18419,6 +18431,7 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="no" ;; esac fi @@ -18468,6 +18481,7 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="no" ;; esac fi @@ -18492,22 +18506,22 @@ fi -if test x${PYTHON} != x; then : + if test x${PYTHON} != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 $as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 $as_echo "$as_me: WARNING: python module will not be built" >&2;} else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - HAVE_PYTHON=1 + HAVE_PYTHON=1 fi fi - +fi # Check whether --with-pybuild_flags was given. if test "${with_pybuild_flags+set}" = set; then : @@ -18588,6 +18602,7 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_DOCKER" && ac_cv_path_DOCKER="no" ;; esac fi @@ -18637,6 +18652,7 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_DOCKER" && ac_cv_path_DOCKER="no" ;; esac fi @@ -18661,7 +18677,7 @@ fi -if test x${DOCKER} != x; then : +if test x${DOCKER} != xno; then : HAVE_DOCKER=1 fi diff --git a/configure.ac b/configure.ac index c6d728dab..66aa0c246 100644 --- a/configure.ac +++ b/configure.ac @@ -205,15 +205,21 @@ AS_IF([test x$enable_cuda_debug != xno], # Python # -AX_WITH_PROG(PYTHON, python) -AS_IF([test x${PYTHON} != x], - [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) - AS_IF([! ${PYTHON} -c "import ctypesgen" 2>/dev/null], - [AC_MSG_RESULT([no]) - AC_MSG_WARN([python module will not be built])], - [AC_MSG_RESULT([yes]) - AC_SUBST(HAVE_PYTHON, 1)])]) - +AC_ARG_ENABLE([python], + [AS_HELP_STRING([--disable-python], + [disable building the Python bindings (default=no)])], + [enable_python=no], + [enable_python=yes]) +AC_SUBST([HAVE_PYTHON], [0]) +AS_IF([test x$enable_python != xno], + [AX_WITH_PROG(PYTHON, python, no, $PATH) + AS_IF([test x${PYTHON} != xno], + [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) + AS_IF([! ${PYTHON} -c "import ctypesgen" 2>/dev/null], + [AC_MSG_RESULT([no]) + AC_MSG_WARN([python module will not be built])], + [AC_MSG_RESULT([yes]) + AC_SUBST(HAVE_PYTHON, 1)])])]) AC_ARG_WITH([pybuild_flags], [AS_HELP_STRING([--with-pybuild-flags], [build flags for python (default='')])], @@ -232,8 +238,8 @@ AC_SUBST(PYINSTALLFLAGS, $with_pyinstall_flags) # Docker # -AX_WITH_PROG(DOCKER, docker) -AS_IF([test x${DOCKER} != x], +AX_WITH_PROG(DOCKER, docker, no, $PATH) +AS_IF([test x${DOCKER} != xno], [AC_SUBST(HAVE_DOCKER, 1)]) # From 057327738547b98d310ebd1b271e70f77a594f4d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 11:27:54 -0600 Subject: [PATCH 0183/1155] Try without sudo. --- .travis.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index c3178092f..db38c8926 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,3 @@ -sudo: required - dist: bionic language: python @@ -58,7 +56,7 @@ addons: - python3 script: - - sudo pip --no-cache-dir install \ + - pip --no-cache-dir install \ setuptools \ numpy \ matplotlib \ @@ -69,9 +67,9 @@ script: git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ coveralls \ codecov - - sudo ./configure --disable-cuda - - sudo make -j - - sudo make install + - ./configure --disable-cuda + - make -j + - make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - cd test && sudo -E bash ./travis.sh && cd .. From 47054a3b0e635608d74ebcd42ff59c5bd042dc80 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 11:34:47 -0600 Subject: [PATCH 0184/1155] Maybe one sudo. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index db38c8926..5e5c4a714 100644 --- a/.travis.yml +++ b/.travis.yml @@ -69,7 +69,7 @@ script: codecov - ./configure --disable-cuda - make -j - - make install + - sudo make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - cd test && sudo -E bash ./travis.sh && cd .. From 37d08ebeb73c09c18d57877594ed5dac669fa483 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 13:07:50 -0600 Subject: [PATCH 0185/1155] One too many sudos. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5e5c4a714..b61c3e101 100644 --- a/.travis.yml +++ b/.travis.yml @@ -71,7 +71,7 @@ script: - make -j - sudo make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - - cd test && sudo -E bash ./travis.sh && cd .. + - cd test && bash ./travis.sh && cd .. env: global: From 27effa1fe29453e9b1401d6f09f2b6c407090f1d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 13:26:06 -0600 Subject: [PATCH 0186/1155] Split the Python install off. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b61c3e101..963592736 100644 --- a/.travis.yml +++ b/.travis.yml @@ -71,6 +71,7 @@ script: - make -j - sudo make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} + - cd python && make install && cd .. - cd test && bash ./travis.sh && cd .. env: From 35ab99cc752ef444bc693dc7b456e434f69e5ad8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 13:42:09 -0600 Subject: [PATCH 0187/1155] Try a pip install? --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 963592736..ca760aa00 100644 --- a/.travis.yml +++ b/.travis.yml @@ -71,7 +71,7 @@ script: - make -j - sudo make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - - cd python && make install && cd .. + - cd python && pip install . && cd .. - cd test && bash ./travis.sh && cd .. env: From ff0f2b7095b56b51d5327ccfc48c0e943b6fd6c2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 17:01:12 -0600 Subject: [PATCH 0188/1155] What about skipping the install? --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index ca760aa00..547d4d88e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -69,9 +69,8 @@ script: codecov - ./configure --disable-cuda - make -j - - sudo make install - - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - - cd python && pip install . && cd .. + - export LD_LIBRARY_PATH=`realpath ./lib`:${LD_LIBRARY_PATH} + - export PYTHONPATH=`realpath ./python` - cd test && bash ./travis.sh && cd .. env: From 81d23c3da25dea1cbb7f608143ce6fd4e3709c65 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 19:42:11 -0600 Subject: [PATCH 0189/1155] BF_HAVE_TRACE -> BF_TRACE_ENABLED. --- src/bifrost/config.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 3748db126..f2ade0f4e 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -54,7 +54,7 @@ extern "C" { // Debugging features #define BF_DEBUG_ENABLED @HAVE_DEBUG@ -#define BF_HAVE_TRACE @HAVE_TRACE@ +#define BF_TRACE_ENABLED @HAVE_TRACE@ #define BF_CUDA_DEBUG_ENABLED @HAVE_CUDA_DEBUG@ // Logging directory From 89710e5da7eca9357606161c763e0ac83c1a7d25 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 19:57:53 -0600 Subject: [PATCH 0190/1155] Use BF_CUDA_ENABLED to auto-skip some tests. --- test/jenkins.sh | 24 +----------------------- test/test_accumulate.py | 3 +++ test/test_fdmt.py | 3 +++ test/test_fft.py | 3 +++ test/test_fir.py | 3 +++ test/test_gunpack.py | 5 ++++- test/test_linalg.py | 3 +++ test/test_map.py | 3 +++ test/test_pipeline.py | 3 +++ test/test_reduce.py | 4 ++++ test/test_romein.py | 3 +++ test/test_scrunch.py | 3 +++ test/test_transpose.py | 3 +++ test/travis.sh | 13 +------------ 14 files changed, 40 insertions(+), 36 deletions(-) diff --git a/test/jenkins.sh b/test/jenkins.sh index 0171f8b16..e6c767641 100755 --- a/test/jenkins.sh +++ b/test/jenkins.sh @@ -1,26 +1,4 @@ #!/bin/bash # This file runs CPU and GPU tests for jenkins ./download_test_data.sh -export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest \ - test_block \ - test_sigproc \ - test_resizing \ - test_quantize \ - test_unpack \ - test_print_header \ - test_pipeline_cpu \ - test_serialize \ - test_binary_io \ - test_address \ - test_fdmt \ - test_fft \ - test_fir \ - test_guantize \ - test_gunpack \ - test_linalg \ - test_map \ - test_reduce \ - test_romein \ - test_scrunch \ - test_transpose +coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover diff --git a/test/test_accumulate.py b/test/test_accumulate.py index a70235ef5..be3fd9f85 100644 --- a/test/test_accumulate.py +++ b/test/test_accumulate.py @@ -32,6 +32,8 @@ import bifrost.pipeline as bfp import bifrost.blocks as blocks +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + class CallbackBlock(blocks.CopyBlock): """Testing-only block which calls user-defined @@ -47,6 +49,7 @@ def on_data(self, ispan, ospan): self.data_callback(ispan, ospan) return super(CallbackBlock, self).on_data(ispan, ospan) +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestAccumulateBlock(unittest.TestCase): def setUp(self): """Create settings shared between tests""" diff --git a/test/test_fdmt.py b/test/test_fdmt.py index 04ae40398..e00471851 100644 --- a/test/test_fdmt.py +++ b/test/test_fdmt.py @@ -30,6 +30,9 @@ import bifrost as bf from bifrost.fdmt import Fdmt +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class FdmtTest(unittest.TestCase): def run_test(self, ntime, nchan, max_delay, batch_shape=()): fdmt = Fdmt() diff --git a/test/test_fft.py b/test/test_fft.py index 4858c6703..ef15fe345 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -37,6 +37,8 @@ from bifrost.fft import Fft import bifrost as bf +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + MTOL = 1e-6 # Relative tolerance at the mean magnitude RTOL = 1e-1 @@ -48,6 +50,7 @@ def compare(result, gold): absmean = np.abs(gold).mean() np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestFFT(unittest.TestCase): def setUp(self): np.random.seed(1234) diff --git a/test/test_fir.py b/test/test_fir.py index bcfa0d42d..fd79658ee 100644 --- a/test/test_fir.py +++ b/test/test_fir.py @@ -38,6 +38,8 @@ from bifrost.fir import Fir import bifrost as bf +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + MTOL = 1e-6 # Relative tolerance at the mean magnitude RTOL = 1e-1 @@ -49,6 +51,7 @@ def compare(result, gold): absmean = np.abs(gold).mean() np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestFIR(unittest.TestCase): def setUp(self): np.random.seed(1234) diff --git a/test/test_gunpack.py b/test/test_gunpack.py index 94ced4409..cb8995d65 100644 --- a/test/test_gunpack.py +++ b/test/test_gunpack.py @@ -30,6 +30,9 @@ import bifrost as bf import bifrost.unpack +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class UnpackTest(unittest.TestCase): def run_unpack_to_ci8_test(self, iarray): oarray = bf.ndarray(shape=iarray.shape, dtype='ci8', space='cuda') @@ -97,4 +100,4 @@ def test_ci4_to_cf32_byteswap_conjugate(self): [(0x4B,),(0x69,)], [(0x87,),(0xA5,)]], dtype='ci4') - self.run_unpack_to_cf32_test(iarray.byteswap().conj()) \ No newline at end of file + self.run_unpack_to_cf32_test(iarray.byteswap().conj()) diff --git a/test/test_linalg.py b/test/test_linalg.py index 4153e207e..763f26a8c 100644 --- a/test/test_linalg.py +++ b/test/test_linalg.py @@ -37,6 +37,8 @@ from bifrost.linalg import LinAlg import bifrost as bf +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + import time RTOL = 1e-4 @@ -45,6 +47,7 @@ def H(c): return np.swapaxes(c, -1, -2).conj() +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestLinAlg(unittest.TestCase): def setUp(self): self.linalg = LinAlg() diff --git a/test/test_map.py b/test/test_map.py index 2325e14de..da10bb591 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -30,6 +30,9 @@ import numpy as np import bifrost as bf +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestMap(unittest.TestCase): def setUp(self): np.random.seed(1234) diff --git a/test/test_pipeline.py b/test/test_pipeline.py index 88acdd527..00e79c079 100644 --- a/test/test_pipeline.py +++ b/test/test_pipeline.py @@ -33,6 +33,8 @@ from bifrost.blocks import * from bifrost.pipeline import SourceBlock, TransformBlock, SinkBlock +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + from copy import deepcopy RTOL = 1e-4 @@ -107,6 +109,7 @@ def on_data(self, ispan): # downstream callback blocks from ever executing. self.data_ref['idata'] = ispan.data.copy() +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class PipelineTest(unittest.TestCase): def setUp(self): # Note: This file needs to be large enough to fill the minimum-size diff --git a/test/test_reduce.py b/test/test_reduce.py index 634a83fa6..e9eccc8db 100644 --- a/test/test_reduce.py +++ b/test/test_reduce.py @@ -28,6 +28,9 @@ import unittest import numpy as np import bifrost as bf + +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + #import time def stderr(data, axis): @@ -61,6 +64,7 @@ def pwrscrunch(data, factor=2, axis=0, func=np.sum): axis = axis + 1 if axis >= 0 else axis return func(np.abs(data.reshape(s))**2, axis=axis) +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class ReduceTest(unittest.TestCase): def setUp(self): np.random.seed(1234) diff --git a/test/test_romein.py b/test/test_romein.py index 93b327a5d..8b5bef40f 100644 --- a/test/test_romein.py +++ b/test/test_romein.py @@ -35,6 +35,9 @@ from bifrost.unpack import unpack from bifrost.DataType import ci4 +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class RomeinTest(unittest.TestCase): def setUp(self): self.romein=Romein() diff --git a/test/test_scrunch.py b/test/test_scrunch.py index 8a6a3b7ea..10c32e7a6 100644 --- a/test/test_scrunch.py +++ b/test/test_scrunch.py @@ -32,6 +32,8 @@ import bifrost.pipeline as bfp import bifrost.blocks as blocks +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + class CallbackBlock(blocks.CopyBlock): """Testing-only block which calls user-defined functions on sequence and on data""" @@ -46,6 +48,7 @@ def on_data(self, ispan, ospan): self.data_callback(ispan, ospan) return super(CallbackBlock, self).on_data(ispan, ospan) +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestScrunchBlock(unittest.TestCase): def setUp(self): """Create settings shared between tests""" diff --git a/test/test_transpose.py b/test/test_transpose.py index b83d90c92..20d239069 100644 --- a/test/test_transpose.py +++ b/test/test_transpose.py @@ -32,6 +32,9 @@ from functools import reduce from itertools import permutations +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TransposeTest(unittest.TestCase): def run_simple_test(self, axes, dtype, shape): n = reduce(lambda a,b:a*b, shape) diff --git a/test/travis.sh b/test/travis.sh index 7c85ddaca..d560ae0cc 100755 --- a/test/travis.sh +++ b/test/travis.sh @@ -2,15 +2,4 @@ # This file runs CPU-safe tests for travis-ci ./download_test_data.sh export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest \ - test_block \ - test_sigproc \ - test_resizing \ - test_quantize \ - test_unpack \ - test_print_header \ - test_pipeline_cpu \ - test_serialize \ - test_binary_io \ - test_address \ - test_scripts +coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover From af6c3d9d6c12ddf5de670159b28715b9fccd889a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 20:03:46 -0600 Subject: [PATCH 0191/1155] Use BF_CUDA_ENABLED to auto-skip some tests. --- test/test_guantize.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test_guantize.py b/test/test_guantize.py index 4c8a618b2..941675240 100644 --- a/test/test_guantize.py +++ b/test/test_guantize.py @@ -30,6 +30,9 @@ import bifrost as bf import bifrost.quantize +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class QuantizeTest(unittest.TestCase): def run_quantize_from_cf32_test(self, out_dtype): iarray = bf.ndarray([[0.4 + 0.5j, 1.4 + 1.5j], From a49afa1e6d2b6278cadd44aad3ca1a403e7a273e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 20:16:19 -0600 Subject: [PATCH 0192/1155] Fix the OSX build. --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index 547d4d88e..277561711 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,6 +55,11 @@ addons: - pkg-config - python3 +before_script: + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then python3 -m pip install --upgrade virtualenv; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then virtualenv -p python3 "$HOME/venv"; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then source "$HOME/venv/bin/activate"; fi + script: - pip --no-cache-dir install \ setuptools \ From 169ec1b9b3e2ff2cd845fa6418966ac5933ed509 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 20:18:18 -0600 Subject: [PATCH 0193/1155] libbifrost.bf -> libbifrost_generated. --- test/test_accumulate.py | 2 +- test/test_fdmt.py | 2 +- test/test_fft.py | 2 +- test/test_fir.py | 2 +- test/test_guantize.py | 2 +- test/test_gunpack.py | 2 +- test/test_linalg.py | 2 +- test/test_map.py | 2 +- test/test_pipeline.py | 2 +- test/test_reduce.py | 2 +- test/test_romein.py | 2 +- test/test_scrunch.py | 2 +- test/test_transpose.py | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/test/test_accumulate.py b/test/test_accumulate.py index be3fd9f85..c4107381d 100644 --- a/test/test_accumulate.py +++ b/test/test_accumulate.py @@ -32,7 +32,7 @@ import bifrost.pipeline as bfp import bifrost.blocks as blocks -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED class CallbackBlock(blocks.CopyBlock): diff --git a/test/test_fdmt.py b/test/test_fdmt.py index e00471851..844e7fe01 100644 --- a/test/test_fdmt.py +++ b/test/test_fdmt.py @@ -30,7 +30,7 @@ import bifrost as bf from bifrost.fdmt import Fdmt -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class FdmtTest(unittest.TestCase): diff --git a/test/test_fft.py b/test/test_fft.py index ef15fe345..6aa9b09d8 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -37,7 +37,7 @@ from bifrost.fft import Fft import bifrost as bf -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED MTOL = 1e-6 # Relative tolerance at the mean magnitude RTOL = 1e-1 diff --git a/test/test_fir.py b/test/test_fir.py index fd79658ee..cca287c98 100644 --- a/test/test_fir.py +++ b/test/test_fir.py @@ -38,7 +38,7 @@ from bifrost.fir import Fir import bifrost as bf -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED MTOL = 1e-6 # Relative tolerance at the mean magnitude RTOL = 1e-1 diff --git a/test/test_guantize.py b/test/test_guantize.py index 941675240..352346082 100644 --- a/test/test_guantize.py +++ b/test/test_guantize.py @@ -30,7 +30,7 @@ import bifrost as bf import bifrost.quantize -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class QuantizeTest(unittest.TestCase): diff --git a/test/test_gunpack.py b/test/test_gunpack.py index cb8995d65..5bd036731 100644 --- a/test/test_gunpack.py +++ b/test/test_gunpack.py @@ -30,7 +30,7 @@ import bifrost as bf import bifrost.unpack -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class UnpackTest(unittest.TestCase): diff --git a/test/test_linalg.py b/test/test_linalg.py index 763f26a8c..ae920f2ba 100644 --- a/test/test_linalg.py +++ b/test/test_linalg.py @@ -37,7 +37,7 @@ from bifrost.linalg import LinAlg import bifrost as bf -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED import time diff --git a/test/test_map.py b/test/test_map.py index da10bb591..9dae19baa 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -30,7 +30,7 @@ import numpy as np import bifrost as bf -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestMap(unittest.TestCase): diff --git a/test/test_pipeline.py b/test/test_pipeline.py index 00e79c079..f40d30cac 100644 --- a/test/test_pipeline.py +++ b/test/test_pipeline.py @@ -33,7 +33,7 @@ from bifrost.blocks import * from bifrost.pipeline import SourceBlock, TransformBlock, SinkBlock -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED from copy import deepcopy diff --git a/test/test_reduce.py b/test/test_reduce.py index e9eccc8db..73bec5c77 100644 --- a/test/test_reduce.py +++ b/test/test_reduce.py @@ -29,7 +29,7 @@ import numpy as np import bifrost as bf -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED #import time diff --git a/test/test_romein.py b/test/test_romein.py index 8b5bef40f..c764eb3b9 100644 --- a/test/test_romein.py +++ b/test/test_romein.py @@ -35,7 +35,7 @@ from bifrost.unpack import unpack from bifrost.DataType import ci4 -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class RomeinTest(unittest.TestCase): diff --git a/test/test_scrunch.py b/test/test_scrunch.py index 10c32e7a6..332d09853 100644 --- a/test/test_scrunch.py +++ b/test/test_scrunch.py @@ -32,7 +32,7 @@ import bifrost.pipeline as bfp import bifrost.blocks as blocks -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED class CallbackBlock(blocks.CopyBlock): """Testing-only block which calls user-defined diff --git a/test/test_transpose.py b/test/test_transpose.py index 20d239069..e8c0cb2d6 100644 --- a/test/test_transpose.py +++ b/test/test_transpose.py @@ -32,7 +32,7 @@ from functools import reduce from itertools import permutations -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TransposeTest(unittest.TestCase): From fd9087561abb3250840a1a24c20b1589295b1376 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 07:45:45 -0600 Subject: [PATCH 0194/1155] Added a missing 'skip is not CUDA'. --- test/test_ndarray.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index d587c17c1..26ef7e209 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -29,6 +29,9 @@ import numpy as np import bifrost as bf +from bifrost.libbifrost_generated import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class NDArrayTest(unittest.TestCase): def setUp(self): self.known_vals = [[0,1],[2,3],[4,5]] From 518ab1f299275cc024e57014e22cade837b88e98 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 07:46:13 -0600 Subject: [PATCH 0195/1155] Switched to pip for installation and added DRY_RUN. --- python/Makefile.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/python/Makefile.in b/python/Makefile.in index f9a1510ac..8728232b4 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -50,11 +50,13 @@ build: bifrost/*.py Makefile $(BIFROST_PYTHON_VERSION_FILE) $(BIFROST_PYTHON_BIN @PYTHON@ setup.py build @PYBUILDFLAGS@ .PHONY: build +DRY_RUN ?= 0 + install: build ifeq ($(DRY_RUN),0) - @PYTHON@ setup.py install @PYINSTALLFLAGS@ + @PYTHON@ -m pip install @PYINSTALLFLAGS@ . else - @echo "@PYTHON@ setup.py install @PYINSTALLFLAGS@" + @echo "@PYTHON@ -m pip install @PYINSTALLFLAGS@ ." endif .PHONY: install From d36902288cbce6b7d989a78ff38a561864514e53 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 07:48:53 -0600 Subject: [PATCH 0196/1155] Fixed a typing problem on a numpy index. --- python/bifrost/block.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index 94fbb1ebb..d6cb14535 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -132,7 +132,7 @@ def insert_zeros_evenly(input_data, number_zeros): insert_index = np.floor( np.arange( number_zeros, - step=1.0) * float(input_data.size) / number_zeros) + step=1.0) * float(input_data.size) / number_zeros).astype(int) output_data = np.insert( input_data, insert_index, np.zeros(number_zeros)) From a69ed0cbe45912ce4834d6ee927e83fe983a216c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 09:43:19 -0600 Subject: [PATCH 0197/1155] .next() -> next() --- test/test_resizing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_resizing.py b/test/test_resizing.py index 7630b7137..40fc31145 100644 --- a/test/test_resizing.py +++ b/test/test_resizing.py @@ -58,7 +58,7 @@ def main(self, input_ring): """Initiate the writing to file @param[in] input_rings First ring in this list will be used""" span_generator = self.iterate_ring_read(input_ring) - span = span_generator.next() + span = next(span_generator) text_file = open(self.filename, 'a') np.savetxt(text_file, span.data_view(np.float32).reshape((1,-1))) text_file.close() From 8c0e85a3870b1cf2dad514eb6ca174f1eb19b09c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 10:01:04 -0600 Subject: [PATCH 0198/1155] Also add in major-only CUDA archs. --- config/cuda.m4 | 10 +++++++++- configure | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 1780886e8..ad9e5405f 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -114,7 +114,15 @@ AC_DEFUN([AX_CHECK_CUDA], cudaSetDevice(dev); cudaDeviceGetAttribute(&major, cudaDevAttrComputeCapabilityMajor, dev); cudaDeviceGetAttribute(&minor, cudaDevAttrComputeCapabilityMinor, dev); - arch = 10*major + minor; + arch = 10*major; + if( archs.count(arch) == 0 ) { + archs.insert(arch); + if( dev > 0 ) { + fh << " "; + } + fh << arch; + } + arch += minor; if( archs.count(arch) == 0 ) { archs.insert(arch); if( dev > 0 ) { diff --git a/configure b/configure index a0abf3b36..7b3f0c5f2 100755 --- a/configure +++ b/configure @@ -18141,7 +18141,15 @@ main () cudaSetDevice(dev); cudaDeviceGetAttribute(&major, cudaDevAttrComputeCapabilityMajor, dev); cudaDeviceGetAttribute(&minor, cudaDevAttrComputeCapabilityMinor, dev); - arch = 10*major + minor; + arch = 10*major; + if( archs.count(arch) == 0 ) { + archs.insert(arch); + if( dev > 0 ) { + fh << " "; + } + fh << arch; + } + arch += minor; if( archs.count(arch) == 0 ) { archs.insert(arch); if( dev > 0 ) { From c97357b7e1363b02ad94905538609e49ecbadbeb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 10:13:55 -0600 Subject: [PATCH 0199/1155] Close out dangling files. --- python/bifrost/block.py | 9 ++++----- test/test_block.py | 33 +++++++++++++++++++++------------ 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index d6cb14535..6a8ab3cd7 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -447,8 +447,8 @@ def __init__(self, filename): def load_settings(self, input_header): """Load the header from json @param[in] input_header The header from the ring""" - write_file = open(self.filename, 'w') - write_file.write(str(json.loads(input_header.tostring()))) + with open(self.filename, 'w') as write_file: + write_file.write(str(json.loads(input_header.tostring()))) def main(self, input_ring): """Put the header into the file @param[in] input_ring Contains the header in question""" @@ -576,9 +576,8 @@ def main(self, input_ring): data_accumulate = np.concatenate((data_accumulate, unpacked_data[0])) else: data_accumulate = unpacked_data[0] - text_file = open(self.filename, 'a') - np.savetxt(text_file, data_accumulate.reshape((1, -1))) - text_file.close() + with open(self.filename, 'a') as text_file: + np.savetxt(text_file, data_accumulate.reshape((1, -1))) class CopyBlock(TransformBlock): """Copies input ring's data to the output ring""" def __init__(self, gulp_size=1048576): diff --git a/test/test_block.py b/test/test_block.py index a27fea44d..7e86d9005 100644 --- a/test/test_block.py +++ b/test/test_block.py @@ -69,7 +69,8 @@ def test_multi_dimensional_input(self): self.blocks.append((TestingBlock(test_array), [], [0])) self.blocks.append((WriteHeaderBlock('.log2.txt'), [0], [])) Pipeline(self.blocks).main() - header = eval(open('.log2.txt').read()) # pylint:disable=eval-used + with open('.log2.txt') as fh: + header = eval(fh.read()) # pylint:disable=eval-used dumped_numbers = np.loadtxt('.log.txt').reshape(header['shape']) np.testing.assert_almost_equal(dumped_numbers, test_array) class TestCopyBlock(unittest.TestCase): @@ -90,7 +91,8 @@ def test_simple_copy(self): self.blocks.append((CopyBlock(), [0], [1])) self.blocks.append((WriteAsciiBlock(logfile), [1], [])) Pipeline(self.blocks).main() - test_byte = open(logfile, 'r').read(1) + with open(logfile, 'r') as fh: + test_byte = fh.read(1) self.assertEqual(test_byte, '2') def test_multi_copy(self): """Test which performs a read of a sigproc file, @@ -102,7 +104,8 @@ def test_multi_copy(self): (CopyBlock(), [i], [i + 1])) self.blocks.append((WriteAsciiBlock(logfile), [10], [])) Pipeline(self.blocks).main() - test_byte = open(logfile, 'r').read(1) + with open(logfile, 'r') as fh: + test_byte = fh.read(1) self.assertEqual(test_byte, '2') def test_non_linear_multi_copy(self): """Test which reads in a sigproc file, and @@ -117,7 +120,8 @@ def test_non_linear_multi_copy(self): self.blocks.append((CopyBlock(), [5], [6])) self.blocks.append((WriteAsciiBlock(logfile), [6], [])) Pipeline(self.blocks).main() - log_nums = open(logfile, 'r').read(500).split(' ') + with open(logfile, 'r') as fh: + log_nums = fh.read(500).split(' ') test_num = np.float(log_nums[8]) self.assertEqual(test_num, 3) def test_single_block_multi_copy(self): @@ -129,9 +133,9 @@ def test_single_block_multi_copy(self): self.blocks.append((WriteAsciiBlock(logfiles[0]), [1], [])) self.blocks.append((WriteAsciiBlock(logfiles[1]), [2], [])) Pipeline(self.blocks).main() - test_bytes = int( - open(logfiles[0], 'r').read(1)) + int( - open(logfiles[1], 'r').read(1)) + with open(logfiles[0], 'r') as fh0: + with open(logfiles[1], 'r') as fh1: + test_bytes = int(fh0.read(1)) + int(fh1.read(1)) self.assertEqual(test_bytes, 4) def test_32bit_copy(self): """Perform a simple test to confirm that 32 bit @@ -145,7 +149,8 @@ def test_32bit_copy(self): self.blocks.append((CopyBlock(), [0], [1])) self.blocks.append((WriteAsciiBlock(logfile), [1], [])) Pipeline(self.blocks).main() - test_bytes = open(logfile, 'r').read(500).split(' ') + with open(logfile, 'r') as fh: + test_bytes = fh.read(500).split(' ') self.assertAlmostEqual(np.float(test_bytes[0]), 0.72650784254) class TestFoldBlock(unittest.TestCase): """This tests functionality of the FoldBlock.""" @@ -163,7 +168,8 @@ def dump_ring_and_read(self): logfile = ".log.txt" self.blocks.append((WriteAsciiBlock(logfile), [1], [])) Pipeline(self.blocks).main() - test_bytes = open(logfile, 'r').read().split(' ') + with open(logfile, 'r') as fh: + test_bytes = fh.read().split(' ') histogram = np.array([np.float(x) for x in test_bytes]) return histogram def test_simple_pulsar(self): @@ -234,7 +240,8 @@ def test_data_throughput(self): blocks.append(( WriteAsciiBlock('.log.txt'), [1], [])) Pipeline(blocks).main() - test_byte = open('.log.txt', 'r').read().split(' ') + with open('.log.txt', 'r') as fh: + test_byte = fh.read().split(' ') test_nums = np.array([float(x) for x in test_byte]) self.assertLess(np.max(test_nums), 256) self.assertEqual(test_nums.size, 12800) @@ -253,12 +260,14 @@ def setUp(self): def test_throughput(self): """Test that any data is being put through""" Pipeline(self.blocks).main() - test_string = open(self.logfile, 'r').read() + with open(self.logfile, 'r') as fh: + test_string = fh.read() self.assertGreater(len(test_string), 0) def test_throughput_size(self): """Number of elements going out should be double that of basic copy""" Pipeline(self.blocks).main() - number_fftd = len(open(self.logfile, 'r').read().split('\n')) + with open(self.logfile, 'r') as fh: + number_fftd = len(fh.read().split('\n')) number_fftd = np.loadtxt(self.logfile).size open(self.logfile, 'w').close() # Run pipeline again with simple copy From 41cfb4055f2d7c1416820732225a0129294ba76b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 10:25:40 -0600 Subject: [PATCH 0200/1155] Close out dangling files. --- python/bifrost/sigproc.py | 6 +++--- test/test_sigproc.py | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index 8fbc6ce0f..5a6b114e5 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -392,9 +392,9 @@ def read_data(self, start=None, end=None): return self.data def write_to(self, filename): """writes data and header to a different file""" - file_object = open(filename, 'wb') - _write_header(self.header, file_object) - _write_data(self.data, self.nbits, file_object) + with open(filename, 'wb') as file_object: + _write_header(self.header, file_object) + _write_data(self.data, self.nbits, file_object) def append_data(self, input_data): """append data to local data and file""" input_frames = input_data.size // self.nifs // self.nchans diff --git a/test/test_sigproc.py b/test/test_sigproc.py index f75e17357..7216d43cd 100644 --- a/test/test_sigproc.py +++ b/test/test_sigproc.py @@ -136,11 +136,13 @@ def test_append_data(self): random_stream = np.random.randint(63, size=10000).astype('uint8').T testfile.append_data(random_stream) self.assertEqual(testfile.data.shape[0], initial_nframe + 10000) + testfile.close() def test_data_slice(self): testFile = SigprocFile() testFile.open(filename='./data/1chan8bitNoDM.fil', mode='r+b') testFile.read_header() self.assertEqual(testFile.read_data(-1).shape, (1, 1, 1)) + testFile.close() def test_append_untransposed_data(self): """test if appending data in different shape affects output""" initial_nframe = self.my8bitfile.get_nframe() @@ -161,6 +163,8 @@ def test_append_untransposed_data(self): testfile1.open(filename='./data/test_write1.fil', mode='rb') testfile2.open(filename='./data/test_write1.fil', mode='rb') np.testing.assert_array_equal(testfile1.read_data(), testfile2.read_data()) + testfile1.close() + testfile2.close() class Test_16bit_2chan(unittest.TestCase): def setUp(self): self.my16bitfile = SigprocFile() @@ -187,6 +191,8 @@ def test_append_2chan_data(self): file2.read_header() file2.read_data() np.testing.assert_array_equal(file1.read_data(),file2.read_data()) + file1.close() + file2.close() class Test_data_slicing(unittest.TestCase): def setUp(self): self.myfile = SigprocFile() From 4b28bb956bc131002ba83f46b2aef9744f0fb151 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 10:34:51 -0600 Subject: [PATCH 0201/1155] Close out dangling files. --- python/bifrost/blocks/binary_io.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/python/bifrost/blocks/binary_io.py b/python/bifrost/blocks/binary_io.py index fce718167..09513ad5b 100644 --- a/python/bifrost/blocks/binary_io.py +++ b/python/bifrost/blocks/binary_io.py @@ -57,7 +57,7 @@ def __enter__(self): return self def close(self): - pass + self.file_obj.close() def __exit__(self, type, value, tb): self.close() @@ -105,6 +105,12 @@ def __init__(self, iring, file_ext='out', *args, **kwargs): self.current_fileobj = None self.file_ext = file_ext + def __del__(self): + try: + self.current_fileobj.close() + except AttributeError: + pass + def on_sequence(self, iseq): if self.current_fileobj is not None: self.current_fileobj.close() From 777a7f6e1cbcaeba49b8d1e2d94bebf0f99ee07e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 11:30:58 -0600 Subject: [PATCH 0202/1155] Split script into install and script. --- .travis.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 277561711..4554823b9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,12 +55,12 @@ addons: - pkg-config - python3 -before_script: +before_install: - if [ "$TRAVIS_OS_NAME" = "osx" ]; then python3 -m pip install --upgrade virtualenv; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then virtualenv -p python3 "$HOME/venv"; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then source "$HOME/venv/bin/activate"; fi -script: +install: - pip --no-cache-dir install \ setuptools \ numpy \ @@ -73,9 +73,14 @@ script: coveralls \ codecov - ./configure --disable-cuda - - make -j - - export LD_LIBRARY_PATH=`realpath ./lib`:${LD_LIBRARY_PATH} - - export PYTHONPATH=`realpath ./python` + - make -j all + - sudo HAVE_PYTHON=0 make install + - make -C python install + +script: + - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} + - pip --no-cache-dir install \ + scipy - cd test && bash ./travis.sh && cd .. env: From 439c0d64c8b2e0efdecaefc2a8096fefbbf3ebf7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 11:40:16 -0600 Subject: [PATCH 0203/1155] Simplify. --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4554823b9..436ef383f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -72,10 +72,9 @@ install: git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ coveralls \ codecov - - ./configure --disable-cuda + - ./configure --disable-cuda --with-pyinstall-flags="--user" - make -j all - - sudo HAVE_PYTHON=0 make install - - make -C python install + - sudo make install script: - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} From de10e52202093032302a7f348327ff2708e3197d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 11:44:38 -0600 Subject: [PATCH 0204/1155] Ugh. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 436ef383f..432e22403 100644 --- a/.travis.yml +++ b/.travis.yml @@ -72,7 +72,7 @@ install: git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ coveralls \ codecov - - ./configure --disable-cuda --with-pyinstall-flags="--user" + - ./configure --disable-cuda - make -j all - sudo make install From 26010939e6d75e577638185f37e346d31a965975 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 16:41:44 -0600 Subject: [PATCH 0205/1155] Prefer C++14 support but fall back to C++11. --- configure | 8762 +++++++++++++++++++++++++++++--------------------- configure.ac | 4 +- 2 files changed, 5163 insertions(+), 3603 deletions(-) diff --git a/configure b/configure index 7b3f0c5f2..c4ba6af78 100755 --- a/configure +++ b/configure @@ -1,9 +1,10 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. +# Generated by GNU Autoconf 2.71 for bifrost 0.9.0. # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -14,14 +15,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -31,46 +34,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -94,8 +90,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -107,30 +107,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -152,20 +132,22 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -185,12 +167,15 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -205,30 +190,38 @@ test -x / || exit 1" test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -236,14 +229,21 @@ fi esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -261,18 +261,19 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -299,6 +300,7 @@ as_fn_unset () } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -316,6 +318,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -330,7 +340,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -339,7 +349,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -378,12 +388,13 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -395,18 +406,27 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -418,9 +438,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -447,7 +467,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -491,7 +511,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -505,6 +525,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -518,6 +542,13 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -595,40 +626,36 @@ PACKAGE_URL='https://github.com/ledatelescope/bifrost/' ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= ac_subst_vars='LTLIBOBJS PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR @@ -697,6 +724,7 @@ HAVE_NUMA HAVE_OPENMP LIBOBJS HAVE_CXX11 +HAVE_CXX14 SO_EXT CTAGS SET_MAKE @@ -704,7 +732,6 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CXXCPP -CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -840,7 +867,6 @@ CXX CXXFLAGS CCC LT_SYS_LIBRARY_PATH -CPP CXXCPP CTAGS PYTHON @@ -914,8 +940,6 @@ do *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -956,9 +980,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -982,9 +1006,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1195,9 +1219,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1211,9 +1235,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1257,9 +1281,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1275,7 +1299,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1339,7 +1363,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1533,7 +1557,6 @@ Some influential environment variables: CXXFLAGS C++ compiler flags LT_SYS_LIBRARY_PATH User-defined run-time library search path. - CPP C preprocessor CXXCPP C++ preprocessor CTAGS Absolute path to ctags executable PYTHON Absolute path to python executable @@ -1561,9 +1584,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1591,7 +1614,8 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1599,7 +1623,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1609,9 +1633,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF bifrost configure 0.9.0 -generated by GNU Autoconf 2.69 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1628,14 +1652,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1643,14 +1667,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1666,14 +1691,14 @@ fi ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1681,14 +1706,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1704,14 +1730,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1719,17 +1745,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1751,120 +1778,44 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1872,16 +1823,9 @@ else #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1899,24 +1843,25 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func @@ -1933,7 +1878,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1941,14 +1886,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1964,14 +1910,14 @@ fi ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1979,17 +1925,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2010,11 +1957,12 @@ fi ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -2022,16 +1970,9 @@ else #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -2049,114 +1990,61 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no +if ac_fn_cxx_try_compile "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_cxx_check_header_mongrel +} # ac_fn_cxx_check_header_compile # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- @@ -2165,17 +2053,18 @@ fi ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof ($2)) return 0; @@ -2183,12 +2072,13 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof (($2))) return 0; @@ -2196,26 +2086,27 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_try_run LINENO # ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -2225,25 +2116,26 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -2261,11 +2153,12 @@ fi ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 -$as_echo_n "checking for int$2_t... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +printf %s "checking for int$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2276,7 +2169,7 @@ else $ac_includes_default enum { N = $2 / 2 - 1 }; int -main () +main (void) { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; @@ -2286,13 +2179,14 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int -main () +main (void) { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; @@ -2303,9 +2197,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( @@ -2313,19 +2208,20 @@ else eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no"; then : +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : -else +else $as_nop break fi done fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t @@ -2337,11 +2233,12 @@ $as_echo "$ac_res" >&6; } ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 -$as_echo_n "checking for uint$2_t... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +printf %s "checking for uint$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2351,7 +2248,7 @@ else /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; @@ -2361,7 +2258,8 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( @@ -2369,28 +2267,49 @@ if ac_fn_cxx_try_compile "$LINENO"; then : eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no"; then : +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : -else +else $as_nop break fi done fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2423,8 +2342,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2459,7 +2382,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2494,11 +2417,13 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2509,8 +2434,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2534,7 +2459,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2542,14 +2467,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2557,15 +2482,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2573,8 +2498,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2588,63 +2513,48 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2654,122 +2564,726 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; -ac_aux_dir= -for ac_dir in config "$srcdir"/config; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' + +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +# Test code for whether the C++ compiler supports C++98 (global declarations) +ac_cxx_conftest_cxx98_globals=' +// Does the compiler advertise C++98 conformance? +#if !defined __cplusplus || __cplusplus < 199711L +# error "Compiler does not advertise C++98 conformance" +#endif + +// These inclusions are to reject old compilers that +// lack the unsuffixed header files. +#include +#include + +// and are *not* freestanding headers in C++98. +extern void assert (int); +namespace std { + extern int strcmp (const char *, const char *); +} + +// Namespaces, exceptions, and templates were all added after "C++ 2.0". +using std::exception; +using std::strcmp; + +namespace { + +void test_exception_syntax() +{ + try { + throw "test"; + } catch (const char *s) { + // Extra parentheses suppress a warning when building autoconf itself, + // due to lint rules shared with more typical C programs. + assert (!(strcmp) (s, "test")); + } +} + +template struct test_template +{ + T const val; + explicit test_template(T t) : val(t) {} + template T add(U u) { return static_cast(u) + val; } +}; + +} // anonymous namespace +' + +# Test code for whether the C++ compiler supports C++98 (body of main) +ac_cxx_conftest_cxx98_main=' + assert (argc); + assert (! argv[0]); +{ + test_exception_syntax (); + test_template tt (2.0); + assert (tt.add (4) == 6.0); + assert (true && !false); +} +' + +# Test code for whether the C++ compiler supports C++11 (global declarations) +ac_cxx_conftest_cxx11_globals=' +// Does the compiler advertise C++ 2011 conformance? +#if !defined __cplusplus || __cplusplus < 201103L +# error "Compiler does not advertise C++11 conformance" +#endif + +namespace cxx11test +{ + constexpr int get_val() { return 20; } + + struct testinit + { + int i; + double d; + }; + + class delegate + { + public: + delegate(int n) : n(n) {} + delegate(): delegate(2354) {} + + virtual int getval() { return this->n; }; + protected: + int n; + }; + + class overridden : public delegate + { + public: + overridden(int n): delegate(n) {} + virtual int getval() override final { return this->n * 2; } + }; + + class nocopy + { + public: + nocopy(int i): i(i) {} + nocopy() = default; + nocopy(const nocopy&) = delete; + nocopy & operator=(const nocopy&) = delete; + private: + int i; + }; + + // for testing lambda expressions + template Ret eval(Fn f, Ret v) + { + return f(v); + } + + // for testing variadic templates and trailing return types + template auto sum(V first) -> V + { + return first; + } + template auto sum(V first, Args... rest) -> V + { + return first + sum(rest...); + } +} +' + +# Test code for whether the C++ compiler supports C++11 (body of main) +ac_cxx_conftest_cxx11_main=' +{ + // Test auto and decltype + auto a1 = 6538; + auto a2 = 48573953.4; + auto a3 = "String literal"; + + int total = 0; + for (auto i = a3; *i; ++i) { total += *i; } + + decltype(a2) a4 = 34895.034; +} +{ + // Test constexpr + short sa[cxx11test::get_val()] = { 0 }; +} +{ + // Test initializer lists + cxx11test::testinit il = { 4323, 435234.23544 }; +} +{ + // Test range-based for + int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, + 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; + for (auto &x : array) { x += 23; } +} +{ + // Test lambda expressions + using cxx11test::eval; + assert (eval ([](int x) { return x*2; }, 21) == 42); + double d = 2.0; + assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); + assert (d == 5.0); + assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); + assert (d == 5.0); +} +{ + // Test use of variadic templates + using cxx11test::sum; + auto a = sum(1); + auto b = sum(1, 2); + auto c = sum(1.0, 2.0, 3.0); +} +{ + // Test constructor delegation + cxx11test::delegate d1; + cxx11test::delegate d2(); + cxx11test::delegate d3(45); +} +{ + // Test override and final + cxx11test::overridden o1(55464); +} +{ + // Test nullptr + char *c = nullptr; +} +{ + // Test template brackets + test_template<::test_template> v(test_template(12)); +} +{ + // Unicode literals + char const *utf8 = u8"UTF-8 string \u2500"; + char16_t const *utf16 = u"UTF-8 string \u2500"; + char32_t const *utf32 = U"UTF-32 string \u2500"; +} +' + +# Test code for whether the C compiler supports C++11 (complete). +ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} +${ac_cxx_conftest_cxx11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + ${ac_cxx_conftest_cxx11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C++98 (complete). +ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" + +# Auxiliary files required by this configure script. +ac_aux_files="install-sh config.guess config.sub ltmain.sh" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}/config" + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" break fi + ac_first_candidate=false + + as_found=false done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi + # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + @@ -2780,10 +3294,12 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Programs # + + case `pwd` in *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac @@ -2803,28 +3319,32 @@ macro_revision='2.4.6' + ltmain=$ac_aux_dir/ltmain.sh -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else + + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -2843,21 +3363,22 @@ IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -2897,8 +3418,8 @@ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then @@ -2924,12 +3445,12 @@ func_echo_all () } case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; + printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +printf "%s\n" "printf" >&6; } ;; + print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +printf "%s\n" "print -r" >&6; } ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +printf "%s\n" "cat" >&6; } ;; esac @@ -2942,6 +3463,15 @@ esac + + + + + + + + + @@ -2953,11 +3483,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -2965,11 +3496,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2980,11 +3515,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2993,11 +3528,12 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3005,11 +3541,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3020,11 +3560,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -3032,8 +3572,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3046,11 +3586,12 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3058,11 +3599,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3073,11 +3618,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3086,11 +3631,12 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3099,15 +3645,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3123,18 +3673,18 @@ if test $ac_prog_rejected = yes; then # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3145,11 +3695,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3157,11 +3708,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3172,11 +3727,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3189,11 +3744,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3201,11 +3757,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3216,11 +3776,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3232,8 +3792,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3241,25 +3801,129 @@ esac fi fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -3269,7 +3933,7 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -3277,7 +3941,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3289,9 +3953,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -3312,11 +3976,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -3333,7 +3998,7 @@ do # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -3349,44 +4014,46 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else +else $as_nop ac_file='' fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3400,15 +4067,15 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -3417,7 +4084,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -3429,8 +4096,8 @@ _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -3438,10 +4105,10 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -3449,39 +4116,40 @@ $as_echo "$ac_try_echo"; } >&5 *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3495,11 +4163,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -3508,31 +4177,32 @@ $as_echo "$ac_try_echo"; } >&5 break;; esac done -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -3542,29 +4212,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -3573,57 +4247,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -3638,94 +4315,144 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi ac_ext=cpp @@ -3734,11 +4461,12 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -3752,10 +4480,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -3764,13 +4497,13 @@ case `"$ac_path_SED" --version 2>&1` in ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -3798,8 +4531,8 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed @@ -3816,11 +4549,12 @@ Xsed="$SED -e 1s/^X//" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST @@ -3828,10 +4562,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP @@ -3840,13 +4579,13 @@ case `"$ac_path_GREP" --version 2>&1` in ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -3874,16 +4613,17 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else @@ -3894,10 +4634,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP @@ -3906,13 +4651,13 @@ case `"$ac_path_EGREP" --version 2>&1` in ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -3941,16 +4686,17 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +printf %s "checking for fgrep... " >&6; } +if test ${ac_cv_path_FGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else @@ -3961,10 +4707,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in fgrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP @@ -3973,13 +4724,13 @@ case `"$ac_path_FGREP" --version 2>&1` in ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" + printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4008,8 +4759,8 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" @@ -4034,17 +4785,18 @@ test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else +else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -4073,15 +4825,16 @@ $as_echo_n "checking for ld used by $CC... " >&6; } ;; esac elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -4110,18 +4863,19 @@ fi LD=$lt_cv_path_LD if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -4144,11 +4898,12 @@ with_gnu_ld=$lt_cv_prog_gnu_ld -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test ${lt_cv_path_NM+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM @@ -4198,8 +4953,8 @@ else : ${lt_cv_path_NM=no} fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else @@ -4212,11 +4967,12 @@ else do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else @@ -4224,11 +4980,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4239,11 +4999,11 @@ fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +printf "%s\n" "$DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4256,11 +5016,12 @@ if test -z "$DUMPBIN"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else @@ -4268,11 +5029,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4283,11 +5048,11 @@ fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4299,8 +5064,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN @@ -4328,11 +5093,12 @@ test -z "$NM" && NM=nm -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +printf %s "checking the name lister ($NM) interface... " >&6; } +if test ${lt_cv_nm_interface+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) @@ -4348,26 +5114,27 @@ else fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +printf "%s\n" "$lt_cv_nm_interface" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +printf %s "checking the maximum length of command line arguments... " >&6; } +if test ${lt_cv_sys_max_cmd_len+y} +then : + printf %s "(cached) " >&6 +else $as_nop i=0 teststring=ABCD @@ -4494,11 +5261,11 @@ else fi if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len @@ -4542,11 +5309,12 @@ esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +printf %s "checking how to convert $build file names to $host format... " >&6; } +if test ${lt_cv_to_host_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $host in *-*-mingw* ) case $build in @@ -4582,18 +5350,19 @@ esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +printf %s "checking how to convert $build file names to toolchain format... " >&6; } +if test ${lt_cv_to_tool_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in @@ -4609,22 +5378,23 @@ esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +printf %s "checking for $LD option to reload object files... " >&6; } +if test ${lt_cv_ld_reload_flag+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_reload_flag='-r' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; @@ -4657,11 +5427,12 @@ esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else @@ -4669,11 +5440,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4684,11 +5459,11 @@ fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4697,11 +5472,12 @@ if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else @@ -4709,11 +5485,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4724,11 +5504,11 @@ fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then @@ -4736,8 +5516,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP @@ -4756,11 +5536,12 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +printf %s "checking how to recognize dependent libraries... " >&6; } +if test ${lt_cv_deplibs_check_method+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' @@ -4956,8 +5737,8 @@ os2*) esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no @@ -5001,11 +5782,12 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else @@ -5013,11 +5795,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5028,11 +5814,11 @@ fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5041,11 +5827,12 @@ if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else @@ -5053,11 +5840,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5068,11 +5859,11 @@ fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then @@ -5080,8 +5871,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL @@ -5101,11 +5892,12 @@ test -z "$DLLTOOL" && DLLTOOL=dlltool -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +printf %s "checking how to associate runtime and link libraries... " >&6; } +if test ${lt_cv_sharedlib_from_linklib_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in @@ -5128,8 +5920,8 @@ cygwin* | mingw* | pw32* | cegcc*) esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO @@ -5139,6 +5931,12 @@ test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -5149,15 +5947,16 @@ if test -z "$CXX"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else @@ -5165,11 +5964,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5180,11 +5983,11 @@ fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5193,15 +5996,16 @@ fi fi if test -z "$CXX"; then ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else @@ -5209,11 +6013,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5224,11 +6032,11 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5240,8 +6048,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -5251,7 +6059,7 @@ fi fi fi # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do @@ -5261,7 +6069,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -5271,20 +6079,21 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 +printf %s "checking whether the compiler supports GNU C++... " >&6; } +if test ${ac_cv_cxx_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -5294,29 +6103,33 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi -ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +printf %s "checking whether $CXX accepts -g... " >&6; } +if test ${ac_cv_prog_cxx_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no @@ -5325,57 +6138,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_prog_cxx_g=yes -else +else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_prog_cxx_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } +if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then @@ -5390,6 +6206,100 @@ else CXXFLAGS= fi fi +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +printf %s "checking for $CXX option to enable C++11 features... " >&6; } +if test ${ac_cv_prog_cxx_11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_11=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx11_program +_ACEOF +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx11" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 +printf %s "checking for $CXX option to enable C++98 features... " >&6; } +if test ${ac_cv_prog_cxx_98+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_98=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx98_program +_ACEOF +for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx98=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx98" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx98" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 +fi +fi + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -5402,11 +6312,12 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -5414,11 +6325,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5429,11 +6344,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5446,11 +6361,12 @@ if test -z "$AR"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -5458,11 +6374,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5473,11 +6393,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5489,8 +6409,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -5510,30 +6430,32 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +printf %s "checking for archiver @FILE support... " >&6; } +if test ${lt_cv_ar_at_file+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. @@ -5541,7 +6463,7 @@ if ac_fn_cxx_try_compile "$LINENO"; then : { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ @@ -5550,11 +6472,11 @@ if ac_fn_cxx_try_compile "$LINENO"; then : rm -f conftest.* libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= @@ -5571,11 +6493,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -5583,11 +6506,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5598,11 +6525,11 @@ fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5611,11 +6538,12 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else @@ -5623,11 +6551,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5638,11 +6570,11 @@ fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -5650,8 +6582,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -5670,11 +6602,12 @@ test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -5682,11 +6615,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5697,11 +6634,11 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5710,11 +6647,12 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -5722,11 +6660,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5737,11 +6679,11 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -5749,8 +6691,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -5814,11 +6756,12 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -5826,11 +6769,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5841,11 +6788,11 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5881,11 +6828,12 @@ compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +printf %s "checking command to parse $NM output from $compiler object... " >&6; } +if test ${lt_cv_sys_global_symbol_pipe+y} +then : + printf %s "(cached) " >&6 +else $as_nop # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -6037,14 +6985,14 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then @@ -6113,7 +7061,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi @@ -6148,11 +7096,11 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +printf "%s\n" "failed" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +printf "%s\n" "ok" >&6; } fi # Response file support. @@ -6198,13 +7146,14 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : +if test ${with_sysroot+y} +then : withval=$with_sysroot; -else +else $as_nop with_sysroot=no fi @@ -6222,24 +7171,25 @@ case $with_sysroot in #( no|'') ;; #( *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +printf "%s\n" "${lt_sysroot:-no}" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +printf %s "checking for a working dd... " >&6; } +if test ${ac_cv_path_lt_DD+y} +then : + printf %s "(cached) " >&6 +else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} @@ -6250,10 +7200,15 @@ if test -z "$lt_DD"; then for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in dd; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in dd + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ @@ -6273,15 +7228,16 @@ fi rm -f conftest.i conftest2.i conftest.out fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +printf "%s\n" "$ac_cv_path_lt_DD" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +printf %s "checking how to truncate binary pipes... " >&6; } +if test ${lt_cv_truncate_bin+y} +then : + printf %s "(cached) " >&6 +else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= @@ -6292,8 +7248,8 @@ fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$lt_cv_truncate_bin" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +printf "%s\n" "$lt_cv_truncate_bin" >&6; } @@ -6317,7 +7273,8 @@ func_cc_basename () # Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : +if test ${enable_libtool_lock+y} +then : enableval=$enable_libtool_lock; fi @@ -6333,7 +7290,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) @@ -6353,7 +7310,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in @@ -6391,7 +7348,7 @@ mips64*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in @@ -6432,7 +7389,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) @@ -6495,11 +7452,12 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +printf %s "checking whether the C compiler needs -belf... " >&6; } +if test ${lt_cv_cc_needs_belf+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -6510,19 +7468,20 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_cc_needs_belf=yes -else +else $as_nop lt_cv_cc_needs_belf=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -6531,8 +7490,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS @@ -6545,7 +7504,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) @@ -6582,11 +7541,12 @@ need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else @@ -6594,11 +7554,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6609,11 +7573,11 @@ fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +printf "%s\n" "$MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6622,11 +7586,12 @@ if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else @@ -6634,11 +7599,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6649,11 +7618,11 @@ fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then @@ -6661,8 +7630,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL @@ -6672,11 +7641,12 @@ else fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if test ${lt_cv_path_mainfest_tool+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out @@ -6686,8 +7656,8 @@ else fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -6702,11 +7672,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else @@ -6714,11 +7685,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6729,11 +7704,11 @@ fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +printf "%s\n" "$DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6742,11 +7717,12 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else @@ -6754,11 +7730,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6769,11 +7749,11 @@ fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then @@ -6781,8 +7761,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL @@ -6794,11 +7774,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else @@ -6806,11 +7787,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6821,11 +7806,11 @@ fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +printf "%s\n" "$NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6834,11 +7819,12 @@ if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else @@ -6846,11 +7832,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6861,11 +7851,11 @@ fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +printf "%s\n" "$ac_ct_NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then @@ -6873,8 +7863,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT @@ -6886,11 +7876,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else @@ -6898,11 +7889,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6913,11 +7908,11 @@ fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +printf "%s\n" "$LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6926,11 +7921,12 @@ if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else @@ -6938,11 +7934,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6953,11 +7953,11 @@ fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +printf "%s\n" "$ac_ct_LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then @@ -6965,8 +7965,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO @@ -6978,11 +7978,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else @@ -6990,11 +7991,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7005,11 +8010,11 @@ fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +printf "%s\n" "$OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7018,11 +8023,12 @@ if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else @@ -7030,11 +8036,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7045,11 +8055,11 @@ fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +printf "%s\n" "$ac_ct_OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then @@ -7057,8 +8067,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL @@ -7070,11 +8080,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else @@ -7082,11 +8093,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7097,11 +8112,11 @@ fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +printf "%s\n" "$OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7110,11 +8125,12 @@ if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else @@ -7122,11 +8138,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7137,11 +8157,11 @@ fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +printf "%s\n" "$ac_ct_OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then @@ -7149,8 +8169,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 @@ -7185,11 +8205,12 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +printf %s "checking for -single_module linker flag... " >&6; } +if test ${lt_cv_apple_cc_single_mod+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override @@ -7218,14 +8239,15 @@ else rm -f conftest.* fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +printf %s "checking for -exported_symbols_list linker flag... " >&6; } +if test ${lt_cv_ld_exported_symbols_list+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym @@ -7234,31 +8256,33 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_ld_exported_symbols_list=yes -else +else $as_nop lt_cv_ld_exported_symbols_list=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +printf %s "checking for -force_load linker flag... " >&6; } +if test ${lt_cv_ld_force_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} @@ -7286,8 +8310,8 @@ _LT_EOF rm -rf conftest.dSYM fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; @@ -7334,305 +8358,62 @@ $as_echo "$lt_cv_ld_force_load" >&6; } # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi +done -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then -$as_echo "#define STDC_HEADERS 1" >>confdefs.h -fi +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi -done - func_stripname_cnf () @@ -7658,7 +8439,8 @@ func_stripname_cnf () # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : +if test ${enable_shared+y} +then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; @@ -7676,7 +8458,7 @@ if test "${enable_shared+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_shared=yes fi @@ -7689,7 +8471,8 @@ fi # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : +if test ${enable_static+y} +then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; @@ -7707,7 +8490,7 @@ if test "${enable_static+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_static=yes fi @@ -7721,7 +8504,8 @@ fi # Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : +if test ${with_pic+y} +then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; @@ -7738,7 +8522,7 @@ if test "${with_pic+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop pic_mode=default fi @@ -7750,7 +8534,8 @@ fi # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : +if test ${enable_fast_install+y} +then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; @@ -7768,7 +8553,7 @@ if test "${enable_fast_install+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_fast_install=yes fi @@ -7782,11 +8567,12 @@ fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; then : +if test ${with_aix_soname+y} +then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; @@ -7795,18 +8581,19 @@ if test "${with_aix_soname+set}" = set; then : ;; esac lt_cv_with_aix_soname=$with_aix_soname -else - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + if test ${lt_cv_with_aix_soname+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$with_aix_soname" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', @@ -7888,11 +8675,12 @@ if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +printf %s "checking for objdir... " >&6; } +if test ${lt_cv_objdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then @@ -7903,17 +8691,15 @@ else fi rmdir .libs 2>/dev/null fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF +printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h @@ -7959,11 +8745,12 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +printf %s "checking for ${ac_tool_prefix}file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8012,11 +8799,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8025,11 +8812,12 @@ fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +printf %s "checking for file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8078,11 +8866,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8167,11 +8955,12 @@ if test yes = "$GCC"; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test ${lt_cv_prog_compiler_rtti_exceptions+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -8202,8 +8991,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -8560,26 +9349,28 @@ case $host_os in ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -8610,8 +9401,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in @@ -8639,11 +9430,12 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -8667,8 +9459,8 @@ else LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : @@ -8682,11 +9474,12 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -8729,19 +9522,20 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -8784,8 +9578,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -8793,19 +9587,19 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -8817,8 +9611,8 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -9373,21 +10167,23 @@ _LT_EOF if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -9402,7 +10198,7 @@ if ac_fn_c_try_link "$LINENO"; then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -9426,21 +10222,23 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -9455,7 +10253,7 @@ if ac_fn_c_try_link "$LINENO"; then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -9706,11 +10504,12 @@ fi # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +printf %s "checking if $CC understands -b... " >&6; } +if test ${lt_cv_prog_compiler__b+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" @@ -9734,8 +10533,8 @@ else LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' @@ -9775,28 +10574,30 @@ fi # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if test ${lt_cv_irix_exported_symbol+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_irix_exported_symbol=yes -else +else $as_nop lt_cv_irix_exported_symbol=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi @@ -10076,8 +10877,8 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -10113,18 +10914,19 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc+y} +then : + printf %s "(cached) " >&6 +else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -10142,7 +10944,7 @@ else if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no @@ -10156,8 +10958,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac @@ -10316,8 +11118,8 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in @@ -10878,9 +11680,10 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -10890,19 +11693,21 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : +if ac_fn_c_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -11134,8 +11939,8 @@ uts4*) dynamic_linker=no ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -11256,8 +12061,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -11281,8 +12086,8 @@ else # directories. hardcode_action=unsupported fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then @@ -11326,11 +12131,12 @@ else darwin*) # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11339,32 +12145,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else +else $as_nop lt_cv_dlopen=dyld lt_cv_dlopen_libs= @@ -11384,14 +12189,16 @@ fi *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : +if test "x$ac_cv_func_shl_load" = xyes +then : lt_cv_dlopen=shl_load -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +printf %s "checking for shl_load in -ldld... " >&6; } +if test ${ac_cv_lib_dld_shl_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11400,41 +12207,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char shl_load (); int -main () +main (void) { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_shl_load=yes -else +else $as_nop ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes +then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else +else $as_nop ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : +if test "x$ac_cv_func_dlopen" = xyes +then : lt_cv_dlopen=dlopen -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11443,37 +12251,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +printf %s "checking for dlopen in -lsvld... " >&6; } +if test ${ac_cv_lib_svld_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11482,37 +12290,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_svld_dlopen=yes -else +else $as_nop ac_cv_lib_svld_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +printf %s "checking for dld_link in -ldld... " >&6; } +if test ${ac_cv_lib_dld_dld_link+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11521,30 +12329,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dld_link (); int -main () +main (void) { return dld_link (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_dld_link=yes -else +else $as_nop ac_cv_lib_dld_dld_link=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes +then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -11583,11 +12390,12 @@ fi save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +printf %s "checking whether a program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else @@ -11666,7 +12474,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -11684,16 +12492,17 @@ rm -fr conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +printf %s "checking whether a statically linked program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self_static+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else @@ -11772,7 +12581,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -11790,8 +12599,8 @@ rm -fr conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS @@ -11829,13 +12638,13 @@ fi striplib= old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +printf %s "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in @@ -11843,16 +12652,16 @@ else if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; esac fi @@ -11869,13 +12678,13 @@ fi # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +printf %s "checking if libtool supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +printf "%s\n" "$can_build_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -11899,15 +12708,15 @@ $as_echo_n "checking whether to build shared libraries... " >&6; } fi ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +printf "%s\n" "$enable_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +printf "%s\n" "$enable_static" >&6; } @@ -11929,36 +12738,32 @@ ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +printf %s "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" + if test ${ac_cv_prog_CXXCPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CXX needs to be expanded + for CXXCPP in "$CXX -E" cpp /lib/cpp do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -11970,10 +12775,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -11983,7 +12789,8 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : break fi @@ -11995,29 +12802,24 @@ fi else ac_cv_prog_CXXCPP=$CXXCPP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +printf "%s\n" "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -12029,10 +12831,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -12042,11 +12845,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -12182,17 +12986,18 @@ cc_basename=$func_cc_basename_result # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else +else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -12221,15 +13026,16 @@ $as_echo_n "checking for ld used by $CC... " >&6; } ;; esac elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -12258,18 +13064,19 @@ fi LD=$lt_cv_path_LD if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -12335,8 +13142,8 @@ with_gnu_ld=$lt_cv_prog_gnu_ld fi # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) @@ -12474,21 +13281,23 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -12503,7 +13312,7 @@ if ac_fn_cxx_try_link "$LINENO"; then : lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -12528,21 +13337,23 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -12557,7 +13368,7 @@ if ac_fn_cxx_try_link "$LINENO"; then : lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -13408,8 +14219,8 @@ fi ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX @@ -13447,7 +14258,7 @@ esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. @@ -13928,26 +14739,28 @@ case $host_os in ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -13978,8 +14791,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in @@ -14001,11 +14814,12 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -14029,8 +14843,8 @@ else LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : @@ -14041,11 +14855,12 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -14088,16 +14903,17 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -14140,8 +14956,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } @@ -14149,19 +14965,19 @@ $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -14170,8 +14986,8 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' @@ -14210,8 +15026,8 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld @@ -14238,18 +15054,19 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -14267,7 +15084,7 @@ else if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no @@ -14281,8 +15098,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac @@ -14351,8 +15168,8 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' @@ -14840,9 +15657,10 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -14852,19 +15670,21 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : +if ac_fn_cxx_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -15096,8 +15916,8 @@ uts4*) dynamic_linker=no ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -15161,8 +15981,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || @@ -15186,8 +16006,8 @@ else # directories. hardcode_action_CXX=unsupported fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +printf "%s\n" "$hardcode_action_CXX" >&6; } if test relink = "$hardcode_action_CXX" || test yes = "$inherit_rpath_CXX"; then @@ -15255,11 +16075,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -15267,11 +16088,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15282,11 +16107,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15295,11 +16120,12 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -15307,11 +16133,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15322,11 +16152,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -15334,8 +16164,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -15348,11 +16178,12 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -15360,11 +16191,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15375,11 +16210,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15388,11 +16223,12 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -15401,15 +16237,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15425,18 +16265,18 @@ if test $ac_prog_rejected = yes; then # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15447,11 +16287,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -15459,11 +16300,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15474,11 +16319,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15491,11 +16336,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -15503,11 +16349,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15518,11 +16368,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15534,34 +16384,138 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi +else + CC="$ac_cv_prog_CC" fi fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -15571,20 +16525,21 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -15594,29 +16549,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -15625,57 +16584,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -15690,94 +16652,144 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi ac_ext=cpp @@ -15796,15 +16808,16 @@ if test -z "$CXX"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else @@ -15812,11 +16825,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15827,11 +16844,11 @@ fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15840,15 +16857,16 @@ fi fi if test -z "$CXX"; then ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else @@ -15856,11 +16874,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15871,11 +16893,11 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15887,8 +16909,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -15898,7 +16920,7 @@ fi fi fi # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do @@ -15908,7 +16930,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -15918,20 +16940,21 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 +printf %s "checking whether the compiler supports GNU C++... " >&6; } +if test ${ac_cv_cxx_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -15941,29 +16964,33 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi -ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +printf %s "checking whether $CXX accepts -g... " >&6; } +if test ${ac_cv_prog_cxx_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no @@ -15972,57 +16999,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_prog_cxx_g=yes -else +else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_prog_cxx_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } +if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then @@ -16037,6 +17067,100 @@ else CXXFLAGS= fi fi +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +printf %s "checking for $CXX option to enable C++11 features... " >&6; } +if test ${ac_cv_prog_cxx_11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_11=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx11_program +_ACEOF +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx11" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 +printf %s "checking for $CXX option to enable C++98 features... " >&6; } +if test ${ac_cv_prog_cxx_98+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_98=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx98_program +_ACEOF +for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx98=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx98" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx98" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 +fi +fi + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -16047,11 +17171,12 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -16059,11 +17184,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -16074,22 +17203,23 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -16103,10 +17233,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -16115,13 +17250,13 @@ case `"$ac_path_SED" --version 2>&1` in ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -16149,12 +17284,13 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed -# Find a good install program. We prefer a C program (faster), + + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install @@ -16168,20 +17304,25 @@ $as_echo "$ac_cv_path_SED" >&6; } # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -16191,13 +17332,13 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -16205,12 +17346,12 @@ case $as_dir/ in #(( echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -16226,7 +17367,7 @@ IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi - if test "${ac_cv_path_install+set}" = set; then + if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -16236,8 +17377,8 @@ fi INSTALL=$ac_install_sh fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -16248,24 +17389,25 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else +ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval test \${ac_cv_prog_make_${ac_make}_set+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @@ -16281,12 +17423,12 @@ esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } SET_MAKE= else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -16300,34 +17442,39 @@ fi - if test -z "$CTAGS"; then : + if test -z "$CTAGS" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 -$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +printf %s "checking whether ctags executable path has been provided... " >&6; } # Check whether --with-ctags was given. -if test "${with_ctags+set}" = set; then : +if test ${with_ctags+y} +then : withval=$with_ctags; - if test "$withval" != yes && test "$withval" != no; then : + if test "$withval" != yes && test "$withval" != no +then : CTAGS="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } -else +else $as_nop CTAGS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : # Extract the first word of "ctags", so it can be a program name with args. set dummy ctags; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CTAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CTAGS in [\\/]* | ?:[\\/]*) ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. @@ -16337,11 +17484,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -16353,11 +17504,11 @@ esac fi CTAGS=$ac_cv_path_CTAGS if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -16366,17 +17517,18 @@ fi fi -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Extract the first word of "ctags", so it can be a program name with args. set dummy ctags; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CTAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CTAGS in [\\/]* | ?:[\\/]*) ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. @@ -16386,11 +17538,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -16402,11 +17558,11 @@ esac fi CTAGS=$ac_cv_path_CTAGS if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -16421,18 +17577,20 @@ fi -if test x${CTAGS} = x; then : +if test x${CTAGS} = x +then : as_fn_error $? "Required program ctags was not found" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } -if ! ${CTAGS} --version | grep -q Exuberant; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +printf %s "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi SO_EXT=$shrext_cmds @@ -16442,32 +17600,34 @@ SO_EXT=$shrext_cmds # System/Compiler Features # -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -$as_echo_n "checking for inline... " >&6; } -if ${ac_cv_c_inline+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +printf %s "checking for inline... " >&6; } +if test ${ac_cv_c_inline+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; -static $ac_kw foo_t static_foo () {return 0; } -$ac_kw foo_t foo () {return 0; } +static $ac_kw foo_t static_foo (void) {return 0; } +$ac_kw foo_t foo (void) {return 0; } #endif _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_c_inline=$ac_kw fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -$as_echo "$ac_cv_c_inline" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +printf "%s\n" "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; @@ -16484,19 +17644,31 @@ _ACEOF ;; esac - ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 -$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } -if ${ax_cv_cxx_compile_cxx11+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + + + + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 +printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16532,11 +17704,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -16784,31 +17958,200 @@ namespace cxx11 + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture + { + + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + + } + + namespace test_digit_separators + { + + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L + + + _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ax_cv_cxx_compile_cxx11=yes -else - ax_cv_cxx_compile_cxx11=no +if ac_fn_cxx_try_compile "$LINENO" +then : + eval $cachevar=yes +else $as_nop + eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 -$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } - if test x$ax_cv_cxx_compile_cxx11 = xyes; then - ac_success=yes +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx14_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX14=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} + else + HAVE_CXX14=1 + +printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h + fi +if test x$HAVE_CXX14 != x1 +then : + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + + + + if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : - $as_echo_n "(cached) " >&6 -else + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16847,11 +18190,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -17100,17 +18445,18 @@ namespace cxx11 _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : eval $cachevar=yes -else +else $as_nop eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then @@ -17138,271 +18484,266 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test x$ac_success = xno; then HAVE_CXX11=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 -$as_echo "#define HAVE_CXX11 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h fi - -for ac_func in memset -do : - ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMSET 1 -_ACEOF +fi +ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes +then : + printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h fi -done -for ac_func in rint -do : - ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_RINT 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes +then : + printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h fi -done -for ac_func in socket -do : - ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SOCKET 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes +then : + printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h fi -done -for ac_func in sqrt -do : - ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQRT 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes +then : + printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h fi -done -for ac_func in strerror -do : - ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRERROR 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes +then : + printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h fi -done - -for ac_header in arpa/inet.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ARPA_INET_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h fi -done - -for ac_header in netdb.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETDB_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes +then : + printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h fi -done - -for ac_header in netinet/in.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETINET_IN_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes +then : + printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h fi -done - -for ac_header in sys/file.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_FILE_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h fi -done +ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h -for ac_header in sys/ioctl.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_IOCTL_H 1 -_ACEOF +fi + +ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h fi -done +ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes +then : + +printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h -for ac_header in sys/socket.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_SOCKET_H 1 -_ACEOF fi -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } -if ${ac_cv_header_stdbool_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +printf %s "checking for stdbool.h that conforms to C99... " >&6; } +if test ${ac_cv_header_stdbool_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include - #include - #ifndef bool - "error: bool is not defined" - #endif - #ifndef false - "error: false is not defined" - #endif - #if false - "error: false is not 0" + #ifndef __bool_true_false_are_defined + #error "__bool_true_false_are_defined is not defined" #endif - #ifndef true - "error: true is not defined" + char a[__bool_true_false_are_defined == 1 ? 1 : -1]; + + /* Regardless of whether this is C++ or "_Bool" is a + valid type name, "true" and "false" should be usable + in #if expressions and integer constant expressions, + and "bool" should be a valid type name. */ + + #if !true + #error "'true' is not true" #endif #if true != 1 - "error: true is not 1" + #error "'true' is not equal to 1" #endif - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" + char b[true == 1 ? 1 : -1]; + char c[true]; + + #if false + #error "'false' is not false" #endif + #if false != 0 + #error "'false' is not equal to 0" + #endif + char d[false == 0 ? 1 : -1]; + + enum { e = false, f = true, g = false * true, h = true * 256 }; + + char i[(bool) 0.5 == true ? 1 : -1]; + char j[(bool) 0.0 == false ? 1 : -1]; + char k[sizeof (bool) > 0 ? 1 : -1]; + + struct sb { bool s: 1; bool t; } s; + char l[sizeof s.t > 0 ? 1 : -1]; - struct s { _Bool s: 1; _Bool t; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(_Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (_Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - _Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + bool m[h]; + char n[sizeof m == h * sizeof m[0] ? 1 : -1]; + char o[-1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ - _Bool q = true; - _Bool *pq = &q; + bool p = true; + bool *pp = &p; + + /* C 1999 specifies that bool, true, and false are to be + macros, but C++ 2011 and later overrule this. */ + #if __cplusplus < 201103 + #ifndef bool + #error "bool is not defined" + #endif + #ifndef false + #error "false is not defined" + #endif + #ifndef true + #error "true is not defined" + #endif + #endif + + /* If _Bool is available, repeat with it all the tests + above that used bool. */ + #ifdef HAVE__BOOL + struct sB { _Bool s: 1; _Bool t; } t; + + char q[(_Bool) 0.5 == true ? 1 : -1]; + char r[(_Bool) 0.0 == false ? 1 : -1]; + char u[sizeof (_Bool) > 0 ? 1 : -1]; + char v[sizeof t.t > 0 ? 1 : -1]; + + _Bool w[h]; + char x[sizeof m == h * sizeof m[0] ? 1 : -1]; + char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; + _Bool z = true; + _Bool *pz = &p; + #endif int -main () +main (void) { - bool e = &s; - *pq |= q; - *pq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq); + bool ps = &s; + *pp |= p; + *pp |= ! p; + + #ifdef HAVE__BOOL + _Bool pt = &t; + *pz |= z; + *pz |= ! z; + #endif + + /* Refer to every declared value, so they cannot be + discarded as unused. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + + !l + !m + !n + !o + !p + !pp + !ps + #ifdef HAVE__BOOL + + !q + !r + !u + !v + !w + !x + !y + !z + !pt + #endif + ); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_header_stdbool_h=yes -else +else $as_nop ac_cv_header_stdbool_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -$as_echo "$ac_cv_header_stdbool_h" >&6; } - ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE__BOOL 1 -_ACEOF - - -fi - - -for ac_header in stdlib.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" -if test "x$ac_cv_header_stdlib_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STDLIB_H 1 -_ACEOF - -fi - -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -$as_echo_n "checking for GNU libc compatible malloc... " >&6; } -if ${ac_cv_func_malloc_0_nonnull+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_malloc_0_nonnull=no -else +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +printf %s "checking for GNU libc compatible malloc... " >&6; } +if test ${ac_cv_func_malloc_0_nonnull+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + case "$host_os" in # (( + # Guess yes on platforms where we know the result. + *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ + | hpux* | solaris* | cygwin* | mingw* | msys* ) + ac_cv_func_malloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_malloc_0_nonnull=no ;; + esac +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined STDC_HEADERS || defined HAVE_STDLIB_H -# include -#else -char *malloc (); -#endif +#include int -main () +main (void) { -return ! malloc (0); +void *p = malloc (0); + int result = !p; + free (p); + return result; ; return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : +if ac_fn_cxx_try_run "$LINENO" +then : ac_cv_func_malloc_0_nonnull=yes -else +else $as_nop ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17410,14 +18751,15 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes +then : -$as_echo "#define HAVE_MALLOC 1" >>confdefs.h +printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h -else - $as_echo "#define HAVE_MALLOC 0" >>confdefs.h +else $as_nop + printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; @@ -17426,7 +18768,7 @@ else esac -$as_echo "#define malloc rpl_malloc" >>confdefs.h +printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h fi @@ -17436,11 +18778,12 @@ HAVE_OPENMP=0 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 -$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } -if ${ax_cv_cxx_openmp+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +printf %s "checking for OpenMP flag of C++ compiler... " >&6; } +if test ${ax_cv_cxx_openmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop saveCXXFLAGS=$CXXFLAGS ax_cv_cxx_openmp=unknown # Flags to try: -fopenmp (gcc), -mp (SGI & PGI), @@ -17481,17 +18824,18 @@ main() } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ax_cv_cxx_openmp=$ax_openmp_flag; break fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done CXXFLAGS=$saveCXXFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 -$as_echo "$ax_cv_cxx_openmp" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +printf "%s\n" "$ax_cv_cxx_openmp" >&6; } if test "x$ax_cv_cxx_openmp" = "xunknown"; then : else @@ -17499,27 +18843,28 @@ else OPENMP_CXXFLAGS=$ax_cv_cxx_openmp fi -$as_echo "#define HAVE_OPENMP 1" >>confdefs.h +printf "%s\n" "#define HAVE_OPENMP 1" >>confdefs.h fi -if test x$OPENMP_CXXFLAGS != x; then : +if test x$OPENMP_CXXFLAGS != x +then : HAVE_OPENMP=1 fi -if test x$HAVE_OPENMP != x1; then : +if test x$HAVE_OPENMP != x1 +then : -else +else $as_nop CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_PTRDIFF_T 1 -_ACEOF +printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h fi @@ -17529,9 +18874,7 @@ case $ac_cv_c_int16_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int16_t $ac_cv_c_int16_t -_ACEOF +printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h ;; esac @@ -17540,9 +18883,7 @@ case $ac_cv_c_int32_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int32_t $ac_cv_c_int32_t -_ACEOF +printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h ;; esac @@ -17551,9 +18892,7 @@ case $ac_cv_c_int64_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int64_t $ac_cv_c_int64_t -_ACEOF +printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h ;; esac @@ -17562,42 +18901,64 @@ case $ac_cv_c_int8_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int8_t $ac_cv_c_int8_t -_ACEOF +printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h ;; esac -ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = xyes; then : -else + ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default +" +if test "x$ac_cv_type_pid_t" = xyes +then : + +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if defined _WIN64 && !defined __CYGWIN__ + LLP64 + #endif + +int +main (void) +{ + + ; + return 0; +} -cat >>confdefs.h <<_ACEOF -#define pid_t int _ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_pid_type='int' +else $as_nop + ac_pid_type='__int64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h + fi + ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : +if test "x$ac_cv_type_size_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF +printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes; then : +if test "x$ac_cv_type_ssize_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define ssize_t int -_ACEOF +printf "%s\n" "#define ssize_t int" >>confdefs.h fi @@ -17607,9 +18968,7 @@ case $ac_cv_c_uint16_t in #( *) -cat >>confdefs.h <<_ACEOF -#define uint16_t $ac_cv_c_uint16_t -_ACEOF +printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h ;; esac @@ -17618,12 +18977,10 @@ case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT32_T 1" >>confdefs.h +printf "%s\n" "#define _UINT32_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint32_t $ac_cv_c_uint32_t -_ACEOF +printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h ;; esac @@ -17632,12 +18989,10 @@ case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT64_T 1" >>confdefs.h +printf "%s\n" "#define _UINT64_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint64_t $ac_cv_c_uint64_t -_ACEOF +printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h ;; esac @@ -17646,12 +19001,10 @@ case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT8_T 1" >>confdefs.h +printf "%s\n" "#define _UINT8_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint8_t $ac_cv_c_uint8_t -_ACEOF +printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h ;; esac @@ -17661,52 +19014,53 @@ _ACEOF # # Check whether --enable-numa was given. -if test "${enable_numa+set}" = set; then : +if test ${enable_numa+y} +then : enableval=$enable_numa; enable_numa=no -else +else $as_nop enable_numa=yes fi HAVE_NUMA=0 -if test x$enable_numa != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } -if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_numa != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } +if test ${ac_cv_lib_numa_numa_node_of_cpu+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lnuma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char numa_node_of_cpu (); +namespace conftest { + extern "C" int numa_node_of_cpu (); +} int -main () +main (void) { -return numa_node_of_cpu (); +return conftest::numa_node_of_cpu (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_numa_numa_node_of_cpu=yes -else +else $as_nop ac_cv_lib_numa_numa_node_of_cpu=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes +then : HAVE_NUMA=1 LIBS="$LIBS -lnuma" @@ -17719,52 +19073,53 @@ fi # # Check whether --enable-hwloc was given. -if test "${enable_hwloc+set}" = set; then : +if test ${enable_hwloc+y} +then : enableval=$enable_hwloc; enable_hwloc=no -else +else $as_nop enable_hwloc=yes fi HAVE_HWLOC=0 -if test x$enable_hwloc != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } -if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_hwloc != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } +if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lhwloc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char hwloc_topology_init (); +namespace conftest { + extern "C" int hwloc_topology_init (); +} int -main () +main (void) { -return hwloc_topology_init (); +return conftest::hwloc_topology_init (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_hwloc_hwloc_topology_init=yes -else +else $as_nop ac_cv_lib_hwloc_hwloc_topology_init=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes +then : HAVE_HWLOC=1 LIBS="$LIBS -lhwloc" @@ -17777,52 +19132,53 @@ fi # # Check whether --enable-vma was given. -if test "${enable_vma+set}" = set; then : +if test ${enable_vma+y} +then : enableval=$enable_vma; enable_vma=yes -else +else $as_nop enable_vma=no fi HAVE_VMA=0 -if test x$enable_vma != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } -if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_vma != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } +if test ${ac_cv_lib_vma_recvfrom_zcopy+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lvma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char recvfrom_zcopy (); +namespace conftest { + extern "C" int recvfrom_zcopy (); +} int -main () +main (void) { -return recvfrom_zcopy (); +return conftest::recvfrom_zcopy (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_vma_recvfrom_zcopy=yes -else +else $as_nop ac_cv_lib_vma_recvfrom_zcopy=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes +then : HAVE_VMA=1 LIBS="$LIBS -lvma" @@ -17846,9 +19202,10 @@ fi # Check whether --with-cuda_home was given. -if test "${with_cuda_home+set}" = set; then : +if test ${with_cuda_home+y} +then : withval=$with_cuda_home; -else +else $as_nop with_cuda_home=/usr/local/cuda fi @@ -17856,9 +19213,10 @@ fi # Check whether --enable-cuda was given. -if test "${enable_cuda+set}" = set; then : +if test ${enable_cuda+y} +then : enableval=$enable_cuda; enable_cuda=no -else +else $as_nop enable_cuda=yes fi @@ -17871,11 +19229,12 @@ fi # Extract the first word of "nvcc", so it can be a program name with args. set dummy nvcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVCC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $NVCC in [\\/]* | ?:[\\/]*) ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. @@ -17886,11 +19245,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -17903,21 +19266,22 @@ esac fi NVCC=$ac_cv_path_NVCC if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +printf "%s\n" "$NVCC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "nvprune", so it can be a program name with args. set dummy nvprune; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVPRUNE+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVPRUNE+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $NVPRUNE in [\\/]* | ?:[\\/]*) ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. @@ -17928,11 +19292,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -17945,21 +19313,22 @@ esac fi NVPRUNE=$ac_cv_path_NVPRUNE if test -n "$NVPRUNE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +printf "%s\n" "$NVPRUNE" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "cuobjdump", so it can be a program name with args. set dummy cuobjdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CUOBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CUOBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CUOBJDUMP in [\\/]* | ?:[\\/]*) ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. @@ -17970,11 +19339,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -17987,19 +19360,19 @@ esac fi CUOBJDUMP=$ac_cv_path_CUOBJDUMP if test -n "$CUOBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +printf "%s\n" "$CUOBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi fi if test "$HAVE_CUDA" = "1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 -$as_echo_n "checking for a working CUDA installation... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +printf %s "checking for a working CUDA installation... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -18013,20 +19386,21 @@ $as_echo_n "checking for a working CUDA installation... " >&6; } #include #include int -main () +main (void) { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" @@ -18040,27 +19414,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include #include int -main () +main (void) { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if ac_fn_cxx_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } HAVE_CUDA=0 fi @@ -18072,9 +19447,10 @@ $as_echo "no" >&6; } # Check whether --with-nvcc_flags was given. -if test "${with_nvcc_flags+set}" = set; then : +if test ${with_nvcc_flags+y} +then : withval=$with_nvcc_flags; -else +else $as_nop with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi @@ -18091,16 +19467,17 @@ fi # Check whether --with-gpu_archs was given. -if test "${with_gpu_archs+set}" = set; then : +if test ${with_gpu_archs+y} +then : withval=$with_gpu_archs; -else +else $as_nop with_gpu_archs='auto' fi if test "$HAVE_CUDA" = "1"; then if test "$with_gpu_archs" = "auto"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 -$as_echo_n "checking which CUDA architectures to target... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +printf %s "checking which CUDA architectures to target... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -18109,12 +19486,13 @@ $as_echo_n "checking which CUDA architectures to target... " >&6; } LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' - if test "$cross_compiling" = yes; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18125,7 +19503,7 @@ else #include #include int -main () +main (void) { std::set archs; @@ -18163,12 +19541,13 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : +if ac_fn_cxx_try_run "$LINENO" +then : GPU_ARCHS=`cat confarchs.out` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 -$as_echo "$GPU_ARCHS" >&6; } -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +printf "%s\n" "$GPU_ARCHS" >&6; } +else $as_nop as_fn_error $? "failed to find any" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18188,9 +19567,10 @@ fi # Check whether --with-shared_mem was given. -if test "${with_shared_mem+set}" = set; then : +if test ${with_shared_mem+y} +then : withval=$with_shared_mem; -else +else $as_nop with_shared_mem=16384 fi @@ -18203,9 +19583,10 @@ GPU_SHAREDMEM=$with_shared_mem # Check whether --with-alignment was given. -if test "${with_alignment+set}" = set; then : +if test ${with_alignment+y} +then : withval=$with_alignment; -else +else $as_nop with_alignment=4096 fi @@ -18221,21 +19602,23 @@ ALIGNMENT=$with_alignment # Check whether --with-logging_dir was given. -if test "${with_logging_dir+set}" = set; then : +if test ${with_logging_dir+y} +then : withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir -else +else $as_nop HAVE_TMPFS=/tmp fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 -$as_echo_n "checking for /dev/shm... " >&6; } -if ${ac_cv_file__dev_shm+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +printf %s "checking for /dev/shm... " >&6; } +if test ${ac_cv_file__dev_shm+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/shm"; then @@ -18244,9 +19627,10 @@ else ac_cv_file__dev_shm=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 -$as_echo "$ac_cv_file__dev_shm" >&6; } -if test "x$ac_cv_file__dev_shm" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +printf "%s\n" "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes +then : HAVE_TMPFS=/dev/shm/bifrost fi @@ -18254,11 +19638,12 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 -$as_echo_n "checking for /Volumes/RAMDisk... " >&6; } -if ${ac_cv_file__Volumes_RAMDisk+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +printf %s "checking for /Volumes/RAMDisk... " >&6; } +if test ${ac_cv_file__Volumes_RAMDisk+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/Volumes/RAMDisk"; then @@ -18267,9 +19652,10 @@ else ac_cv_file__Volumes_RAMDisk=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 -$as_echo "$ac_cv_file__Volumes_RAMDisk" >&6; } -if test "x$ac_cv_file__Volumes_RAMDisk" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes +then : HAVE_TMPFS=/Volumes/RAMDisk/bifrost fi @@ -18277,11 +19663,12 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 -$as_echo_n "checking for /tmp... " >&6; } -if ${ac_cv_file__tmp+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +printf %s "checking for /tmp... " >&6; } +if test ${ac_cv_file__tmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/tmp"; then @@ -18290,15 +19677,16 @@ else ac_cv_file__tmp=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 -$as_echo "$ac_cv_file__tmp" >&6; } -if test "x$ac_cv_file__tmp" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +printf "%s\n" "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes +then : HAVE_TMPFS=/tmp fi - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 -$as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} HAVE_TMPFS=/tmp/bifrost fi @@ -18309,15 +19697,17 @@ $as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging # # Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : +if test ${enable_debug+y} +then : enableval=$enable_debug; enable_debug=yes -else +else $as_nop enable_debug=no fi HAVE_DEBUG=0 -if test x$enable_debug != xno; then : +if test x$enable_debug != xno +then : HAVE_DEBUG=1 CXXFLAGS="$CXXFLAGS -g" @@ -18325,43 +19715,49 @@ if test x$enable_debug != xno; then : fi # Check whether --enable-trace was given. -if test "${enable_trace+set}" = set; then : +if test ${enable_trace+y} +then : enableval=$enable_trace; enable_trace=yes -else +else $as_nop enable_trace=no fi HAVE_TRACE=0 -if test x$enable_trace != xno; then : +if test x$enable_trace != xno +then : HAVE_TRACE=1 fi # Check whether --enable-native_arch was given. -if test "${enable_native_arch+set}" = set; then : +if test ${enable_native_arch+y} +then : enableval=$enable_native_arch; enable_native_arch=no -else +else $as_nop enable_native_arch=yes fi -if test x$enable_native_arch != xyes; then : +if test x$enable_native_arch != xyes +then : -else +else $as_nop CXXFLAGS="$CXXFLAGS -march=native" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" fi # Check whether --enable-cuda_debug was given. -if test "${enable_cuda_debug+set}" = set; then : +if test ${enable_cuda_debug+y} +then : enableval=$enable_cuda_debug; enable_cuda_debug=yes -else +else $as_nop enable_cuda_debug=no fi HAVE_CUDA_DEBUG=0 -if test x$enable_cuda_debug != xno; then : +if test x$enable_cuda_debug != xno +then : HAVE_CUDA_DEBUG=1 NVCCFLAGS="$NVCCFLAGS -G" @@ -18372,15 +19768,17 @@ fi # # Check whether --enable-python was given. -if test "${enable_python+set}" = set; then : +if test ${enable_python+y} +then : enableval=$enable_python; enable_python=no -else +else $as_nop enable_python=yes fi HAVE_PYTHON=0 -if test x$enable_python != xno; then : +if test x$enable_python != xno +then : @@ -18391,34 +19789,39 @@ if test x$enable_python != xno; then : - if test -z "$PYTHON"; then : + if test -z "$PYTHON" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 -$as_echo_n "checking whether python executable path has been provided... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +printf %s "checking whether python executable path has been provided... " >&6; } # Check whether --with-python was given. -if test "${with_python+set}" = set; then : +if test ${with_python+y} +then : withval=$with_python; - if test "$withval" != yes && test "$withval" != no; then : + if test "$withval" != yes && test "$withval" != no +then : PYTHON="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } -else +else $as_nop PYTHON="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -18428,11 +19831,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18445,11 +19852,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18458,17 +19865,18 @@ fi fi -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -18478,11 +19886,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18495,11 +19907,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18514,17 +19926,19 @@ fi - if test x${PYTHON} != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 -$as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 -$as_echo "$as_me: WARNING: python module will not be built" >&2;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + if test x${PYTHON} != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +printf %s "checking whether $PYTHON as ctypesgen... " >&6; } + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } HAVE_PYTHON=1 fi @@ -18532,7 +19946,8 @@ fi fi # Check whether --with-pybuild_flags was given. -if test "${with_pybuild_flags+set}" = set; then : +if test ${with_pybuild_flags+y} +then : withval=$with_pybuild_flags; fi @@ -18541,7 +19956,8 @@ PYBUILDFLAGS=$with_pybuild_flags # Check whether --with-pyinstall_flags was given. -if test "${with_pyinstall_flags+set}" = set; then : +if test ${with_pyinstall_flags+y} +then : withval=$with_pyinstall_flags; fi @@ -18562,34 +19978,39 @@ PYINSTALLFLAGS=$with_pyinstall_flags - if test -z "$DOCKER"; then : + if test -z "$DOCKER" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 -$as_echo_n "checking whether docker executable path has been provided... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 +printf %s "checking whether docker executable path has been provided... " >&6; } # Check whether --with-docker was given. -if test "${with_docker+set}" = set; then : +if test ${with_docker+y} +then : withval=$with_docker; - if test "$withval" != yes && test "$withval" != no; then : + if test "$withval" != yes && test "$withval" != no +then : DOCKER="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } -else +else $as_nop DOCKER="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DOCKER+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DOCKER+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -18599,11 +20020,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18616,11 +20041,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18629,17 +20054,18 @@ fi fi -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DOCKER+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DOCKER+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -18649,11 +20075,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18666,11 +20096,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18685,7 +20115,8 @@ fi -if test x${DOCKER} != xno; then : +if test x${DOCKER} != xno +then : HAVE_DOCKER=1 fi @@ -18728,7 +20159,8 @@ DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" # Check whether --enable-doxygen-doc was given. -if test "${enable_doxygen_doc+set}" = set; then : +if test ${enable_doxygen_doc+y} +then : enableval=$enable_doxygen_doc; case "$enableval" in #( @@ -18746,7 +20178,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_doc=1 @@ -18759,11 +20191,12 @@ if test "$DX_FLAG_doc" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. set dummy ${ac_tool_prefix}doxygen; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DOXYGEN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DOXYGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. @@ -18773,11 +20206,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18789,11 +20226,11 @@ esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN if test -n "$DX_DOXYGEN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 -$as_echo "$DX_DOXYGEN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +printf "%s\n" "$DX_DOXYGEN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18802,11 +20239,12 @@ if test -z "$ac_cv_path_DX_DOXYGEN"; then ac_pt_DX_DOXYGEN=$DX_DOXYGEN # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DOXYGEN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. @@ -18816,11 +20254,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18832,11 +20274,11 @@ esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN if test -n "$ac_pt_DX_DOXYGEN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 -$as_echo "$ac_pt_DX_DOXYGEN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DOXYGEN" = x; then @@ -18844,8 +20286,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOXYGEN=$ac_pt_DX_DOXYGEN @@ -18855,8 +20297,8 @@ else fi if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 -$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -18865,11 +20307,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. set dummy ${ac_tool_prefix}perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_PERL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_PERL+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. @@ -18879,11 +20322,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18895,11 +20342,11 @@ esac fi DX_PERL=$ac_cv_path_DX_PERL if test -n "$DX_PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 -$as_echo "$DX_PERL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +printf "%s\n" "$DX_PERL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18908,11 +20355,12 @@ if test -z "$ac_cv_path_DX_PERL"; then ac_pt_DX_PERL=$DX_PERL # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_PERL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_PERL+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. @@ -18922,11 +20370,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18938,11 +20390,11 @@ esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL if test -n "$ac_pt_DX_PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 -$as_echo "$ac_pt_DX_PERL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +printf "%s\n" "$ac_pt_DX_PERL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_PERL" = x; then @@ -18950,8 +20402,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PERL=$ac_pt_DX_PERL @@ -18961,8 +20413,8 @@ else fi if test "$DX_FLAG_doc$DX_PERL" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 -$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -18985,7 +20437,8 @@ fi # Check whether --enable-doxygen-dot was given. -if test "${enable_doxygen_dot+set}" = set; then : +if test ${enable_doxygen_dot+y} +then : enableval=$enable_doxygen_dot; case "$enableval" in #( @@ -18994,7 +20447,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19006,7 +20459,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_dot=0 @@ -19022,11 +20475,12 @@ if test "$DX_FLAG_dot" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. set dummy ${ac_tool_prefix}dot; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DOT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DOT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. @@ -19036,11 +20490,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19052,11 +20510,11 @@ esac fi DX_DOT=$ac_cv_path_DX_DOT if test -n "$DX_DOT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 -$as_echo "$DX_DOT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +printf "%s\n" "$DX_DOT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19065,11 +20523,12 @@ if test -z "$ac_cv_path_DX_DOT"; then ac_pt_DX_DOT=$DX_DOT # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DOT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DOT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. @@ -19079,11 +20538,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19095,11 +20558,11 @@ esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT if test -n "$ac_pt_DX_DOT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 -$as_echo "$ac_pt_DX_DOT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +printf "%s\n" "$ac_pt_DX_DOT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DOT" = x; then @@ -19107,8 +20570,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOT=$ac_pt_DX_DOT @@ -19118,8 +20581,8 @@ else fi if test "$DX_FLAG_dot$DX_DOT" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 -$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} DX_FLAG_dot=0 fi @@ -19147,7 +20610,8 @@ fi # Check whether --enable-doxygen-man was given. -if test "${enable_doxygen_man+set}" = set; then : +if test ${enable_doxygen_man+y} +then : enableval=$enable_doxygen_man; case "$enableval" in #( @@ -19156,7 +20620,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19168,7 +20632,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_man=1 @@ -19201,7 +20665,8 @@ fi # Check whether --enable-doxygen-rtf was given. -if test "${enable_doxygen_rtf+set}" = set; then : +if test ${enable_doxygen_rtf+y} +then : enableval=$enable_doxygen_rtf; case "$enableval" in #( @@ -19210,7 +20675,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19222,7 +20687,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_rtf=0 @@ -19255,7 +20720,8 @@ fi # Check whether --enable-doxygen-xml was given. -if test "${enable_doxygen_xml+set}" = set; then : +if test ${enable_doxygen_xml+y} +then : enableval=$enable_doxygen_xml; case "$enableval" in #( @@ -19264,7 +20730,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19276,7 +20742,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_xml=0 @@ -19309,7 +20775,8 @@ fi # Check whether --enable-doxygen-chm was given. -if test "${enable_doxygen_chm+set}" = set; then : +if test ${enable_doxygen_chm+y} +then : enableval=$enable_doxygen_chm; case "$enableval" in #( @@ -19318,7 +20785,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19330,7 +20797,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_chm=0 @@ -19346,11 +20813,12 @@ if test "$DX_FLAG_chm" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. set dummy ${ac_tool_prefix}hhc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_HHC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_HHC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. @@ -19360,11 +20828,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19376,11 +20848,11 @@ esac fi DX_HHC=$ac_cv_path_DX_HHC if test -n "$DX_HHC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 -$as_echo "$DX_HHC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +printf "%s\n" "$DX_HHC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19389,11 +20861,12 @@ if test -z "$ac_cv_path_DX_HHC"; then ac_pt_DX_HHC=$DX_HHC # Extract the first word of "hhc", so it can be a program name with args. set dummy hhc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_HHC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_HHC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. @@ -19403,11 +20876,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19419,11 +20896,11 @@ esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC if test -n "$ac_pt_DX_HHC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 -$as_echo "$ac_pt_DX_HHC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +printf "%s\n" "$ac_pt_DX_HHC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_HHC" = x; then @@ -19431,8 +20908,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_HHC=$ac_pt_DX_HHC @@ -19442,8 +20919,8 @@ else fi if test "$DX_FLAG_chm$DX_HHC" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 -$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} DX_FLAG_chm=0 fi @@ -19474,7 +20951,8 @@ fi # Check whether --enable-doxygen-chi was given. -if test "${enable_doxygen_chi+set}" = set; then : +if test ${enable_doxygen_chi+y} +then : enableval=$enable_doxygen_chi; case "$enableval" in #( @@ -19483,7 +20961,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19495,7 +20973,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_chi=0 @@ -19528,7 +21006,8 @@ fi # Check whether --enable-doxygen-html was given. -if test "${enable_doxygen_html+set}" = set; then : +if test ${enable_doxygen_html+y} +then : enableval=$enable_doxygen_html; case "$enableval" in #( @@ -19537,10 +21016,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19552,7 +21031,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_html=1 @@ -19588,7 +21067,8 @@ fi # Check whether --enable-doxygen-ps was given. -if test "${enable_doxygen_ps+set}" = set; then : +if test ${enable_doxygen_ps+y} +then : enableval=$enable_doxygen_ps; case "$enableval" in #( @@ -19597,7 +21077,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19609,7 +21089,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_ps=1 @@ -19625,11 +21105,12 @@ if test "$DX_FLAG_ps" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. set dummy ${ac_tool_prefix}latex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_LATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_LATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. @@ -19639,11 +21120,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19655,11 +21140,11 @@ esac fi DX_LATEX=$ac_cv_path_DX_LATEX if test -n "$DX_LATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 -$as_echo "$DX_LATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +printf "%s\n" "$DX_LATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19668,11 +21153,12 @@ if test -z "$ac_cv_path_DX_LATEX"; then ac_pt_DX_LATEX=$DX_LATEX # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_LATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_LATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. @@ -19682,11 +21168,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19698,11 +21188,11 @@ esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX if test -n "$ac_pt_DX_LATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 -$as_echo "$ac_pt_DX_LATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +printf "%s\n" "$ac_pt_DX_LATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_LATEX" = x; then @@ -19710,8 +21200,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_LATEX=$ac_pt_DX_LATEX @@ -19721,8 +21211,8 @@ else fi if test "$DX_FLAG_ps$DX_LATEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -19731,11 +21221,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -19745,11 +21236,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19761,11 +21256,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -$as_echo "$DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +printf "%s\n" "$DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19774,11 +21269,12 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -19788,11 +21284,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19804,11 +21304,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -19816,8 +21316,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -19827,8 +21327,8 @@ else fi if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -19837,11 +21337,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. set dummy ${ac_tool_prefix}dvips; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DVIPS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DVIPS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. @@ -19851,11 +21352,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19867,11 +21372,11 @@ esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS if test -n "$DX_DVIPS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 -$as_echo "$DX_DVIPS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +printf "%s\n" "$DX_DVIPS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19880,11 +21385,12 @@ if test -z "$ac_cv_path_DX_DVIPS"; then ac_pt_DX_DVIPS=$DX_DVIPS # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DVIPS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DVIPS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. @@ -19894,11 +21400,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19910,11 +21420,11 @@ esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS if test -n "$ac_pt_DX_DVIPS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 -$as_echo "$ac_pt_DX_DVIPS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +printf "%s\n" "$ac_pt_DX_DVIPS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DVIPS" = x; then @@ -19922,8 +21432,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DVIPS=$ac_pt_DX_DVIPS @@ -19933,8 +21443,8 @@ else fi if test "$DX_FLAG_ps$DX_DVIPS" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -19943,11 +21453,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -19957,11 +21468,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19973,11 +21488,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -$as_echo "$DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +printf "%s\n" "$DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19986,11 +21501,12 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -20000,11 +21516,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20016,11 +21536,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -$as_echo "$ac_pt_DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +printf "%s\n" "$ac_pt_DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -20028,8 +21548,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -20039,8 +21559,8 @@ else fi if test "$DX_FLAG_ps$DX_EGREP" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -20061,7 +21581,8 @@ fi # Check whether --enable-doxygen-pdf was given. -if test "${enable_doxygen_pdf+set}" = set; then : +if test ${enable_doxygen_pdf+y} +then : enableval=$enable_doxygen_pdf; case "$enableval" in #( @@ -20070,7 +21591,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20082,7 +21603,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_pdf=1 @@ -20098,11 +21619,12 @@ if test "$DX_FLAG_pdf" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_PDFLATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_PDFLATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. @@ -20112,11 +21634,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20128,11 +21654,11 @@ esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX if test -n "$DX_PDFLATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 -$as_echo "$DX_PDFLATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +printf "%s\n" "$DX_PDFLATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20141,11 +21667,12 @@ if test -z "$ac_cv_path_DX_PDFLATEX"; then ac_pt_DX_PDFLATEX=$DX_PDFLATEX # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_PDFLATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. @@ -20155,11 +21682,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20171,11 +21702,11 @@ esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX if test -n "$ac_pt_DX_PDFLATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 -$as_echo "$ac_pt_DX_PDFLATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_PDFLATEX" = x; then @@ -20183,8 +21714,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PDFLATEX=$ac_pt_DX_PDFLATEX @@ -20194,8 +21725,8 @@ else fi if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -20204,11 +21735,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -20218,11 +21750,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20234,11 +21770,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -$as_echo "$DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +printf "%s\n" "$DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20247,11 +21783,12 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -20261,11 +21798,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20277,11 +21818,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -20289,8 +21830,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -20300,8 +21841,8 @@ else fi if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -20310,11 +21851,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -20324,11 +21866,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20340,11 +21886,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -$as_echo "$DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +printf "%s\n" "$DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20353,11 +21899,12 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -20367,11 +21914,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20383,11 +21934,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -$as_echo "$ac_pt_DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +printf "%s\n" "$ac_pt_DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -20395,8 +21946,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -20406,8 +21957,8 @@ else fi if test "$DX_FLAG_pdf$DX_EGREP" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -20453,24 +22004,27 @@ PAPER_SIZE=$DOXYGEN_PAPER_SIZE esac # Rules: -if test $DX_FLAG_html -eq 1; then : +if test $DX_FLAG_html -eq 1 +then : DX_SNIPPET_html="## ------------------------------- ## DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ \$(DX_DOCDIR)/html " -else +else $as_nop DX_SNIPPET_html="" fi -if test $DX_FLAG_chi -eq 1; then : +if test $DX_FLAG_chi -eq 1 +then : DX_SNIPPET_chi=" DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ \$(DX_DOCDIR)/\$(PACKAGE).chi" -else +else $as_nop DX_SNIPPET_chi="" fi -if test $DX_FLAG_chm -eq 1; then : +if test $DX_FLAG_chm -eq 1 +then : DX_SNIPPET_chm="## ------------------------------ ## DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ @@ -20478,40 +22032,44 @@ DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ ${DX_SNIPPET_chi} " -else +else $as_nop DX_SNIPPET_chm="" fi -if test $DX_FLAG_man -eq 1; then : +if test $DX_FLAG_man -eq 1 +then : DX_SNIPPET_man="## ------------------------------ ## DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ \$(DX_DOCDIR)/man " -else +else $as_nop DX_SNIPPET_man="" fi -if test $DX_FLAG_rtf -eq 1; then : +if test $DX_FLAG_rtf -eq 1 +then : DX_SNIPPET_rtf="## ------------------------------ ## DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ \$(DX_DOCDIR)/rtf " -else +else $as_nop DX_SNIPPET_rtf="" fi -if test $DX_FLAG_xml -eq 1; then : +if test $DX_FLAG_xml -eq 1 +then : DX_SNIPPET_xml="## ------------------------------ ## DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ \$(DX_DOCDIR)/xml " -else +else $as_nop DX_SNIPPET_xml="" fi -if test $DX_FLAG_ps -eq 1; then : +if test $DX_FLAG_ps -eq 1 +then : DX_SNIPPET_ps="## ----------------------------- ## DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ @@ -20537,10 +22095,11 @@ doxygen-ps: \$(DX_CLEAN_PS) \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi " -else +else $as_nop DX_SNIPPET_ps="" fi -if test $DX_FLAG_pdf -eq 1; then : +if test $DX_FLAG_pdf -eq 1 +then : DX_SNIPPET_pdf="## ------------------------------ ## DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ @@ -20566,10 +22125,11 @@ doxygen-pdf: \$(DX_CLEAN_PDF) mv refman.pdf ../\$(PACKAGE).pdf " -else +else $as_nop DX_SNIPPET_pdf="" fi -if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1; then : +if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 +then : DX_SNIPPET_latex="## ------------------------------------------------- ## DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) @@ -20580,11 +22140,12 @@ DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ \$(DX_DOCDIR)/latex " -else +else $as_nop DX_SNIPPET_latex="" fi -if test $DX_FLAG_doc -eq 1; then : +if test $DX_FLAG_doc -eq 1 +then : DX_SNIPPET_doc="## --------------------------------- ## ${DX_SNIPPET_html}\ @@ -20625,7 +22186,7 @@ DX_CLEANFILES = \\ \$(DX_CLEAN_PS) \\ \$(DX_CLEAN_PDF) \\ \$(DX_CLEAN_LATEX)" -else +else $as_nop DX_SNIPPET_doc="" fi DX_RULES="${DX_SNIPPET_doc}" @@ -20693,8 +22254,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -20724,15 +22285,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -20746,8 +22307,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;} fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -20800,7 +22361,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -20816,8 +22377,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -20840,14 +22401,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -20857,46 +22420,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -20905,13 +22468,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -20920,8 +22476,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -20933,30 +22493,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -20969,13 +22509,14 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -21002,18 +22543,20 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -21025,12 +22568,13 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -21061,7 +22605,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -21083,6 +22627,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -21096,6 +22644,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -21137,7 +22691,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -21146,7 +22700,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21209,7 +22763,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -21263,14 +22817,16 @@ Report bugs to the package provider. bifrost home page: ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ bifrost config.status 0.9.0 -configured by $0, generated by GNU Autoconf 2.69, +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -21309,21 +22865,21 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -21351,7 +22907,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -21365,7 +22921,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -21781,8 +23337,8 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -22010,7 +23566,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -22018,17 +23574,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -22045,7 +23601,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22069,9 +23625,9 @@ $as_echo X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -22128,8 +23684,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -22172,9 +23728,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -22186,8 +23742,8 @@ which seems to be undefined. Please make sure it is defined" >&2;} ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -22735,6 +24291,7 @@ _LT_EOF esac + ltmain=$ac_aux_dir/ltmain.sh @@ -22937,7 +24494,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi + diff --git a/configure.ac b/configure.ac index 66aa0c246..b3848f3c1 100644 --- a/configure.ac +++ b/configure.ac @@ -37,7 +37,9 @@ AC_SUBST(SO_EXT, $shrext_cmds) # AC_C_INLINE -AX_CXX_COMPILE_STDCXX(11, noext, mandatory) +AX_CXX_COMPILE_STDCXX(14, noext, optional) +AS_IF([test x$HAVE_CXX14 != x1], + [AX_CXX_COMPILE_STDCXX(11, noext, mandatory)]) AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) From 080c75acf8e051ace2d87014c439c0652e769e89 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 17:06:25 -0600 Subject: [PATCH 0206/1155] Cleanup more things in bifrost/config.h. --- src/ring_impl.hpp | 4 ---- src/udp_capture.cpp | 9 --------- 2 files changed, 13 deletions(-) diff --git a/src/ring_impl.hpp b/src/ring_impl.hpp index 7a6f71a79..6645132bf 100644 --- a/src/ring_impl.hpp +++ b/src/ring_impl.hpp @@ -43,10 +43,6 @@ #include #include -#ifndef BF_NUMA_ENABLED -#define BF_NUMA_ENABLED 0 -#endif - class BFsequence_impl; class BFspan_impl; class BFrspan_impl; diff --git a/src/udp_capture.cpp b/src/udp_capture.cpp index aef972785..b5fb65c6a 100644 --- a/src/udp_capture.cpp +++ b/src/udp_capture.cpp @@ -55,15 +55,6 @@ using bifrost::ring::WriteSequence; //#include // SSE // TODO: The VMA API is returning unaligned buffers, which prevents use of SSE -#ifndef BF_VMA_ENABLED -#define BF_VMA_ENABLED 0 -//#define BF_VMA_ENABLED 1 -#endif - -#ifndef BF_HWLOC_ENABLED -#define BF_HWLOC_ENABLED 0 -//#define BF_HWLOC_ENABLED 1 -#endif #define BF_UNPACK_FACTOR 1 From 6534ec301b08311fc6849c6b2aee4a58a6f6b093 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 17:17:42 -0600 Subject: [PATCH 0207/1155] Toggle off the packet capture/transmission if recvmsg isn't found. --- configure | 16 ++++++++++++++++ configure.ac | 3 +++ src/Makefile.in | 8 +++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/configure b/configure index c4ba6af78..f470f35be 100755 --- a/configure +++ b/configure @@ -723,6 +723,7 @@ HAVE_HWLOC HAVE_NUMA HAVE_OPENMP LIBOBJS +HAVE_RECVMSG HAVE_CXX11 HAVE_CXX14 SO_EXT @@ -18516,6 +18517,21 @@ then : fi + + for ac_func in recvmsg +do : + ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" +if test "x$ac_cv_func_recvmsg" = xyes +then : + printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h + HAVE_RECVMSG=1 + +else $as_nop + HAVE_RECVMSG=0 + +fi + +done ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" if test "x$ac_cv_func_sqrt" = xyes then : diff --git a/configure.ac b/configure.ac index b3848f3c1..83c04cd41 100644 --- a/configure.ac +++ b/configure.ac @@ -43,6 +43,9 @@ AS_IF([test x$HAVE_CXX14 != x1], AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) +AC_CHECK_FUNCS([recvmsg], + [AC_SUBST([HAVE_RECVMSG], [1])], + [AC_SUBST([HAVE_RECVMSG], [0])]) AC_CHECK_FUNCS([sqrt]) AC_CHECK_FUNCS([strerror]) AC_CHECK_HEADERS([arpa/inet.h]) diff --git a/src/Makefile.in b/src/Makefile.in index e115b354c..a94ac3fbb 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -14,6 +14,8 @@ DOXYGEN ?= @DX_DOXYGEN@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ +HAVE_RECVMSG ?= @HAVE_RECVMSG@ + HAVE_CUDA ?= @HAVE_CUDA@ GPU_ARCHS ?= @GPU_ARCHS@ @@ -33,11 +35,15 @@ LIBBIFROST_OBJS = \ array.o \ unpack.o \ quantize.o \ - proclog.o \ + proclog.o +ifeq ($(HAVE_RECVMSG),1) + # These files require recvmsg to compile + LIBBIFROST_OBJS += \ address.o \ udp_socket.o \ udp_capture.o \ udp_transmit.o +endif ifeq ($(HAVE_CUDA),1) # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ From 1a81448b7c203c233cc1b10fc6e4fca8eb8387cc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 17:36:34 -0600 Subject: [PATCH 0208/1155] Added fixes from @telegraphic to address #147. --- python/bifrost/ring2.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index 0919606a3..456fb21d3 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -81,6 +81,7 @@ class Ring(BifrostObject): def __init__(self, space='system', name=None, owner=None, core=None): # If this is non-None, then the object is wrapping a base Ring instance self.base = None + self.is_view = False # This gets set to True by use of .view() self.space = space if name is None: name = 'ring_%i' % Ring.instance_count @@ -102,11 +103,12 @@ def __init__(self, space='system', name=None, owner=None, core=None): self.owner = owner self.header_transform = None def __del__(self): - if self.base is not None: + if self.base is not None and not self.is_view: BifrostObject.__del__(self) def view(self): new_ring = copy(self) new_ring.base = self + new_ring.is_view = True return new_ring def resize(self, contiguous_bytes, total_bytes=None, nringlet=1): _check( _bf.bfRingResize(self.obj, From 7a0016c11c7f5421035ce618e31aad0c5b796658 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 17:41:09 -0600 Subject: [PATCH 0209/1155] PEP479 fixes from @telegraphic. --- python/bifrost/libbifrost.py | 13 +++++++++++-- python/bifrost/pipeline.py | 6 +++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index c55504382..53eba0056 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -43,6 +43,15 @@ # Internal helpers below +class EndOfDataStop(Exception): + """ This class is used as a Py3 StopIterator + + In Python >3.7, reaching a StopIterator in a generator will + raise a RuntimeError (so you can't do 'except StopIterator' to catch it!) + See PEP479 https://www.python.org/dev/peps/pep-0479/ + """ + pass + class BifrostObject(object): """Base class for simple objects with create/destroy functions""" def __init__(self, constructor, destructor, *args): @@ -102,7 +111,7 @@ def _check(status): if status is None: raise RuntimeError("WTF, status is None") if status == _bf.BF_STATUS_END_OF_DATA: - raise StopIteration() + raise EndOfDataStop() elif status == _bf.BF_STATUS_WOULD_BLOCK: raise IOError('BF_STATUS_WOULD_BLOCK') else: @@ -110,7 +119,7 @@ def _check(status): raise RuntimeError(status_str) else: if status == _bf.BF_STATUS_END_OF_DATA: - raise StopIteration() + raise EndOfDataStop() elif status == _bf.BF_STATUS_WOULD_BLOCK: raise IOError('BF_STATUS_WOULD_BLOCK') return status diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index b5093dc9c..7d9fcb930 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -51,6 +51,7 @@ from bifrost.temp_storage import TempStorage from bifrost.proclog import ProcLog from bifrost.ndarray import memset_array # TODO: This feels a bit hacky +from bifrost.libbifrost import EndOfDataStop # Note: This must be called before any devices are initialized. It's also # almost always desirable when running pipelines, so we do it here at @@ -59,7 +60,10 @@ def izip(*iterables): while True: - yield [next(it) for it in iterables] + try: + yield [next(it) for it in iterables] + except EndOfDataStop: + return thread_local = threading.local() thread_local.pipeline_stack = [] From 4fa142424895609de5313d03de2d5976812636a3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 17:41:43 -0600 Subject: [PATCH 0210/1155] Deprecation fixes for Py3 from @telegraphic. --- python/bifrost/block.py | 14 +++++++------- python/bifrost/ring2.py | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index 6a8ab3cd7..0351d971e 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -224,7 +224,7 @@ def __init__(self, gulp_size=4096): self.core = -1 def load_settings(self, input_header): """Load in settings from input ring header""" - self.header = json.loads(input_header.tostring()) + self.header = json.loads(input_header.tobytes()) def iterate_ring_read(self, input_ring): """Iterate through one input ring @param[in] input_ring Ring to read through""" @@ -292,7 +292,7 @@ def read(self, *args): for ring_name in args]): # sequences is a tuple of all sequences for ring_name, sequence in self.izip(args, sequences): - self.header[ring_name] = json.loads(sequence.header.tostring()) + self.header[ring_name] = json.loads(sequence.header.tobytes()) self.load_settings() # resize all rings for ring_name in args: @@ -448,7 +448,7 @@ def load_settings(self, input_header): """Load the header from json @param[in] input_header The header from the ring""" with open(self.filename, 'w') as write_file: - write_file.write(str(json.loads(input_header.tostring()))) + write_file.write(str(json.loads(input_header.tobytes()))) def main(self, input_ring): """Put the header into the file @param[in] input_ring Contains the header in question""" @@ -463,7 +463,7 @@ def __init__(self, gulp_size): self.dtype = np.uint8 self.shape = (1, 1) def load_settings(self, input_header): - header = json.loads(input_header.tostring()) + header = json.loads(input_header.tobytes()) self.nbit = header['nbit'] self.dtype = np.dtype(header['dtype'].split()[1].split(".")[1].split("'")[0]).type if 'frame_shape' in header: @@ -503,7 +503,7 @@ def __init__(self, gulp_size): self.nbit = 8 self.dtype = np.uint8 def load_settings(self, input_header): - header = json.loads(input_header.tostring()) + header = json.loads(input_header.tobytes()) self.nbit = header['nbit'] try: self.dtype = np.dtype(header['dtype']).type @@ -548,7 +548,7 @@ def __init__(self, filename, gulp_size=1048576): self.dtype = np.uint8 open(self.filename, "w").close() # erase file def load_settings(self, input_header): - header_dict = json.loads(input_header.tostring()) + header_dict = json.loads(input_header.tobytes()) self.nbit = header_dict['nbit'] try: self.dtype = np.dtype(header_dict['dtype']).type @@ -652,7 +652,7 @@ def __init__(self, gulp_size=1048576, core=-1): self.dtype = np.uint8 def load_settings(self, input_header): self.output_header = input_header - self.settings = json.loads(input_header.tostring()) + self.settings = json.loads(input_header.tobytes()) self.nchan = self.settings["frame_shape"][0] dtype_str = self.settings["dtype"].split()[1].split(".")[1].split("'")[0] self.dtype = np.dtype(dtype_str) diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index 456fb21d3..9c2028f3f 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -230,11 +230,11 @@ def header(self): # WAR for hdr_buffer_ptr.contents crashing when size == 0 hdr_array = np.empty(0, dtype=np.uint8) hdr_array.flags['WRITEABLE'] = False - return json.loads(hdr_array.tostring()) + return json.loads(hdr_array.tobytes()) hdr_buffer = _address_as_buffer(self._header_ptr, size, readonly=True) hdr_array = np.frombuffer(hdr_buffer, dtype=np.uint8) hdr_array.flags['WRITEABLE'] = False - self._header = json.loads(hdr_array.tostring()) + self._header = json.loads(hdr_array.tobytes()) return self._header class WriteSequence(SequenceBase): From 9476be76ee992493f35baa6260ad957d48ad037c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 18:03:12 -0600 Subject: [PATCH 0211/1155] More Py3 fixes from @telegraphic. --- python/bifrost/sigproc2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index 12a6d73b6..a8f8d4323 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -134,12 +134,12 @@ def id2telescope(id_): return _telescopes[id_] def telescope2id(name): # TODO: Would be better to use a pre-made reverse lookup dict - return _telescopes.keys()[_telescopes.values().index(name)] + return list(_telescopes.keys())[list(_telescopes.values()).index(name)] def id2machine(id_): return _machines[id_] def machine2id(name): # TODO: Would be better to use a pre-made reverse lookup dict - return _machines.keys()[_machines.values().index(name)] + return list(_machines.keys())[list(_machines.values()).index(name)] def _header_write_string(f, key): f.write(struct.pack('=i', len(key))) From b3712b0848707ddfe9c9a1a6a2a6eb0b8973811d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Oct 2021 13:43:40 -0600 Subject: [PATCH 0212/1155] More PEP479 work. --- python/bifrost/block.py | 10 +++++++--- python/bifrost/libbifrost.py | 10 +++++----- python/bifrost/pipeline.py | 2 +- python/bifrost/psrdada.py | 3 ++- python/bifrost/ring.py | 18 ++++++++++++------ python/bifrost/ring2.py | 18 ++++++++++++------ 6 files changed, 39 insertions(+), 22 deletions(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index 0351d971e..d079c3469 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -48,6 +48,7 @@ from bifrost import affinity, memory from bifrost.ring import Ring from bifrost.sigproc import SigprocFile, unpack +from bifrost.libbifrost import EndOfDataStop class Pipeline(object): """Class which connects blocks linearly, with @@ -280,8 +281,11 @@ def izip(self, *iterables): into a single list generator""" iterators = [iter(iterable) for iterable in iterables] while True: - next_set = [next(iterator) for iterator in iterators] - yield self.flatten(*next_set) + try: + next_set = [next(iterator) for iterator in iterators] + yield self.flatten(*next_set) + except (EndOfDataStop, StopIteration): + return def load_settings(self): """Set by user to interpret input rings""" pass @@ -1076,7 +1080,7 @@ def main(self): arrays = [output_data] else: arrays = output_data - except StopIteration: + except (EndOfDataStop, StopIteration): break if self.changing: diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 53eba0056..64204b032 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -43,11 +43,11 @@ # Internal helpers below -class EndOfDataStop(Exception): - """ This class is used as a Py3 StopIterator +class EndOfDataStop(RuntimeError): + """This class is used as a Py3 StopIterator In Python >3.7, reaching a StopIterator in a generator will - raise a RuntimeError (so you can't do 'except StopIterator' to catch it!) + raise a RuntimeError (so you can't do 'except StopIteration' to catch it!) See PEP479 https://www.python.org/dev/peps/pep-0479/ """ pass @@ -111,7 +111,7 @@ def _check(status): if status is None: raise RuntimeError("WTF, status is None") if status == _bf.BF_STATUS_END_OF_DATA: - raise EndOfDataStop() + raise EndOfDataStop('BF_STATUS_END_OF_DATA') elif status == _bf.BF_STATUS_WOULD_BLOCK: raise IOError('BF_STATUS_WOULD_BLOCK') else: @@ -119,7 +119,7 @@ def _check(status): raise RuntimeError(status_str) else: if status == _bf.BF_STATUS_END_OF_DATA: - raise EndOfDataStop() + raise EndOfDataStop('BF_STATUS_END_OF_DATA') elif status == _bf.BF_STATUS_WOULD_BLOCK: raise IOError('BF_STATUS_WOULD_BLOCK') return status diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 7d9fcb930..61efafc98 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -62,7 +62,7 @@ def izip(*iterables): while True: try: yield [next(it) for it in iterables] - except EndOfDataStop: + except (EndOfDataStop, StopIteration): return thread_local = threading.local() diff --git a/python/bifrost/psrdada.py b/python/bifrost/psrdada.py index 67ff55230..b2f172298 100644 --- a/python/bifrost/psrdada.py +++ b/python/bifrost/psrdada.py @@ -44,6 +44,7 @@ import bifrost.libpsrdada_generated as _dada import numpy as np from bifrost.ndarray import _address_as_buffer +from bifrost.libbifrost import EndOfDataStop import ctypes @@ -115,7 +116,7 @@ def __next__(self): else: del block self.reset() - raise StopIteration() + raise EndOfDataStop('IpcBufBlock empty') def next(self): return self.__next__() def open(self): diff --git a/python/bifrost/ring.py b/python/bifrost/ring.py index ddf2c71e0..55336078b 100644 --- a/python/bifrost/ring.py +++ b/python/bifrost/ring.py @@ -29,7 +29,7 @@ # Python2 compatibility from __future__ import print_function, absolute_import -from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space, _space2string +from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space, _space2string, EndOfDataStop #from GPUArray import GPUArray from bifrost.DataType import DataType from bifrost.ndarray import ndarray, _address_as_buffer @@ -112,8 +112,11 @@ def open_earliest_sequence(self, guarantee=True): def read(self, whence='earliest', guarantee=True): with ReadSequence(self, which=whence, guarantee=guarantee) as cur_seq: while True: - yield cur_seq - cur_seq.increment() + try: + yield cur_seq + cur_seq.increment() + except EndOfDataStop: + return #def _data(self): # data_ptr = _get(self.lib.bfRingLockedGetData, self.obj) # #data_ptr = c_void_p() @@ -273,9 +276,12 @@ def read(self, span_size, stride=None, begin=0): stride = span_size offset = begin while True: - with self.acquire(offset, span_size) as ispan: - yield ispan - offset += stride + try: + with self.acquire(offset, span_size) as ispan: + yield ispan + offset += stride + except EndOfDataStop: + return class SpanBase(object): def __init__(self, ring, writeable): diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index 9c2028f3f..65b02d2a2 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -30,7 +30,7 @@ from __future__ import print_function, absolute_import -from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space +from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space, EndOfDataStop from bifrost.DataType import DataType from bifrost.ndarray import ndarray, _address_as_buffer from copy import copy, deepcopy @@ -146,8 +146,11 @@ def read(self, whence='earliest', guarantee=True): with ReadSequence(self, which=whence, guarantee=guarantee, header_transform=self.header_transform) as cur_seq: while True: - yield cur_seq - cur_seq.increment() + try: + yield cur_seq + cur_seq.increment() + except EndOfDataStop: + return class RingWriter(object): def __init__(self, ring): @@ -319,9 +322,12 @@ def read(self, nframe, stride=None, begin=0): stride = nframe offset = begin while True: - with self.acquire(offset, nframe) as ispan: - yield ispan - offset += stride + try: + with self.acquire(offset, nframe) as ispan: + yield ispan + offset += stride + except EndOfDataStop: + return def resize(self, gulp_nframe, buf_nframe=None, buffer_factor=None): if buf_nframe is None: if buffer_factor is None: From 5f0e813f81cb17385c90a0359b4dc143661c8d7a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Oct 2021 13:44:03 -0600 Subject: [PATCH 0213/1155] Switched to io.StringIO. --- test/test_print_header.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_print_header.py b/test/test_print_header.py index 23fdce263..25e7fdeed 100644 --- a/test/test_print_header.py +++ b/test/test_print_header.py @@ -44,7 +44,7 @@ def test_read_sigproc(self): """Capture print output, assert it is a long string""" gulp_nframe = 101 - stdout = io.BytesIO() + stdout = io.StringIO() with ExitStack() as stack: pipeline = stack.enter_context(bfp.Pipeline()) stack.enter_context(redirect_stdout(stdout)) From b34949e78a00e98b8517835f5bee186337d5133f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Oct 2021 13:44:37 -0600 Subject: [PATCH 0214/1155] Fixed a few Py3-related problems. --- python/bifrost/blocks/serialize.py | 3 +- test/test_serialize.py | 198 ++++++++++++++--------------- 2 files changed, 100 insertions(+), 101 deletions(-) diff --git a/python/bifrost/blocks/serialize.py b/python/bifrost/blocks/serialize.py index 7801966a2..f66cb60bd 100644 --- a/python/bifrost/blocks/serialize.py +++ b/python/bifrost/blocks/serialize.py @@ -102,7 +102,7 @@ def readinto(self, buf, frame_nbyte): if nbyte_read % frame_nbyte != 0: raise IOError("Unexpected end of file") nframe_read += nbyte_read // frame_nbyte - while nbyte_read < buf.nbytes: + while nbyte_read < buf[0].nbytes: self.cur_file += 1 if self.cur_file == self.nfile: break @@ -275,4 +275,3 @@ def serialize(iring, path=None, max_file_size=None, *args, **kwargs): SerializeBlock: A new block instance. """ return SerializeBlock(iring, path, max_file_size, *args, **kwargs) - diff --git a/test/test_serialize.py b/test/test_serialize.py index 09cfdb76e..465f352eb 100644 --- a/test/test_serialize.py +++ b/test/test_serialize.py @@ -34,35 +34,31 @@ import os import shutil +import tempfile class TemporaryDirectory(object): - def __init__(self, path): - self.path = path - os.makedirs(self.path) + def __init__(self): + self.path = tempfile.mkdtemp(suffix='.tmp', prefix='bifrost_test_') def remove(self): shutil.rmtree(self.path) def __enter__(self): - return self + return self.path def __exit__(self, type, value, tb): - self.remove() + #self.remove() + pass def get_sigproc_file_size(filename): """Returns the header and data size of a sigproc file without reading the whole file. """ with open(filename, 'rb') as f: - head = '' - while 'HEADER_END' not in head: + head = b'' + while b'HEADER_END' not in head: more_data = f.read(4096) - try: - more_data = more_data.decode(errors='replace') - except AttributeError: - # Python2 catch - pass if len(more_data) == 0: raise IOError("Not a valid sigproc file: " + filename) head += more_data - hdr_size = head.find('HEADER_END') + len('HEADER_END') + hdr_size = head.find(b'HEADER_END') + len(b'HEADER_END') file_size = os.path.getsize(filename) data_size = file_size - hdr_size return hdr_size, data_size @@ -71,10 +67,6 @@ def rename_sequence(hdr, name): hdr['name'] = name return hdr -def rename_sequence(hdr, name): - hdr['name'] = name - return hdr - class SerializeTest(unittest.TestCase): def setUp(self): self.fil_file = "./data/2chan16bitNoDM.fil" @@ -84,118 +76,126 @@ def setUp(self): with open(self.fil_file, 'rb') as f: self.data = f.read() self.data = self.data[hdr_size:] - self.temp_path = '/tmp/bifrost_test_serialize' self.basename = os.path.basename(self.fil_file) - self.basepath = os.path.join(self.temp_path, self.basename) self.gulp_nframe = 101 def run_test_serialize_with_name_no_ringlets(self, gulp_nframe_inc=0): - with bf.Pipeline() as pipeline: - data = read_sigproc([self.fil_file], self.gulp_nframe, core=0) - for i in range(5): - if gulp_nframe_inc != 0: - data = copy(data, - gulp_nframe=self.gulp_nframe+i*gulp_nframe_inc) - else: - data = copy(data) - data = serialize(data, self.temp_path, core=0) - with TemporaryDirectory(self.temp_path): + with TemporaryDirectory() as temp_path: + with bf.Pipeline() as pipeline: + data = read_sigproc([self.fil_file], self.gulp_nframe, core=0) + for i in range(5): + if gulp_nframe_inc != 0: + data = copy(data, + gulp_nframe=self.gulp_nframe+i*gulp_nframe_inc) + else: + data = copy(data) + data = serialize(data, temp_path, core=0) + pipeline.run() - # Note: SerializeBlock uses os.path.basename if path is given - hdrpath = self.basepath + '.bf.json' - datpath = self.basepath + '.bf.' + '0' * 12 + '.dat' - self.assertTrue(os.path.exists(hdrpath)) - self.assertTrue(os.path.exists(datpath)) - self.assertEqual(os.path.getsize(datpath), self.data_size) - with open(datpath, 'rb') as f: - data = f.read() - self.assertEqual(data, self.data) + + # Note: SerializeBlock uses os.path.basename if path is given + basepath = os.path.join(temp_path, self.basename) + hdrpath = basepath + '.bf.json' + datpath = basepath + '.bf.' + '0' * 12 + '.dat' + self.assertTrue(os.path.exists(hdrpath)) + self.assertTrue(os.path.exists(datpath)) + self.assertEqual(os.path.getsize(datpath), self.data_size) + with open(datpath, 'rb') as f: + data = f.read() + self.assertEqual(data, self.data) def test_serialize_with_name_no_ringlets(self): self.run_test_serialize_with_name_no_ringlets() self.run_test_serialize_with_name_no_ringlets(gulp_nframe_inc=1) self.run_test_serialize_with_name_no_ringlets(gulp_nframe_inc=3) def test_serialize_with_time_tag_no_ringlets(self): - with bf.Pipeline() as pipeline: - data = read_sigproc([self.fil_file], self.gulp_nframe) - # Custom view sets sequence name to '', which causes SerializeBlock - # to use the time_tag instead. - data = bf.views.custom(data, lambda hdr: rename_sequence(hdr, '')) - data = serialize(data, self.temp_path) - with TemporaryDirectory(self.temp_path): + with TemporaryDirectory() as temp_path: + with bf.Pipeline() as pipeline: + data = read_sigproc([self.fil_file], self.gulp_nframe) + # Custom view sets sequence name to '', which causes SerializeBlock + # to use the time_tag instead. + data = bf.views.custom(data, lambda hdr: rename_sequence(hdr, '')) + data = serialize(data, temp_path) pipeline.run() - basepath = os.path.join(self.temp_path, - '%020i' % self.time_tag) - hdrpath = basepath + '.bf.json' - datpath = basepath + '.bf.' + '0' * 12 + '.dat' - self.assertTrue(os.path.exists(hdrpath)) - self.assertTrue(os.path.exists(datpath)) - self.assertEqual(os.path.getsize(datpath), self.data_size) - with open(datpath, 'rb') as f: - data = f.read() - self.assertEqual(data, self.data) + + basepath = os.path.join(temp_path, '%020i' % self.time_tag) + hdrpath = basepath + '.bf.json' + datpath = basepath + '.bf.' + '0' * 12 + '.dat' + self.assertTrue(os.path.exists(hdrpath)) + self.assertTrue(os.path.exists(datpath)) + self.assertEqual(os.path.getsize(datpath), self.data_size) + with open(datpath, 'rb') as f: + data = f.read() + self.assertEqual(data, self.data) def test_serialize_with_name_and_ringlets(self): - with bf.Pipeline() as pipeline: - data = read_sigproc([self.fil_file], self.gulp_nframe) - # Transpose so that freq becomes a ringlet dimension - # TODO: Test multiple ringlet dimensions (e.g., freq + pol) once - # SerializeBlock supports it. - data = transpose(data, ['freq', 'time', 'pol']) - data = serialize(data, self.temp_path) - with TemporaryDirectory(self.temp_path): + with TemporaryDirectory() as temp_path: + with bf.Pipeline() as pipeline: + data = read_sigproc([self.fil_file], self.gulp_nframe) + # Transpose so that freq becomes a ringlet dimension + # TODO: Test multiple ringlet dimensions (e.g., freq + pol) once + # SerializeBlock supports it. + data = transpose(data, ['freq', 'time', 'pol']) + data = serialize(data, temp_path) pipeline.run() - # Note: SerializeBlock uses os.path.basename if path is given - hdrpath = self.basepath + '.bf.json' - datpath0 = self.basepath + '.bf.' + '0' * 12 + '.0.dat' - datpath1 = self.basepath + '.bf.' + '0' * 12 + '.1.dat' - self.assertTrue(os.path.exists(hdrpath)) - self.assertTrue(os.path.exists(datpath0)) - self.assertTrue(os.path.exists(datpath1)) - self.assertEqual(os.path.getsize(datpath0), - self.data_size // 2) - self.assertEqual(os.path.getsize(datpath1), - self.data_size // 2) + + # Note: SerializeBlock uses os.path.basename if path is given + basepath = os.path.join(temp_path, self.basename) + hdrpath = basepath + '.bf.json' + datpath0 = basepath + '.bf.' + '0' * 12 + '.0.dat' + datpath1 = basepath + '.bf.' + '0' * 12 + '.1.dat' + self.assertTrue(os.path.exists(hdrpath)) + self.assertTrue(os.path.exists(datpath0)) + self.assertTrue(os.path.exists(datpath1)) + self.assertEqual(os.path.getsize(datpath0), + self.data_size // 2) + self.assertEqual(os.path.getsize(datpath1), + self.data_size // 2) def test_deserialize_no_ringlets(self): - with TemporaryDirectory(self.temp_path): + with TemporaryDirectory() as temp_path: with bf.Pipeline() as pipeline: data = read_sigproc([self.fil_file], self.gulp_nframe) - serialize(data, self.temp_path) + serialize(data, temp_path) pipeline.run() - datpath = self.basepath + '.bf.' + '0' * 12 + '.dat' + + datpath = os.path.join(temp_path, self.basename) + '.bf.' + '0' * 12 + '.dat' with bf.Pipeline() as pipeline: - data = deserialize([self.basepath + '.bf'], self.gulp_nframe) + data = deserialize([os.path.join(temp_path, self.basename) + '.bf'], self.gulp_nframe) # Note: Must rename the sequence to avoid overwriting the input # file. data = bf.views.custom( data, lambda hdr: rename_sequence(hdr, hdr['name'] + '.2')) - serialize(data, self.temp_path) + serialize(data, temp_path) pipeline.run() - datpath = self.basepath + '.2.bf.' + '0' * 12 + '.dat' - with open(datpath, 'rb') as f: - data = f.read() - self.assertEqual(len(data), len(self.data)) - self.assertEqual(data, self.data) + + datpath = os.path.join(temp_path, self.basename) + '.2.bf.' + '0' * 12 + '.dat' + with open(datpath, 'rb') as f: + data = f.read() + self.assertEqual(len(data), len(self.data)) + self.assertEqual(data, self.data) def test_deserialize_with_ringlets(self): - with TemporaryDirectory(self.temp_path): + with TemporaryDirectory() as temp_path: with bf.Pipeline() as pipeline: data = read_sigproc([self.fil_file], self.gulp_nframe) data = transpose(data, ['freq', 'time', 'pol']) - serialize(data, self.temp_path) + serialize(data, temp_path) pipeline.run() - datpath = self.basepath + '.bf.' + '0' * 12 + '.dat' + + datpath = os.path.join(temp_path, self.basename) + '.bf.' + '0' * 12 + '.dat' with bf.Pipeline() as pipeline: - data = deserialize([self.basepath + '.bf'], self.gulp_nframe) + data = deserialize([os.path.join(temp_path, self.basename) + '.bf'], self.gulp_nframe) # Note: Must rename the sequence to avoid overwriting the input # file. data = bf.views.custom( data, lambda hdr: rename_sequence(hdr, hdr['name'] + '.2')) - serialize(data, self.temp_path) + serialize(data, temp_path) pipeline.run() - hdrpath = self.basepath + '.2.bf.json' - datpath0 = self.basepath + '.2.bf.' + '0' * 12 + '.0.dat' - datpath1 = self.basepath + '.2.bf.' + '0' * 12 + '.1.dat' - self.assertTrue(os.path.exists(hdrpath)) - self.assertTrue(os.path.exists(datpath0)) - self.assertTrue(os.path.exists(datpath1)) - self.assertEqual(os.path.getsize(datpath0), - self.data_size // 2) - self.assertEqual(os.path.getsize(datpath1), - self.data_size // 2) + + basepath = os.path.join(temp_path, self.basename) + hdrpath = basepath + '.2.bf.json' + datpath0 = basepath + '.2.bf.' + '0' * 12 + '.0.dat' + datpath1 = basepath + '.2.bf.' + '0' * 12 + '.1.dat' + self.assertTrue(os.path.exists(hdrpath)) + self.assertTrue(os.path.exists(datpath0)) + self.assertTrue(os.path.exists(datpath1)) + self.assertEqual(os.path.getsize(datpath0), + self.data_size // 2) + self.assertEqual(os.path.getsize(datpath1), + self.data_size // 2) From 9c14b60ffe83f22ccc9c498b73aa9b7708ea8294 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Oct 2021 17:28:02 -0600 Subject: [PATCH 0215/1155] Try StringIO.StringIO for Py2. --- test/test_print_header.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/test_print_header.py b/test/test_print_header.py index 25e7fdeed..24b1d37a5 100644 --- a/test/test_print_header.py +++ b/test/test_print_header.py @@ -26,7 +26,10 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import unittest -import io +try: + from StringIO import StringIO +except importError: + from io import StringIO import bifrost.pipeline as bfp import bifrost.blocks as blocks @@ -44,7 +47,7 @@ def test_read_sigproc(self): """Capture print output, assert it is a long string""" gulp_nframe = 101 - stdout = io.StringIO() + stdout = StringIO() with ExitStack() as stack: pipeline = stack.enter_context(bfp.Pipeline()) stack.enter_context(redirect_stdout(stdout)) From b7ed02cbc575374b514cd29d0bc8f10faf2a01c2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Oct 2021 18:37:00 -0600 Subject: [PATCH 0216/1155] This is what happens when I try to rush. --- test/test_print_header.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_print_header.py b/test/test_print_header.py index 24b1d37a5..60d48fe31 100644 --- a/test/test_print_header.py +++ b/test/test_print_header.py @@ -28,7 +28,7 @@ import unittest try: from StringIO import StringIO -except importError: +except ImportError: from io import StringIO import bifrost.pipeline as bfp From b5d95ab76521953c952505c686f17ba654816d02 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 11:03:17 -0600 Subject: [PATCH 0217/1155] Fix for getting a buffer from a memory address and size on PyPy. --- python/bifrost/ndarray.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index f43cf85e9..f56783c02 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -72,9 +72,18 @@ def _address_as_buffer(address, nbyte, readonly=False): int_asbuffer.argtypes = (ctypes.c_void_p, ctypes.c_ssize_t, ctypes.c_int) return int_asbuffer(address, nbyte, 0x100 if readonly else 0x200) except AttributeError: - # Python2 catch - return np.core.multiarray.int_asbuffer( - address, nbyte, readonly=readonly, check=False) + try: + # Python2 catch + return np.core.multiarray.int_asbuffer(address, + nbyte, + readonly=readonly, + check=False) + except AttributeError: + # PyPy3 catch + # TODO: How do we set read only? Does it matter? + # Should we be using this for everyone? + buf = (ctypes.c_char*nbyte).from_address(address) + return memoryview(buf) def asarray(arr, space=None): if isinstance(arr, ndarray) and (space is None or space == arr.bf.space): From 2475ab76f658f713133f68c4c099b774b52f95d7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 11:03:44 -0600 Subject: [PATCH 0218/1155] More work on OSX networking. --- src/Socket.hpp | 58 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 4b694c264..bbd5ba69b 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -154,11 +154,52 @@ inline static sa_family_t get_family(int sockfd) { } inline static int get_mtu(int sockfd) { - ifreq ifr; int mtu = 0; - if( ::ioctl(sockfd, SIOCGIFMTU, &ifr) != -1) { - mtu = ifr.ifr_mtu; + sa_family_t family = ::get_family(sockfd); + + sockaddr addr; + socklen_t addr_len = sizeof(addr); + sockaddr_in* addr4 = reinterpret_cast (&addr); + sockaddr_in6* addr6 = reinterpret_cast(&addr); + ::getsockname(sockfd, (struct sockaddr*)&addr, &addr_len); + + ifaddrs* ifaddr; + if( ::getifaddrs(&ifaddr) == -1 ) { + return 0; } + + ifreq ifr; + bool found = false; + for( ifaddrs* ifa=ifaddr; ifa!=NULL; ifa=ifa->ifa_next ) { + if( ifa->ifa_addr == NULL || found) { + continue; + } + sa_family_t ifa_family = ifa->ifa_addr->sa_family; + if( (family == AF_UNSPEC && (ifa_family == AF_INET || + ifa_family == AF_INET6)) || + ifa_family == family ) { + if( ifa_family == AF_INET ) { + struct sockaddr_in* inaddr = (struct sockaddr_in*) ifa->ifa_addr; + if( inaddr->sin_addr.s_addr == addr4->sin_addr.s_addr ) { + found = true; + } + } else if( ifa_family == AF_INET6 ) { + struct sockaddr_in6* inaddr6 = (struct sockaddr_in6*) ifa->ifa_addr; + if( inaddr6->sin6_addr.s6_addr == addr6->sin6_addr.s6_addr ) { + found = true; + } + } + } + + if( found ) { + ::strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name)); + if( ::ioctl(sockfd, SIOCGIFMTU, &ifr) != -1) { + mtu = ifr.ifr_mtu; + } + } + } + ::freeifaddrs(ifaddr); + return mtu; } @@ -225,8 +266,13 @@ class Socket { : super_t(what_arg) {} }; enum { +#if defined __APPLE__ && __APPLE__ + DEFAULT_SOCK_BUF_SIZE = 4*1024*1024, + DEFAULT_LINGER_SECS = 1, +#else DEFAULT_SOCK_BUF_SIZE = 256*1024*1024, DEFAULT_LINGER_SECS = 3, +#endif DEFAULT_MAX_CONN_QUEUE = 128 }; enum sock_type { @@ -506,10 +552,10 @@ std::string Socket::address_string(sockaddr_storage addr) { } } int Socket::discover_mtu(sockaddr_storage remote_address) { - Socket s(SOCK_DGRAM); + Socket s(SOCK_DGRAM); s.connect(remote_address); #if defined __APPLE__ && __APPLE__ - return ::get_mtu(s._fd); + return ::get_mtu(s.get_fd()); #else return s.get_option(IP_MTU, IPPROTO_IP); #endif @@ -556,7 +602,7 @@ void Socket::connect(sockaddr_storage remote_address) { } this->open(remote_address.ss_family); } - check_error(::connect(_fd, (sockaddr*)&remote_address, sizeof(remote_address)), + check_error(::connect(_fd, (sockaddr*)&remote_address, sizeof(sockaddr)), "connect socket"); if( remote_address.ss_family == AF_UNSPEC ) { _mode = Socket::MODE_BOUND; From 2af48d082785606da085293c8fdd6a8fb70f0ba6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 13:16:18 -0600 Subject: [PATCH 0219/1155] Cleanup the temporary directories. --- test/test_serialize.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/test_serialize.py b/test/test_serialize.py index 465f352eb..4a60b7a95 100644 --- a/test/test_serialize.py +++ b/test/test_serialize.py @@ -44,8 +44,7 @@ def remove(self): def __enter__(self): return self.path def __exit__(self, type, value, tb): - #self.remove() - pass + self.remove() def get_sigproc_file_size(filename): """Returns the header and data size of a sigproc file without reading From b420894ed9b2a5521dd55657c3321c0d1acfa191 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 13:17:51 -0600 Subject: [PATCH 0220/1155] Add OpenBLAS for PyPy. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 432e22403..a50059dc8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,6 +39,7 @@ addons: - ca-certificates - curl - git + - libopenblas-dev - pkg-config - software-properties-common - exuberant-ctags From d4d854797c2517e3925e77a9d12d64497a6960ed Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 13:28:25 -0600 Subject: [PATCH 0221/1155] Drop the memoryview for PyPy. --- python/bifrost/ndarray.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index f56783c02..8825eaed3 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -82,8 +82,7 @@ def _address_as_buffer(address, nbyte, readonly=False): # PyPy3 catch # TODO: How do we set read only? Does it matter? # Should we be using this for everyone? - buf = (ctypes.c_char*nbyte).from_address(address) - return memoryview(buf) + return (ctypes.c_char*nbyte).from_address(address) def asarray(arr, space=None): if isinstance(arr, ndarray) and (space is None or space == arr.bf.space): From db2f6d8ce10b2d10abfac0ecd4bedab4abe70cbd Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 13:43:26 -0600 Subject: [PATCH 0222/1155] Added gfortran to help build scipy on pypy. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index a50059dc8..3fe2659e7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,6 +38,7 @@ addons: - build-essential - ca-certificates - curl + - gfortran - git - libopenblas-dev - pkg-config From 2ed9f8f97ee639dcffd790062f9de3f116dda289 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 26 Oct 2021 10:51:20 -0600 Subject: [PATCH 0223/1155] Add a space to between the CUDA archs. --- config/cuda.m4 | 5 +- configure | 14573 ++++++++++++++++++++++------------------------- 2 files changed, 6961 insertions(+), 7617 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index ad9e5405f..014c16e3e 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -125,10 +125,7 @@ AC_DEFUN([AX_CHECK_CUDA], arch += minor; if( archs.count(arch) == 0 ) { archs.insert(arch); - if( dev > 0 ) { - fh << " "; - } - fh << arch; + fh << " " << arch; } } fh.close();]])], diff --git a/configure b/configure index f470f35be..b733b5b8d 100755 --- a/configure +++ b/configure @@ -1,10 +1,9 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for bifrost 0.9.0. +# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, -# Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -15,16 +14,14 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -34,46 +31,46 @@ esac fi - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi # The user is always right. -if ${PATH_SEPARATOR+false} :; then +if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -82,6 +79,13 @@ if ${PATH_SEPARATOR+false} :; then fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -90,12 +94,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -107,10 +107,30 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -132,22 +152,20 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop +else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -167,15 +185,12 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ) -then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : -else \$as_nop +else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 -blah=\$(echo \$(echo blah)) -test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -190,38 +205,30 @@ test -x / || exit 1" test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null -then : + if (eval "$as_required") 2>/dev/null; then : as_have_required=yes -else $as_nop +else as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null -then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -else $as_nop +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir$as_base + as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes - if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null -then : + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi @@ -229,21 +236,14 @@ fi esac as_found=false done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes -fi -fi +fi; } +IFS=$as_save_IFS - if test "x$CONFIG_SHELL" != x -then : + if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -261,19 +261,18 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno -then : - printf "%s\n" "$0: This script requires a shell more modern than all" - printf "%s\n" "$0: the shells that I found on your system." - if test ${ZSH_VERSION+y} ; then - printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" - printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -300,7 +299,6 @@ as_fn_unset () } as_unset=as_fn_unset - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -318,14 +316,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -340,7 +330,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -349,7 +339,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -388,13 +378,12 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' -else $as_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -406,27 +395,18 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -438,9 +418,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -467,7 +447,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -511,7 +491,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -525,10 +505,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -542,13 +518,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -626,36 +595,40 @@ PACKAGE_URL='https://github.com/ledatelescope/bifrost/' ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_STDIO_H -# include +#include +#ifdef HAVE_SYS_TYPES_H +# include #endif -#ifdef HAVE_STDLIB_H +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS # include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif #endif #ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif #ifdef HAVE_UNISTD_H # include #endif" -ac_header_c_list= ac_subst_vars='LTLIBOBJS PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR @@ -733,6 +706,7 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CXXCPP +CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -868,6 +842,7 @@ CXX CXXFLAGS CCC LT_SYS_LIBRARY_PATH +CPP CXXCPP CTAGS PYTHON @@ -941,6 +916,8 @@ do *) ac_optarg=yes ;; esac + # Accept the important Cygnus configure options, so we can diagnose typos. + case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -981,9 +958,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1007,9 +984,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1220,9 +1197,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1236,9 +1213,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1282,9 +1259,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1300,7 +1277,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1364,7 +1341,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_myself" | +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1558,6 +1535,7 @@ Some influential environment variables: CXXFLAGS C++ compiler flags LT_SYS_LIBRARY_PATH User-defined run-time library search path. + CPP C preprocessor CXXCPP C++ preprocessor CTAGS Absolute path to ctags executable PYTHON Absolute path to python executable @@ -1585,9 +1563,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1615,8 +1593,7 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for configure.gnu first; this name is used for a wrapper for - # Metaconfig's "Configure" on case-insensitive file systems. + # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1624,7 +1601,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1634,9 +1611,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF bifrost configure 0.9.0 -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.69 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1653,14 +1630,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam + rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1668,15 +1645,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext -then : + } && test -s conftest.$ac_objext; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1692,14 +1668,14 @@ fi ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam + rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1707,15 +1683,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext -then : + } && test -s conftest.$ac_objext; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1731,14 +1706,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext + rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1746,18 +1721,17 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1779,44 +1753,120 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1824,9 +1874,16 @@ else $as_nop #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1844,25 +1901,24 @@ choke me #endif int -main (void) +main () { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func @@ -1879,7 +1935,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1887,15 +1943,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1911,14 +1966,14 @@ fi ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext + rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1926,18 +1981,17 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1958,12 +2012,11 @@ fi ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1971,9 +2024,16 @@ else $as_nop #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1991,61 +2051,114 @@ choke me #endif int -main (void) +main () { return $2 (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func -# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_cxx_check_header_compile () +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - eval "$3=yes" -else $as_nop - eval "$3=no" +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_cxx_check_header_compile +} # ac_fn_cxx_check_header_mongrel # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- @@ -2054,18 +2167,17 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof ($2)) return 0; @@ -2073,13 +2185,12 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof (($2))) return 0; @@ -2087,27 +2198,26 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_try_run LINENO # ------------------------ -# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that -# executables *can* be run. +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -2117,26 +2227,25 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -2154,12 +2263,11 @@ fi ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 -printf %s "checking for int$2_t... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +$as_echo_n "checking for int$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2170,7 +2278,7 @@ else $as_nop $ac_includes_default enum { N = $2 / 2 - 1 }; int -main (void) +main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; @@ -2180,14 +2288,13 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int -main (void) +main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; @@ -2198,10 +2305,9 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( @@ -2209,20 +2315,19 @@ else $as_nop eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no" -then : +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : -else $as_nop +else break fi done fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t @@ -2234,12 +2339,11 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 -printf %s "checking for uint$2_t... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +$as_echo_n "checking for uint$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2249,7 +2353,7 @@ else $as_nop /* end confdefs.h. */ $ac_includes_default int -main (void) +main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; @@ -2259,8 +2363,7 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( @@ -2268,49 +2371,28 @@ then : eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no" -then : +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : -else $as_nop +else break fi done fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t -ac_configure_args_raw= -for ac_arg -do - case $ac_arg in - *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_configure_args_raw " '$ac_arg'" -done - -case $ac_configure_args_raw in - *$as_nl*) - ac_safe_unquote= ;; - *) - ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. - ac_unsafe_a="$ac_unsafe_z#~" - ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" - ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; -esac - cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was - $ $0$ac_configure_args_raw + $ $0 $@ _ACEOF exec 5>>config.log @@ -2343,12 +2425,8 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - printf "%s\n" "PATH: $as_dir" + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" done IFS=$as_save_IFS @@ -2383,7 +2461,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2418,13 +2496,11 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? - # Sanitize IFS. - IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - printf "%s\n" "## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2435,8 +2511,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2460,7 +2536,7 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ) echo - printf "%s\n" "## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2468,14 +2544,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - printf "%s\n" "## ------------------- ## + $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2483,15 +2559,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - printf "%s\n" "## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2499,8 +2575,8 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} echo fi test "$ac_signal" != 0 && - printf "%s\n" "$as_me: caught signal $ac_signal" - printf "%s\n" "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2514,48 +2590,63 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -printf "%s\n" "/* confdefs.h */" > confdefs.h +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF -printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF -printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF -printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF -printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF -printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - ac_site_files="$CONFIG_SITE" + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac elif test "x$prefix" != xNONE; then - ac_site_files="$prefix/share/config.site $prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi - -for ac_site_file in $ac_site_files +for ac_site_file in "$ac_site_file1" "$ac_site_file2" do - case $ac_site_file in #( - */*) : - ;; #( - *) : - ac_site_file=./$ac_site_file ;; -esac - if test -f "$ac_site_file" && test -r "$ac_site_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2565,1269 +2656,1581 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -printf "%s\n" "$as_me: loading cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -printf "%s\n" "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Test code for whether the C compiler supports C89 (global declarations) -ac_c_conftest_c89_globals=' -/* Does the compiler advertise C89 conformance? - Do not test the value of __STDC__, because some compilers set it to 0 - while being otherwise adequately conformant. */ -#if !defined __STDC__ -# error "Compiler does not advertise C89 conformance" -#endif +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ -struct buf { int x; }; -struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} +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 -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not \xHH hex character constants. - These do not provoke an error unfortunately, instead are silently treated - as an "x". The following induces an error, until -std is added to get - proper ANSI mode. Curiously \x00 != x always comes out true, for an - array size at least. It is necessary to write \x00 == 0 to get something - that is true only with -std. */ -int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) '\''x'\'' -int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), - int, int);' -# Test code for whether the C compiler supports C89 (body of main). -ac_c_conftest_c89_main=' -ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); -' -# Test code for whether the C compiler supports C99 (global declarations) -ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L -# error "Compiler does not advertise C99 conformance" -#endif +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi -#include -extern int puts (const char *); -extern int printf (const char *, ...); -extern int dprintf (int, const char *, ...); -extern void *malloc (size_t); - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -// dprintf is used instead of fprintf to avoid needing to declare -// FILE and stderr. -#define debug(...) dprintf (2, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - #error "your preprocessor is broken" -#endif -#if BIG_OK -#else - #error "your preprocessor is broken" -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; -struct incomplete_array -{ - int datasize; - double data[]; -}; -struct named_init { - int number; - const wchar_t *name; - double average; -}; -typedef const char *ccp; +: ${CXXFLAGS="-O3 -Wall -pedantic"} -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) - continue; - return 0; -} +# +# Programs +# -// Check varargs and va_copy. -static bool -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac - const char *str = ""; - int number = 0; - float fnumber = 0; - while (*format) - { - switch (*format++) - { - case '\''s'\'': // string - str = va_arg (args_copy, const char *); - break; - case '\''d'\'': // int - number = va_arg (args_copy, int); - break; - case '\''f'\'': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); - return *str && number && fnumber; -} -' +macro_version='2.4.6' +macro_revision='2.4.6' -# Test code for whether the C compiler supports C99 (body of main). -ac_c_conftest_c99_main=' - // Check bool. - _Bool success = false; - success |= (argc != 0); - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[0] = argv[0][0]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' - || dynamic_array[ni.number - 1] != 543); -' -# Test code for whether the C compiler supports C11 (global declarations) -ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L -# error "Compiler does not advertise C11 conformance" -#endif -// Check _Alignas. -char _Alignas (double) aligned_as_double; -char _Alignas (0) no_special_alignment; -extern char aligned_as_int; -char _Alignas (0) _Alignas (int) aligned_as_int; -// Check _Alignof. -enum -{ - int_alignment = _Alignof (int), - int_array_alignment = _Alignof (int[100]), - char_alignment = _Alignof (char) -}; -_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); -// Check _Noreturn. -int _Noreturn does_not_return (void) { for (;;) continue; } -// Check _Static_assert. -struct test_static_assert -{ - int x; - _Static_assert (sizeof (int) <= sizeof (long int), - "_Static_assert does not work in struct"); - long int y; -}; -// Check UTF-8 literals. -#define u8 syntax error! -char const utf8_literal[] = u8"happens to be ASCII" "another string"; -// Check duplicate typedefs. -typedef long *long_ptr; -typedef long int *long_ptr; -typedef long_ptr long_ptr; -// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. -struct anonymous -{ - union { - struct { int i; int j; }; - struct { int k; long int l; } w; - }; - int m; -} v1; -' -# Test code for whether the C compiler supports C11 (body of main). -ac_c_conftest_c11_main=' - _Static_assert ((offsetof (struct anonymous, i) - == offsetof (struct anonymous, w.k)), - "Anonymous union alignment botch"); - v1.i = 2; - v1.w.k = 5; - ok |= v1.i != 5; -' -# Test code for whether the C compiler supports C11 (complete). -ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} -${ac_c_conftest_c11_globals} -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - ${ac_c_conftest_c11_main} - return ok; -} -" -# Test code for whether the C compiler supports C99 (complete). -ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} +ltmain=$ac_aux_dir/ltmain.sh -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - return ok; -} -" +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -# Test code for whether the C compiler supports C89 (complete). -ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - return ok; -} -" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -# Test code for whether the C++ compiler supports C++98 (global declarations) -ac_cxx_conftest_cxx98_globals=' -// Does the compiler advertise C++98 conformance? -#if !defined __cplusplus || __cplusplus < 199711L -# error "Compiler does not advertise C++98 conformance" -#endif -// These inclusions are to reject old compilers that -// lack the unsuffixed header files. -#include -#include +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi -// and are *not* freestanding headers in C++98. -extern void assert (int); -namespace std { - extern int strcmp (const char *, const char *); -} +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -// Namespaces, exceptions, and templates were all added after "C++ 2.0". -using std::exception; -using std::strcmp; -namespace { +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -void test_exception_syntax() -{ - try { - throw "test"; - } catch (const char *s) { - // Extra parentheses suppress a warning when building autoconf itself, - // due to lint rules shared with more typical C programs. - assert (!(strcmp) (s, "test")); - } -} +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' -template struct test_template -{ - T const val; - explicit test_template(T t) : val(t) {} - template T add(U u) { return static_cast(u) + val; } -}; +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' -} // anonymous namespace -' +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi -# Test code for whether the C++ compiler supports C++98 (body of main) -ac_cxx_conftest_cxx98_main=' - assert (argc); - assert (! argv[0]); +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () { - test_exception_syntax (); - test_template tt (2.0); - assert (tt.add (4) == 6.0); - assert (true && !false); + $ECHO "" } -' -# Test code for whether the C++ compiler supports C++11 (global declarations) -ac_cxx_conftest_cxx11_globals=' -// Does the compiler advertise C++ 2011 conformance? -#if !defined __cplusplus || __cplusplus < 201103L -# error "Compiler does not advertise C++11 conformance" -#endif +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac -namespace cxx11test -{ - constexpr int get_val() { return 20; } - struct testinit - { - int i; - double d; - }; - class delegate - { - public: - delegate(int n) : n(n) {} - delegate(): delegate(2354) {} - virtual int getval() { return this->n; }; - protected: - int n; - }; - class overridden : public delegate - { - public: - overridden(int n): delegate(n) {} - virtual int getval() override final { return this->n * 2; } - }; - class nocopy - { - public: - nocopy(int i): i(i) {} - nocopy() = default; - nocopy(const nocopy&) = delete; - nocopy & operator=(const nocopy&) = delete; - private: - int i; - }; - - // for testing lambda expressions - template Ret eval(Fn f, Ret v) - { - return f(v); - } - // for testing variadic templates and trailing return types - template auto sum(V first) -> V - { - return first; - } - template auto sum(V first, Args... rest) -> V - { - return first + sum(rest...); - } -} -' -# Test code for whether the C++ compiler supports C++11 (body of main) -ac_cxx_conftest_cxx11_main=' -{ - // Test auto and decltype - auto a1 = 6538; - auto a2 = 48573953.4; - auto a3 = "String literal"; - int total = 0; - for (auto i = a3; *i; ++i) { total += *i; } - decltype(a2) a4 = 34895.034; -} -{ - // Test constexpr - short sa[cxx11test::get_val()] = { 0 }; -} -{ - // Test initializer lists - cxx11test::testinit il = { 4323, 435234.23544 }; -} -{ - // Test range-based for - int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, - 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; - for (auto &x : array) { x += 23; } -} -{ - // Test lambda expressions - using cxx11test::eval; - assert (eval ([](int x) { return x*2; }, 21) == 42); - double d = 2.0; - assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); - assert (d == 5.0); - assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); - assert (d == 5.0); -} -{ - // Test use of variadic templates - using cxx11test::sum; - auto a = sum(1); - auto b = sum(1, 2); - auto c = sum(1.0, 2.0, 3.0); -} -{ - // Test constructor delegation - cxx11test::delegate d1; - cxx11test::delegate d2(); - cxx11test::delegate d3(45); -} -{ - // Test override and final - cxx11test::overridden o1(55464); -} -{ - // Test nullptr - char *c = nullptr; -} -{ - // Test template brackets - test_template<::test_template> v(test_template(12)); -} -{ - // Unicode literals - char const *utf8 = u8"UTF-8 string \u2500"; - char16_t const *utf16 = u"UTF-8 string \u2500"; - char32_t const *utf32 = U"UTF-32 string \u2500"; -} -' -# Test code for whether the C compiler supports C++11 (complete). -ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} -${ac_cxx_conftest_cxx11_globals} -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_cxx_conftest_cxx98_main} - ${ac_cxx_conftest_cxx11_main} - return ok; -} -" -# Test code for whether the C compiler supports C++98 (complete). -ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_cxx_conftest_cxx98_main} - return ok; -} -" -as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" -as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" -as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" -as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" -as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" -as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" -as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" -as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" -as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" - -# Auxiliary files required by this configure script. -ac_aux_files="install-sh config.guess config.sub ltmain.sh" - -# Locations in which to look for auxiliary files. -ac_aux_dir_candidates="${srcdir}/config" - -# Search for a directory containing all of the required auxiliary files, -# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. -# If we don't find one directory that contains all the files we need, -# we report the set of missing files from the *first* directory in -# $ac_aux_dir_candidates and give up. -ac_missing_aux_files="" -ac_first_candidate=: -printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in $ac_aux_dir_candidates +for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - as_found=: + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 - ac_aux_dir_found=yes - ac_install_sh= - for ac_aux in $ac_aux_files - do - # As a special case, if "install-sh" is required, that requirement - # can be satisfied by any of "install-sh", "install.sh", or "shtool", - # and $ac_install_sh is set appropriately for whichever one is found. - if test x"$ac_aux" = x"install-sh" - then - if test -f "${as_dir}install-sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 - ac_install_sh="${as_dir}install-sh -c" - elif test -f "${as_dir}install.sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 - ac_install_sh="${as_dir}install.sh -c" - elif test -f "${as_dir}shtool"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 - ac_install_sh="${as_dir}shtool install -c" - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} install-sh" - else - break - fi - fi - else - if test -f "${as_dir}${ac_aux}"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" - else - break - fi - fi - fi - done - if test "$ac_aux_dir_found" = yes; then - ac_aux_dir="$as_dir" - break - fi - ac_first_candidate=false +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - as_found=false + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi done + done IFS=$as_save_IFS -if $as_found -then : -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi - - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -if test -f "${ac_aux_dir}config.guess"; then - ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi -if test -f "${ac_aux_dir}config.sub"; then - ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -if test -f "$ac_aux_dir/configure"; then - ac_configure="$SHELL ${ac_aux_dir}configure" + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" fi -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi done -if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' - and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## + done +IFS=$as_save_IFS -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -: ${CXXFLAGS="-O3 -Wall -pedantic"} + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -# -# Programs -# +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + test -n "$ac_ct_CC" && break +done -case `pwd` in - *\ * | *\ *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac + CC=$ac_ct_CC + fi +fi +fi -macro_version='2.4.6' -macro_revision='2.4.6' - - - - - - - - - - - - +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -ltmain=$ac_aux_dir/ltmain.sh +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - # Make sure we can run config.sub. -$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -printf %s "checking build system type... " >&6; } -if test ${ac_cv_build+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -printf "%s\n" "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -printf %s "checking host system type... " >&6; } -if test ${ac_cv_host+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 + ac_file='' fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -printf "%s\n" "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -printf %s "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () { - $ECHO "" -} +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; -case $ECHO in - printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -printf "%s\n" "printf" >&6; } ;; - print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -printf "%s\n" "print -r" >&6; } ;; - *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -printf "%s\n" "cat" >&6; } ;; + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done - done -IFS=$as_save_IFS +rm -f conftest.$ac_ext +CC=$ac_save_CC fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_SED=$SED fi - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_GREP=$GREP fi - fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_EGREP=$EGREP fi - - test -n "$CC" && break - done + fi fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_FGREP=$FGREP fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" - test -n "$ac_ct_CC" && break -done - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3836,43 +4239,42 @@ IFS=$as_save_IFS fi fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$DUMPBIN" && break + done fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3881,666 +4283,259 @@ IFS=$as_save_IFS fi fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ac_ct_CC" = x; then - CC="" + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - CC=$ac_ct_CC + DUMPBIN=$ac_ct_DUMPBIN fi -else - CC="$ac_cv_prog_CC" fi + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi fi +test -z "$NM" && NM=nm -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } -# Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion -version; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main (void) -{ - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -printf %s "checking whether the C compiler works... " >&6; } -ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; -else $as_nop - ac_file='' -fi -if test -z "$ac_file" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -printf %s "checking for C compiler default output file name... " >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -printf "%s\n" "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -printf %s "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -printf "%s\n" "$ac_cv_exeext" >&6; } + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -printf %s "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -printf "%s\n" "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -printf %s "checking for suffix of object files... " >&6; } -if test ${ac_cv_objext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -printf "%s\n" "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test $ac_compiler_gnu = yes; then - GCC=yes +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } else - GCC= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } fi -ac_test_CFLAGS=${CFLAGS+y} -ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +max_cmd_len=$lt_cv_sys_max_cmd_len -int -main (void) -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main (void) -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main (void) -{ +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC + lt_unset=false fi -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 -fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -printf %s "checking for a sed that does not truncate output... " >&6; } -if test ${ac_cv_path_SED+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in sed gsed - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; esac - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -printf "%s\n" "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - @@ -4549,230 +4544,109 @@ Xsed="$SED -e 1s/^X//" - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -printf %s "checking for grep that handles long lines and -e... " >&6; } -if test ${ac_cv_path_GREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in grep ggrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_cv_path_GREP=$GREP -fi + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -printf "%s\n" "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -printf %s "checking for egrep... " >&6; } -if test ${ac_cv_path_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in egrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -printf "%s\n" "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -printf %s "checking for fgrep... " >&6; } -if test ${ac_cv_path_FGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in fgrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_cv_path_FGREP=$FGREP -fi + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac - fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -printf "%s\n" "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac @@ -4782,263 +4656,66 @@ test -z "$GREP" && GREP=grep +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -# Check whether --with-gnu-ld was given. -if test ${with_gnu_ld+y} -then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop - with_gnu_ld=no fi - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -printf %s "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -printf %s "checking for GNU ld... " >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -printf %s "checking for non-GNU ld... " >&6; } -fi -if test ${lt_cv_path_LD+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -printf "%s\n" "$LD" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -printf %s "checking if the linker ($LD) is GNU ld... " >&6; } -if test ${lt_cv_prog_gnu_ld+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test ${lt_cv_path_NM+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM -else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} -fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -printf "%s\n" "$lt_cv_path_NM" >&6; } -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DUMPBIN+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -printf "%s\n" "$DUMPBIN" >&6; } +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DUMPBIN+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5047,375 +4724,273 @@ IFS=$as_save_IFS fi fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -printf "%s\n" "$ac_ct_DUMPBIN" >&6; } +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - DUMPBIN=$ac_ct_DUMPBIN + OBJDUMP=$ac_ct_OBJDUMP fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi +test -z "$OBJDUMP" && OBJDUMP=objdump - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi -fi -test -z "$NM" && NM=nm -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -printf %s "checking the name lister ($NM) interface... " >&6; } -if test ${lt_cv_nm_interface+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -printf "%s\n" "$lt_cv_nm_interface" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -printf %s "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -printf "%s\n" "no, using $LN_S" >&6; } -fi + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. -# find the maximum length of command line arguments -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -printf %s "checking the maximum length of command line arguments... " >&6; } -if test ${lt_cv_sys_max_cmd_len+y} -then : - printf %s "(cached) " >&6 -else $as_nop - i=0 - teststring=ABCD +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; +beos*) + lt_cv_deplibs_check_method=pass_all + ;; - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac + ;; -fi +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; -if test -n "$lt_cv_sys_max_cmd_len"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 -printf "%s\n" "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -printf %s "checking how to convert $build file names to $host format... " >&6; } -if test ${lt_cv_to_host_file_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi ;; -esac - + esac fi -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -printf %s "checking how to convert $build file names to toolchain format... " >&6; } -if test ${lt_cv_to_tool_file_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -fi -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -printf %s "checking for $LD option to reload object files... " >&6; } -if test ${lt_cv_ld_reload_flag+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_reload_flag='-r' -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test yes != "$GCC"; then - reload_cmds=false - fi - ;; - darwin*) - if test yes = "$GCC"; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac @@ -5426,30 +5001,25 @@ esac if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5458,43 +5028,38 @@ IFS=$as_save_IFS fi fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -printf "%s\n" "$OBJDUMP" >&6; } +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5503,31 +5068,31 @@ IFS=$as_save_IFS fi fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -printf "%s\n" "$ac_ct_OBJDUMP" >&6; } +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - OBJDUMP=$ac_ct_OBJDUMP + DLLTOOL=$ac_ct_DLLTOOL fi else - OBJDUMP="$ac_cv_prog_OBJDUMP" + DLLTOOL="$ac_cv_prog_DLLTOOL" fi -test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$DLLTOOL" && DLLTOOL=dlltool @@ -5537,400 +5102,38 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -printf %s "checking how to recognize dependent libraries... " >&6; } -if test ${lt_cv_deplibs_check_method+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' -beos*) - lt_cv_deplibs_check_method=pass_all +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; +esac -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -os2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DLLTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -printf "%s\n" "$DLLTOOL" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DLLTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -printf "%s\n" "$ac_ct_DLLTOOL" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -printf %s "checking how to associate runtime and link libraries... " >&6; } -if test ${lt_cv_sharedlib_from_linklib_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO @@ -5948,16 +5151,15 @@ if test -z "$CXX"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else @@ -5965,15 +5167,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5984,11 +5182,11 @@ fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -5997,16 +5195,15 @@ fi fi if test -z "$CXX"; then ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else @@ -6014,15 +5211,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6033,11 +5226,11 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -printf "%s\n" "$ac_ct_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6049,8 +5242,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -6060,7 +5253,7 @@ fi fi fi # Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do @@ -6070,7 +5263,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -6080,21 +5273,20 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 -printf %s "checking whether the compiler supports GNU C++... " >&6; } -if test ${ac_cv_cxx_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { #ifndef __GNUC__ choke me @@ -6104,33 +5296,29 @@ main (void) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes -else $as_nop +else ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi -ac_test_CXXFLAGS=${CXXFLAGS+y} +ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -printf %s "checking whether $CXX accepts -g... " >&6; } -if test ${ac_cv_prog_cxx_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no @@ -6139,60 +5327,57 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes -else $as_nop +else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } -if test $ac_test_CXXFLAGS; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then @@ -6207,100 +5392,6 @@ else CXXFLAGS= fi fi -ac_prog_cxx_stdcxx=no -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 -printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_11=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx11_program -_ACEOF -for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx11" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi - -if test "x$ac_cv_prog_cxx_cxx11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx11" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 - ac_prog_cxx_stdcxx=cxx11 -fi -fi -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 -printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_98+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_98=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx98_program -_ACEOF -for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx98=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx98" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi - -if test "x$ac_cv_prog_cxx_cxx98" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx98" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx98" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 - ac_prog_cxx_stdcxx=cxx98 -fi -fi - ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -6313,12 +5404,11 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -6326,15 +5416,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6345,11 +5431,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -printf "%s\n" "$AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6362,12 +5448,11 @@ if test -z "$AR"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -6375,15 +5460,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6394,11 +5475,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -printf "%s\n" "$ac_ct_AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6410,8 +5491,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -6431,32 +5512,30 @@ fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -printf %s "checking for archiver @FILE support... " >&6; } -if test ${lt_cv_ar_at_file+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. @@ -6464,7 +5543,7 @@ then : { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ @@ -6473,11 +5552,11 @@ then : rm -f conftest.* libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -printf "%s\n" "$lt_cv_ar_at_file" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= @@ -6494,12 +5573,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_STRIP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -6507,15 +5585,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6526,11 +5600,11 @@ fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -printf "%s\n" "$STRIP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6539,12 +5613,11 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_STRIP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else @@ -6552,15 +5625,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6571,11 +5640,11 @@ fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -printf "%s\n" "$ac_ct_STRIP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -6583,8 +5652,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -6603,12 +5672,11 @@ test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -6616,15 +5684,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6635,11 +5699,11 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -printf "%s\n" "$RANLIB" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6648,12 +5712,11 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -6661,15 +5724,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6680,11 +5739,11 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -printf "%s\n" "$ac_ct_RANLIB" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -6692,8 +5751,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -6757,12 +5816,11 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AWK+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -6770,15 +5828,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6789,11 +5843,11 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -printf "%s\n" "$AWK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6829,12 +5883,11 @@ compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -printf %s "checking command to parse $NM output from $compiler object... " >&6; } -if test ${lt_cv_sys_global_symbol_pipe+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -6986,14 +6039,14 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then @@ -7062,7 +6115,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi @@ -7097,11 +6150,11 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -printf "%s\n" "failed" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -printf "%s\n" "ok" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } fi # Response file support. @@ -7147,14 +6200,13 @@ fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -printf %s "checking for sysroot... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. -if test ${with_sysroot+y} -then : +if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; -else $as_nop +else with_sysroot=no fi @@ -7172,25 +6224,24 @@ case $with_sysroot in #( no|'') ;; #( *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -printf "%s\n" "$with_sysroot" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -printf "%s\n" "${lt_sysroot:-no}" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -printf %s "checking for a working dd... " >&6; } -if test ${ac_cv_path_lt_DD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} @@ -7201,15 +6252,10 @@ if test -z "$lt_DD"; then for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in dd - do + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ @@ -7229,16 +6275,15 @@ fi rm -f conftest.i conftest2.i conftest.out fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -printf "%s\n" "$ac_cv_path_lt_DD" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -printf %s "checking how to truncate binary pipes... " >&6; } -if test ${lt_cv_truncate_bin+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= @@ -7249,8 +6294,8 @@ fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -printf "%s\n" "$lt_cv_truncate_bin" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } @@ -7274,8 +6319,7 @@ func_cc_basename () # Check whether --enable-libtool-lock was given. -if test ${enable_libtool_lock+y} -then : +if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi @@ -7291,7 +6335,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) @@ -7311,7 +6355,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in @@ -7349,7 +6393,7 @@ mips64*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in @@ -7390,7 +6434,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) @@ -7453,12 +6497,11 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -printf %s "checking whether the C compiler needs -belf... " >&6; } -if test ${lt_cv_cc_needs_belf+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7469,20 +6512,19 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes -else $as_nop +else lt_cv_cc_needs_belf=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7491,8 +6533,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS @@ -7505,7 +6547,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) @@ -7542,12 +6584,11 @@ need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_MANIFEST_TOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else @@ -7555,15 +6596,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7574,11 +6611,11 @@ fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -printf "%s\n" "$MANIFEST_TOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7587,12 +6624,11 @@ if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else @@ -7600,15 +6636,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7619,11 +6651,11 @@ fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then @@ -7631,8 +6663,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL @@ -7642,12 +6674,11 @@ else fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if test ${lt_cv_path_mainfest_tool+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out @@ -7657,8 +6688,8 @@ else $as_nop fi rm -f conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -7673,12 +6704,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DSYMUTIL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else @@ -7686,15 +6716,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7705,11 +6731,11 @@ fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -printf "%s\n" "$DSYMUTIL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7718,12 +6744,11 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else @@ -7731,15 +6756,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7750,11 +6771,11 @@ fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then @@ -7762,8 +6783,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL @@ -7775,12 +6796,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_NMEDIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else @@ -7788,15 +6808,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7807,11 +6823,11 @@ fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -printf "%s\n" "$NMEDIT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7820,12 +6836,11 @@ if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_NMEDIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else @@ -7833,15 +6848,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7852,11 +6863,11 @@ fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -printf "%s\n" "$ac_ct_NMEDIT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then @@ -7864,8 +6875,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT @@ -7877,12 +6888,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_LIPO+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else @@ -7890,15 +6900,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7909,11 +6915,11 @@ fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -printf "%s\n" "$LIPO" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7922,12 +6928,11 @@ if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_LIPO+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else @@ -7935,15 +6940,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7954,11 +6955,11 @@ fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -printf "%s\n" "$ac_ct_LIPO" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then @@ -7966,8 +6967,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO @@ -7979,12 +6980,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else @@ -7992,15 +6992,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8011,11 +7007,11 @@ fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -printf "%s\n" "$OTOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8024,12 +7020,11 @@ if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else @@ -8037,15 +7032,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8056,11 +7047,11 @@ fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -printf "%s\n" "$ac_ct_OTOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then @@ -8068,8 +7059,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL @@ -8081,12 +7072,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OTOOL64+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else @@ -8094,15 +7084,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8113,11 +7099,11 @@ fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -printf "%s\n" "$OTOOL64" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8126,12 +7112,11 @@ if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OTOOL64+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else @@ -8139,15 +7124,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8158,11 +7139,11 @@ fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -printf "%s\n" "$ac_ct_OTOOL64" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then @@ -8170,8 +7151,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 @@ -8206,12 +7187,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -printf %s "checking for -single_module linker flag... " >&6; } -if test ${lt_cv_apple_cc_single_mod+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override @@ -8240,15 +7220,14 @@ else $as_nop rm -f conftest.* fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -printf %s "checking for -exported_symbols_list linker flag... " >&6; } -if test ${lt_cv_ld_exported_symbols_list+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym @@ -8257,33 +7236,31 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes -else $as_nop +else lt_cv_ld_exported_symbols_list=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -printf %s "checking for -force_load linker flag... " >&6; } -if test ${lt_cv_ld_force_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} @@ -8311,8 +7288,8 @@ _LT_EOF rm -rf conftest.dSYM fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -printf "%s\n" "$lt_cv_ld_force_load" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; @@ -8378,43 +7355,286 @@ func_munge_path_list () esac } -ac_header= ac_cache= -for ac_item in $ac_header_c_list +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes do - if test $ac_cache; then - ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" - if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then - printf "%s\n" "#define $ac_item 1" >> confdefs.h - fi - ac_header= ac_cache= - elif test $ac_header; then - ac_cache=$ac_item - else - ac_header=$ac_item - fi + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : +else + ac_cv_header_stdc=no +fi +rm -f conftest* +fi +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then +$as_echo "#define STDC_HEADERS 1" >>confdefs.h -if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes -then : +fi -printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = xyes -then : - printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF fi +done + func_stripname_cnf () @@ -8440,8 +7660,7 @@ func_stripname_cnf () # Check whether --enable-shared was given. -if test ${enable_shared+y} -then : +if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; @@ -8459,7 +7678,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_shared=yes fi @@ -8472,8 +7691,7 @@ fi # Check whether --enable-static was given. -if test ${enable_static+y} -then : +if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; @@ -8491,7 +7709,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_static=yes fi @@ -8505,8 +7723,7 @@ fi # Check whether --with-pic was given. -if test ${with_pic+y} -then : +if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; @@ -8523,7 +7740,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else pic_mode=default fi @@ -8535,8 +7752,7 @@ fi # Check whether --enable-fast-install was given. -if test ${enable_fast_install+y} -then : +if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; @@ -8554,7 +7770,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_fast_install=yes fi @@ -8568,12 +7784,11 @@ fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -printf %s "checking which variant of shared library versioning to provide... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. -if test ${with_aix_soname+y} -then : +if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; @@ -8582,19 +7797,18 @@ then : ;; esac lt_cv_with_aix_soname=$with_aix_soname -else $as_nop - if test ${lt_cv_with_aix_soname+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -printf "%s\n" "$with_aix_soname" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', @@ -8676,12 +7890,11 @@ if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -printf %s "checking for objdir... " >&6; } -if test ${lt_cv_objdir+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then @@ -8692,15 +7905,17 @@ else fi rmdir .libs 2>/dev/null fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -printf "%s\n" "$lt_cv_objdir" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir -printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF @@ -8746,12 +7961,11 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -printf %s "checking for ${ac_tool_prefix}file... " >&6; } -if test ${lt_cv_path_MAGIC_CMD+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8800,11 +8014,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -printf "%s\n" "$MAGIC_CMD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8813,12 +8027,11 @@ fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -printf %s "checking for file... " >&6; } -if test ${lt_cv_path_MAGIC_CMD+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8867,11 +8080,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -printf "%s\n" "$MAGIC_CMD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8956,12 +8169,11 @@ if test yes = "$GCC"; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test ${lt_cv_prog_compiler_rtti_exceptions+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -8992,8 +8204,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -9350,28 +8562,26 @@ case $host_os in ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -printf %s "checking for $compiler option to produce PIC... " >&6; } -if test ${lt_cv_prog_compiler_pic+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test ${lt_cv_prog_compiler_pic_works+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -9402,8 +8612,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in @@ -9431,12 +8641,11 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test ${lt_cv_prog_compiler_static_works+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -9460,8 +8669,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : @@ -9475,12 +8684,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -9523,20 +8731,19 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -9579,8 +8786,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } @@ -9588,19 +8795,19 @@ printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -printf %s "checking if we can lock with hard links... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -printf "%s\n" "$hard_links" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test no = "$hard_links"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -9612,8 +8819,8 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -10168,23 +9375,21 @@ _LT_EOF if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath_+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10199,7 +9404,7 @@ then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -10223,23 +9428,21 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath_+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10254,7 +9457,7 @@ then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -10505,12 +9708,11 @@ fi # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -printf %s "checking if $CC understands -b... " >&6; } -if test ${lt_cv_prog_compiler__b+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" @@ -10534,8 +9736,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' @@ -10575,30 +9777,28 @@ fi # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if test ${lt_cv_irix_exported_symbol+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes -else $as_nop +else lt_cv_irix_exported_symbol=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi @@ -10878,8 +10078,8 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -printf "%s\n" "$ld_shlibs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -10915,19 +10115,18 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -printf %s "checking whether -lc should be explicitly linked in... " >&6; } -if test ${lt_cv_archive_cmds_need_lc+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -10945,7 +10144,7 @@ else $as_nop if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no @@ -10959,8 +10158,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac @@ -11119,8 +10318,8 @@ esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -printf %s "checking dynamic linker characteristics... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in @@ -11681,10 +10880,9 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if test ${lt_cv_shlibpath_overrides_runpath+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -11694,21 +10892,19 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null -then : +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -11940,8 +11136,8 @@ uts4*) dynamic_linker=no ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -printf "%s\n" "$dynamic_linker" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -12062,8 +11258,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -printf %s "checking how to hardcode library paths into programs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -12087,8 +11283,8 @@ else # directories. hardcode_action=unsupported fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -printf "%s\n" "$hardcode_action" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then @@ -12132,12 +11328,11 @@ else darwin*) # if libdl is installed we need to link against it - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12146,31 +11341,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop +else lt_cv_dlopen=dyld lt_cv_dlopen_libs= @@ -12190,16 +11386,14 @@ fi *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes -then : +if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -printf %s "checking for shl_load in -ldld... " >&6; } -if test ${ac_cv_lib_dld_shl_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12208,42 +11402,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char shl_load (); int -main (void) +main () { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes -else $as_nop +else ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else $as_nop +else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes -then : +if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12252,37 +11445,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -printf %s "checking for dlopen in -lsvld... " >&6; } -if test ${ac_cv_lib_svld_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12291,37 +11484,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes -else $as_nop +else ac_cv_lib_svld_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -printf %s "checking for dld_link in -ldld... " >&6; } -if test ${ac_cv_lib_dld_dld_link+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12330,29 +11523,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dld_link (); int -main (void) +main () { return dld_link (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes -else $as_nop +else ac_cv_lib_dld_dld_link=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -12391,12 +11585,11 @@ fi save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -printf %s "checking whether a program can dlopen itself... " >&6; } -if test ${lt_cv_dlopen_self+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else @@ -12475,7 +11668,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -12493,17 +11686,16 @@ rm -fr conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -printf "%s\n" "$lt_cv_dlopen_self" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -printf %s "checking whether a statically linked program can dlopen itself... " >&6; } -if test ${lt_cv_dlopen_self_static+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else @@ -12582,7 +11774,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -12600,8 +11792,8 @@ rm -fr conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS @@ -12639,13 +11831,13 @@ fi striplib= old_striplib= -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -printf %s "checking whether stripping libraries is possible... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in @@ -12653,16 +11845,16 @@ else if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi ;; *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac fi @@ -12679,13 +11871,13 @@ fi # Report what library types will actually be built - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -printf %s "checking if libtool supports shared libraries... " >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -printf "%s\n" "$can_build_shared" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -printf %s "checking whether to build shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -12709,15 +11901,15 @@ printf %s "checking whether to build shared libraries... " >&6; } fi ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -printf "%s\n" "$enable_shared" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -printf %s "checking whether to build static libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -printf "%s\n" "$enable_static" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } @@ -12739,32 +11931,36 @@ ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -printf %s "checking how to run the C++ preprocessor... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then - if test ${ac_cv_prog_CXXCPP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CXX needs to be expanded - for CXXCPP in "$CXX -E" cpp /lib/cpp + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef __STDC__ +# include +#else +# include +#endif Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : -else $as_nop +else # Broken: fails on valid input. continue fi @@ -12776,11 +11972,10 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue -else $as_nop +else # Passes both tests. ac_preproc_ok=: break @@ -12790,8 +11985,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : +if $ac_preproc_ok; then : break fi @@ -12803,24 +11997,29 @@ fi else ac_cv_prog_CXXCPP=$CXXCPP fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -printf "%s\n" "$CXXCPP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef __STDC__ +# include +#else +# include +#endif Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : -else $as_nop +else # Broken: fails on valid input. continue fi @@ -12832,11 +12031,10 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue -else $as_nop +else # Passes both tests. ac_preproc_ok=: break @@ -12846,12 +12044,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : +if $ac_preproc_ok; then : -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -12987,18 +12184,17 @@ cc_basename=$func_cc_basename_result # Check whether --with-gnu-ld was given. -if test ${with_gnu_ld+y} -then : +if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop +else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -printf %s "checking for ld used by $CC... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -13027,16 +12223,15 @@ printf %s "checking for ld used by $CC... " >&6; } ;; esac elif test yes = "$with_gnu_ld"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -printf %s "checking for GNU ld... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -printf %s "checking for non-GNU ld... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } fi -if test ${lt_cv_path_LD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -13065,19 +12260,18 @@ fi LD=$lt_cv_path_LD if test -n "$LD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -printf "%s\n" "$LD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -printf %s "checking if the linker ($LD) is GNU ld... " >&6; } -if test ${lt_cv_prog_gnu_ld+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -13143,8 +12337,8 @@ with_gnu_ld=$lt_cv_prog_gnu_ld fi # PORTME: fill in a description of your system's C++ link characteristics - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) @@ -13282,23 +12476,21 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath__CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -13313,7 +12505,7 @@ then : lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -13338,23 +12530,21 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath__CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -13369,7 +12559,7 @@ then : lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -14220,8 +13410,8 @@ fi ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -printf "%s\n" "$ld_shlibs_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX @@ -14259,7 +13449,7 @@ esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. @@ -14740,28 +13930,26 @@ case $host_os in ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -printf %s "checking for $compiler option to produce PIC... " >&6; } -if test ${lt_cv_prog_compiler_pic_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if test ${lt_cv_prog_compiler_pic_works_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -14792,8 +13980,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in @@ -14815,12 +14003,11 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test ${lt_cv_prog_compiler_static_works_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -14844,8 +14031,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : @@ -14856,12 +14043,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -14904,17 +14090,16 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -14957,8 +14142,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } @@ -14966,19 +14151,19 @@ printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -printf %s "checking if we can lock with hard links... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -printf "%s\n" "$hard_links" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test no = "$hard_links"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -14987,8 +14172,8 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' @@ -15027,8 +14212,8 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -printf "%s\n" "$ld_shlibs_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld @@ -15055,19 +14240,18 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -printf %s "checking whether -lc should be explicitly linked in... " >&6; } -if test ${lt_cv_archive_cmds_need_lc_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -15085,7 +14269,7 @@ else $as_nop if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no @@ -15099,8 +14283,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac @@ -15169,8 +14353,8 @@ esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -printf %s "checking dynamic linker characteristics... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' @@ -15636,2040 +14820,2591 @@ linux*android*) shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec_CXX='-L$libdir' - ;; +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac - # Some binutils ld are patched to set DT_RUNPATH - if test ${lt_cv_shlibpath_overrides_runpath+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + done +IFS=$as_save_IFS -int -main (void) -{ +rm -rf conftest.one conftest.two conftest.dir - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null -then : - lt_cv_shlibpath_overrides_runpath=yes -fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; -rdos*) - dynamic_linker=no - ;; -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' + + if test -z "$CTAGS"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + +# Check whether --with-ctags was given. +if test "${with_ctags+set}" = set; then : + withval=$with_ctags; + if test "$withval" != yes && test "$withval" != no; then : + + CTAGS="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } + +else + + CTAGS="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -*) - dynamic_linker=no ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -printf "%s\n" "$dynamic_linker" >&6; } -test no = "$dynamic_linker" && can_build_shared=no +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec + fi -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec + + + + + +if test x${CTAGS} = x; then : + as_fn_error $? "Required program ctags was not found" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec +SO_EXT=$shrext_cmds -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH +# +# System/Compiler Features +# + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++14 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx14+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + } + namespace test_final_override + { + struct Base + { + virtual void f() {} + }; + struct Derived : public Base + { + virtual void f() override {} + }; + } + namespace test_double_right_angle_brackets + { + template < typename T > + struct check {}; + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + } + namespace test_decltype + { + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + } + namespace test_type_deduction + { + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + template < typename T > + struct is_same + { + static const bool value = true; + }; + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + } + namespace test_noexcept + { + int f() { return 0; } + int g() noexcept { return 0; } + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + } + namespace test_constexpr + { + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + } + namespace test_rvalue_references + { + template < int N > + struct answer + { + static constexpr int value = N; + }; + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + } + namespace test_uniform_initialization + { + struct test + { + static const int zero {}; + static const int one {1}; + }; + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + } + namespace test_lambdas + { + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -printf %s "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test yes = "$hardcode_automatic_CXX"; then + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } - # We can hardcode non-existent directories. - if test no != "$hardcode_direct_CXX" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && - test no != "$hardcode_minus_L_CXX"; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -printf "%s\n" "$hardcode_action_CXX" >&6; } + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } -if test relink = "$hardcode_action_CXX" || - test yes = "$inherit_rpath_CXX"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi + } + namespace test_variadic_templates + { + template + struct sum; + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + } - fi # test -n "$compiler" + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test yes != "$_lt_caught_CXX_error" + struct foo {}; -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template + using member = typename T::member_type; + template + void func(...) {} + template + void func(member*) {} + void test(); + void test() { func(0); } + } +} // namespace cxx11 +#endif // __cplusplus >= 201103L +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. +#ifndef __cplusplus +#error "This is not a C++ compiler" +#elif __cplusplus < 201402L - ac_config_commands="$ac_config_commands libtool" +#error "This is not a C++14 compiler" +#else +namespace cxx14 +{ + namespace test_polymorphic_lambdas + { -# Only expand once: + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + namespace test_binary_literals + { -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + } -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + namespace test_generalized_constexpr + { -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_lambda_init_capture + { + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_digit_separators + { + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_return_type_deduction + { + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } - test -n "$ac_ct_CC" && break -done + } - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi +} // namespace cxx14 -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +#endif // __cplusplus >= 201402L -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx14=yes else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi + ax_cv_cxx_compile_cxx14=no fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx14" >&5 +$as_echo "$ax_cv_cxx_compile_cxx14" >&6; } + if test x$ax_cv_cxx_compile_cxx14 = xyes; then + ac_success=yes fi -else - CC="$ac_cv_prog_CC" -fi -fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++14 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -# Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion -version; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif +#ifndef __cplusplus - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu +#error "This is not a C++ compiler" -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu +#elif __cplusplus < 201103L -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+y} -ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +#error "This is not a C++11 compiler" -int -main (void) +#else + +namespace cxx11 { - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_static_assert + { -int -main (void) -{ + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : + } -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_final_override + { -int -main (void) -{ + struct Base + { + virtual void f() {} + }; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi + struct Derived : public Base + { + virtual void f() override {} + }; -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi + } -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 -fi -fi + namespace test_decltype + { -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_type_deduction + { + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + template < typename T > + struct is_same + { + static const bool value = true; + }; -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -printf "%s\n" "$ac_ct_CXX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + } - test -n "$ac_ct_CXX" && break -done + namespace test_noexcept + { - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi + int f() { return 0; } + int g() noexcept { return 0; } - fi -fi -# Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 -printf %s "checking whether the compiler supports GNU C++... " >&6; } -if test ${ac_cv_cxx_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + } -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif + namespace test_constexpr + { - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+y} -ac_save_CXXFLAGS=$CXXFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -printf %s "checking whether $CXX accepts -g... " >&6; } -if test ${ac_cv_prog_cxx_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); -int -main (void) -{ + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_g=yes -else $as_nop - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_rvalue_references + { -int -main (void) -{ + template < int N > + struct answer + { + static constexpr int value = N; + }; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } -else $as_nop - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } -int -main (void) -{ + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } -if test $ac_test_CXXFLAGS; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_prog_cxx_stdcxx=no -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 -printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_11=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx11_program -_ACEOF -for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx11" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi - -if test "x$ac_cv_prog_cxx_cxx11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx11" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 - ac_prog_cxx_stdcxx=cxx11 -fi -fi -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 -printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_98+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_98=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx98_program -_ACEOF -for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx98=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx98" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi + namespace test_uniform_initialization + { -if test "x$ac_cv_prog_cxx_cxx98" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx98" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx98" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 - ac_prog_cxx_stdcxx=cxx98 -fi -fi + struct test + { + static const int zero {}; + static const int one {1}; + }; -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AWK+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -printf "%s\n" "$AWK" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_lambdas + { + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } - test -n "$AWK" && break -done + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -printf %s "checking for a sed that does not truncate output... " >&6; } -if test ${ac_cv_path_SED+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in sed gsed - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi + } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -printf "%s\n" "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed + namespace test_variadic_templates + { + template + struct sum; - # Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -printf %s "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test ${ac_cv_path_install+y} -then : - printf %s "(cached) " >&6 -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - # Account for fact that we put trailing slashes in our PATH walk. -case $as_dir in #(( - ./ | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; - done -IFS=$as_save_IFS + template <> + struct sum<> + { + static constexpr auto value = 0; + }; -rm -rf conftest.one conftest.two conftest.dir + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); -fi - if test ${ac_cv_path_install+y}; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -printf "%s\n" "$INSTALL" >&6; } + } -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + struct foo {}; -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + template + using member = typename T::member_type; + template + void func(...) {} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -printf %s "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -printf "%s\n" "no, using $LN_S" >&6; } -fi + template + void func(member*) {} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval test \${ac_cv_prog_make_${ac_make}_set+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - SET_MAKE= -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi + void test(); + void test() { func(0); } + } +} // namespace cxx11 +#endif // __cplusplus >= 201103L +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. +#ifndef __cplusplus +#error "This is not a C++ compiler" - if test -z "$CTAGS" -then : +#elif __cplusplus < 201402L - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 -printf %s "checking whether ctags executable path has been provided... " >&6; } +#error "This is not a C++14 compiler" -# Check whether --with-ctags was given. -if test ${with_ctags+y} -then : - withval=$with_ctags; - if test "$withval" != yes && test "$withval" != no -then : +#else - CTAGS="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } +namespace cxx14 +{ -else $as_nop + namespace test_polymorphic_lambdas + { - CTAGS="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CTAGS+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } - ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_binary_literals + { + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + } -fi + namespace test_generalized_constexpr + { -fi + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } -else $as_nop + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CTAGS+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } - ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_lambda_init_capture + { + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + } -fi + namespace test_digit_separators + { + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); -fi + } + namespace test_return_type_deduction + { + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } -if test x${CTAGS} = x -then : - as_fn_error $? "Required program ctags was not found" "$LINENO" 5 -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -printf %s "checking whether ${CTAGS} is exuberant... " >&6; } -if ! ${CTAGS} --version | grep -q Exuberant -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi + } -SO_EXT=$shrext_cmds +} // namespace cxx14 +#endif // __cplusplus >= 201402L -# -# System/Compiler Features -# -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -printf %s "checking for inline... " >&6; } -if test ${ac_cv_c_inline+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo (void) {return 0; } -$ac_kw foo_t foo (void) {return 0; } -#endif _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_c_inline=$ac_kw +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -printf "%s\n" "$ac_cv_c_inline" >&6; } - -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac - - ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no + if test x$ax_cxx_compile_cxx14_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX14=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 +$as_echo "$as_me: No compiler with C++14 support was found" >&6;} + else + HAVE_CXX14=1 + +$as_echo "#define HAVE_CXX14 1" >>confdefs.h + fi - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 -printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +if test x$HAVE_CXX14 != x1; then : + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17705,13 +17440,11 @@ namespace cxx11 struct Base { - virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { - virtual ~Derived() override {} virtual void f() override {} }; @@ -17959,200 +17692,31 @@ namespace cxx11 - -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201402L - -#error "This is not a C++14 compiler" - -#else - -namespace cxx14 -{ - - namespace test_polymorphic_lambdas - { - - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } - - } - - namespace test_binary_literals - { - - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); - - } - - namespace test_generalized_constexpr - { - - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); - - } - - namespace test_lambda_init_capture - { - - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } - - } - - namespace test_digit_separators - { - - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); - - } - - namespace test_return_type_deduction - { - - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } - - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; - - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; - - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } - - } - -} // namespace cxx14 - -#endif // __cplusplus >= 201402L - - - _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - eval $cachevar=yes -else $as_nop - eval $cachevar=no +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - if test x$ax_cxx_compile_cxx14_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes fi - if test x$ac_success = xno; then - HAVE_CXX14=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} - else - HAVE_CXX14=1 - -printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h - - fi - - -if test x$HAVE_CXX14 != x1 -then : - ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - - if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else $as_nop + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18191,13 +17755,11 @@ namespace cxx11 struct Base { - virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { - virtual ~Derived() override {} virtual void f() override {} }; @@ -18446,18 +18008,17 @@ namespace cxx11 _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : eval $cachevar=yes -else $as_nop +else eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then @@ -18485,281 +18046,287 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test x$ac_success = xno; then HAVE_CXX11=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 -printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h +$as_echo "#define HAVE_CXX11 1" >>confdefs.h fi + fi -ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes -then : - printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h +for ac_func in memset +do : + ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMSET 1 +_ACEOF fi +done -ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes -then : - printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h +for ac_func in rint +do : + ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RINT 1 +_ACEOF fi +done -ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes -then : - printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h +for ac_func in socket +do : + ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKET 1 +_ACEOF fi +done - - for ac_func in recvmsg +for ac_func in recvmsg do : ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" -if test "x$ac_cv_func_recvmsg" = xyes -then : - printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h +if test "x$ac_cv_func_recvmsg" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RECVMSG 1 +_ACEOF HAVE_RECVMSG=1 -else $as_nop +else HAVE_RECVMSG=0 fi - done -ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes -then : - printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h - -fi -ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes -then : - printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h +for ac_func in sqrt +do : + ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SQRT 1 +_ACEOF fi +done -ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes -then : - printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h +for ac_func in strerror +do : + ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR 1 +_ACEOF fi +done -ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes -then : - printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h + +for ac_header in arpa/inet.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ARPA_INET_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes -then : - printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h +done + +for ac_header in netdb.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETDB_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h +done + +for ac_header in netinet/in.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETINET_IN_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h +done + +for ac_header in sys/file.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_FILE_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h +done -fi +for ac_header in sys/ioctl.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_IOCTL_H 1 +_ACEOF -ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes -then : +fi -printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h +done +for ac_header in sys/socket.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_SOCKET_H 1 +_ACEOF fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -printf %s "checking for stdbool.h that conforms to C99... " >&6; } -if test ${ac_cv_header_stdbool_h+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - - #ifndef __bool_true_false_are_defined - #error "__bool_true_false_are_defined is not defined" - #endif - char a[__bool_true_false_are_defined == 1 ? 1 : -1]; +done - /* Regardless of whether this is C++ or "_Bool" is a - valid type name, "true" and "false" should be usable - in #if expressions and integer constant expressions, - and "bool" should be a valid type name. */ +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - #if !true - #error "'true' is not true" + #include + #ifndef bool + "error: bool is not defined" #endif - #if true != 1 - #error "'true' is not equal to 1" + #ifndef false + "error: false is not defined" #endif - char b[true == 1 ? 1 : -1]; - char c[true]; - #if false - #error "'false' is not false" + "error: false is not 0" #endif - #if false != 0 - #error "'false' is not equal to 0" + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" #endif - char d[false == 0 ? 1 : -1]; - - enum { e = false, f = true, g = false * true, h = true * 256 }; - - char i[(bool) 0.5 == true ? 1 : -1]; - char j[(bool) 0.0 == false ? 1 : -1]; - char k[sizeof (bool) > 0 ? 1 : -1]; - - struct sb { bool s: 1; bool t; } s; - char l[sizeof s.t > 0 ? 1 : -1]; + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - bool m[h]; - char n[sizeof m == h * sizeof m[0] ? 1 : -1]; - char o[-1 - (bool) 0 < 0 ? 1 : -1]; + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See - https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ - bool p = true; - bool *pp = &p; - - /* C 1999 specifies that bool, true, and false are to be - macros, but C++ 2011 and later overrule this. */ - #if __cplusplus < 201103 - #ifndef bool - #error "bool is not defined" - #endif - #ifndef false - #error "false is not defined" - #endif - #ifndef true - #error "true is not defined" - #endif - #endif - - /* If _Bool is available, repeat with it all the tests - above that used bool. */ - #ifdef HAVE__BOOL - struct sB { _Bool s: 1; _Bool t; } t; - - char q[(_Bool) 0.5 == true ? 1 : -1]; - char r[(_Bool) 0.0 == false ? 1 : -1]; - char u[sizeof (_Bool) > 0 ? 1 : -1]; - char v[sizeof t.t > 0 ? 1 : -1]; - - _Bool w[h]; - char x[sizeof m == h * sizeof m[0] ? 1 : -1]; - char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; - _Bool z = true; - _Bool *pz = &p; - #endif + _Bool q = true; + _Bool *pq = &q; int -main (void) +main () { - bool ps = &s; - *pp |= p; - *pp |= ! p; - - #ifdef HAVE__BOOL - _Bool pt = &t; - *pz |= z; - *pz |= ! z; - #endif - - /* Refer to every declared value, so they cannot be - discarded as unused. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k - + !l + !m + !n + !o + !p + !pp + !ps - #ifdef HAVE__BOOL - + !q + !r + !u + !v + !w + !x + !y + !z + !pt - #endif - ); + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes -else $as_nop +else ac_cv_header_stdbool_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -printf %s "checking for GNU libc compatible malloc... " >&6; } -if test ${ac_cv_func_malloc_0_nonnull+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : - case "$host_os" in # (( - # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ - | hpux* | solaris* | cygwin* | mingw* | msys* ) - ac_cv_func_malloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_malloc_0_nonnull=no ;; - esac -else $as_nop +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + +for ac_header in stdlib.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif int -main (void) +main () { -void *p = malloc (0); - int result = !p; - free (p); - return result; +return ! malloc (0); ; return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO" -then : +if ac_fn_cxx_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes -else $as_nop +else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18767,15 +18334,14 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : -printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h -else $as_nop - printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; @@ -18784,7 +18350,7 @@ else $as_nop esac -printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h +$as_echo "#define malloc rpl_malloc" >>confdefs.h fi @@ -18794,12 +18360,11 @@ HAVE_OPENMP=0 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 -printf %s "checking for OpenMP flag of C++ compiler... " >&6; } -if test ${ax_cv_cxx_openmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } +if ${ax_cv_cxx_openmp+:} false; then : + $as_echo_n "(cached) " >&6 +else saveCXXFLAGS=$CXXFLAGS ax_cv_cxx_openmp=unknown # Flags to try: -fopenmp (gcc), -mp (SGI & PGI), @@ -18840,18 +18405,17 @@ main() } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ax_cv_cxx_openmp=$ax_openmp_flag; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done CXXFLAGS=$saveCXXFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 -printf "%s\n" "$ax_cv_cxx_openmp" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +$as_echo "$ax_cv_cxx_openmp" >&6; } if test "x$ax_cv_cxx_openmp" = "xunknown"; then : else @@ -18859,28 +18423,27 @@ else OPENMP_CXXFLAGS=$ax_cv_cxx_openmp fi -printf "%s\n" "#define HAVE_OPENMP 1" >>confdefs.h +$as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi -if test x$OPENMP_CXXFLAGS != x -then : +if test x$OPENMP_CXXFLAGS != x; then : HAVE_OPENMP=1 fi -if test x$HAVE_OPENMP != x1 -then : +if test x$HAVE_OPENMP != x1; then : -else $as_nop +else CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes -then : +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : -printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_PTRDIFF_T 1 +_ACEOF fi @@ -18890,7 +18453,9 @@ case $ac_cv_c_int16_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int16_t $ac_cv_c_int16_t +_ACEOF ;; esac @@ -18899,7 +18464,9 @@ case $ac_cv_c_int32_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int32_t $ac_cv_c_int32_t +_ACEOF ;; esac @@ -18908,7 +18475,9 @@ case $ac_cv_c_int64_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int64_t $ac_cv_c_int64_t +_ACEOF ;; esac @@ -18917,64 +18486,42 @@ case $ac_cv_c_int8_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int8_t $ac_cv_c_int8_t +_ACEOF ;; esac +ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : - ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default -" -if test "x$ac_cv_type_pid_t" = xyes -then : - -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if defined _WIN64 && !defined __CYGWIN__ - LLP64 - #endif - -int -main (void) -{ - - ; - return 0; -} +else +cat >>confdefs.h <<_ACEOF +#define pid_t int _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - fi - ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes -then : +if test "x$ac_cv_type_size_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define size_t unsigned int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF fi ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes -then : +if test "x$ac_cv_type_ssize_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define ssize_t int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define ssize_t int +_ACEOF fi @@ -18984,7 +18531,9 @@ case $ac_cv_c_uint16_t in #( *) -printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint16_t $ac_cv_c_uint16_t +_ACEOF ;; esac @@ -18993,10 +18542,12 @@ case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) -printf "%s\n" "#define _UINT32_T 1" >>confdefs.h +$as_echo "#define _UINT32_T 1" >>confdefs.h -printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint32_t $ac_cv_c_uint32_t +_ACEOF ;; esac @@ -19005,10 +18556,12 @@ case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) -printf "%s\n" "#define _UINT64_T 1" >>confdefs.h +$as_echo "#define _UINT64_T 1" >>confdefs.h -printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint64_t $ac_cv_c_uint64_t +_ACEOF ;; esac @@ -19017,10 +18570,12 @@ case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) -printf "%s\n" "#define _UINT8_T 1" >>confdefs.h +$as_echo "#define _UINT8_T 1" >>confdefs.h -printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint8_t $ac_cv_c_uint8_t +_ACEOF ;; esac @@ -19030,53 +18585,52 @@ printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h # # Check whether --enable-numa was given. -if test ${enable_numa+y} -then : +if test "${enable_numa+set}" = set; then : enableval=$enable_numa; enable_numa=no -else $as_nop +else enable_numa=yes fi HAVE_NUMA=0 -if test x$enable_numa != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } -if test ${ac_cv_lib_numa_numa_node_of_cpu+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test x$enable_numa != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lnuma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -namespace conftest { - extern "C" int numa_node_of_cpu (); -} +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char numa_node_of_cpu (); int -main (void) +main () { -return conftest::numa_node_of_cpu (); +return numa_node_of_cpu (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_numa_numa_node_of_cpu=yes -else $as_nop +else ac_cv_lib_numa_numa_node_of_cpu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : HAVE_NUMA=1 LIBS="$LIBS -lnuma" @@ -19089,53 +18643,52 @@ fi # # Check whether --enable-hwloc was given. -if test ${enable_hwloc+y} -then : +if test "${enable_hwloc+set}" = set; then : enableval=$enable_hwloc; enable_hwloc=no -else $as_nop +else enable_hwloc=yes fi HAVE_HWLOC=0 -if test x$enable_hwloc != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } -if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test x$enable_hwloc != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } +if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lhwloc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -namespace conftest { - extern "C" int hwloc_topology_init (); -} +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char hwloc_topology_init (); int -main (void) +main () { -return conftest::hwloc_topology_init (); +return hwloc_topology_init (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_hwloc_hwloc_topology_init=yes -else $as_nop +else ac_cv_lib_hwloc_hwloc_topology_init=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : HAVE_HWLOC=1 LIBS="$LIBS -lhwloc" @@ -19148,53 +18701,52 @@ fi # # Check whether --enable-vma was given. -if test ${enable_vma+y} -then : +if test "${enable_vma+set}" = set; then : enableval=$enable_vma; enable_vma=yes -else $as_nop +else enable_vma=no fi HAVE_VMA=0 -if test x$enable_vma != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } -if test ${ac_cv_lib_vma_recvfrom_zcopy+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test x$enable_vma != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } +if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lvma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -namespace conftest { - extern "C" int recvfrom_zcopy (); -} +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char recvfrom_zcopy (); int -main (void) +main () { -return conftest::recvfrom_zcopy (); +return recvfrom_zcopy (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_vma_recvfrom_zcopy=yes -else $as_nop +else ac_cv_lib_vma_recvfrom_zcopy=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : HAVE_VMA=1 LIBS="$LIBS -lvma" @@ -19218,10 +18770,9 @@ fi # Check whether --with-cuda_home was given. -if test ${with_cuda_home+y} -then : +if test "${with_cuda_home+set}" = set; then : withval=$with_cuda_home; -else $as_nop +else with_cuda_home=/usr/local/cuda fi @@ -19229,10 +18780,9 @@ fi # Check whether --enable-cuda was given. -if test ${enable_cuda+y} -then : +if test "${enable_cuda+set}" = set; then : enableval=$enable_cuda; enable_cuda=no -else $as_nop +else enable_cuda=yes fi @@ -19245,12 +18795,11 @@ fi # Extract the first word of "nvcc", so it can be a program name with args. set dummy nvcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_NVCC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVCC+:} false; then : + $as_echo_n "(cached) " >&6 +else case $NVCC in [\\/]* | ?:[\\/]*) ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. @@ -19261,15 +18810,11 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19282,22 +18827,21 @@ esac fi NVCC=$ac_cv_path_NVCC if test -n "$NVCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -printf "%s\n" "$NVCC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "nvprune", so it can be a program name with args. set dummy nvprune; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_NVPRUNE+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVPRUNE+:} false; then : + $as_echo_n "(cached) " >&6 +else case $NVPRUNE in [\\/]* | ?:[\\/]*) ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. @@ -19308,15 +18852,11 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19329,22 +18869,21 @@ esac fi NVPRUNE=$ac_cv_path_NVPRUNE if test -n "$NVPRUNE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -printf "%s\n" "$NVPRUNE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "cuobjdump", so it can be a program name with args. set dummy cuobjdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CUOBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUOBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $CUOBJDUMP in [\\/]* | ?:[\\/]*) ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. @@ -19355,15 +18894,11 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19376,19 +18911,19 @@ esac fi CUOBJDUMP=$ac_cv_path_CUOBJDUMP if test -n "$CUOBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -printf "%s\n" "$CUOBJDUMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi if test "$HAVE_CUDA" = "1"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 -printf %s "checking for a working CUDA installation... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +$as_echo_n "checking for a working CUDA installation... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -19402,21 +18937,20 @@ printf %s "checking for a working CUDA installation... " >&6; } #include #include int -main (void) +main () { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" @@ -19430,28 +18964,27 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext #include #include int -main (void) +main () { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +if ac_fn_cxx_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } HAVE_CUDA=0 fi @@ -19463,10 +18996,9 @@ printf "%s\n" "no" >&6; } # Check whether --with-nvcc_flags was given. -if test ${with_nvcc_flags+y} -then : +if test "${with_nvcc_flags+set}" = set; then : withval=$with_nvcc_flags; -else $as_nop +else with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi @@ -19483,17 +19015,16 @@ fi # Check whether --with-gpu_archs was given. -if test ${with_gpu_archs+y} -then : +if test "${with_gpu_archs+set}" = set; then : withval=$with_gpu_archs; -else $as_nop +else with_gpu_archs='auto' fi if test "$HAVE_CUDA" = "1"; then if test "$with_gpu_archs" = "auto"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 -printf %s "checking which CUDA architectures to target... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +$as_echo_n "checking which CUDA architectures to target... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -19502,13 +19033,12 @@ printf %s "checking which CUDA architectures to target... " >&6; } LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' - if test "$cross_compiling" = yes -then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19519,7 +19049,7 @@ else $as_nop #include #include int -main (void) +main () { std::set archs; @@ -19546,10 +19076,7 @@ main (void) arch += minor; if( archs.count(arch) == 0 ) { archs.insert(arch); - if( dev > 0 ) { - fh << " "; - } - fh << arch; + fh << " " << arch; } } fh.close(); @@ -19557,13 +19084,12 @@ main (void) return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO" -then : +if ac_fn_cxx_try_run "$LINENO"; then : GPU_ARCHS=`cat confarchs.out` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 -printf "%s\n" "$GPU_ARCHS" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +$as_echo "$GPU_ARCHS" >&6; } +else as_fn_error $? "failed to find any" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19583,10 +19109,9 @@ fi # Check whether --with-shared_mem was given. -if test ${with_shared_mem+y} -then : +if test "${with_shared_mem+set}" = set; then : withval=$with_shared_mem; -else $as_nop +else with_shared_mem=16384 fi @@ -19599,10 +19124,9 @@ GPU_SHAREDMEM=$with_shared_mem # Check whether --with-alignment was given. -if test ${with_alignment+y} -then : +if test "${with_alignment+set}" = set; then : withval=$with_alignment; -else $as_nop +else with_alignment=4096 fi @@ -19618,23 +19142,21 @@ ALIGNMENT=$with_alignment # Check whether --with-logging_dir was given. -if test ${with_logging_dir+y} -then : +if test "${with_logging_dir+set}" = set; then : withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir -else $as_nop +else HAVE_TMPFS=/tmp fi if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 -printf %s "checking for /dev/shm... " >&6; } -if test ${ac_cv_file__dev_shm+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +$as_echo_n "checking for /dev/shm... " >&6; } +if ${ac_cv_file__dev_shm+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/shm"; then @@ -19643,10 +19165,9 @@ else ac_cv_file__dev_shm=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 -printf "%s\n" "$ac_cv_file__dev_shm" >&6; } -if test "x$ac_cv_file__dev_shm" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +$as_echo "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes; then : HAVE_TMPFS=/dev/shm/bifrost fi @@ -19654,12 +19175,11 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 -printf %s "checking for /Volumes/RAMDisk... " >&6; } -if test ${ac_cv_file__Volumes_RAMDisk+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +$as_echo_n "checking for /Volumes/RAMDisk... " >&6; } +if ${ac_cv_file__Volumes_RAMDisk+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/Volumes/RAMDisk"; then @@ -19668,10 +19188,9 @@ else ac_cv_file__Volumes_RAMDisk=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 -printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } -if test "x$ac_cv_file__Volumes_RAMDisk" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +$as_echo "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes; then : HAVE_TMPFS=/Volumes/RAMDisk/bifrost fi @@ -19679,12 +19198,11 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 -printf %s "checking for /tmp... " >&6; } -if test ${ac_cv_file__tmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +$as_echo_n "checking for /tmp... " >&6; } +if ${ac_cv_file__tmp+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/tmp"; then @@ -19693,16 +19211,15 @@ else ac_cv_file__tmp=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 -printf "%s\n" "$ac_cv_file__tmp" >&6; } -if test "x$ac_cv_file__tmp" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +$as_echo "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes; then : HAVE_TMPFS=/tmp fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 -printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +$as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} HAVE_TMPFS=/tmp/bifrost fi @@ -19713,17 +19230,15 @@ printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for lo # # Check whether --enable-debug was given. -if test ${enable_debug+y} -then : +if test "${enable_debug+set}" = set; then : enableval=$enable_debug; enable_debug=yes -else $as_nop +else enable_debug=no fi HAVE_DEBUG=0 -if test x$enable_debug != xno -then : +if test x$enable_debug != xno; then : HAVE_DEBUG=1 CXXFLAGS="$CXXFLAGS -g" @@ -19731,49 +19246,43 @@ then : fi # Check whether --enable-trace was given. -if test ${enable_trace+y} -then : +if test "${enable_trace+set}" = set; then : enableval=$enable_trace; enable_trace=yes -else $as_nop +else enable_trace=no fi HAVE_TRACE=0 -if test x$enable_trace != xno -then : +if test x$enable_trace != xno; then : HAVE_TRACE=1 fi # Check whether --enable-native_arch was given. -if test ${enable_native_arch+y} -then : +if test "${enable_native_arch+set}" = set; then : enableval=$enable_native_arch; enable_native_arch=no -else $as_nop +else enable_native_arch=yes fi -if test x$enable_native_arch != xyes -then : +if test x$enable_native_arch != xyes; then : -else $as_nop +else CXXFLAGS="$CXXFLAGS -march=native" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" fi # Check whether --enable-cuda_debug was given. -if test ${enable_cuda_debug+y} -then : +if test "${enable_cuda_debug+set}" = set; then : enableval=$enable_cuda_debug; enable_cuda_debug=yes -else $as_nop +else enable_cuda_debug=no fi HAVE_CUDA_DEBUG=0 -if test x$enable_cuda_debug != xno -then : +if test x$enable_cuda_debug != xno; then : HAVE_CUDA_DEBUG=1 NVCCFLAGS="$NVCCFLAGS -G" @@ -19784,17 +19293,15 @@ fi # # Check whether --enable-python was given. -if test ${enable_python+y} -then : +if test "${enable_python+set}" = set; then : enableval=$enable_python; enable_python=no -else $as_nop +else enable_python=yes fi HAVE_PYTHON=0 -if test x$enable_python != xno -then : +if test x$enable_python != xno; then : @@ -19805,39 +19312,34 @@ then : - if test -z "$PYTHON" -then : + if test -z "$PYTHON"; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 -printf %s "checking whether python executable path has been provided... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +$as_echo_n "checking whether python executable path has been provided... " >&6; } # Check whether --with-python was given. -if test ${with_python+y} -then : +if test "${with_python+set}" = set; then : withval=$with_python; - if test "$withval" != yes && test "$withval" != no -then : + if test "$withval" != yes && test "$withval" != no; then : PYTHON="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } -else $as_nop +else PYTHON="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PYTHON+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -19847,15 +19349,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19868,11 +19366,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -19881,18 +19379,17 @@ fi fi -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PYTHON+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -19902,15 +19399,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19923,11 +19416,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -19942,19 +19435,17 @@ fi - if test x${PYTHON} != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 -printf %s "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 -printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + if test x${PYTHON} != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +$as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +$as_echo "$as_me: WARNING: python module will not be built" >&2;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } HAVE_PYTHON=1 fi @@ -19962,8 +19453,7 @@ fi fi # Check whether --with-pybuild_flags was given. -if test ${with_pybuild_flags+y} -then : +if test "${with_pybuild_flags+set}" = set; then : withval=$with_pybuild_flags; fi @@ -19972,8 +19462,7 @@ PYBUILDFLAGS=$with_pybuild_flags # Check whether --with-pyinstall_flags was given. -if test ${with_pyinstall_flags+y} -then : +if test "${with_pyinstall_flags+set}" = set; then : withval=$with_pyinstall_flags; fi @@ -19994,39 +19483,34 @@ PYINSTALLFLAGS=$with_pyinstall_flags - if test -z "$DOCKER" -then : + if test -z "$DOCKER"; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 -printf %s "checking whether docker executable path has been provided... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 +$as_echo_n "checking whether docker executable path has been provided... " >&6; } # Check whether --with-docker was given. -if test ${with_docker+y} -then : +if test "${with_docker+set}" = set; then : withval=$with_docker; - if test "$withval" != yes && test "$withval" != no -then : + if test "$withval" != yes && test "$withval" != no; then : DOCKER="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } -else $as_nop +else DOCKER="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DOCKER+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOCKER+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -20036,15 +19520,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20057,11 +19537,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20070,18 +19550,17 @@ fi fi -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DOCKER+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOCKER+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -20091,15 +19570,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20112,11 +19587,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20131,8 +19606,7 @@ fi -if test x${DOCKER} != xno -then : +if test x${DOCKER} != xno; then : HAVE_DOCKER=1 fi @@ -20175,8 +19649,7 @@ DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" # Check whether --enable-doxygen-doc was given. -if test ${enable_doxygen_doc+y} -then : +if test "${enable_doxygen_doc+set}" = set; then : enableval=$enable_doxygen_doc; case "$enableval" in #( @@ -20194,7 +19667,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_doc=1 @@ -20207,12 +19680,11 @@ if test "$DX_FLAG_doc" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. set dummy ${ac_tool_prefix}doxygen; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DOXYGEN+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. @@ -20222,15 +19694,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20242,11 +19710,11 @@ esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN if test -n "$DX_DOXYGEN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 -printf "%s\n" "$DX_DOXYGEN" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +$as_echo "$DX_DOXYGEN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20255,12 +19723,11 @@ if test -z "$ac_cv_path_DX_DOXYGEN"; then ac_pt_DX_DOXYGEN=$DX_DOXYGEN # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. @@ -20270,15 +19737,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20290,11 +19753,11 @@ esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN if test -n "$ac_pt_DX_DOXYGEN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 -printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +$as_echo "$ac_pt_DX_DOXYGEN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_DOXYGEN" = x; then @@ -20302,8 +19765,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOXYGEN=$ac_pt_DX_DOXYGEN @@ -20313,8 +19776,8 @@ else fi if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -20323,12 +19786,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. set dummy ${ac_tool_prefix}perl; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_PERL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. @@ -20338,15 +19800,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20358,11 +19816,11 @@ esac fi DX_PERL=$ac_cv_path_DX_PERL if test -n "$DX_PERL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 -printf "%s\n" "$DX_PERL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +$as_echo "$DX_PERL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20371,12 +19829,11 @@ if test -z "$ac_cv_path_DX_PERL"; then ac_pt_DX_PERL=$DX_PERL # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_PERL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. @@ -20386,15 +19843,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20406,11 +19859,11 @@ esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL if test -n "$ac_pt_DX_PERL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 -printf "%s\n" "$ac_pt_DX_PERL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +$as_echo "$ac_pt_DX_PERL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_PERL" = x; then @@ -20418,8 +19871,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PERL=$ac_pt_DX_PERL @@ -20429,8 +19882,8 @@ else fi if test "$DX_FLAG_doc$DX_PERL" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -20453,8 +19906,7 @@ fi # Check whether --enable-doxygen-dot was given. -if test ${enable_doxygen_dot+y} -then : +if test "${enable_doxygen_dot+set}" = set; then : enableval=$enable_doxygen_dot; case "$enableval" in #( @@ -20463,7 +19915,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20475,7 +19927,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_dot=0 @@ -20491,12 +19943,11 @@ if test "$DX_FLAG_dot" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. set dummy ${ac_tool_prefix}dot; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DOT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. @@ -20506,15 +19957,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20526,11 +19973,11 @@ esac fi DX_DOT=$ac_cv_path_DX_DOT if test -n "$DX_DOT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 -printf "%s\n" "$DX_DOT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +$as_echo "$DX_DOT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20539,12 +19986,11 @@ if test -z "$ac_cv_path_DX_DOT"; then ac_pt_DX_DOT=$DX_DOT # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DOT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. @@ -20554,15 +20000,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20574,11 +20016,11 @@ esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT if test -n "$ac_pt_DX_DOT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 -printf "%s\n" "$ac_pt_DX_DOT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +$as_echo "$ac_pt_DX_DOT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_DOT" = x; then @@ -20586,8 +20028,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOT=$ac_pt_DX_DOT @@ -20597,8 +20039,8 @@ else fi if test "$DX_FLAG_dot$DX_DOT" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} DX_FLAG_dot=0 fi @@ -20626,8 +20068,7 @@ fi # Check whether --enable-doxygen-man was given. -if test ${enable_doxygen_man+y} -then : +if test "${enable_doxygen_man+set}" = set; then : enableval=$enable_doxygen_man; case "$enableval" in #( @@ -20636,7 +20077,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20648,7 +20089,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_man=1 @@ -20681,8 +20122,7 @@ fi # Check whether --enable-doxygen-rtf was given. -if test ${enable_doxygen_rtf+y} -then : +if test "${enable_doxygen_rtf+set}" = set; then : enableval=$enable_doxygen_rtf; case "$enableval" in #( @@ -20691,7 +20131,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20703,7 +20143,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_rtf=0 @@ -20736,8 +20176,7 @@ fi # Check whether --enable-doxygen-xml was given. -if test ${enable_doxygen_xml+y} -then : +if test "${enable_doxygen_xml+set}" = set; then : enableval=$enable_doxygen_xml; case "$enableval" in #( @@ -20746,7 +20185,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20758,7 +20197,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_xml=0 @@ -20791,8 +20230,7 @@ fi # Check whether --enable-doxygen-chm was given. -if test ${enable_doxygen_chm+y} -then : +if test "${enable_doxygen_chm+set}" = set; then : enableval=$enable_doxygen_chm; case "$enableval" in #( @@ -20801,7 +20239,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20813,7 +20251,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_chm=0 @@ -20829,12 +20267,11 @@ if test "$DX_FLAG_chm" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. set dummy ${ac_tool_prefix}hhc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_HHC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_HHC+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. @@ -20844,15 +20281,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20864,11 +20297,11 @@ esac fi DX_HHC=$ac_cv_path_DX_HHC if test -n "$DX_HHC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 -printf "%s\n" "$DX_HHC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +$as_echo "$DX_HHC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20877,12 +20310,11 @@ if test -z "$ac_cv_path_DX_HHC"; then ac_pt_DX_HHC=$DX_HHC # Extract the first word of "hhc", so it can be a program name with args. set dummy hhc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_HHC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_HHC+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. @@ -20892,15 +20324,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20912,11 +20340,11 @@ esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC if test -n "$ac_pt_DX_HHC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 -printf "%s\n" "$ac_pt_DX_HHC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +$as_echo "$ac_pt_DX_HHC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_HHC" = x; then @@ -20924,8 +20352,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_HHC=$ac_pt_DX_HHC @@ -20935,8 +20363,8 @@ else fi if test "$DX_FLAG_chm$DX_HHC" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 -printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} DX_FLAG_chm=0 fi @@ -20967,8 +20395,7 @@ fi # Check whether --enable-doxygen-chi was given. -if test ${enable_doxygen_chi+y} -then : +if test "${enable_doxygen_chi+set}" = set; then : enableval=$enable_doxygen_chi; case "$enableval" in #( @@ -20977,7 +20404,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20989,7 +20416,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_chi=0 @@ -21022,8 +20449,7 @@ fi # Check whether --enable-doxygen-html was given. -if test ${enable_doxygen_html+y} -then : +if test "${enable_doxygen_html+set}" = set; then : enableval=$enable_doxygen_html; case "$enableval" in #( @@ -21032,10 +20458,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21047,7 +20473,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_html=1 @@ -21083,8 +20509,7 @@ fi # Check whether --enable-doxygen-ps was given. -if test ${enable_doxygen_ps+y} -then : +if test "${enable_doxygen_ps+set}" = set; then : enableval=$enable_doxygen_ps; case "$enableval" in #( @@ -21093,7 +20518,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21105,7 +20530,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_ps=1 @@ -21121,12 +20546,11 @@ if test "$DX_FLAG_ps" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. set dummy ${ac_tool_prefix}latex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_LATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_LATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. @@ -21136,15 +20560,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21156,11 +20576,11 @@ esac fi DX_LATEX=$ac_cv_path_DX_LATEX if test -n "$DX_LATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 -printf "%s\n" "$DX_LATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +$as_echo "$DX_LATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21169,12 +20589,11 @@ if test -z "$ac_cv_path_DX_LATEX"; then ac_pt_DX_LATEX=$DX_LATEX # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_LATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_LATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. @@ -21184,15 +20603,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21204,11 +20619,11 @@ esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX if test -n "$ac_pt_DX_LATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 -printf "%s\n" "$ac_pt_DX_LATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +$as_echo "$ac_pt_DX_LATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_LATEX" = x; then @@ -21216,8 +20631,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_LATEX=$ac_pt_DX_LATEX @@ -21227,8 +20642,8 @@ else fi if test "$DX_FLAG_ps$DX_LATEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21237,12 +20652,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -21252,15 +20666,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21272,11 +20682,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -printf "%s\n" "$DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21285,12 +20695,11 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -21300,15 +20709,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21320,11 +20725,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -21332,8 +20737,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -21343,8 +20748,8 @@ else fi if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21353,12 +20758,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. set dummy ${ac_tool_prefix}dvips; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DVIPS+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DVIPS+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. @@ -21368,15 +20772,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21388,11 +20788,11 @@ esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS if test -n "$DX_DVIPS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 -printf "%s\n" "$DX_DVIPS" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +$as_echo "$DX_DVIPS" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21401,12 +20801,11 @@ if test -z "$ac_cv_path_DX_DVIPS"; then ac_pt_DX_DVIPS=$DX_DVIPS # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DVIPS+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DVIPS+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. @@ -21416,15 +20815,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21436,11 +20831,11 @@ esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS if test -n "$ac_pt_DX_DVIPS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 -printf "%s\n" "$ac_pt_DX_DVIPS" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +$as_echo "$ac_pt_DX_DVIPS" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_DVIPS" = x; then @@ -21448,8 +20843,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DVIPS=$ac_pt_DX_DVIPS @@ -21459,8 +20854,8 @@ else fi if test "$DX_FLAG_ps$DX_DVIPS" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21469,12 +20864,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -21484,15 +20878,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21504,11 +20894,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -printf "%s\n" "$DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21517,12 +20907,11 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -21532,15 +20921,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21552,11 +20937,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -printf "%s\n" "$ac_pt_DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -21564,8 +20949,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -21575,8 +20960,8 @@ else fi if test "$DX_FLAG_ps$DX_EGREP" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21597,8 +20982,7 @@ fi # Check whether --enable-doxygen-pdf was given. -if test ${enable_doxygen_pdf+y} -then : +if test "${enable_doxygen_pdf+set}" = set; then : enableval=$enable_doxygen_pdf; case "$enableval" in #( @@ -21607,7 +20991,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21619,7 +21003,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_pdf=1 @@ -21635,12 +21019,11 @@ if test "$DX_FLAG_pdf" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_PDFLATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_PDFLATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. @@ -21650,15 +21033,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21670,11 +21049,11 @@ esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX if test -n "$DX_PDFLATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 -printf "%s\n" "$DX_PDFLATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +$as_echo "$DX_PDFLATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21683,12 +21062,11 @@ if test -z "$ac_cv_path_DX_PDFLATEX"; then ac_pt_DX_PDFLATEX=$DX_PDFLATEX # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_PDFLATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. @@ -21698,15 +21076,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21718,11 +21092,11 @@ esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX if test -n "$ac_pt_DX_PDFLATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 -printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +$as_echo "$ac_pt_DX_PDFLATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_PDFLATEX" = x; then @@ -21730,8 +21104,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PDFLATEX=$ac_pt_DX_PDFLATEX @@ -21741,8 +21115,8 @@ else fi if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21751,12 +21125,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -21766,15 +21139,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21786,11 +21155,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -printf "%s\n" "$DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21799,12 +21168,11 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -21814,15 +21182,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21834,11 +21198,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -21846,8 +21210,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -21857,8 +21221,8 @@ else fi if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21867,12 +21231,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -21882,15 +21245,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21902,11 +21261,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -printf "%s\n" "$DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21915,12 +21274,11 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -21930,15 +21288,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21950,11 +21304,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -printf "%s\n" "$ac_pt_DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -21962,8 +21316,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -21973,8 +21327,8 @@ else fi if test "$DX_FLAG_pdf$DX_EGREP" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -22020,27 +21374,24 @@ PAPER_SIZE=$DOXYGEN_PAPER_SIZE esac # Rules: -if test $DX_FLAG_html -eq 1 -then : +if test $DX_FLAG_html -eq 1; then : DX_SNIPPET_html="## ------------------------------- ## DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ \$(DX_DOCDIR)/html " -else $as_nop +else DX_SNIPPET_html="" fi -if test $DX_FLAG_chi -eq 1 -then : +if test $DX_FLAG_chi -eq 1; then : DX_SNIPPET_chi=" DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ \$(DX_DOCDIR)/\$(PACKAGE).chi" -else $as_nop +else DX_SNIPPET_chi="" fi -if test $DX_FLAG_chm -eq 1 -then : +if test $DX_FLAG_chm -eq 1; then : DX_SNIPPET_chm="## ------------------------------ ## DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ @@ -22048,44 +21399,40 @@ DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ ${DX_SNIPPET_chi} " -else $as_nop +else DX_SNIPPET_chm="" fi -if test $DX_FLAG_man -eq 1 -then : +if test $DX_FLAG_man -eq 1; then : DX_SNIPPET_man="## ------------------------------ ## DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ \$(DX_DOCDIR)/man " -else $as_nop +else DX_SNIPPET_man="" fi -if test $DX_FLAG_rtf -eq 1 -then : +if test $DX_FLAG_rtf -eq 1; then : DX_SNIPPET_rtf="## ------------------------------ ## DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ \$(DX_DOCDIR)/rtf " -else $as_nop +else DX_SNIPPET_rtf="" fi -if test $DX_FLAG_xml -eq 1 -then : +if test $DX_FLAG_xml -eq 1; then : DX_SNIPPET_xml="## ------------------------------ ## DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ \$(DX_DOCDIR)/xml " -else $as_nop +else DX_SNIPPET_xml="" fi -if test $DX_FLAG_ps -eq 1 -then : +if test $DX_FLAG_ps -eq 1; then : DX_SNIPPET_ps="## ----------------------------- ## DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ @@ -22111,11 +21458,10 @@ doxygen-ps: \$(DX_CLEAN_PS) \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi " -else $as_nop +else DX_SNIPPET_ps="" fi -if test $DX_FLAG_pdf -eq 1 -then : +if test $DX_FLAG_pdf -eq 1; then : DX_SNIPPET_pdf="## ------------------------------ ## DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ @@ -22141,11 +21487,10 @@ doxygen-pdf: \$(DX_CLEAN_PDF) mv refman.pdf ../\$(PACKAGE).pdf " -else $as_nop +else DX_SNIPPET_pdf="" fi -if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 -then : +if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1; then : DX_SNIPPET_latex="## ------------------------------------------------- ## DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) @@ -22156,12 +21501,11 @@ DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ \$(DX_DOCDIR)/latex " -else $as_nop +else DX_SNIPPET_latex="" fi -if test $DX_FLAG_doc -eq 1 -then : +if test $DX_FLAG_doc -eq 1; then : DX_SNIPPET_doc="## --------------------------------- ## ${DX_SNIPPET_html}\ @@ -22202,7 +21546,7 @@ DX_CLEANFILES = \\ \$(DX_CLEAN_PS) \\ \$(DX_CLEAN_PDF) \\ \$(DX_CLEAN_LATEX)" -else $as_nop +else DX_SNIPPET_doc="" fi DX_RULES="${DX_SNIPPET_doc}" @@ -22270,8 +21614,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -22301,15 +21645,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -printf "%s\n" "$as_me: updating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -22323,8 +21667,8 @@ printf "%s\n" "$as_me: updating cache $cache_file" >&6;} fi fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -22377,7 +21721,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -22393,8 +21737,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -22417,16 +21761,14 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -22436,46 +21778,46 @@ esac fi - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi # The user is always right. -if ${PATH_SEPARATOR+false} :; then +if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -22484,6 +21826,13 @@ if ${PATH_SEPARATOR+false} :; then fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -22492,12 +21841,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -22509,10 +21854,30 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -22525,14 +21890,13 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -22559,20 +21923,18 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset - # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' -else $as_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -22584,13 +21946,12 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -22621,7 +21982,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -22643,10 +22004,6 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -22660,12 +22017,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -22707,7 +22058,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -22716,7 +22067,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22779,7 +22130,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -22833,16 +22184,14 @@ Report bugs to the package provider. bifrost home page: ." _ACEOF -ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` -ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config='$ac_cs_config_escaped' +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ bifrost config.status 0.9.0 -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -22881,21 +22230,21 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - printf "%s\n" "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - printf "%s\n" "$ac_cs_config"; exit ;; + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) - printf "%s\n" "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -22923,7 +22272,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -22937,7 +22286,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - printf "%s\n" "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF @@ -23353,8 +22702,8 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files - test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -23582,7 +22931,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -23590,17 +22939,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -printf "%s\n" "$as_me: creating $ac_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`printf "%s\n" "$configure_input" | + ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -23617,7 +22966,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$ac_file" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23641,9 +22990,9 @@ printf "%s\n" X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -23700,8 +23049,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -23744,9 +23093,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -23758,8 +23107,8 @@ which seems to be undefined. Please make sure it is defined" >&2;} ;; - :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -printf "%s\n" "$as_me: executing $ac_file commands" >&6;} + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -24307,7 +23656,6 @@ _LT_EOF esac - ltmain=$ac_aux_dir/ltmain.sh @@ -24510,8 +23858,7 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi - From 55c11fe93adc46444edd95df37bb18a5c161d2c0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 26 Oct 2021 10:51:40 -0600 Subject: [PATCH 0224/1155] Force nbyte to int for PyPy. --- python/bifrost/ndarray.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 8825eaed3..301cc2e87 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -82,6 +82,7 @@ def _address_as_buffer(address, nbyte, readonly=False): # PyPy3 catch # TODO: How do we set read only? Does it matter? # Should we be using this for everyone? + nbyte = int(nbyte) return (ctypes.c_char*nbyte).from_address(address) def asarray(arr, space=None): From 64509c2e43047d792fbe9b248367caceafc3e750 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 26 Oct 2021 10:59:40 -0600 Subject: [PATCH 0225/1155] Switch over to using the warnings module for warnings. --- python/bifrost/blocks/serialize.py | 3 ++- python/bifrost/pipeline.py | 5 +++-- python/bifrost/ring2.py | 3 ++- python/bifrost/sigproc.py | 7 ++++--- python/bifrost/sigproc2.py | 5 +++-- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/python/bifrost/blocks/serialize.py b/python/bifrost/blocks/serialize.py index f66cb60bd..2ec935f31 100644 --- a/python/bifrost/blocks/serialize.py +++ b/python/bifrost/blocks/serialize.py @@ -33,10 +33,11 @@ from bifrost.pipeline import SinkBlock, SourceBlock import os +import warnings try: import simplejson as json except ImportError: - print("WARNING: Install simplejson for better performance") + warnings.warn("Install simplejson for better performance", RuntimeWarning) import json import glob from functools import reduce diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 61efafc98..cdcede1ee 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -38,6 +38,7 @@ import Queue as queue import time import signal +import warnings from copy import copy from collections import defaultdict try: @@ -266,7 +267,7 @@ def shutdown(self): join_all(self.threads, timeout=self.shutdown_timeout) for thread in self.threads: if thread.is_alive(): - print("WARNING: Thread %s did not shut down on time and will be killed" % thread.name) + warnings.warn("Thread %s did not shut down on time and will be killed" % thread.name, RuntimeWarning) def shutdown_on_signals(self, signals=None): if signals is None: signals = [signal.SIGHUP, @@ -281,7 +282,7 @@ def _handle_signal_shutdown(self, signum, frame): reversed(sorted(signal.__dict__.items())) if v.startswith('SIG') and not v.startswith('SIG_')) - print("WARNING: Received signal %i %s, shutting down pipeline" % (signum, SIGNAL_NAMES[signum])) + warnings.warn("Received signal %i %s, shutting down pipeline" % (signum, SIGNAL_NAMES[signum]), RuntimeWarning) self.shutdown() def __enter__(self): thread_local.pipeline_stack.append(self) diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index 65b02d2a2..323c04a80 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -38,12 +38,13 @@ import ctypes import string +import warnings import numpy as np try: import simplejson as json except ImportError: - print("WARNING: Install simplejson for better performance") + warnings.warn("Install simplejson for better performance", RuntimeWarning) import json def _slugify(name): diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index 5a6b114e5..b52b0e50e 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -55,6 +55,7 @@ from __future__ import print_function import struct +import warnings import numpy as np from collections import defaultdict import os @@ -178,7 +179,7 @@ def _write_header(hdr, file_object): pass else: #raise KeyError("Unknown sigproc header key: %s"%key) - print("WARNING: Unknown sigproc header key: %s" % key) + warnings.warn("Unknown sigproc header key: '%s'" % key, RuntimeWarning) _header_write_string(file_object, "HEADER_END") def _read_header(file_object): @@ -207,7 +208,7 @@ def _read_header(file_object): header[expecting] = key expecting = None else: - print("WARNING: Unknown header key", key) + warnings.warn("Unknown header key: '%s'" % key, RuntimeWarning) if 'nchans' not in header: header['nchans'] = 1 header['header_size'] = file_object.tell() @@ -239,7 +240,7 @@ def seek_to_data(file_object): header[expecting] = key expecting = None else: - print("WARNING: Unknown header key", key) + warnings.warn("Unknown header key: '%s'" % key, RuntimeWarning) return def pack(data, nbit): diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index a8f8d4323..8bb8761f9 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -56,6 +56,7 @@ from __future__ import print_function, division import struct +import warnings import numpy as np from collections import defaultdict @@ -192,7 +193,7 @@ def write_header(hdr, f): _header_write(f, key, int(val), fmt='=b') else: #raise KeyError("Unknown sigproc header key: %s"%key) - print("WARNING: Unknown sigproc header key: %s" % key) + warnings.warn("Unknown sigproc header key: '%s'" % key, RuntimeWarning) _header_write_string(f, "HEADER_END") def _read_header(f): @@ -219,7 +220,7 @@ def _read_header(f): header[expecting] = key expecting = None else: - print("WARNING: Unknown header key", key) + warnings.warn("Unknown header key: '%s'" % key, RuntimeWarning) if 'nchans' not in header: header['nchans'] = 1 header['header_size'] = f.tell() From 8f45278dd9d7df8fba4680cdb563aa184c59b538 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 26 Oct 2021 17:58:59 -0600 Subject: [PATCH 0226/1155] Fixed bifrost.ndarray under PyPy3. --- python/bifrost/ndarray.py | 12 +++--- python/bifrost/pypy3_compat.c | 71 +++++++++++++++++++++++++++++++++++ python/setup.py | 11 +++++- 3 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 python/bifrost/pypy3_compat.c diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 301cc2e87..396a2678e 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -49,7 +49,11 @@ from bifrost import device from bifrost.DataType import DataType from bifrost.Space import Space -import sys + +try: + from bifrost._pypy3_compat import PyMemoryView_FromMemory +except ImportError: + pass # TODO: The stuff here makes array.py redundant (and outdated) @@ -80,10 +84,8 @@ def _address_as_buffer(address, nbyte, readonly=False): check=False) except AttributeError: # PyPy3 catch - # TODO: How do we set read only? Does it matter? - # Should we be using this for everyone? - nbyte = int(nbyte) - return (ctypes.c_char*nbyte).from_address(address) + int_asbuffer = PyMemoryView_FromMemory + return int_asbuffer(address, nbyte, 0x100 if readonly else 0x200) def asarray(arr, space=None): if isinstance(arr, ndarray) and (space is None or space == arr.bf.space): diff --git a/python/bifrost/pypy3_compat.c b/python/bifrost/pypy3_compat.c new file mode 100644 index 000000000..44ad9302a --- /dev/null +++ b/python/bifrost/pypy3_compat.c @@ -0,0 +1,71 @@ + +/* + * Copyright (c) 2021, The Bifrost Authors. All rights reserved. + * Copyright (c) 2021, The University of New Mexico. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/*! \file pypy3_compat.c + * \brief Compatibility layer for PyPy3 + */ + +#include "Python.h" +#include + +static PyObject* PyMemoryView_FromAddressAndSize(PyObject *self, PyObject *args, PyObject *kwds) { + PyObject *address, *nbyte, *flags, *view; + if(!PyArg_ParseTuple(args, "OOO", &address, &nbyte, &flags)) { + PyErr_Format(PyExc_RuntimeError, "Invalid parameters"); + return NULL; + } + + long addr, size, flgs; + addr = PyLong_AsLong(address); + size = PyLong_AsLong(nbyte); + flgs = PyLong_AsLong(flags); + + char *buf = (char *) addr; + + view = PyMemoryView_FromMemory(buf, size, flgs | PyBUF_READ); + return view; +} + +static PyMethodDef CompatMethods[] = { + {"PyMemoryView_FromMemory", (PyCFunction) PyMemoryView_FromAddressAndSize, METH_VARARGS, NULL}, + {NULL, NULL, 0, NULL} +}; + +static struct PyModuleDef Compat = { + PyModuleDef_HEAD_INIT, "_pypy3_compat", NULL, -1, CompatMethods,}; + +PyMODINIT_FUNC PyInit__pypy3_compat(void) { + PyObject *m; + m = PyModule_Create(&Compat); + if(m == NULL) { + return NULL; + } + return m; +} diff --git a/python/setup.py b/python/setup.py index 9221ed9e7..f10abd72a 100755 --- a/python/setup.py +++ b/python/setup.py @@ -29,7 +29,7 @@ # Python2 compatibility from __future__ import print_function -from setuptools import setup, find_packages +from setuptools import setup, Extension, find_packages import os import sys import glob @@ -54,6 +54,11 @@ print("*************************************************************************") raise +# Build the PyPy3 compatibility module, if needed +modules = [] +if sys.version.find('PyPy') != -1: + modules.append(Extension('_pypy3_compat', ['bifrost/pypy3_compat.c'])) + # Build up a list of scripts to install scripts = glob.glob(os.path.join('..', 'tools', '*.py')) @@ -71,4 +76,6 @@ "pint>=0.7.0", "graphviz>=0.5.0", "matplotlib" - ]) + ], + ext_package='bifrost', + ext_modules = modules) From 8ffc6d7527fb751c492d758841bd561deb9c90f0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 27 Oct 2021 16:12:34 -0600 Subject: [PATCH 0227/1155] Niceties. --- Makefile.in | 16 ++++++++++++++++ configure | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 30 ++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) diff --git a/Makefile.in b/Makefile.in index 751a0050d..ce771071e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -34,6 +34,22 @@ install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROS ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) install endif + @echo "Libraries have been installed in:" + @echo " $(INSTALL_LIB_DIR)" + @echo "" + @echo "If you ever happen to want to link against installed libraries" + @echo "in a given directory, LIBDIR, you must either use libtool, and" + @echo "specify the full pathname of the library, or use the '-LLIBDIR'" + @echo "flag during linking and do at least one of the following:" + @echo " - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable" + @echo " during execution" + @echo " - add LIBDIR to the 'LD_RUN_PATH' environment variable" + @echo " during linking" + @echo " - use the '-Wl,-rpath -Wl,LIBDIR' linker flag" + @echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + @echo "" + @echo "See any operating system documentation about shared libraries for" + @echo "more information, such as the ld(1) and ld.so(8) manual pages." .PHONY: install uninstall: rm -f $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO) diff --git a/configure b/configure index b733b5b8d..91cccd7d0 100755 --- a/configure +++ b/configure @@ -23862,3 +23862,53 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi + +# +# User notes +# + +echo "" + +if test x$HAVE_CUDA = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Build with CUDA support for arch. $GPU_ARCHS" >&5 +$as_echo "$as_me: Build with CUDA support for arch. $GPU_ARCHS" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Building without CUDA support" >&5 +$as_echo "$as_me: Building without CUDA support" >&6;} +fi + +if test x$HAVE_NUMA = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Building with NUMA support for memory binding" >&5 +$as_echo "$as_me: Building with NUMA support for memory binding" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Building without NUMA support for memory binding" >&5 +$as_echo "$as_me: Building without NUMA support for memory binding" >&6;} +fi + +if test x$HAVE_HWLOC = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Building with hwloc support for thread binding" >&5 +$as_echo "$as_me: Building with hwloc support for thread binding" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Building without hwloc support for thread binding" >&5 +$as_echo "$as_me: Building without hwloc support for thread binding" >&6;} +fi + +if test x$HAVE_VMA = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Building with libvma packet capture acceleration" >&5 +$as_echo "$as_me: Building with libvma packet capture acceleration" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Building without libvma packet capture acceleration" >&5 +$as_echo "$as_me: Building without libvma packet capture acceleration" >&6;} +fi + +if test x$HAVE_PYTHON = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Building the Python API" >&5 +$as_echo "$as_me: Building the Python API" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Not building the Python API" >&5 +$as_echo "$as_me: Not building the Python API" >&6;} +fi + +echo "" +echo "Bifrost is now ready to be compiled. Please run 'make'" +echo "" diff --git a/configure.ac b/configure.ac index 83c04cd41..bc3800189 100644 --- a/configure.ac +++ b/configure.ac @@ -280,3 +280,33 @@ NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h]) AC_OUTPUT + +# +# User notes +# + +echo "" + +AS_IF([test x$HAVE_CUDA = x1], + [AC_MSG_NOTICE(Building with CUDA support for arch. $GPU_ARCHS)], + [AC_MSG_NOTICE(Building without CUDA support)]) + +AS_IF([test x$HAVE_NUMA = x1], + [AC_MSG_NOTICE(Building with NUMA support for memory binding)], + [AC_MSG_NOTICE(Building without NUMA support for memory binding)]) + +AS_IF([test x$HAVE_HWLOC = x1], + [AC_MSG_NOTICE(Building with hwloc support for thread binding)], + [AC_MSG_NOTICE(Building without hwloc support for thread binding)]) + +AS_IF([test x$HAVE_VMA = x1], + [AC_MSG_NOTICE(Building with libvma packet capture acceleration)], + [AC_MSG_NOTICE(Building without libvma packet capture acceleration)]) + +AS_IF([test x$HAVE_PYTHON = x1], + [AC_MSG_NOTICE(Building the Python API)], + [AC_MSG_NOTICE(Not building the Python API)]) + +echo "" +echo "Bifrost is now ready to be compiled. Please run 'make'" +echo "" From 63c54ce74e2107361f69a7593a504024077cceba Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 28 Oct 2021 10:40:18 -0600 Subject: [PATCH 0228/1155] OSX doesn't have a procfs to look at for active processes. --- src/proclog.cpp | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/proclog.cpp b/src/proclog.cpp index dfd900063..5b4b0aeca 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -43,6 +43,10 @@ #include #include +#if defined __APPLE__ && __APPLE__ +#include +#endif + void make_dir(std::string path, int perms=775) { if( std::system(("mkdir -p "+path+" -m "+std::to_string(perms)).c_str()) ) { throw std::runtime_error("Failed to create path: "+path); @@ -64,9 +68,40 @@ void remove_file(std::string path) { } } bool process_exists(pid_t pid) { +#if defined __APPLE__ && __APPLE__ + + // Based on information from: + // https://developer.apple.com/library/archive/qa/qa2001/qa1123.html + + static const int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 }; + kinfo_proc *proclist = NULL; + int err, found = 0; + size_t len, count; + len = 0; + err = sysctl((int *) name, (sizeof(name) / sizeof(*name)) - 1, + NULL, &len, NULL, 0); + if( err == 0 ) { + proclist = (kinfo_proc*) ::malloc(len); + err = sysctl((int *) name, (sizeof(name) / sizeof(*name)) - 1, + proclist, &len, NULL, 0); + if( err == 0 ) { + count = len / sizeof(kinfo_proc); + for(int i=0; i Date: Thu, 28 Oct 2021 10:41:56 -0600 Subject: [PATCH 0229/1155] OSX get affinity fix. --- src/affinity.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/affinity.cpp b/src/affinity.cpp index 39f143a5f..daf6f064d 100644 --- a/src/affinity.cpp +++ b/src/affinity.cpp @@ -68,7 +68,7 @@ static inline int CPU_COUNT(cpu_set_t *cs) { int count = 0; for(int i=0; i<8*sizeof(cpu_set_t); i++) { - count += CPU_ISSET(i, cs); + count += CPU_ISSET(i, cs) ? 1 : 0; } return count; } @@ -77,15 +77,14 @@ int pthread_getaffinity_np(pthread_t thread, size_t cpu_size, cpu_set_t *cpu_set) { thread_port_t mach_thread; - mach_msg_type_number_t count; - boolean_t get_default; + mach_msg_type_number_t count = THREAD_AFFINITY_POLICY_COUNT; + boolean_t get_default = false; thread_affinity_policy_data_t policy; mach_thread = pthread_mach_thread_np(thread); thread_policy_get(mach_thread, THREAD_AFFINITY_POLICY, (thread_policy_t)&policy, &count, &get_default); - cpu_set->count |= (1<<(policy.affinity_tag)); return 0; } @@ -154,7 +153,7 @@ BFstatus bfAffinityGetCore(int* core) { // Return -1 if more than one core is set // TODO: Should really check if all cores are set, otherwise fail *core = -1; - return BF_STATUS_SUCCESS; + return BF_STATUS_SUCCESS; } else { int ncore = sysconf(_SC_NPROCESSORS_ONLN); From 5f7c27cd94f0eb632f4f84a4b676b6d6833fc61b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 28 Oct 2021 10:43:52 -0600 Subject: [PATCH 0230/1155] Formatting cleanup. --- src/proclog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proclog.cpp b/src/proclog.cpp index 5b4b0aeca..8d9922f02 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -154,7 +154,7 @@ class ProcLogMgr { if( pid && !process_exists(pid) ) { try { remove_all(std::string(base_logdir) + "/" + - std::to_string(pid)); + std::to_string(pid)); } catch( std::exception& ) {} } } From 821539598921fb1dd7f047c6b3a11e2b20fe869f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 2 Nov 2021 10:06:37 -0600 Subject: [PATCH 0231/1155] configure summary cleanup. --- configure | 69 ++++++++++++++++++++++++++++++++++++---------------- configure.ac | 35 ++++++++++++++++++-------- 2 files changed, 73 insertions(+), 31 deletions(-) diff --git a/configure b/configure index 91cccd7d0..4b1014575 100755 --- a/configure +++ b/configure @@ -629,7 +629,8 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='LTLIBOBJS +ac_subst_vars='OPTIONS +LTLIBOBJS PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR PACKAGE_VERSION_MAJOR @@ -23870,45 +23871,71 @@ fi echo "" if test x$HAVE_CUDA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Build with CUDA support for arch. $GPU_ARCHS" >&5 -$as_echo "$as_me: Build with CUDA support for arch. $GPU_ARCHS" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: cuda: yes - $GPU_ARCHS" >&5 +$as_echo "$as_me: cuda: yes - $GPU_ARCHS" >&6;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: Building without CUDA support" >&5 -$as_echo "$as_me: Building without CUDA support" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 +$as_echo "$as_me: cuda: no" >&6;} fi if test x$HAVE_NUMA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Building with NUMA support for memory binding" >&5 -$as_echo "$as_me: Building with NUMA support for memory binding" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: numa: yes" >&5 +$as_echo "$as_me: numa: yes" >&6;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: Building without NUMA support for memory binding" >&5 -$as_echo "$as_me: Building without NUMA support for memory binding" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: numa: no" >&5 +$as_echo "$as_me: numa: no" >&6;} fi if test x$HAVE_HWLOC = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Building with hwloc support for thread binding" >&5 -$as_echo "$as_me: Building with hwloc support for thread binding" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc: yes" >&5 +$as_echo "$as_me: hwloc: yes" >&6;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: Building without hwloc support for thread binding" >&5 -$as_echo "$as_me: Building without hwloc support for thread binding" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc: no" >&5 +$as_echo "$as_me: hwloc: no" >&6;} fi if test x$HAVE_VMA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Building with libvma packet capture acceleration" >&5 -$as_echo "$as_me: Building with libvma packet capture acceleration" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: libvma: yes" >&5 +$as_echo "$as_me: libvma: yes" >&6;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: Building without libvma packet capture acceleration" >&5 -$as_echo "$as_me: Building without libvma packet capture acceleration" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: libvma: no" >&5 +$as_echo "$as_me: libvma: no" >&6;} fi if test x$HAVE_PYTHON = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Building the Python API" >&5 -$as_echo "$as_me: Building the Python API" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: python bindings: yes" >&5 +$as_echo "$as_me: python bindings: yes" >&6;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: Not building the Python API" >&5 -$as_echo "$as_me: Not building the Python API" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: python bindings: no" >&5 +$as_echo "$as_me: python bindings: no" >&6;} fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: memory alignment: $ALIGNMENT" >&5 +$as_echo "$as_me: memory alignment: $ALIGNMENT" >&6;} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: logging directory: $HAVE_TMPFS" >&5 +$as_echo "$as_me: logging directory: $HAVE_TMPFS" >&6;} + + +if test x$enable_debug != xno; then : + OPTIONS="$OPTIONS debug" + +fi +if test x$enable_trace != xno; then : + OPTIONS="$OPTIONS trace" + +fi +if test x$enable_cuda_debug != xno; then : + OPTIONS="$OPTIONS cuda_debug" + +fi +if test x$enable_native_arch != xno; then : + OPTIONS="$OPTIONS native" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: options:$OPTIONS" >&5 +$as_echo "$as_me: options:$OPTIONS" >&6;} + echo "" echo "Bifrost is now ready to be compiled. Please run 'make'" echo "" diff --git a/configure.ac b/configure.ac index bc3800189..bb2147efb 100644 --- a/configure.ac +++ b/configure.ac @@ -288,25 +288,40 @@ AC_OUTPUT echo "" AS_IF([test x$HAVE_CUDA = x1], - [AC_MSG_NOTICE(Building with CUDA support for arch. $GPU_ARCHS)], - [AC_MSG_NOTICE(Building without CUDA support)]) + [AC_MSG_NOTICE(cuda: yes - $GPU_ARCHS)], + [AC_MSG_NOTICE(cuda: no)]) AS_IF([test x$HAVE_NUMA = x1], - [AC_MSG_NOTICE(Building with NUMA support for memory binding)], - [AC_MSG_NOTICE(Building without NUMA support for memory binding)]) + [AC_MSG_NOTICE(numa: yes)], + [AC_MSG_NOTICE(numa: no)]) AS_IF([test x$HAVE_HWLOC = x1], - [AC_MSG_NOTICE(Building with hwloc support for thread binding)], - [AC_MSG_NOTICE(Building without hwloc support for thread binding)]) + [AC_MSG_NOTICE(hwloc: yes)], + [AC_MSG_NOTICE(hwloc: no)]) AS_IF([test x$HAVE_VMA = x1], - [AC_MSG_NOTICE(Building with libvma packet capture acceleration)], - [AC_MSG_NOTICE(Building without libvma packet capture acceleration)]) + [AC_MSG_NOTICE(libvma: yes)], + [AC_MSG_NOTICE(libvma: no)]) AS_IF([test x$HAVE_PYTHON = x1], - [AC_MSG_NOTICE(Building the Python API)], - [AC_MSG_NOTICE(Not building the Python API)]) + [AC_MSG_NOTICE(python bindings: yes)], + [AC_MSG_NOTICE(python bindings: no)]) +AC_MSG_NOTICE(memory alignment: $ALIGNMENT) + +AC_MSG_NOTICE(logging directory: $HAVE_TMPFS) + +AC_SUBST([OPTIONS], []) +AS_IF([test x$enable_debug != xno], + [AC_SUBST([OPTIONS], ["$OPTIONS debug"])]) +AS_IF([test x$enable_trace != xno], + [AC_SUBST([OPTIONS], ["$OPTIONS trace"])]) +AS_IF([test x$enable_cuda_debug != xno], + [AC_SUBST([OPTIONS], ["$OPTIONS cuda_debug"])]) +AS_IF([test x$enable_native_arch != xno], + [AC_SUBST([OPTIONS], ["$OPTIONS native"])]) +AC_MSG_NOTICE(options:$OPTIONS) + echo "" echo "Bifrost is now ready to be compiled. Please run 'make'" echo "" From 20120a8247ebf843473bdabbf5ee534fa2417fc2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Nov 2021 11:11:40 -0600 Subject: [PATCH 0232/1155] Validate the CUDA archs. against nvcc. Add in a check for Pascal+ only archs. Zero out the GPU_SHAREDMEM if CUDA isn't requested. --- config/cuda.m4 | 25 ++++++++++++++++++++++++- configure | 36 ++++++++++++++++++++++++++++++++++++ configure.ac | 2 ++ 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 014c16e3e..b4208cd36 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -139,5 +139,28 @@ AC_DEFUN([AX_CHECK_CUDA], else AC_SUBST([GPU_ARCHS], [$with_gpu_archs]) fi - fi + + AC_MSG_CHECKING([for valid CUDA architectures]) + ar_requested=$( echo "$GPU_ARCHS" | wc -w ) + ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) + ar_found=$( echo $ar_valid | wc -w ) + if test "$ar_requested" = $ar_found; then + AC_MSG_RESULT([yes]) + else + AC_MSG_ERROR(only architectures $ar_valid are supported) + fi + + AC_MSG_CHECKING([for Pascal-style CUDA managed memory]) + cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[[1-5]][[0-9]]\b/PRE/g;' ) + if ! echo $cm_invalid | ${GREP} -q PRE; then + AC_SUBST([GPU_PASCAL_MANAGEDMEM], [1]) + AC_MSG_RESULT([yes]) + else + AC_SUBST([GPU_PASCAL_MANAGEDMEM], [0]) + AC_MSG_RESULT([no]) + fi + else + AC_SUBST([GPU_PASCAL_MANAGEDMEM], [0]) + fi ]) diff --git a/configure b/configure index 4b1014575..603b8382f 100755 --- a/configure +++ b/configure @@ -685,6 +685,7 @@ HAVE_DEBUG HAVE_TMPFS ALIGNMENT GPU_SHAREDMEM +GPU_PASCAL_MANAGEDMEM GPU_ARCHS NVCCFLAGS CUOBJDUMP @@ -19105,6 +19106,37 @@ fi GPU_ARCHS=$with_gpu_archs fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 +$as_echo_n "checking for valid CUDA architectures... " >&6; } + ar_requested=$( echo "$GPU_ARCHS" | wc -w ) + ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) + ar_found=$( echo $ar_valid | wc -w ) + if test "$ar_requested" = $ar_found; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + as_fn_error $? "only architectures $ar_valid are supported" "$LINENO" 5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 +$as_echo_n "checking for Pascal-style CUDA managed memory... " >&6; } + cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) + if ! echo $cm_invalid | ${GREP} -q PRE; then + GPU_PASCAL_MANAGEDMEM=1 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + GPU_PASCAL_MANAGEDMEM=0 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + else + GPU_PASCAL_MANAGEDMEM=0 + fi @@ -19118,6 +19150,10 @@ fi GPU_SHAREDMEM=$with_shared_mem +if test x$HAVE_CUDA = x0; then : + GPU_SHAREDMEM=0 + +fi # # Bifrost memory alignment diff --git a/configure.ac b/configure.ac index bb2147efb..a480791ea 100644 --- a/configure.ac +++ b/configure.ac @@ -144,6 +144,8 @@ AC_ARG_WITH([shared_mem], [], [with_shared_mem=16384]) AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) +AS_IF([test x$HAVE_CUDA = x0], + [AC_SUBST([GPU_SHAREDMEM], [0])]) # # Bifrost memory alignment From c1f4f3daf50618adb2c5d7222aea5157ed5942c9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Nov 2021 11:12:20 -0600 Subject: [PATCH 0233/1155] Added in BF_GPU_MANAGEDMEM which is one if we want only Pascal+ archs. --- src/bifrost/config.h.in | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index f2ade0f4e..ef8869c04 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -45,6 +45,7 @@ extern "C" { #define BF_CUDA_ENABLED @HAVE_CUDA@ #define BF_GPU_ARCHS "@GPU_ARCHS@" #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ +#define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ // Features #define BF_OPENMP_ENABLED @HAVE_OPENMP@ From 7d994576238b16e9f3ebd8ad80c5c95fce4957a9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Oct 2021 19:04:56 -0600 Subject: [PATCH 0234/1155] First attempts at making a configure script for Bifrost. --- configure | 7021 ++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 169 ++ 2 files changed, 7190 insertions(+) create mode 100755 configure create mode 100644 configure.ac diff --git a/configure b/configure new file mode 100755 index 000000000..28a03eef2 --- /dev/null +++ b/configure @@ -0,0 +1,7021 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='bifrost' +PACKAGE_TARNAME='bifrost' +PACKAGE_VERSION='0.9.0' +PACKAGE_STRING='bifrost 0.9.0' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="src/cuda.cpp" +ac_subst_vars='LTLIBOBJS +LIBOBJS +DX_RULES +PAPER_SIZE +DOXYGEN_PAPER_SIZE +GENERATE_LATEX +DX_PDFLATEX +DX_FLAG_pdf +DX_EGREP +DX_DVIPS +DX_MAKEINDEX +DX_LATEX +DX_FLAG_ps +DX_FLAG_html +GENERATE_CHI +DX_FLAG_chi +GENERATE_HTMLHELP +GENERATE_HTML +HHC_PATH +DX_HHC +DX_FLAG_chm +GENERATE_XML +DX_FLAG_xml +GENERATE_RTF +DX_FLAG_rtf +GENERATE_MAN +DX_FLAG_man +DOT_PATH +HAVE_DOT +DX_DOT +DX_FLAG_dot +PERL_PATH +DX_PERL +DX_DOXYGEN +DX_FLAG_doc +PROJECT +SRCDIR +DX_ENV +DX_DOCDIR +DX_CONFIG +DX_PROJECT +PYINSTALLFLAGS +PYBUILDFLAGS +PYTHON_LIB +PYTHON_INCLUDE_DIR +PYTHON_BIN +ARCH_NVCCFLAGS +ARCH_CXXFLAGS +TRACE_CPPFLAGS +DEBUG_NVCCFLAGS +DEBUG_CXXFLAGS +DEBUG_CPPFLAGS +ALIGNMENT +GPU_SHAREDMEM +GPU_ARCHS +VMA_CPPFLAGS +VMA_LIB +HWLOC_CPPFLAGS +HWLOC_LIB +NUMA_CPPFLAGS +NUMA_LIB +CTAGS +AWK +NVCCFLAGS +HAVE_CUDA +CUOBJDUMP +NVPRUNE +NVCC +RANLIB +CXXCPP +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_cuda +with_nvcc +with_nvprune +with_cuobjdump +with_nvcc_flags +with_awk +with_ctags +enable_numa +enable_hwloc +enable_vma +with_gpu_archs +with_shared_mem +with_alignment +enable_debug +enable_trace +enable_native_arch +enable_cuda_debug +with_pybuild_flags +with_pyinstall_flags +enable_doxygen_doc +enable_doxygen_dot +enable_doxygen_man +enable_doxygen_rtf +enable_doxygen_xml +enable_doxygen_chm +enable_doxygen_chi +enable_doxygen_html +enable_doxygen_ps +enable_doxygen_pdf +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CXXCPP +NVCC +NVPRUNE +CUOBJDUMP +AWK +CTAGS +DOXYGEN_PAPER_SIZE' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures bifrost 0.9.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/bifrost] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of bifrost 0.9.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-cuda enable cuda support (default=yes) + --enable-numa enable NUMA support (default=yes) + --enable-hwloc enable hwloc support (default=yes) + --enable-vma enable vma support (default=no) + --enable-debug enable debugging mode (default=no) + --enable-trace enable tracing mode for nvprof/nvvp (default=no) + --enable-native-arch enable native architecture compilation (default=yes) + --enable-cuda-debug enable CUDA debugging (nvcc -G; default=no) + --disable-doxygen-doc don't generate any doxygen documentation + --enable-doxygen-dot generate graphics for doxygen documentation + --disable-doxygen-man don't generate doxygen manual pages + --enable-doxygen-rtf generate doxygen RTF documentation + --enable-doxygen-xml generate doxygen XML documentation + --enable-doxygen-chm generate doxygen compressed HTML help documentation + --enable-doxygen-chi generate doxygen separate compressed HTML help index + file + --disable-doxygen-html don't generate doxygen plain HTML documentation + --disable-doxygen-ps don't generate doxygen PostScript documentation + --disable-doxygen-pdf don't generate doxygen PDF documentation + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-nvcc=[PATH] absolute path to nvcc executable + --with-nvprune=[PATH] absolute path to nvprune executable + --with-cuobjdump=[PATH] + absolute path to cuobjdump executable + --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler + -Wall') + --with-awk=[PATH] absolute path to awk executable + --with-ctags=[PATH] absolute path to ctags executable + --with-gpu-archs=... default GPU architectures (default='35 61') + --with-shared-mem=N default GPU shared memory in bytes (default=16384) + --with-alignment=N default memory alignment in bytes (default=4096) + --with-pybuild-flags build flags for python (default='') + --with-pyintall-flags install flags for python (default='') + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXXCPP C++ preprocessor + NVCC Absolute path to nvcc executable + NVPRUNE Absolute path to nvprune executable + CUOBJDUMP Absolute path to cuobjdump executable + AWK Absolute path to awk executable + CTAGS Absolute path to ctags executable + DOXYGEN_PAPER_SIZE + a4wide (default), a4, letter, legal or executive + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +bifrost configure 0.9.0 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by bifrost $as_me 0.9.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + +: ${CXXFLAGS="-O3 -Wall -pedantic"} + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C++ compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + +# Check whether --enable-cuda was given. +if test "${enable_cuda+set}" = set; then : + enableval=$enable_cuda; +else + enable_cuda=yes +fi + +if test "x$enable_cuda" != xno; then : + + + + + + + + + + + if test -z "$NVCC"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvcc executable path has been provided" >&5 +$as_echo_n "checking whether nvcc executable path has been provided... " >&6; } + +# Check whether --with-nvcc was given. +if test "${with_nvcc+set}" = set; then : + withval=$with_nvcc; + if test "$withval" != yes && test "$withval" != no; then : + + NVCC="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } + +else + + NVCC="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVCC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NVCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVCC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NVCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + + + + + + + + + + + if test -z "$NVPRUNE"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvprune executable path has been provided" >&5 +$as_echo_n "checking whether nvprune executable path has been provided... " >&6; } + +# Check whether --with-nvprune was given. +if test "${with_nvprune+set}" = set; then : + withval=$with_nvprune; + if test "$withval" != yes && test "$withval" != no; then : + + NVPRUNE="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } + +else + + NVPRUNE="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "nvprune", so it can be a program name with args. +set dummy nvprune; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVPRUNE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NVPRUNE in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NVPRUNE=$ac_cv_path_NVPRUNE +if test -n "$NVPRUNE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "nvprune", so it can be a program name with args. +set dummy nvprune; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVPRUNE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NVPRUNE in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NVPRUNE=$ac_cv_path_NVPRUNE +if test -n "$NVPRUNE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + + + + + + + + + + + if test -z "$CUOBJDUMP"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cuobjdump executable path has been provided" >&5 +$as_echo_n "checking whether cuobjdump executable path has been provided... " >&6; } + +# Check whether --with-cuobjdump was given. +if test "${with_cuobjdump+set}" = set; then : + withval=$with_cuobjdump; + if test "$withval" != yes && test "$withval" != no; then : + + CUOBJDUMP="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } + +else + + CUOBJDUMP="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "cuobjdump", so it can be a program name with args. +set dummy cuobjdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUOBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CUOBJDUMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUOBJDUMP=$ac_cv_path_CUOBJDUMP +if test -n "$CUOBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "cuobjdump", so it can be a program name with args. +set dummy cuobjdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUOBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CUOBJDUMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUOBJDUMP=$ac_cv_path_CUOBJDUMP +if test -n "$CUOBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + HAVE_CUDA=1 + +fi + +# Check whether --with-nvcc_flags was given. +if test "${with_nvcc_flags+set}" = set; then : + withval=$with_nvcc_flags; +else + with_nvcc_flags='-O3 -Xcompiler -Wall' +fi + +NVCCFLAGS=$with_nvcc_flags + + + + + + + + + + + + + if test -z "$AWK"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether awk executable path has been provided" >&5 +$as_echo_n "checking whether awk executable path has been provided... " >&6; } + +# Check whether --with-awk was given. +if test "${with_awk+set}" = set; then : + withval=$with_awk; + if test "$withval" != yes && test "$withval" != no; then : + + AWK="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } + +else + + AWK="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "awk", so it can be a program name with args. +set dummy awk; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AWK=$ac_cv_path_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "awk", so it can be a program name with args. +set dummy awk; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AWK=$ac_cv_path_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + + + + + + + + + + + + if test -z "$CTAGS"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + +# Check whether --with-ctags was given. +if test "${with_ctags+set}" = set; then : + withval=$with_ctags; + if test "$withval" != yes && test "$withval" != no; then : + + CTAGS="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } + +else + + CTAGS="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + +if test "x${CTAGS}" = x; then : + as_fn_error $? "Required program ctags was not found" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } +if ${ax_cv_cxx_openmp+:} false; then : + $as_echo_n "(cached) " >&6 +else + saveCXXFLAGS=$CXXFLAGS +ax_cv_cxx_openmp=unknown +# Flags to try: -fopenmp (gcc), -mp (SGI & PGI), +# -qopenmp (icc>=15), -openmp (icc), +# -xopenmp (Sun), -omp (Tru64), +# -qsmp=omp (AIX), +# none +ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none" +if test "x$OPENMP_CXXFLAGS" != x; then + ax_openmp_flags="$OPENMP_CXXFLAGS $ax_openmp_flags" +fi +for ax_openmp_flag in $ax_openmp_flags; do + case $ax_openmp_flag in + none) CXXFLAGS=$saveCXX ;; + *) CXXFLAGS="$saveCXXFLAGS $ax_openmp_flag" ;; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +static void +parallel_fill(int * data, int n) +{ + int i; +#pragma omp parallel for + for (i = 0; i < n; ++i) + data[i] = i; +} + +int +main() +{ + int arr[100000]; + omp_set_num_threads(2); + parallel_fill(arr, 100000); + return 0; +} + +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ax_cv_cxx_openmp=$ax_openmp_flag; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +done +CXXFLAGS=$saveCXXFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +$as_echo "$ax_cv_cxx_openmp" >&6; } +if test "x$ax_cv_cxx_openmp" = "xunknown"; then + : +else + if test "x$ax_cv_cxx_openmp" != "xnone"; then + OPENMP_CXXFLAGS=$ax_cv_cxx_openmp + fi + +$as_echo "#define HAVE_OPENMP 1" >>confdefs.h + +fi + + + +# Check whether --enable-numa was given. +if test "${enable_numa+set}" = set; then : + enableval=$enable_numa; +else + enable_numa=yes +fi + +if test "x$enable_numa" != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_tonode_memory in -lnuma" >&5 +$as_echo_n "checking for numa_tonode_memory in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_tonode_memory+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnuma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char numa_tonode_memory (); +int +main () +{ +return numa_tonode_memory (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_numa_numa_tonode_memory=yes +else + ac_cv_lib_numa_numa_tonode_memory=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_tonode_memory" >&5 +$as_echo "$ac_cv_lib_numa_numa_tonode_memory" >&6; } +if test "x$ac_cv_lib_numa_numa_tonode_memory" = xyes; then : + NUMA_LIB=-lnuma + + NUMA_CPPFLAGS=-DBF_NUMA_ENABLED=1 + +fi + +fi + +# Check whether --enable-hwloc was given. +if test "${enable_hwloc+set}" = set; then : + enableval=$enable_hwloc; +else + enable_hwloc=yes +fi + +if test "x$enable_hwloc" != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } +if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lhwloc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char hwloc_topology_init (); +int +main () +{ +return hwloc_topology_init (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_hwloc_hwloc_topology_init=yes +else + ac_cv_lib_hwloc_hwloc_topology_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : + HWLOC_LIB=-lhwloc + + HWLOC_CPPFLAGS=-DBF_HWLOC_ENABLED=1 + +fi + +fi + +# Check whether --enable-vma was given. +if test "${enable_vma+set}" = set; then : + enableval=$enable_vma; +else + enable_vma=no +fi + +if test "x$enable_vma" != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } +if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lvma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char recvfrom_zcopy (); +int +main () +{ +return recvfrom_zcopy (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_vma_recvfrom_zcopy=yes +else + ac_cv_lib_vma_recvfrom_zcopy=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : + VMA_LIB=-lvma + + VMA_CPPFLAGS=-DBF_VMA_ENABLED=1 + +fi + +fi + + +# Check whether --with-gpu_archs was given. +if test "${with_gpu_archs+set}" = set; then : + withval=$with_gpu_archs; +else + with_gpu_archs='35 61' +fi + +GPU_ARCHS=$with_gpu_archs + + + +# Check whether --with-shared_mem was given. +if test "${with_shared_mem+set}" = set; then : + withval=$with_shared_mem; +else + with_shared_mem=16384 +fi + +GPU_SHAREDMEM=$with_shared_mem + + + +# Check whether --with-alignment was given. +if test "${with_alignment+set}" = set; then : + withval=$with_alignment; +else + with_alignment=4096 +fi + +ALIGNMENT=$with_alignment + + +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; +else + enable_debug=no +fi + +if test "x$enable_debug" != xno; then : + DEBUG_CPPFLAGS=-DBF_DEBUG=1 + + DEBUG_CXXFLAGS=-g + + DEBUG_NVCCFLAGS=-g + +fi + +# Check whether --enable-trace was given. +if test "${enable_trace+set}" = set; then : + enableval=$enable_trace; +else + enable_trace=no +fi + +if test "x$enable_trace" != xno; then : + TRACE_CPPFLAGS=-DBF_TRACE_ENABLED=1 + +fi + +# Check whether --enable-native_arch was given. +if test "${enable_native_arch+set}" = set; then : + enableval=$enable_native_arch; +else + enable_native_arch=yes +fi + +if test "x$enable_native_arch" != xno; then : + ARCH_CXXFLAGS=-march=native + + ARCH_NVCCFLAGS=-Xcompiler -march=native + +fi + +# Check whether --enable-cuda_debug was given. +if test "${enable_cuda_debug+set}" = set; then : + enableval=$enable_cuda_debug; +else + enable_cuda_debug=no +fi + +if test "x$enable_cuda_debug" != xno; then : + DEBUG_NVCCFLAGS=-G + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build information" >&5 +$as_echo_n "checking for python build information... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } +for python in python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python; do +for ac_prog in $python +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PYTHON_BIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PYTHON_BIN"; then + ac_cv_prog_PYTHON_BIN="$PYTHON_BIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_PYTHON_BIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PYTHON_BIN=$ac_cv_prog_PYTHON_BIN +if test -n "$PYTHON_BIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_BIN" >&5 +$as_echo "$PYTHON_BIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON_BIN" && break +done + +ax_python_bin=$PYTHON_BIN +if test x$ax_python_bin != x; then + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_python_bin''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_python_bin" >&5 +$as_echo_n "checking for main in -l$ax_python_bin... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_python_bin $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_python_lib=$ax_python_bin +else + ax_python_lib=no +fi + + if test x$ax_python_lib == xno; then + as_ac_Lib=`$as_echo "ac_cv_lib_${ax_python_bin}m''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${ax_python_bin}m" >&5 +$as_echo_n "checking for main in -l${ax_python_bin}m... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${ax_python_bin}m $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_python_lib=${ax_python_bin}m +else + ax_python_lib=no +fi + + fi + if test x$ax_python_lib != xno; then + ax_python_header=`$ax_python_bin -c "from distutils.sysconfig import *; print(get_config_var('CONFINCLUDEPY'))"` + if test x$ax_python_header != x; then + break; + fi + fi +fi +done +if test x$ax_python_bin = x; then + ax_python_bin=no +fi +if test x$ax_python_header = x; then + ax_python_header=no +fi +if test x$ax_python_lib = x; then + ax_python_lib=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: results of the Python check:" >&5 +$as_echo " results of the Python check:" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Binary: $ax_python_bin" >&5 +$as_echo " Binary: $ax_python_bin" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Library: $ax_python_lib" >&5 +$as_echo " Library: $ax_python_lib" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Include Dir: $ax_python_header" >&5 +$as_echo " Include Dir: $ax_python_header" >&6; } + +if test x$ax_python_header != xno; then + PYTHON_INCLUDE_DIR=$ax_python_header + +fi +if test x$ax_python_lib != xno; then + PYTHON_LIB=$ax_python_lib + +fi + + + +# Check whether --with-pybuild_flags was given. +if test "${with_pybuild_flags+set}" = set; then : + withval=$with_pybuild_flags; +fi + +PYBUILDFLAGS=$with_pybuild_flags + + + +# Check whether --with-pyinstall_flags was given. +if test "${with_pyinstall_flags+set}" = set; then : + withval=$with_pyinstall_flags; +fi + +PYINSTALLFLAGS=$with_pyinstall_flags + + + + + + + + + + + + + +# Files: +DX_PROJECT=bifrost + +DX_CONFIG='$(srcdir)/Doxyfile' + +DX_DOCDIR='doxygen-doc' + + +# Environment variables used inside doxygen.cfg: +DX_ENV="$DX_ENV SRCDIR='$srcdir'" +SRCDIR=$srcdir + +DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'" +PROJECT=$DX_PROJECT + +DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" + + +# Doxygen itself: + + + + # Check whether --enable-doxygen-doc was given. +if test "${enable_doxygen_doc+set}" = set; then : + enableval=$enable_doxygen_doc; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_doc=1 + + +;; #( +n|N|no|No|NO) + DX_FLAG_doc=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-doc" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_doc=1 + + + +fi + +if test "$DX_FLAG_doc" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. +set dummy ${ac_tool_prefix}doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN +if test -n "$DX_DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +$as_echo "$DX_DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DOXYGEN"; then + ac_pt_DX_DOXYGEN=$DX_DOXYGEN + # Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN +if test -n "$ac_pt_DX_DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +$as_echo "$ac_pt_DX_DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_DOXYGEN" = x; then + DX_DOXYGEN="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DOXYGEN=$ac_pt_DX_DOXYGEN + fi +else + DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN" +fi + +if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + DX_FLAG_doc=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. +set dummy ${ac_tool_prefix}perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_PERL=$ac_cv_path_DX_PERL +if test -n "$DX_PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +$as_echo "$DX_PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_PERL"; then + ac_pt_DX_PERL=$DX_PERL + # Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL +if test -n "$ac_pt_DX_PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +$as_echo "$ac_pt_DX_PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_PERL" = x; then + DX_PERL="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_PERL=$ac_pt_DX_PERL + fi +else + DX_PERL="$ac_cv_path_DX_PERL" +fi + +if test "$DX_FLAG_doc$DX_PERL" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + DX_FLAG_doc=0 + +fi + + : +fi +if test "$DX_FLAG_doc" = 1; then + DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'" +PERL_PATH=$DX_PERL + + : +else + + : +fi + + +# Dot for graphics: + + + + # Check whether --enable-doxygen-dot was given. +if test "${enable_doxygen_dot+set}" = set; then : + enableval=$enable_doxygen_dot; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_dot=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_dot=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-dot" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_dot=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0 + + + +fi + +if test "$DX_FLAG_dot" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. +set dummy ${ac_tool_prefix}dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DOT=$ac_cv_path_DX_DOT +if test -n "$DX_DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +$as_echo "$DX_DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DOT"; then + ac_pt_DX_DOT=$DX_DOT + # Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT +if test -n "$ac_pt_DX_DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +$as_echo "$ac_pt_DX_DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_DOT" = x; then + DX_DOT="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DOT=$ac_pt_DX_DOT + fi +else + DX_DOT="$ac_cv_path_DX_DOT" +fi + +if test "$DX_FLAG_dot$DX_DOT" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + DX_FLAG_dot=0 + +fi + + : +fi +if test "$DX_FLAG_dot" = 1; then + DX_ENV="$DX_ENV HAVE_DOT='YES'" +HAVE_DOT=YES + + DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'" +DOT_PATH=`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'` + + : +else + DX_ENV="$DX_ENV HAVE_DOT='NO'" +HAVE_DOT=NO + + : +fi + + +# Man pages generation: + + + + # Check whether --enable-doxygen-man was given. +if test "${enable_doxygen_man+set}" = set; then : + enableval=$enable_doxygen_man; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_man=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_man=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-man" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_man=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 + + + +fi + +if test "$DX_FLAG_man" = 1; then + + : +fi +if test "$DX_FLAG_man" = 1; then + DX_ENV="$DX_ENV GENERATE_MAN='YES'" +GENERATE_MAN=YES + + : +else + DX_ENV="$DX_ENV GENERATE_MAN='NO'" +GENERATE_MAN=NO + + : +fi + + +# RTF file generation: + + + + # Check whether --enable-doxygen-rtf was given. +if test "${enable_doxygen_rtf+set}" = set; then : + enableval=$enable_doxygen_rtf; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_rtf=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_rtf=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-rtf" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_rtf=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0 + + + +fi + +if test "$DX_FLAG_rtf" = 1; then + + : +fi +if test "$DX_FLAG_rtf" = 1; then + DX_ENV="$DX_ENV GENERATE_RTF='YES'" +GENERATE_RTF=YES + + : +else + DX_ENV="$DX_ENV GENERATE_RTF='NO'" +GENERATE_RTF=NO + + : +fi + + +# XML file generation: + + + + # Check whether --enable-doxygen-xml was given. +if test "${enable_doxygen_xml+set}" = set; then : + enableval=$enable_doxygen_xml; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_xml=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_xml=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-xml" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_xml=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0 + + + +fi + +if test "$DX_FLAG_xml" = 1; then + + : +fi +if test "$DX_FLAG_xml" = 1; then + DX_ENV="$DX_ENV GENERATE_XML='YES'" +GENERATE_XML=YES + + : +else + DX_ENV="$DX_ENV GENERATE_XML='NO'" +GENERATE_XML=NO + + : +fi + + +# (Compressed) HTML help generation: + + + + # Check whether --enable-doxygen-chm was given. +if test "${enable_doxygen_chm+set}" = set; then : + enableval=$enable_doxygen_chm; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_chm=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_chm=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-chm" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_chm=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0 + + + +fi + +if test "$DX_FLAG_chm" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. +set dummy ${ac_tool_prefix}hhc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_HHC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_HHC in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_HHC=$ac_cv_path_DX_HHC +if test -n "$DX_HHC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +$as_echo "$DX_HHC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_HHC"; then + ac_pt_DX_HHC=$DX_HHC + # Extract the first word of "hhc", so it can be a program name with args. +set dummy hhc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_HHC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_HHC in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC +if test -n "$ac_pt_DX_HHC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +$as_echo "$ac_pt_DX_HHC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_HHC" = x; then + DX_HHC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_HHC=$ac_pt_DX_HHC + fi +else + DX_HHC="$ac_cv_path_DX_HHC" +fi + +if test "$DX_FLAG_chm$DX_HHC" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + DX_FLAG_chm=0 + +fi + + : +fi +if test "$DX_FLAG_chm" = 1; then + DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'" +HHC_PATH=$DX_HHC + + DX_ENV="$DX_ENV GENERATE_HTML='YES'" +GENERATE_HTML=YES + + DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'" +GENERATE_HTMLHELP=YES + + : +else + DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'" +GENERATE_HTMLHELP=NO + + : +fi + + +# Separate CHI file generation. + + + + # Check whether --enable-doxygen-chi was given. +if test "${enable_doxygen_chi+set}" = set; then : + enableval=$enable_doxygen_chi; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_chi=1 + + +test "$DX_FLAG_chm" = "1" \ +|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_chi=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-chi" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_chi=0 + + +test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0 + + + +fi + +if test "$DX_FLAG_chi" = 1; then + + : +fi +if test "$DX_FLAG_chi" = 1; then + DX_ENV="$DX_ENV GENERATE_CHI='YES'" +GENERATE_CHI=YES + + : +else + DX_ENV="$DX_ENV GENERATE_CHI='NO'" +GENERATE_CHI=NO + + : +fi + + +# Plain HTML pages generation: + + + + # Check whether --enable-doxygen-html was given. +if test "${enable_doxygen_html+set}" = set; then : + enableval=$enable_doxygen_html; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_html=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 + +test "$DX_FLAG_chm" = "0" \ +|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_html=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-html" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_html=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0 + + +test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0 + + + +fi + +if test "$DX_FLAG_html" = 1; then + + : +fi +if test "$DX_FLAG_html" = 1; then + DX_ENV="$DX_ENV GENERATE_HTML='YES'" +GENERATE_HTML=YES + + : +else + test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'" +GENERATE_HTML=NO + + : +fi + + +# PostScript file generation: + + + + # Check whether --enable-doxygen-ps was given. +if test "${enable_doxygen_ps+set}" = set; then : + enableval=$enable_doxygen_ps; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_ps=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_ps=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-ps" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_ps=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0 + + + +fi + +if test "$DX_FLAG_ps" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. +set dummy ${ac_tool_prefix}latex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_LATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_LATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_LATEX=$ac_cv_path_DX_LATEX +if test -n "$DX_LATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +$as_echo "$DX_LATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_LATEX"; then + ac_pt_DX_LATEX=$DX_LATEX + # Extract the first word of "latex", so it can be a program name with args. +set dummy latex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_LATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_LATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX +if test -n "$ac_pt_DX_LATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +$as_echo "$ac_pt_DX_LATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_LATEX" = x; then + DX_LATEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_LATEX=$ac_pt_DX_LATEX + fi +else + DX_LATEX="$ac_cv_path_DX_LATEX" +fi + +if test "$DX_FLAG_ps$DX_LATEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. +set dummy ${ac_tool_prefix}makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX +if test -n "$DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_MAKEINDEX"; then + ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX + # Extract the first word of "makeindex", so it can be a program name with args. +set dummy makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX +if test -n "$ac_pt_DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_MAKEINDEX" = x; then + DX_MAKEINDEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX + fi +else + DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" +fi + +if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. +set dummy ${ac_tool_prefix}dvips; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DVIPS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_DVIPS in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DVIPS=$ac_cv_path_DX_DVIPS +if test -n "$DX_DVIPS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +$as_echo "$DX_DVIPS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DVIPS"; then + ac_pt_DX_DVIPS=$DX_DVIPS + # Extract the first word of "dvips", so it can be a program name with args. +set dummy dvips; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DVIPS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_DVIPS in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS +if test -n "$ac_pt_DX_DVIPS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +$as_echo "$ac_pt_DX_DVIPS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_DVIPS" = x; then + DX_DVIPS="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DVIPS=$ac_pt_DX_DVIPS + fi +else + DX_DVIPS="$ac_cv_path_DX_DVIPS" +fi + +if test "$DX_FLAG_ps$DX_DVIPS" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. +set dummy ${ac_tool_prefix}egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_EGREP=$ac_cv_path_DX_EGREP +if test -n "$DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_EGREP"; then + ac_pt_DX_EGREP=$DX_EGREP + # Extract the first word of "egrep", so it can be a program name with args. +set dummy egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP +if test -n "$ac_pt_DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_EGREP" = x; then + DX_EGREP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_EGREP=$ac_pt_DX_EGREP + fi +else + DX_EGREP="$ac_cv_path_DX_EGREP" +fi + +if test "$DX_FLAG_ps$DX_EGREP" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + : +fi +if test "$DX_FLAG_ps" = 1; then + + : +else + + : +fi + + +# PDF file generation: + + + + # Check whether --enable-doxygen-pdf was given. +if test "${enable_doxygen_pdf+set}" = set; then : + enableval=$enable_doxygen_pdf; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_pdf=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_pdf=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-pdf" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_pdf=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0 + + + +fi + +if test "$DX_FLAG_pdf" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. +set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_PDFLATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_PDFLATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX +if test -n "$DX_PDFLATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +$as_echo "$DX_PDFLATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_PDFLATEX"; then + ac_pt_DX_PDFLATEX=$DX_PDFLATEX + # Extract the first word of "pdflatex", so it can be a program name with args. +set dummy pdflatex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_PDFLATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_PDFLATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX +if test -n "$ac_pt_DX_PDFLATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +$as_echo "$ac_pt_DX_PDFLATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_PDFLATEX" = x; then + DX_PDFLATEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_PDFLATEX=$ac_pt_DX_PDFLATEX + fi +else + DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX" +fi + +if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. +set dummy ${ac_tool_prefix}makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX +if test -n "$DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_MAKEINDEX"; then + ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX + # Extract the first word of "makeindex", so it can be a program name with args. +set dummy makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX +if test -n "$ac_pt_DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_MAKEINDEX" = x; then + DX_MAKEINDEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX + fi +else + DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" +fi + +if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. +set dummy ${ac_tool_prefix}egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_EGREP=$ac_cv_path_DX_EGREP +if test -n "$DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_EGREP"; then + ac_pt_DX_EGREP=$DX_EGREP + # Extract the first word of "egrep", so it can be a program name with args. +set dummy egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP +if test -n "$ac_pt_DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_EGREP" = x; then + DX_EGREP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_EGREP=$ac_pt_DX_EGREP + fi +else + DX_EGREP="$ac_cv_path_DX_EGREP" +fi + +if test "$DX_FLAG_pdf$DX_EGREP" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + : +fi +if test "$DX_FLAG_pdf" = 1; then + + : +else + + : +fi + + +# LaTeX generation for PS and/or PDF: +if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then + DX_ENV="$DX_ENV GENERATE_LATEX='YES'" +GENERATE_LATEX=YES + +else + DX_ENV="$DX_ENV GENERATE_LATEX='NO'" +GENERATE_LATEX=NO + +fi + +# Paper size for PS and/or PDF: + +case "$DOXYGEN_PAPER_SIZE" in +#( +"") + DOXYGEN_PAPER_SIZE="" + +;; #( +a4wide|a4|letter|legal|executive) + DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" +PAPER_SIZE=$DOXYGEN_PAPER_SIZE + +;; #( +*) + as_fn_error $? "unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" "$LINENO" 5 +;; +esac + +# Rules: +if test $DX_FLAG_html -eq 1; then : + DX_SNIPPET_html="## ------------------------------- ## + +DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ + \$(DX_DOCDIR)/html + +" +else + DX_SNIPPET_html="" +fi +if test $DX_FLAG_chi -eq 1; then : + DX_SNIPPET_chi=" +DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ + \$(DX_DOCDIR)/\$(PACKAGE).chi" +else + DX_SNIPPET_chi="" +fi +if test $DX_FLAG_chm -eq 1; then : + DX_SNIPPET_chm="## ------------------------------ ## + +DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ + \$(DX_DOCDIR)/chm\ +${DX_SNIPPET_chi} + +" +else + DX_SNIPPET_chm="" +fi +if test $DX_FLAG_man -eq 1; then : + DX_SNIPPET_man="## ------------------------------ ## + +DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ + \$(DX_DOCDIR)/man + +" +else + DX_SNIPPET_man="" +fi +if test $DX_FLAG_rtf -eq 1; then : + DX_SNIPPET_rtf="## ------------------------------ ## + +DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ + \$(DX_DOCDIR)/rtf + +" +else + DX_SNIPPET_rtf="" +fi +if test $DX_FLAG_xml -eq 1; then : + DX_SNIPPET_xml="## ------------------------------ ## + +DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ + \$(DX_DOCDIR)/xml + +" +else + DX_SNIPPET_xml="" +fi +if test $DX_FLAG_ps -eq 1; then : + DX_SNIPPET_ps="## ----------------------------- ## + +DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ + \$(DX_DOCDIR)/\$(PACKAGE).ps + +DX_PS_GOAL = doxygen-ps + +doxygen-ps: \$(DX_CLEAN_PS) + +\$(DX_DOCDIR)/\$(PACKAGE).ps: \$(DX_DOCDIR)/\$(PACKAGE).tag + \$(DX_V_LATEX)cd \$(DX_DOCDIR)/latex; \\ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ + \$(DX_LATEX) refman.tex; \\ + \$(DX_MAKEINDEX) refman.idx; \\ + \$(DX_LATEX) refman.tex; \\ + countdown=5; \\ + while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ + refman.log > /dev/null 2>&1 \\ + && test \$\$countdown -gt 0; do \\ + \$(DX_LATEX) refman.tex; \\ + countdown=\`expr \$\$countdown - 1\`; \\ + done; \\ + \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi + +" +else + DX_SNIPPET_ps="" +fi +if test $DX_FLAG_pdf -eq 1; then : + DX_SNIPPET_pdf="## ------------------------------ ## + +DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ + \$(DX_DOCDIR)/\$(PACKAGE).pdf + +DX_PDF_GOAL = doxygen-pdf + +doxygen-pdf: \$(DX_CLEAN_PDF) + +\$(DX_DOCDIR)/\$(PACKAGE).pdf: \$(DX_DOCDIR)/\$(PACKAGE).tag + \$(DX_V_LATEX)cd \$(DX_DOCDIR)/latex; \\ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ + \$(DX_PDFLATEX) refman.tex; \\ + \$(DX_MAKEINDEX) refman.idx; \\ + \$(DX_PDFLATEX) refman.tex; \\ + countdown=5; \\ + while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ + refman.log > /dev/null 2>&1 \\ + && test \$\$countdown -gt 0; do \\ + \$(DX_PDFLATEX) refman.tex; \\ + countdown=\`expr \$\$countdown - 1\`; \\ + done; \\ + mv refman.pdf ../\$(PACKAGE).pdf + +" +else + DX_SNIPPET_pdf="" +fi +if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1; then : + DX_SNIPPET_latex="## ------------------------------------------------- ## + +DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) +_DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) +_DX_v_LATEX_0 = @echo \" LATEX \" \$@; + +DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ + \$(DX_DOCDIR)/latex + +" +else + DX_SNIPPET_latex="" +fi + +if test $DX_FLAG_doc -eq 1; then : + DX_SNIPPET_doc="## --------------------------------- ## + +${DX_SNIPPET_html}\ +${DX_SNIPPET_chm}\ +${DX_SNIPPET_man}\ +${DX_SNIPPET_rtf}\ +${DX_SNIPPET_xml}\ +${DX_SNIPPET_ps}\ +${DX_SNIPPET_pdf}\ +${DX_SNIPPET_latex}\ +DX_V_DXGEN = \$(_DX_v_DXGEN_\$(V)) +_DX_v_DXGEN_ = \$(_DX_v_DXGEN_\$(AM_DEFAULT_VERBOSITY)) +_DX_v_DXGEN_0 = @echo \" DXGEN \" \$<; + +.PHONY: doxygen-run doxygen-doc \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +.INTERMEDIATE: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +doxygen-run: \$(DX_DOCDIR)/\$(PACKAGE).tag + +doxygen-doc: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +\$(DX_DOCDIR)/\$(PACKAGE).tag: \$(DX_CONFIG) \$(pkginclude_HEADERS) + \$(A""M_V_at)rm -rf \$(DX_DOCDIR) + \$(DX_V_DXGEN)\$(DX_ENV) DOCDIR=\$(DX_DOCDIR) \$(DX_DOXYGEN) \$(DX_CONFIG) + \$(A""M_V_at)echo Timestamp >\$@ + +DX_CLEANFILES = \\ + \$(DX_DOCDIR)/doxygen_sqlite3.db \\ + \$(DX_DOCDIR)/\$(PACKAGE).tag \\ + -r \\ + \$(DX_CLEAN_HTML) \\ + \$(DX_CLEAN_CHM) \\ + \$(DX_CLEAN_CHI) \\ + \$(DX_CLEAN_MAN) \\ + \$(DX_CLEAN_RTF) \\ + \$(DX_CLEAN_XML) \\ + \$(DX_CLEAN_PS) \\ + \$(DX_CLEAN_PDF) \\ + \$(DX_CLEAN_LATEX)" +else + DX_SNIPPET_doc="" +fi +DX_RULES="${DX_SNIPPET_doc}" + + +#For debugging: +#echo DX_FLAG_doc=$DX_FLAG_doc +#echo DX_FLAG_dot=$DX_FLAG_dot +#echo DX_FLAG_man=$DX_FLAG_man +#echo DX_FLAG_html=$DX_FLAG_html +#echo DX_FLAG_chm=$DX_FLAG_chm +#echo DX_FLAG_chi=$DX_FLAG_chi +#echo DX_FLAG_rtf=$DX_FLAG_rtf +#echo DX_FLAG_xml=$DX_FLAG_xml +#echo DX_FLAG_pdf=$DX_FLAG_pdf +#echo DX_FLAG_ps=$DX_FLAG_ps +#echo DX_ENV=$DX_ENV + + +ac_config_files="$ac_config_files user2.mk" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by bifrost $as_me 0.9.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +bifrost config.status 0.9.0 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "user2.mk") CONFIG_FILES="$CONFIG_FILES user2.mk" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 000000000..61c45548a --- /dev/null +++ b/configure.ac @@ -0,0 +1,169 @@ +AC_INIT([bifrost], [0.9.0]) +AC_LANG(C++) +AC_CONFIG_SRCDIR([src/cuda.cpp]) + +: ${CXXFLAGS="-O3 -Wall -pedantic"} + +AC_PROG_CXX +AC_REQUIRE_CPP +AC_PROG_RANLIB + +AC_ARG_ENABLE([cuda], + [AS_HELP_STRING([--enable-cuda], + [enable cuda support (default=yes)])], + [], + [enable_cuda=yes]) +AS_IF([test "x$enable_cuda" != xno], + [AX_WITH_PROG(NVCC, nvcc) + AX_WITH_PROG(NVPRUNE, nvprune) + AX_WITH_PROG(CUOBJDUMP, cuobjdump) + AC_SUBST([HAVE_CUDA], [1])], + []) +AC_ARG_WITH([nvcc_flags], + [AS_HELP_STRING([--with-nvcc-flags], + [flags to pass to NVCC (default='-O3 -Xcompiler -Wall')])], + [], + [with_nvcc_flags='-O3 -Xcompiler -Wall']) +AC_SUBST(NVCCFLAGS, $with_nvcc_flags) + +AX_WITH_PROG(AWK, awk) + +AX_WITH_PROG(CTAGS, ctags) +AS_IF([test "x${CTAGS}" = x], + [AC_MSG_ERROR([Required program ctags was not found])], + []) +AC_MSG_CHECKING([whether ${CTAGS} is exuberant]) +AS_IF([! ${CTAGS} --version | grep -q Exuberant], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([exhuberant ctags is required, but ${CTAGS} is a different version])], + [AC_MSG_RESULT([yes])]) + +AX_OPENMP + + +AC_ARG_ENABLE([numa], + AS_HELP_STRING([--enable-numa], + [enable NUMA support (default=yes)]), + [], + [enable_numa=yes]) +AS_IF([test "x$enable_numa" != xno], + [AC_CHECK_LIB([numa], [numa_tonode_memory], + [AC_SUBST([NUMA_LIB], [-lnuma]) + AC_SUBST([NUMA_CPPFLAGS], [-DBF_NUMA_ENABLED=1])], + [])], + []) + +AC_ARG_ENABLE([hwloc], + AS_HELP_STRING([--enable-hwloc], + [enable hwloc support (default=yes)]), + [], + [enable_hwloc=yes]) +AS_IF([test "x$enable_hwloc" != xno], + [AC_CHECK_LIB([hwloc], [hwloc_topology_init], + [AC_SUBST([HWLOC_LIB], [-lhwloc]) + AC_SUBST([HWLOC_CPPFLAGS], [-DBF_HWLOC_ENABLED=1])], + [])], + []) + +AC_ARG_ENABLE([vma], + AS_HELP_STRING([--enable-vma], + [enable vma support (default=no)]), + [], + [enable_vma=no]) +AS_IF([test "x$enable_vma" != xno], + [AC_CHECK_LIB([vma], [recvfrom_zcopy], + [AC_SUBST([VMA_LIB], [-lvma]) + AC_SUBST([VMA_CPPFLAGS], [-DBF_VMA_ENABLED=1])], + [])], + []) + +AC_ARG_WITH([gpu_archs], + [AS_HELP_STRING([--with-gpu-archs=...], + [default GPU architectures (default='35 61')])], + [], + [with_gpu_archs='35 61']) +AC_SUBST(GPU_ARCHS, $with_gpu_archs) + +AC_ARG_WITH([shared_mem], + [AS_HELP_STRING([--with-shared-mem=N], + [default GPU shared memory in bytes (default=16384)])], + [], + [with_shared_mem=16384]) +AC_SUBST(GPU_SHAREDMEM, $with_shared_mem) + +AC_ARG_WITH([alignment], + [AS_HELP_STRING([--with-alignment=N], + [default memory alignment in bytes (default=4096)])], + [], + [with_alignment=4096]) +AC_SUBST(ALIGNMENT, $with_alignment) + +AC_ARG_ENABLE([debug], + [AS_HELP_STRING([--enable-debug], + [enable debugging mode (default=no)])], + [], + [enable_debug=no]) +AS_IF([test "x$enable_debug" != xno], + [AC_SUBST(DEBUG_CPPFLAGS, [-DBF_DEBUG=1]) + AC_SUBST(DEBUG_CXXFLAGS, [-g]) + AC_SUBST(DEBUG_NVCCFLAGS, [-g])], + []) + +AC_ARG_ENABLE([trace], + [AS_HELP_STRING([--enable-trace], + [enable tracing mode for nvprof/nvvp (default=no)])], + [], + [enable_trace=no]) +AS_IF([test "x$enable_trace" != xno], + [AC_SUBST(TRACE_CPPFLAGS, [-DBF_TRACE_ENABLED=1])], + []) + +AC_ARG_ENABLE([native_arch], + [AS_HELP_STRING([--enable-native-arch], + [enable native architecture compilation (default=yes)])], + [], + [enable_native_arch=yes]) +AS_IF([test "x$enable_native_arch" != xno], + [AC_SUBST(ARCH_CXXFLAGS, [-march=native]) + AC_SUBST(ARCH_NVCCFLAGS, [-Xcompiler -march=native])], + []) + +AC_ARG_ENABLE([cuda_debug], + [AS_HELP_STRING([--enable-cuda-debug], + [enable CUDA debugging (nvcc -G; default=no)])], + [], + [enable_cuda_debug=no]) +AS_IF([test "x$enable_cuda_debug" != xno], + [AC_SUBST(DEBUG_NVCCFLAGS, [-G])], + []) + +AX_PYTHON + +AC_ARG_WITH([pybuild_flags], + [AS_HELP_STRING([--with-pybuild-flags], + [build flags for python (default='')])], + [], + []) +AC_SUBST(PYBUILDFLAGS, $with_pybuild_flags) + +AC_ARG_WITH([pyinstall_flags], + [AS_HELP_STRING([--with-pyintall-flags], + [install flags for python (default='')])], + [], + []) +AC_SUBST(PYINSTALLFLAGS, $with_pyinstall_flags) + +DX_DOT_FEATURE(OFF) +DX_HTML_FEATURE(ON) +DX_CHM_FEATURE(OFF) +DX_CHI_FEATURE(OFF) +DX_MAN_FEATURE(ON) +DX_RTF_FEATURE(OFF) +DX_XML_FEATURE(OFF) +DX_PDF_FEATURE(ON) +DX_PS_FEATURE(ON) +DX_INIT_DOXYGEN([bifrost]) + +AC_CONFIG_FILES([user2.mk]) + +AC_OUTPUT From 1f685bf06e4b7b49ceb13d10154ce08ea0ef0828 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 16:19:59 -0600 Subject: [PATCH 0235/1155] More progress. --- config.mk => config.mk.in | 20 +- config/config.guess | 1530 ++++ config/config.sub | 1773 ++++ config/install-sh | 527 ++ config/ltmain.sh | 11156 +++++++++++++++++++++++ configure | 15507 ++++++++++++++++++++++++++++++-- configure.ac | 144 +- src/{Makefile => Makefile.in} | 84 +- user.mk | 32 - 9 files changed, 29932 insertions(+), 841 deletions(-) rename config.mk => config.mk.in (57%) create mode 100755 config/config.guess create mode 100755 config/config.sub create mode 100755 config/install-sh create mode 100644 config/ltmain.sh rename src/{Makefile => Makefile.in} (77%) delete mode 100644 user.mk diff --git a/config.mk b/config.mk.in similarity index 57% rename from config.mk rename to config.mk.in index 4ca448915..dbe9d97c2 100644 --- a/config.mk +++ b/config.mk.in @@ -1,10 +1,9 @@ - ifndef OS OS := $(shell uname -s) endif ifeq ($(OS),Linux) - SO_EXT = .so + SO_EXT = @SO_EXT@ SHARED_FLAG = -shared SONAME_FLAG = -soname else ifeq ($(OS),Darwin) @@ -17,19 +16,16 @@ else $(error Unsupported OS) endif -ifndef INSTALL_LIB_DIR - INSTALL_LIB_DIR = /usr/local/lib -endif -ifndef INSTALL_INC_DIR - INSTALL_INC_DIR = /usr/local/include -endif +PREFIX_DIR = @prefix@ +INSTALL_LIB_DIR = @LIBDIR@ +INSTALL_INC_DIR = @includedir@ -BIFROST_NAME = bifrost +BIFROST_NAME = @PACKAGE_NAME@ LIBBIFROST_NAME = lib$(BIFROST_NAME) -LIBBIFROST_MAJOR = 0 -LIBBIFROST_MINOR = 9 -LIBBIFROST_PATCH = 0 +LIBBIFROST_MAJOR = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $1}') +LIBBIFROST_MINOR = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $2}') +LIBBIFROST_PATCH = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $3}') LIBBIFROST_SO = $(LIBBIFROST_NAME)$(SO_EXT) LIBBIFROST_SO_MAJ = $(LIBBIFROST_SO).$(LIBBIFROST_MAJOR) LIBBIFROST_SO_MAJ_MIN = $(LIBBIFROST_SO_MAJ).$(LIBBIFROST_MINOR) diff --git a/config/config.guess b/config/config.guess new file mode 100755 index 000000000..d622a44e5 --- /dev/null +++ b/config/config.guess @@ -0,0 +1,1530 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. + +timestamp='2012-02-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/config.sub b/config/config.sub new file mode 100755 index 000000000..c894da455 --- /dev/null +++ b/config/config.sub @@ -0,0 +1,1773 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. + +timestamp='2012-02-10' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | open8 \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i386-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/install-sh b/config/install-sh new file mode 100755 index 000000000..a9244eb07 --- /dev/null +++ b/config/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-01-19.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for `test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config/ltmain.sh b/config/ltmain.sh new file mode 100644 index 000000000..a736cf994 --- /dev/null +++ b/config/ltmain.sh @@ -0,0 +1,11156 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.6 Debian-2.4.6-2" +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname $scriptversion Debian-2.4.6-2 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files + # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/configure b/configure index 28a03eef2..0679cb724 100755 --- a/configure +++ b/configure @@ -195,7 +195,16 @@ test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else @@ -552,6 +561,8 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +SHELL=${CONFIG_SHELL-/bin/sh} + test -n "$DJDIR" || exec 7<&0 &1 @@ -579,11 +590,46 @@ PACKAGE_TARNAME='bifrost' PACKAGE_VERSION='0.9.0' PACKAGE_STRING='bifrost 0.9.0' PACKAGE_BUGREPORT='' -PACKAGE_URL='' +PACKAGE_URL='https://github.com/ledatelescope/bifrost/' ac_unique_file="src/cuda.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + ac_subst_vars='LTLIBOBJS -LIBOBJS DX_RULES PAPER_SIZE DOXYGEN_PAPER_SIZE @@ -628,37 +674,64 @@ PYBUILDFLAGS PYTHON_LIB PYTHON_INCLUDE_DIR PYTHON_BIN -ARCH_NVCCFLAGS -ARCH_CXXFLAGS -TRACE_CPPFLAGS -DEBUG_NVCCFLAGS -DEBUG_CXXFLAGS -DEBUG_CPPFLAGS -ALIGNMENT -GPU_SHAREDMEM GPU_ARCHS -VMA_CPPFLAGS -VMA_LIB -HWLOC_CPPFLAGS -HWLOC_LIB -NUMA_CPPFLAGS -NUMA_LIB -CTAGS -AWK NVCCFLAGS HAVE_CUDA CUOBJDUMP NVPRUNE NVCC -RANLIB +CUDA_HOME +LIBOBJS +SO_EXT +CTAGS +SET_MAKE CXXCPP +CPP +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +STRIP +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +AWK +ac_ct_CXX +CXXFLAGS +CXX OBJEXT EXEEXT -ac_ct_CXX +ac_ct_CC CPPFLAGS LDFLAGS -CXXFLAGS -CXX +CFLAGS +CC target_alias host_alias build_alias @@ -701,13 +774,21 @@ SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking +enable_shared +enable_static +with_pic +enable_fast_install +with_aix_soname +with_gnu_ld +with_sysroot +enable_libtool_lock +with_ctags +with_cuda_home enable_cuda with_nvcc with_nvprune with_cuobjdump with_nvcc_flags -with_awk -with_ctags enable_numa enable_hwloc enable_vma @@ -734,18 +815,21 @@ enable_doxygen_pdf ac_precious_vars='build_alias host_alias target_alias -CXX -CXXFLAGS +CC +CFLAGS LDFLAGS LIBS CPPFLAGS +CXX +CXXFLAGS CCC +LT_SYS_LIBRARY_PATH +CPP CXXCPP +CTAGS NVCC NVPRUNE CUOBJDUMP -AWK -CTAGS DOXYGEN_PAPER_SIZE' @@ -1354,6 +1438,10 @@ Fine tuning of the installation directories: _ACEOF cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi @@ -1367,6 +1455,11 @@ 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-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) --enable-cuda enable cuda support (default=yes) --enable-numa enable NUMA support (default=yes) --enable-hwloc enable hwloc support (default=yes) @@ -1390,14 +1483,22 @@ Optional Features: Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + --with-ctags=[PATH] absolute path to ctags executable + --with-cuda-home CUDA install path (default=/usr/local/cuda) --with-nvcc=[PATH] absolute path to nvcc executable --with-nvprune=[PATH] absolute path to nvprune executable --with-cuobjdump=[PATH] absolute path to cuobjdump executable --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler -Wall') - --with-awk=[PATH] absolute path to awk executable - --with-ctags=[PATH] absolute path to ctags executable --with-gpu-archs=... default GPU architectures (default='35 61') --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) @@ -1405,19 +1506,23 @@ Optional Packages: --with-pyintall-flags install flags for python (default='') Some influential environment variables: - CXX C++ compiler command - CXXFLAGS C++ compiler flags + CC C compiler command + CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + CPP C preprocessor CXXCPP C++ preprocessor + CTAGS Absolute path to ctags executable NVCC Absolute path to nvcc executable NVPRUNE Absolute path to nvprune executable CUOBJDUMP Absolute path to cuobjdump executable - AWK Absolute path to awk executable - CTAGS Absolute path to ctags executable DOXYGEN_PAPER_SIZE a4wide (default), a4, letter, legal or executive @@ -1425,6 +1530,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. +bifrost home page: . _ACEOF ac_status=$? fi @@ -1501,6 +1607,44 @@ fi ## Autoconf initialization. ## ## ------------------------ ## +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. @@ -1539,6 +1683,229 @@ fi } # ac_fn_cxx_try_compile +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. @@ -1621,19 +1988,399 @@ fi as_fn_set_status $ac_retval } # ac_fn_cxx_try_link -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -It was created by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.69. Invocation command line was +# ac_fn_cxx_check_func LINENO FUNC VAR +# ------------------------------------ +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_cxx_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 - $ $0 $@ +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_func + +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# --------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_header_mongrel + +# ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES +# --------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_cxx_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_type + +# ac_fn_cxx_try_run LINENO +# ------------------------ +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_run + +# ac_fn_c_find_intX_t LINENO BITS VAR +# ----------------------------------- +# Finds a signed integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_intX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +$as_echo_n "checking for int$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + # Order is important - never check a type that is potentially smaller + # than half of the expected target width. + for ac_type in int$2_t 'int' 'long int' \ + 'long long int' 'short int' 'signed char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + enum { N = $2 / 2 - 1 }; +int +main () +{ +static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + enum { N = $2 / 2 - 1 }; +int +main () +{ +static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) + < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + case $ac_type in #( + int$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : + +else + break +fi + done +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_find_intX_t + +# ac_fn_c_find_uintX_t LINENO BITS VAR +# ------------------------------------ +# Finds an unsigned integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_uintX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +$as_echo_n "checking for uint$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + # Order is important - never check a type that is potentially smaller + # than half of the expected target width. + for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ + 'unsigned long long int' 'unsigned short int' 'unsigned char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + case $ac_type in #( + uint$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : + +else + break +fi + done +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_find_uintX_t +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by bifrost $as_me 0.9.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## @@ -1981,29 +2728,54 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + : ${CXXFLAGS="-O3 -Wall -pedantic"} -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +# Programs +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -2012,7 +2784,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -2022,32 +2794,224 @@ IFS=$as_save_IFS fi fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$CXX" && break +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done +IFS=$as_save_IFS + fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -2056,7 +3020,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" + ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -2066,21 +3030,21 @@ IFS=$as_save_IFS fi fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$ac_ct_CXX" && break + test -n "$ac_ct_CC" && break done - if test "x$ac_ct_CXX" = x; then - CXX="g++" + if test "x$ac_ct_CC" = x; then + CC="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -2088,14 +3052,20 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - CXX=$ac_ct_CXX + CC=$ac_ct_CC fi fi - fi fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do @@ -2135,8 +3105,8 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 -$as_echo_n "checking whether the C++ compiler works... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: @@ -2206,14 +3176,14 @@ sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C++ compiler cannot create executables +as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 -$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext @@ -2307,7 +3277,7 @@ $as_echo "$ac_try_echo"; } >&5 else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C++ compiled programs. +as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi @@ -2369,9 +3339,9 @@ fi $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -2388,33 +3358,33 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu +ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then - GXX=yes + GCC=yes else - GXX= + GCC= fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2426,10 +3396,10 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes else - CXXFLAGS="" + CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2441,11 +3411,11 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO"; then : else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2457,194 +3427,159 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" else - CXXFLAGS="-g" + CFLAGS="-g" fi else - if test "$GXX" = yes; then - CXXFLAGS="-O2" + if test "$GCC" = yes; then + CFLAGS="-O2" else - CXXFLAGS= + CFLAGS= fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -2654,28 +3589,32 @@ IFS=$as_save_IFS fi fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi + test -n "$CXX" && break + done fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : +if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -2684,7 +3623,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" + ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -2694,17 +3633,21 @@ IFS=$as_save_IFS fi fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) @@ -2712,62 +3655,11836 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - RANLIB=$ac_ct_RANLIB + CXX=$ac_ct_CXX fi -else - RANLIB="$ac_cv_prog_RANLIB" fi - -# Check whether --enable-cuda was given. -if test "${enable_cuda+set}" = set; then : - enableval=$enable_cuda; -else - enable_cuda=yes + fi fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -if test "x$enable_cuda" != xno; then : - - - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ - if test -z "$NVCC"; then : + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +func_stripname_cnf () +{ + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; + esac +} # func_stripname_cnf + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + pic_mode=default +fi + + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + link_all_deplibs=no + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen=shl_load +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen=dlopen +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +CC=$lt_save_CC + + if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct_CXX=no + hardcode_direct_absolute_CXX=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec_CXX='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + no_undefined_flag_CXX='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' $wl-bernotok' + allow_undefined_flag_CXX=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='$wl--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + if test yes != "$lt_cv_apple_cc_single_mod"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + os2*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_minus_L_CXX=yes + allow_undefined_flag_CXX=unsupported + shrext_cmds=.dll + archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes_CXX=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='$wl-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='$wl-E' + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + no_undefined_flag_CXX=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='$wl-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='$wl-z,text' + allow_undefined_flag_CXX='$wl-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test no = "$ld_shlibs_CXX" && can_build_shared=no + + GCC_CXX=$GXX + LD_CXX=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX=$prev$p + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX=$prev$p + else + postdeps_CXX="${postdeps_CXX} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX=$p + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX=$p + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + lt_prog_compiler_pic_CXX='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static_CXX='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test no = "$ld_shlibs_CXX" && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + + + + + + + + + + + + if test -z "$CTAGS"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + +# Check whether --with-ctags was given. +if test "${with_ctags+set}" = set; then : + withval=$with_ctags; + if test "$withval" != yes && test "$withval" != no; then : + + CTAGS="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } + +else + + CTAGS="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvcc executable path has been provided" >&5 -$as_echo_n "checking whether nvcc executable path has been provided... " >&6; } + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -# Check whether --with-nvcc was given. -if test "${with_nvcc+set}" = set; then : - withval=$with_nvcc; - if test "$withval" != yes && test "$withval" != no; then : - NVCC="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } + +fi + +fi else - NVCC="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - if test "$withval" != no; then : - - # Extract the first word of "nvcc", so it can be a program name with args. -set dummy nvcc; ac_word=$2 + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : +if ${ac_cv_path_CTAGS+:} false; then : $as_echo_n "(cached) " >&6 else - case $NVCC in + case $CTAGS in [\\/]* | ?:[\\/]*) - ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2777,7 +15494,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -2788,10 +15505,10 @@ IFS=$as_save_IFS ;; esac fi -NVCC=$ac_cv_path_NVCC -if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -2799,196 +15516,590 @@ fi -fi +fi + + +fi + + + + + + +if test x${CTAGS} = x; then : + as_fn_error $? "Required program ctags was not found" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + +SO_EXT=$shrext_cmds + + +# Features +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +for ac_func in memset +do : + ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMSET 1 +_ACEOF + +fi +done + +for ac_func in rint +do : + ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RINT 1 +_ACEOF + +fi +done + +for ac_func in socket +do : + ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKET 1 +_ACEOF + +fi +done + +for ac_func in sqrt +do : + ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SQRT 1 +_ACEOF + +fi +done + +for ac_func in strerror +do : + ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR 1 +_ACEOF + +fi +done + + +for ac_header in arpa/inet.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ARPA_INET_H 1 +_ACEOF + +fi + +done + +for ac_header in netdb.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETDB_H 1 +_ACEOF + +fi + +done + +for ac_header in netinet/in.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETINET_IN_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/file.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_FILE_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/ioctl.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_IOCTL_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/socket.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_SOCKET_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + +for ac_header in stdlib.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS malloc.$ac_objext" + ;; +esac + + +$as_echo "#define malloc rpl_malloc" >>confdefs.h + +fi + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } +if ${ax_cv_cxx_openmp+:} false; then : + $as_echo_n "(cached) " >&6 +else + saveCXXFLAGS=$CXXFLAGS +ax_cv_cxx_openmp=unknown +# Flags to try: -fopenmp (gcc), -mp (SGI & PGI), +# -qopenmp (icc>=15), -openmp (icc), +# -xopenmp (Sun), -omp (Tru64), +# -qsmp=omp (AIX), +# none +ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none" +if test "x$OPENMP_CXXFLAGS" != x; then + ax_openmp_flags="$OPENMP_CXXFLAGS $ax_openmp_flags" +fi +for ax_openmp_flag in $ax_openmp_flags; do + case $ax_openmp_flag in + none) CXXFLAGS=$saveCXX ;; + *) CXXFLAGS="$saveCXXFLAGS $ax_openmp_flag" ;; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +static void +parallel_fill(int * data, int n) +{ + int i; +#pragma omp parallel for + for (i = 0; i < n; ++i) + data[i] = i; +} + +int +main() +{ + int arr[100000]; + omp_set_num_threads(2); + parallel_fill(arr, 100000); + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ax_cv_cxx_openmp=$ax_openmp_flag; break fi - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "nvcc", so it can be a program name with args. -set dummy nvcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $NVCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext done - done -IFS=$as_save_IFS +CXXFLAGS=$saveCXXFLAGS - ;; -esac fi -NVCC=$ac_cv_path_NVCC -if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +$as_echo "$ax_cv_cxx_openmp" >&6; } +if test "x$ax_cv_cxx_openmp" = "xunknown"; then + : else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - + if test "x$ax_cv_cxx_openmp" != "xnone"; then + OPENMP_CXXFLAGS=$ax_cv_cxx_openmp + fi +$as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi -fi +ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +cat >>confdefs.h <<_ACEOF +#define HAVE_PTRDIFF_T 1 +_ACEOF +fi +ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" +case $ac_cv_c_int16_t in #( + no|yes) ;; #( + *) +cat >>confdefs.h <<_ACEOF +#define int16_t $ac_cv_c_int16_t +_ACEOF +;; +esac +ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" +case $ac_cv_c_int32_t in #( + no|yes) ;; #( + *) +cat >>confdefs.h <<_ACEOF +#define int32_t $ac_cv_c_int32_t +_ACEOF +;; +esac +ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" +case $ac_cv_c_int64_t in #( + no|yes) ;; #( + *) +cat >>confdefs.h <<_ACEOF +#define int64_t $ac_cv_c_int64_t +_ACEOF +;; +esac +ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t" +case $ac_cv_c_int8_t in #( + no|yes) ;; #( + *) +cat >>confdefs.h <<_ACEOF +#define int8_t $ac_cv_c_int8_t +_ACEOF +;; +esac +ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : +else +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF +fi - if test -z "$NVPRUNE"; then : +ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvprune executable path has been provided" >&5 -$as_echo_n "checking whether nvprune executable path has been provided... " >&6; } +else -# Check whether --with-nvprune was given. -if test "${with_nvprune+set}" = set; then : - withval=$with_nvprune; - if test "$withval" != yes && test "$withval" != no; then : +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF - NVPRUNE="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } +fi + +ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" +if test "x$ac_cv_type_ssize_t" = xyes; then : else - NVPRUNE="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : +cat >>confdefs.h <<_ACEOF +#define ssize_t int +_ACEOF - # Extract the first word of "nvprune", so it can be a program name with args. -set dummy nvprune; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVPRUNE+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $NVPRUNE in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. - ;; +fi + +ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" +case $ac_cv_c_uint16_t in #( + no|yes) ;; #( *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - ;; -esac -fi -NVPRUNE=$ac_cv_path_NVPRUNE -if test -n "$NVPRUNE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +cat >>confdefs.h <<_ACEOF +#define uint16_t $ac_cv_c_uint16_t +_ACEOF +;; + esac +ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" +case $ac_cv_c_uint32_t in #( + no|yes) ;; #( + *) -fi +$as_echo "#define _UINT32_T 1" >>confdefs.h -fi -else +cat >>confdefs.h <<_ACEOF +#define uint32_t $ac_cv_c_uint32_t +_ACEOF +;; + esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "nvprune", so it can be a program name with args. -set dummy nvprune; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVPRUNE+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $NVPRUNE in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. - ;; +ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" +case $ac_cv_c_uint64_t in #( + no|yes) ;; #( *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - ;; -esac -fi -NVPRUNE=$ac_cv_path_NVPRUNE -if test -n "$NVPRUNE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +$as_echo "#define _UINT64_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint64_t $ac_cv_c_uint64_t +_ACEOF +;; + esac -fi +ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" +case $ac_cv_c_uint8_t in #( + no|yes) ;; #( + *) +$as_echo "#define _UINT8_T 1" >>confdefs.h -fi + +cat >>confdefs.h <<_ACEOF +#define uint8_t $ac_cv_c_uint8_t +_ACEOF +;; + esac +# Extras +# Check whether --with-cuda_home was given. +if test "${with_cuda_home+set}" = set; then : + withval=$with_cuda_home; +else + with_cuda_home=/usr/local/cuda +fi +CUDA_HOME=$with_cuda_home +# Check whether --enable-cuda was given. +if test "${enable_cuda+set}" = set; then : + enableval=$enable_cuda; +else + enable_cuda=yes +fi +if test x$enable_cuda != xno; then : @@ -2999,37 +16110,37 @@ fi - if test -z "$CUOBJDUMP"; then : + if test -z "$NVCC"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cuobjdump executable path has been provided" >&5 -$as_echo_n "checking whether cuobjdump executable path has been provided... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvcc executable path has been provided" >&5 +$as_echo_n "checking whether nvcc executable path has been provided... " >&6; } -# Check whether --with-cuobjdump was given. -if test "${with_cuobjdump+set}" = set; then : - withval=$with_cuobjdump; +# Check whether --with-nvcc was given. +if test "${with_nvcc+set}" = set; then : + withval=$with_nvcc; if test "$withval" != yes && test "$withval" != no; then : - CUOBJDUMP="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } + NVCC="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else - CUOBJDUMP="" + NVCC="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$withval" != no; then : - # Extract the first word of "cuobjdump", so it can be a program name with args. -set dummy cuobjdump; ac_word=$2 + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CUOBJDUMP+:} false; then : +if ${ac_cv_path_NVCC+:} false; then : $as_echo_n "(cached) " >&6 else - case $CUOBJDUMP in + case $NVCC in [\\/]* | ?:[\\/]*) - ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3039,7 +16150,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3050,10 +16161,10 @@ IFS=$as_save_IFS ;; esac fi -CUOBJDUMP=$ac_cv_path_CUOBJDUMP -if test -n "$CUOBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3069,16 +16180,16 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - # Extract the first word of "cuobjdump", so it can be a program name with args. -set dummy cuobjdump; ac_word=$2 + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CUOBJDUMP+:} false; then : +if ${ac_cv_path_NVCC+:} false; then : $as_echo_n "(cached) " >&6 else - case $CUOBJDUMP in + case $NVCC in [\\/]* | ?:[\\/]*) - ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3088,7 +16199,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3099,10 +16210,10 @@ IFS=$as_save_IFS ;; esac fi -CUOBJDUMP=$ac_cv_path_CUOBJDUMP -if test -n "$CUOBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3120,18 +16231,6 @@ fi - HAVE_CUDA=1 - -fi - -# Check whether --with-nvcc_flags was given. -if test "${with_nvcc_flags+set}" = set; then : - withval=$with_nvcc_flags; -else - with_nvcc_flags='-O3 -Xcompiler -Wall' -fi - -NVCCFLAGS=$with_nvcc_flags @@ -3142,39 +16241,37 @@ NVCCFLAGS=$with_nvcc_flags + if test -z "$NVPRUNE"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvprune executable path has been provided" >&5 +$as_echo_n "checking whether nvprune executable path has been provided... " >&6; } - if test -z "$AWK"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether awk executable path has been provided" >&5 -$as_echo_n "checking whether awk executable path has been provided... " >&6; } - -# Check whether --with-awk was given. -if test "${with_awk+set}" = set; then : - withval=$with_awk; +# Check whether --with-nvprune was given. +if test "${with_nvprune+set}" = set; then : + withval=$with_nvprune; if test "$withval" != yes && test "$withval" != no; then : - AWK="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + NVPRUNE="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } else - AWK="" + NVPRUNE="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$withval" != no; then : - # Extract the first word of "awk", so it can be a program name with args. -set dummy awk; ac_word=$2 + # Extract the first word of "nvprune", so it can be a program name with args. +set dummy nvprune; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_AWK+:} false; then : +if ${ac_cv_path_NVPRUNE+:} false; then : $as_echo_n "(cached) " >&6 else - case $AWK in + case $NVPRUNE in [\\/]* | ?:[\\/]*) - ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3184,7 +16281,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3195,10 +16292,10 @@ IFS=$as_save_IFS ;; esac fi -AWK=$ac_cv_path_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } +NVPRUNE=$ac_cv_path_NVPRUNE +if test -n "$NVPRUNE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3214,16 +16311,16 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - # Extract the first word of "awk", so it can be a program name with args. -set dummy awk; ac_word=$2 + # Extract the first word of "nvprune", so it can be a program name with args. +set dummy nvprune; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_AWK+:} false; then : +if ${ac_cv_path_NVPRUNE+:} false; then : $as_echo_n "(cached) " >&6 else - case $AWK in + case $NVPRUNE in [\\/]* | ?:[\\/]*) - ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3233,7 +16330,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3244,10 +16341,10 @@ IFS=$as_save_IFS ;; esac fi -AWK=$ac_cv_path_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } +NVPRUNE=$ac_cv_path_NVPRUNE +if test -n "$NVPRUNE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3275,38 +16372,37 @@ fi + if test -z "$CUOBJDUMP"; then : - if test -z "$CTAGS"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 -$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cuobjdump executable path has been provided" >&5 +$as_echo_n "checking whether cuobjdump executable path has been provided... " >&6; } -# Check whether --with-ctags was given. -if test "${with_ctags+set}" = set; then : - withval=$with_ctags; +# Check whether --with-cuobjdump was given. +if test "${with_cuobjdump+set}" = set; then : + withval=$with_cuobjdump; if test "$withval" != yes && test "$withval" != no; then : - CTAGS="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } + CUOBJDUMP="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } else - CTAGS="" + CUOBJDUMP="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$withval" != no; then : - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 + # Extract the first word of "cuobjdump", so it can be a program name with args. +set dummy cuobjdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : +if ${ac_cv_path_CUOBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else - case $CTAGS in + case $CUOBJDUMP in [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3316,7 +16412,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3327,10 +16423,10 @@ IFS=$as_save_IFS ;; esac fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } +CUOBJDUMP=$ac_cv_path_CUOBJDUMP +if test -n "$CUOBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3346,16 +16442,16 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 + # Extract the first word of "cuobjdump", so it can be a program name with args. +set dummy cuobjdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : +if ${ac_cv_path_CUOBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else - case $CTAGS in + case $CUOBJDUMP in [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3365,7 +16461,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3376,10 +16472,10 @@ IFS=$as_save_IFS ;; esac fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } +CUOBJDUMP=$ac_cv_path_CUOBJDUMP +if test -n "$CUOBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -3397,89 +16493,25 @@ fi -if test "x${CTAGS}" = x; then : - as_fn_error $? "Required program ctags was not found" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } -if ! ${CTAGS} --version | grep -q Exuberant; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi - - + HAVE_CUDA=1 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 -$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } -if ${ax_cv_cxx_openmp+:} false; then : - $as_echo_n "(cached) " >&6 + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" else - saveCXXFLAGS=$CXXFLAGS -ax_cv_cxx_openmp=unknown -# Flags to try: -fopenmp (gcc), -mp (SGI & PGI), -# -qopenmp (icc>=15), -openmp (icc), -# -xopenmp (Sun), -omp (Tru64), -# -qsmp=omp (AIX), -# none -ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none" -if test "x$OPENMP_CXXFLAGS" != x; then - ax_openmp_flags="$OPENMP_CXXFLAGS $ax_openmp_flags" -fi -for ax_openmp_flag in $ax_openmp_flags; do - case $ax_openmp_flag in - none) CXXFLAGS=$saveCXX ;; - *) CXXFLAGS="$saveCXXFLAGS $ax_openmp_flag" ;; - esac - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include - -static void -parallel_fill(int * data, int n) -{ - int i; -#pragma omp parallel for - for (i = 0; i < n; ++i) - data[i] = i; -} + HAVE_CUDA=0 -int -main() -{ - int arr[100000]; - omp_set_num_threads(2); - parallel_fill(arr, 100000); - return 0; -} - -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ax_cv_cxx_openmp=$ax_openmp_flag; break fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -done -CXXFLAGS=$saveCXXFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 -$as_echo "$ax_cv_cxx_openmp" >&6; } -if test "x$ax_cv_cxx_openmp" = "xunknown"; then - : +# Check whether --with-nvcc_flags was given. +if test "${with_nvcc_flags+set}" = set; then : + withval=$with_nvcc_flags; else - if test "x$ax_cv_cxx_openmp" != "xnone"; then - OPENMP_CXXFLAGS=$ax_cv_cxx_openmp - fi - -$as_echo "#define HAVE_OPENMP 1" >>confdefs.h - + with_nvcc_flags='-O3 -Xcompiler -Wall' fi +NVCCFLAGS=$with_nvcc_flags + # Check whether --enable-numa was given. @@ -3489,7 +16521,7 @@ else enable_numa=yes fi -if test "x$enable_numa" != xno; then : +if test x$enable_numa != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_tonode_memory in -lnuma" >&5 $as_echo_n "checking for numa_tonode_memory in -lnuma... " >&6; } if ${ac_cv_lib_numa_numa_tonode_memory+:} false; then : @@ -3527,10 +16559,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_tonode_memory" >&5 $as_echo "$ac_cv_lib_numa_numa_tonode_memory" >&6; } if test "x$ac_cv_lib_numa_numa_tonode_memory" = xyes; then : - NUMA_LIB=-lnuma - - NUMA_CPPFLAGS=-DBF_NUMA_ENABLED=1 - + CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" + LIBS="$LIBS -lnuma" fi fi @@ -3542,7 +16572,7 @@ else enable_hwloc=yes fi -if test "x$enable_hwloc" != xno; then : +if test x$enable_hwloc != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 $as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : @@ -3580,10 +16610,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 $as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : - HWLOC_LIB=-lhwloc - - HWLOC_CPPFLAGS=-DBF_HWLOC_ENABLED=1 - + CPPFLAGS="$CPPFLAGS -DBF_HWLOC_ENABLED=1" + LIBS="$LIBS -lhwloc" fi fi @@ -3595,7 +16623,7 @@ else enable_vma=no fi -if test "x$enable_vma" != xno; then : +if test x$enable_vma != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 $as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : @@ -3633,10 +16661,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 $as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : - VMA_LIB=-lvma - - VMA_CPPFLAGS=-DBF_VMA_ENABLED=1 - + CPPFLAGS="$CPPFLAGS -DBF_VMA_ENABLED=1" + LIBS="$LIBS -lvma" fi fi @@ -3660,8 +16686,9 @@ else with_shared_mem=16384 fi -GPU_SHAREDMEM=$with_shared_mem - +if test x$HAVE_CUDA = x1; then : + NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem" +fi # Check whether --with-alignment was given. @@ -3671,8 +16698,7 @@ else with_alignment=4096 fi -ALIGNMENT=$with_alignment - +CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : @@ -3681,13 +16707,10 @@ else enable_debug=no fi -if test "x$enable_debug" != xno; then : - DEBUG_CPPFLAGS=-DBF_DEBUG=1 - - DEBUG_CXXFLAGS=-g - - DEBUG_NVCCFLAGS=-g - +if test x$enable_debug != xno; then : + CPPFLAGS="$CPPFLAGS -DBF_DEBUG=1" + CXXFLAGS="$CXXFLAGS -g" + NVCCFLAGS="$NVCCFLAGS -g" fi # Check whether --enable-trace was given. @@ -3697,9 +16720,8 @@ else enable_trace=no fi -if test "x$enable_trace" != xno; then : - TRACE_CPPFLAGS=-DBF_TRACE_ENABLED=1 - +if test x$enable_trace != xno; then : + CPPFLAGS="$CPPFLAGS -DBF_TRACE_ENABLED=1" fi # Check whether --enable-native_arch was given. @@ -3709,11 +16731,11 @@ else enable_native_arch=yes fi -if test "x$enable_native_arch" != xno; then : - ARCH_CXXFLAGS=-march=native - - ARCH_NVCCFLAGS=-Xcompiler -march=native +if test x$enable_native_arch != xyes; then : +else + CXXFLAGS="$CXXFLAGS -march=native" + NVCCFLAGS="$NVCCFLAGS -Xcompiler -march=native" fi # Check whether --enable-cuda_debug was given. @@ -3723,9 +16745,8 @@ else enable_cuda_debug=no fi -if test "x$enable_cuda_debug" != xno; then : - DEBUG_NVCCFLAGS=-G - +if test x$enable_cuda_debug != xno; then : + NVCCFLAGS="$NVCCFLAGS -G" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build information" >&5 @@ -3910,6 +16931,7 @@ fi PYINSTALLFLAGS=$with_pyinstall_flags +# Documentation @@ -5861,7 +18883,7 @@ DX_RULES="${DX_SNIPPET_doc}" #echo DX_ENV=$DX_ENV -ac_config_files="$ac_config_files user2.mk" +ac_config_files="$ac_config_files config.mk src/Makefile" cat >confcache <<\_ACEOF @@ -6429,6 +19451,7 @@ esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" +config_commands="$ac_config_commands" _ACEOF @@ -6453,7 +19476,11 @@ Usage: $0 [OPTION]... [TAG]... Configuration files: $config_files -Report bugs to the package provider." +Configuration commands: +$config_commands + +Report bugs to the package provider. +bifrost home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -6469,6 +19496,8 @@ gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' +INSTALL='$INSTALL' +AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF @@ -6561,6 +19590,391 @@ _ASBOX _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + + + + _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 @@ -6569,7 +19983,9 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 for ac_config_target in $ac_config_targets do case $ac_config_target in - "user2.mk") CONFIG_FILES="$CONFIG_FILES user2.mk" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "config.mk") CONFIG_FILES="$CONFIG_FILES config.mk" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac @@ -6582,6 +19998,7 @@ done # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -6770,7 +20187,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" -eval set X " :F $CONFIG_FILES " +eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do @@ -6904,6 +20321,10 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix # CONFIG_FILE # + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 @@ -6957,6 +20378,7 @@ s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ @@ -6980,9 +20402,724 @@ which seems to be undefined. Please make sure it is defined" >&2;} ;; + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='CXX ' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; esac + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac done # for ac_tag diff --git a/configure.ac b/configure.ac index 61c45548a..f9d6e96ac 100644 --- a/configure.ac +++ b/configure.ac @@ -1,24 +1,83 @@ -AC_INIT([bifrost], [0.9.0]) +AC_INIT([bifrost], [0.9.0], [], [], [https://github.com/ledatelescope/bifrost/]) AC_LANG(C++) AC_CONFIG_SRCDIR([src/cuda.cpp]) +AC_CONFIG_AUX_DIR([config]) + : ${CXXFLAGS="-O3 -Wall -pedantic"} +# Programs +AC_PROG_CC AC_PROG_CXX -AC_REQUIRE_CPP -AC_PROG_RANLIB +AC_PROG_AWK +AC_PROG_INSTALL +AC_PROG_LIBTOOL +AC_PROG_LN_S +AC_PROG_MAKE_SET +AX_WITH_PROG(CTAGS, ctags) +AS_IF([test x${CTAGS} = x], + [AC_MSG_ERROR([Required program ctags was not found])], + []) +AC_MSG_CHECKING([whether ${CTAGS} is exuberant]) +AS_IF([! ${CTAGS} --version | grep -q Exuberant], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([exhuberant ctags is required, but ${CTAGS} is a different version])], + [AC_MSG_RESULT([yes])]) +AC_SUBST(SO_EXT, $shrext_cmds) + +# Features +AC_C_INLINE +AC_CHECK_FUNCS([memset]) +AC_CHECK_FUNCS([rint]) +AC_CHECK_FUNCS([socket]) +AC_CHECK_FUNCS([sqrt]) +AC_CHECK_FUNCS([strerror]) +AC_CHECK_HEADERS([arpa/inet.h]) +AC_CHECK_HEADERS([netdb.h]) +AC_CHECK_HEADERS([netinet/in.h]) +AC_CHECK_HEADERS([sys/file.h]) +AC_CHECK_HEADERS([sys/ioctl.h]) +AC_CHECK_HEADERS([sys/socket.h]) +AC_CHECK_HEADER_STDBOOL +AC_FUNC_MALLOC + +AX_OPENMP + +AC_CHECK_TYPES([ptrdiff_t]) +AC_TYPE_INT16_T +AC_TYPE_INT32_T +AC_TYPE_INT64_T +AC_TYPE_INT8_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_TYPE_SSIZE_T +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT64_T +AC_TYPE_UINT8_T + +# Extras +AC_ARG_WITH([cuda_home], + [AS_HELP_STRING([--with-cuda-home], + [CUDA install path (default=/usr/local/cuda)])], + [], + [with_cuda_home=/usr/local/cuda]) +AC_SUBST(CUDA_HOME, $with_cuda_home) AC_ARG_ENABLE([cuda], [AS_HELP_STRING([--enable-cuda], [enable cuda support (default=yes)])], [], [enable_cuda=yes]) -AS_IF([test "x$enable_cuda" != xno], +AS_IF([test x$enable_cuda != xno], [AX_WITH_PROG(NVCC, nvcc) AX_WITH_PROG(NVPRUNE, nvprune) AX_WITH_PROG(CUOBJDUMP, cuobjdump) - AC_SUBST([HAVE_CUDA], [1])], - []) + AC_SUBST(HAVE_CUDA, 1) + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt"], + [AC_SUBST(HAVE_CUDA, 0)]) AC_ARG_WITH([nvcc_flags], [AS_HELP_STRING([--with-nvcc-flags], [flags to pass to NVCC (default='-O3 -Xcompiler -Wall')])], @@ -26,56 +85,36 @@ AC_ARG_WITH([nvcc_flags], [with_nvcc_flags='-O3 -Xcompiler -Wall']) AC_SUBST(NVCCFLAGS, $with_nvcc_flags) -AX_WITH_PROG(AWK, awk) - -AX_WITH_PROG(CTAGS, ctags) -AS_IF([test "x${CTAGS}" = x], - [AC_MSG_ERROR([Required program ctags was not found])], - []) -AC_MSG_CHECKING([whether ${CTAGS} is exuberant]) -AS_IF([! ${CTAGS} --version | grep -q Exuberant], - [AC_MSG_RESULT([no]) - AC_MSG_ERROR([exhuberant ctags is required, but ${CTAGS} is a different version])], - [AC_MSG_RESULT([yes])]) - -AX_OPENMP - AC_ARG_ENABLE([numa], AS_HELP_STRING([--enable-numa], [enable NUMA support (default=yes)]), [], [enable_numa=yes]) -AS_IF([test "x$enable_numa" != xno], +AS_IF([test x$enable_numa != xno], [AC_CHECK_LIB([numa], [numa_tonode_memory], - [AC_SUBST([NUMA_LIB], [-lnuma]) - AC_SUBST([NUMA_CPPFLAGS], [-DBF_NUMA_ENABLED=1])], - [])], - []) + [CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" + LIBS="$LIBS -lnuma"])]) AC_ARG_ENABLE([hwloc], AS_HELP_STRING([--enable-hwloc], [enable hwloc support (default=yes)]), [], [enable_hwloc=yes]) -AS_IF([test "x$enable_hwloc" != xno], +AS_IF([test x$enable_hwloc != xno], [AC_CHECK_LIB([hwloc], [hwloc_topology_init], - [AC_SUBST([HWLOC_LIB], [-lhwloc]) - AC_SUBST([HWLOC_CPPFLAGS], [-DBF_HWLOC_ENABLED=1])], - [])], - []) + [CPPFLAGS="$CPPFLAGS -DBF_HWLOC_ENABLED=1" + LIBS="$LIBS -lhwloc"])]) AC_ARG_ENABLE([vma], AS_HELP_STRING([--enable-vma], [enable vma support (default=no)]), [], [enable_vma=no]) -AS_IF([test "x$enable_vma" != xno], +AS_IF([test x$enable_vma != xno], [AC_CHECK_LIB([vma], [recvfrom_zcopy], - [AC_SUBST([VMA_LIB], [-lvma]) - AC_SUBST([VMA_CPPFLAGS], [-DBF_VMA_ENABLED=1])], - [])], - []) + [CPPFLAGS="$CPPFLAGS -DBF_VMA_ENABLED=1" + LIBS="$LIBS -lvma"])]) AC_ARG_WITH([gpu_archs], [AS_HELP_STRING([--with-gpu-archs=...], @@ -89,53 +128,51 @@ AC_ARG_WITH([shared_mem], [default GPU shared memory in bytes (default=16384)])], [], [with_shared_mem=16384]) -AC_SUBST(GPU_SHAREDMEM, $with_shared_mem) +AS_IF([test x$HAVE_CUDA = x1], + [NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem"]) AC_ARG_WITH([alignment], [AS_HELP_STRING([--with-alignment=N], [default memory alignment in bytes (default=4096)])], [], [with_alignment=4096]) -AC_SUBST(ALIGNMENT, $with_alignment) +CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], [enable debugging mode (default=no)])], [], [enable_debug=no]) -AS_IF([test "x$enable_debug" != xno], - [AC_SUBST(DEBUG_CPPFLAGS, [-DBF_DEBUG=1]) - AC_SUBST(DEBUG_CXXFLAGS, [-g]) - AC_SUBST(DEBUG_NVCCFLAGS, [-g])], - []) +AS_IF([test x$enable_debug != xno], + [CPPFLAGS="$CPPFLAGS -DBF_DEBUG=1" + CXXFLAGS="$CXXFLAGS -g" + NVCCFLAGS="$NVCCFLAGS -g"]) AC_ARG_ENABLE([trace], [AS_HELP_STRING([--enable-trace], [enable tracing mode for nvprof/nvvp (default=no)])], [], [enable_trace=no]) -AS_IF([test "x$enable_trace" != xno], - [AC_SUBST(TRACE_CPPFLAGS, [-DBF_TRACE_ENABLED=1])], - []) +AS_IF([test x$enable_trace != xno], + [CPPFLAGS="$CPPFLAGS -DBF_TRACE_ENABLED=1"]) AC_ARG_ENABLE([native_arch], [AS_HELP_STRING([--enable-native-arch], [enable native architecture compilation (default=yes)])], [], [enable_native_arch=yes]) -AS_IF([test "x$enable_native_arch" != xno], - [AC_SUBST(ARCH_CXXFLAGS, [-march=native]) - AC_SUBST(ARCH_NVCCFLAGS, [-Xcompiler -march=native])], - []) +AS_IF([test x$enable_native_arch != xyes], + [], + [CXXFLAGS="$CXXFLAGS -march=native" + NVCCFLAGS="$NVCCFLAGS -Xcompiler -march=native"]) AC_ARG_ENABLE([cuda_debug], [AS_HELP_STRING([--enable-cuda-debug], [enable CUDA debugging (nvcc -G; default=no)])], [], [enable_cuda_debug=no]) -AS_IF([test "x$enable_cuda_debug" != xno], - [AC_SUBST(DEBUG_NVCCFLAGS, [-G])], - []) +AS_IF([test x$enable_cuda_debug != xno], + [NVCCFLAGS="$NVCCFLAGS -G"]) AX_PYTHON @@ -153,6 +190,7 @@ AC_ARG_WITH([pyinstall_flags], []) AC_SUBST(PYINSTALLFLAGS, $with_pyinstall_flags) +# Documentation DX_DOT_FEATURE(OFF) DX_HTML_FEATURE(ON) DX_CHM_FEATURE(OFF) @@ -164,6 +202,6 @@ DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) DX_INIT_DOXYGEN([bifrost]) -AC_CONFIG_FILES([user2.mk]) +AC_CONFIG_FILES([config.mk src/Makefile]) AC_OUTPUT diff --git a/src/Makefile b/src/Makefile.in similarity index 77% rename from src/Makefile rename to src/Makefile.in index 6fcc5db97..3dcd5a92a 100644 --- a/src/Makefile +++ b/src/Makefile.in @@ -2,7 +2,26 @@ .SILENT: include ../config.mk -include ../user.mk + +CXX ?= @CXX@ +NVCC ?= @NVCC@ +LINKER ?= @LD@ +CPPFLAGS ?= @CPPFLAGS@ +CXXFLAGS ?= @CXXFLAGS@ +NVCCFLAGS ?= @NVCCFLAGS@ +LDFLAGS ?= @LDFLAGS@ @LIBS@ +DOXYGEN ?= @DX_DOXYGEN@ +PYBUILDFLAGS ?= @PYBUILDFLAGS@ +PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ + +GPU_ARCHS ?= @GPU_ARCHS@ + +GPU_SHAREDMEM ?= @GPU_SHAREDMEM@ + +CUDA_HOME ?= @CUDA_HOME@ +CUDA_LIBDIR ?= $(CUDA_HOME)/lib +CUDA_LIBDIR64 ?= $(CUDA_HOME)/lib64 +CUDA_INCDIR ?= $(CUDA_HOME)/include LIBBIFROST_OBJS = \ common.o \ @@ -19,7 +38,7 @@ LIBBIFROST_OBJS = \ unpack.o \ quantize.o \ proclog.o -ifndef NOCUDA +ifeq (HAVE_CUDA,1) # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ transpose.o \ @@ -48,7 +67,7 @@ JIT_SOURCES ?= \ MAKEFILES = ../config.mk ../user.mk Makefile -ifndef NOCUDA +ifeq (NOCUDA,0) # All CUDA archs supported by this version of nvcc GPU_ARCHS_SUPPORTED := $(shell $(NVCC) -h | grep -Po "compute_[0-9]{2}" | cut -d_ -f2 | sort | uniq) # Intersection of user-specified archs and supported archs @@ -68,54 +87,6 @@ NVCCFLAGS += -std=c++11 -Xcompiler "-fPIC" $(NVCC_GENCODE) -DBF_GPU_SHAREDMEM=$( #NVCCFLAGS += -Xcudafe "--diag_suppress=unrecognized_gcc_pragma" #NVCCFLAGS += --expt-relaxed-constexpr -ifndef NODEBUG - CPPFLAGS += -DBF_DEBUG=1 - CXXFLAGS += -g - NVCCFLAGS += -g -endif - -LIB += -lgomp - -ifdef TRACE - CPPFLAGS += -DBF_TRACE_ENABLED=1 -endif - -ifdef NUMA - # Requires libnuma-dev to be installed - LIB += -lnuma - CPPFLAGS += -DBF_NUMA_ENABLED=1 -endif - -ifdef HWLOC - # Requires libhwloc-dev to be installed - LIB += -lhwloc - CPPFLAGS += -DBF_HWLOC_ENABLED=1 -endif - -ifdef VMA - # Requires Mellanox libvma to be installed - LIB += -lvma - CPPFLAGS += -DBF_VMA_ENABLED=1 -endif - -ifdef ALIGNMENT - CPPFLAGS += -DBF_ALIGNMENT=$(ALIGNMENT) -endif - -ifdef CUDA_DEBUG - NVCCFLAGS += -G -endif - -ifndef NOCUDA - CPPFLAGS += -DBF_CUDA_ENABLED=1 - LIB += -L$(CUDA_LIBDIR64) -L$(CUDA_LIBDIR) -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt -endif - -ifndef ANY_ARCH - CXXFLAGS += -march=native - NVCCFLAGS += -Xcompiler "-march=native" -endif - LIB_DIR = ../lib INC_DIR = . CPPFLAGS += -I. -I$(INC_DIR) -I$(CUDA_INCDIR) @@ -131,11 +102,6 @@ all: $(LIBBIFROST_SO) $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h $(CLEAR_LINE) @echo -n "Generating $(LIBBIFROST_VERSION_FILE)\r" - ctags --version | grep -q "Exuberant" || {\ - echo "*************************************" && \ - echo "ERROR: Please install exuberant-ctags" && \ - echo "*************************************" && \ - false; } echo "VERS_$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) {" > $@ echo " global:" >> $@ ctags -x --c-kinds=p $^ | awk '{print " " $$1 ";"}' >> $@ @@ -147,7 +113,7 @@ ifndef NOCUDA # TODO: Need to deal with 32/64 detection here LIBCUFFT_STATIC = $(CUDA_LIBDIR64)/libcufft_static.a # All PTX archs included in the lib (typically only one) -CUFFT_PTX_ARCHS := $(shell cuobjdump --list-ptx $(LIBCUFFT_STATIC) | grep -Po "sm_[0-9]{2}" | cut -d_ -f2 | sort | uniq) +CUFFT_PTX_ARCHS := $(shell @CUOBJDUMP@ --list-ptx $(LIBCUFFT_STATIC) | grep -Po "sm_[0-9]{2}" | cut -d_ -f2 | sort | uniq) # Latest PTX arch included in the lib CUFFT_PTX_LATEST_ARCH := $(shell echo $(CUFFT_PTX_ARCHS) | rev | cut -d' ' -f1 | rev) CUFFT_STATIC_GENCODE = -gencode arch=compute_$(CUFFT_PTX_LATEST_ARCH),\"code=compute_$(CUFFT_PTX_LATEST_ARCH)\" @@ -157,7 +123,7 @@ libcufft_static_pruned.a: $(LIBCUFFT_STATIC) Makefile # E.g., We may have GPU_ARCHS="35 61" but libcufft_static might only # include sm_60 and compute_60, so we need to keep compute_60 in order # to support sm_61. - nvprune -o $@ $(NVCC_GENCODE) $(CUFFT_STATIC_GENCODE) $< + @NVPRUNE@ -o $@ $(NVCC_GENCODE) $(CUFFT_STATIC_GENCODE) $< fft_kernels.o: fft_kernels.cu fft_kernels.h Makefile # Note: This needs to be compiled with "-dc" to make CUFFT callbacks work $(NVCC) $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(GCCFLAGS)" -dc $(OUTPUT_OPTION) $< @@ -188,7 +154,7 @@ $(LIBBIFROST_SO): $(LIBBIFROST_OBJS) $(LIBBIFROST_VERSION_FILE) $(CUDA_DEVICE_LI map.o: $(JIT_SOURCES) stringify: stringify.cpp - g++ -o stringify -Wall -O3 stringify.cpp + $(CXX) -o stringify -Wall -O3 stringify.cpp %.jit: % stringify @$(CLEAR_LINE) @echo -n "Building JIT version of $<\r" diff --git a/user.mk b/user.mk deleted file mode 100644 index 49cc2a199..000000000 --- a/user.mk +++ /dev/null @@ -1,32 +0,0 @@ -CXX ?= g++ -NVCC ?= nvcc -LINKER ?= g++ -CPPFLAGS ?= -CXXFLAGS ?= -O3 -Wall -pedantic -NVCCFLAGS ?= -O3 -Xcompiler "-Wall" #-Xptxas -v -LDFLAGS ?= -DOXYGEN ?= doxygen -PYBUILDFLAGS ?= -PYINSTALLFLAGS ?= - -#GPU_ARCHS ?= 30 32 35 37 50 52 53 # Nap time! -#GPU_ARCHS ?= 35 52 -GPU_ARCHS ?= 35 61 - -GPU_SHAREDMEM ?= 16384 # GPU shared memory size - -CUDA_HOME ?= /usr/local/cuda -CUDA_LIBDIR ?= $(CUDA_HOME)/lib -CUDA_LIBDIR64 ?= $(CUDA_HOME)/lib64 -CUDA_INCDIR ?= $(CUDA_HOME)/include - -ALIGNMENT ?= 4096 # Memory allocation alignment - -#NODEBUG = 1 # Disable debugging mode (use this for production releases) -#TRACE = 1 # Enable tracing mode (generates annotations for use with nvprof/nvvp) -#NOCUDA = 1 # Disable CUDA support -#ANY_ARCH = 1 # Disable native architecture compilation -#CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) -#NUMA = 1 # Enable use of numa library for setting affinity of ring memory -#HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture -#VMA = 1 # Enable use of Mellanox libvma in udp_capture From d9f09b4f9bd7571bcb322139677b2bb3fd336421 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 16:24:42 -0600 Subject: [PATCH 0236/1155] Run configure first. --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 43cd5d1fb..9d17b8cad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,7 +45,8 @@ script: git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ coveralls \ codecov - - sudo make -j NOCUDA=1 + - sudo ./configure --disable-cuda + - sudo make -j - sudo make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - cd test && sudo -E bash ./travis.sh && cd .. From 5c46a6e8654265ba38e79ca2a5e715e573721148 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 19:23:25 -0600 Subject: [PATCH 0237/1155] Closer. --- Makefile | 1 - config.mk.in | 4 +- configure | 4453 +++++++++++++++++++++++++++++------------------ configure.ac | 20 +- src/Makefile.in | 6 +- 5 files changed, 2825 insertions(+), 1659 deletions(-) diff --git a/Makefile b/Makefile index 6ec05752c..bb75f0c09 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ include config.mk -include user.mk LIB_DIR = lib INC_DIR = src diff --git a/config.mk.in b/config.mk.in index dbe9d97c2..415e7633c 100644 --- a/config.mk.in +++ b/config.mk.in @@ -3,11 +3,11 @@ ifndef OS endif ifeq ($(OS),Linux) - SO_EXT = @SO_EXT@ + SO_EXT = .so SHARED_FLAG = -shared SONAME_FLAG = -soname else ifeq ($(OS),Darwin) - SO_EXT = .dylib + SO_EXT = .dylib SHARED_FLAG = -dynamiclib SONAME_FLAG = -install_name #else ifeq ($(OS),Windows_NT) diff --git a/configure b/configure index 0679cb724..12f64ff20 100755 --- a/configure +++ b/configure @@ -676,15 +676,19 @@ PYTHON_INCLUDE_DIR PYTHON_BIN GPU_ARCHS NVCCFLAGS -HAVE_CUDA CUOBJDUMP NVPRUNE NVCC +HAVE_CUDA CUDA_HOME LIBOBJS +HAVE_CXX11 SO_EXT CTAGS SET_MAKE +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM CXXCPP CPP LT_SYS_LIBRARY_PATH @@ -694,8 +698,12 @@ LIPO NMEDIT DSYMUTIL MANIFEST_TOOL +AWK RANLIB STRIP +ac_ct_CXX +CXXFLAGS +CXX ac_ct_AR AR DLLTOOL @@ -709,6 +717,13 @@ FGREP EGREP GREP SED +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC host_os host_vendor host_cpu @@ -718,20 +733,6 @@ build_vendor build_cpu build LIBTOOL -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -AWK -ac_ct_CXX -CXXFLAGS -CXX -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC target_alias host_alias build_alias @@ -751,7 +752,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -869,7 +869,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1122,15 +1121,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1268,7 +1258,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1421,7 +1411,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -2761,6 +2750,171 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. : ${CXXFLAGS="-O3 -Wall -pedantic"} # Programs +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -3550,408 +3704,290 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - CXX=$ac_ct_CXX + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi +else + ac_cv_path_SED=$SED fi - fi fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + ac_cv_path_GREP=$GREP fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" - test -n "$AWK" && break -done -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac + $ac_path_EGREP_found && break 3 + done + done done IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi -rm -rf conftest.one conftest.two conftest.dir - + fi fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi +else + ac_cv_path_FGREP=$FGREP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' +test -z "$GREP" && GREP=grep -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac -macro_version='2.4.6' -macro_revision='2.4.6' @@ -3965,134 +4001,110 @@ macro_revision='2.4.6' -ltmain=$ac_aux_dir/ltmain.sh -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - + with_gnu_ld=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' +LD=$lt_cv_path_LD +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld @@ -4102,412 +4114,507 @@ esac - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi done + IFS=$lt_save_ifs done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED + : ${lt_cv_path_NM=no} fi - fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } else - ac_cv_path_EGREP=$EGREP + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" + test -n "$ac_ct_DUMPBIN" && break +done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + DUMPBIN=$ac_ct_DUMPBIN fi -else - ac_cv_path_FGREP=$FGREP fi - fi + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" +test -z "$NM" && NM=nm -test -z "$GREP" && GREP=grep +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +fi +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset else - with_gnu_ld=no + lt_unset=false fi -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac ;; - esac -elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + fi -if ${lt_cv_path_LD+:} false; then : + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac @@ -4517,92 +4624,27 @@ with_gnu_ld=$lt_cv_prog_gnu_ld -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi done done @@ -4610,32 +4652,28 @@ IFS=$as_save_IFS fi fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$DUMPBIN" && break - done fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -4644,7 +4682,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -4654,21 +4692,17 @@ IFS=$as_save_IFS fi fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) @@ -4676,348 +4710,255 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - DUMPBIN=$ac_ct_DUMPBIN + OBJDUMP=$ac_ct_OBJDUMP fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi +test -z "$OBJDUMP" && OBJDUMP=objdump - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi -fi -test -z "$NM" && NM=nm -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else - i=0 - teststring=ABCD - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; +beos*) + lt_cv_deplibs_check_method=pass_all + ;; - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac + ;; -fi - -if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' +tpf*) + lt_cv_deplibs_check_method=pass_all ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' +os2*) + lt_cv_deplibs_check_method=pass_all ;; esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -fi -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test yes != "$GCC"; then - reload_cmds=false - fi - ;; - darwin*) - if test yes = "$GCC"; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac @@ -5028,15 +4969,15 @@ esac if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : +if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5045,7 +4986,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5055,10 +4996,10 @@ IFS=$as_save_IFS fi fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -5066,17 +5007,17 @@ fi fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5085,7 +5026,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" + ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5095,17 +5036,17 @@ IFS=$as_save_IFS fi fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) @@ -5113,13 +5054,13 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - OBJDUMP=$ac_ct_OBJDUMP + DLLTOOL=$ac_ct_DLLTOOL fi else - OBJDUMP="$ac_cv_prog_OBJDUMP" + DLLTOOL="$ac_cv_prog_DLLTOOL" fi -test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$DLLTOOL" && DLLTOOL=dlltool @@ -5129,258 +5070,66 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. + lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; +esac -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -os2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : +if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5389,7 +5138,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5399,28 +5148,32 @@ IFS=$as_save_IFS fi fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi + test -n "$CXX" && break + done fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : +if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5429,7 +5182,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" + ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5439,17 +5192,21 @@ IFS=$as_save_IFS fi fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) @@ -5457,60 +5214,157 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - DLLTOOL=$ac_ct_DLLTOOL + CXX=$ac_ct_CXX fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" fi -test -z "$DLLTOOL" && DLLTOOL=dlltool - + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 else - lt_cv_sharedlib_from_linklib_cmd='unknown' + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then @@ -5925,6 +5779,48 @@ esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done @@ -7367,16 +7263,11 @@ $as_echo "$lt_cv_ld_force_load" >&6; } _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[012][,.]*) + darwin*) + case ${MACOSX_DEPLOYMENT_TARGET},$host in + 10.[012],*|,*powerpc*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) + *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; @@ -8951,9 +8842,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie openbsd* | bitrig*) with_gnu_ld=no ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs=no - ;; esac ld_shlibs=yes @@ -9208,7 +9096,7 @@ _LT_EOF fi ;; - netbsd* | netbsdelf*-gnu) + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -9878,7 +9766,6 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi - link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' @@ -9900,7 +9787,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } esac ;; - netbsd* | netbsdelf*-gnu) + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else @@ -11015,18 +10902,6 @@ fi dynamic_linker='GNU/Linux ld.so' ;; -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - netbsd*) version_type=sunos need_lib_prefix=no @@ -13921,7 +13796,7 @@ lt_prog_compiler_static_CXX= ;; esac ;; - netbsd* | netbsdelf*-gnu) + netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise @@ -14296,9 +14171,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie ;; esac ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs_CXX=no - ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; @@ -14992,18 +14864,6 @@ fi dynamic_linker='GNU/Linux ld.so' ;; -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - netbsd*) version_type=sunos need_lib_prefix=no @@ -15267,90 +15127,1022 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test yes = "$hardcode_automatic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif - # We can hardcode non-existent directories. - if test no != "$hardcode_direct_CXX" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && - test no != "$hardcode_minus_L_CXX"; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported + ac_compiler_gnu=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu -if test relink = "$hardcode_action_CXX" || - test yes = "$inherit_rpath_CXX"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test yes != "$_lt_caught_CXX_error" - + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + test -n "$AWK" && break +done +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + done +IFS=$as_save_IFS +rm -rf conftest.one conftest.two conftest.dir +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 @@ -15586,6 +16378,364 @@ _ACEOF ;; esac + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + + + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX11=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +$as_echo "#define HAVE_CXX11 1" >>confdefs.h + + fi + + for ac_func in memset do : ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" @@ -15938,6 +17088,7 @@ $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi +CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : @@ -16144,7 +17295,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16193,7 +17345,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16275,7 +17428,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16324,7 +17478,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16406,7 +17561,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16455,7 +17611,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +for as_dir in HAVE_CUDA=0 + do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -16493,15 +17650,15 @@ fi - HAVE_CUDA=1 - - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" else HAVE_CUDA=0 fi +if test x$HAVE_CUDA = x1; then : + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" +fi # Check whether --with-nvcc_flags was given. if test "${with_nvcc_flags+set}" = set; then : @@ -17232,7 +18389,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17394,7 +18551,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17448,7 +18605,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17502,7 +18659,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17556,7 +18713,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17721,7 +18878,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17775,10 +18932,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -17835,7 +18992,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18308,7 +19465,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18883,6 +20040,9 @@ DX_RULES="${DX_SNIPPET_doc}" #echo DX_ENV=$DX_ENV +CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" +NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" + ac_config_files="$ac_config_files config.mk src/Makefile" @@ -20424,6 +21584,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. diff --git a/configure.ac b/configure.ac index f9d6e96ac..0af5d4111 100644 --- a/configure.ac +++ b/configure.ac @@ -7,6 +7,7 @@ AC_CONFIG_AUX_DIR([config]) : ${CXXFLAGS="-O3 -Wall -pedantic"} # Programs +LT_INIT AC_PROG_CC AC_PROG_CXX AC_PROG_AWK @@ -28,6 +29,7 @@ AC_SUBST(SO_EXT, $shrext_cmds) # Features AC_C_INLINE +AX_CXX_COMPILE_STDCXX(11, noext, mandatory) AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) @@ -43,6 +45,7 @@ AC_CHECK_HEADER_STDBOOL AC_FUNC_MALLOC AX_OPENMP +CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" AC_CHECK_TYPES([ptrdiff_t]) AC_TYPE_INT16_T @@ -70,14 +73,14 @@ AC_ARG_ENABLE([cuda], [], [enable_cuda=yes]) AS_IF([test x$enable_cuda != xno], - [AX_WITH_PROG(NVCC, nvcc) - AX_WITH_PROG(NVPRUNE, nvprune) - AX_WITH_PROG(CUOBJDUMP, cuobjdump) - AC_SUBST(HAVE_CUDA, 1) - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt"], + [AX_WITH_PROG(NVCC, nvcc, [], [AC_SUBST(HAVE_CUDA, 0)]) + AX_WITH_PROG(NVPRUNE, nvprune, [], [AC_SUBST(HAVE_CUDA, 0)]) + AX_WITH_PROG(CUOBJDUMP, cuobjdump, [], [AC_SUBST(HAVE_CUDA, 0)])], [AC_SUBST(HAVE_CUDA, 0)]) +AS_IF([test x$HAVE_CUDA = x1], + [CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt"]) AC_ARG_WITH([nvcc_flags], [AS_HELP_STRING([--with-nvcc-flags], [flags to pass to NVCC (default='-O3 -Xcompiler -Wall')])], @@ -202,6 +205,9 @@ DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) DX_INIT_DOXYGEN([bifrost]) +CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" +NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" + AC_CONFIG_FILES([config.mk src/Makefile]) AC_OUTPUT diff --git a/src/Makefile.in b/src/Makefile.in index 3dcd5a92a..f28ef7c15 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -65,7 +65,7 @@ JIT_SOURCES ?= \ ShapeIndexer.cuh.jit \ int_fastdiv.h.jit -MAKEFILES = ../config.mk ../user.mk Makefile +MAKEFILES = ../config.mk Makefile ifeq (NOCUDA,0) # All CUDA archs supported by this version of nvcc @@ -81,8 +81,8 @@ NVCC_GENCODE ?= $(foreach arch, $(GPU_ARCHS_VALID), \ -gencode arch=compute_$(GPU_ARCH_LATEST),\"code=compute_$(GPU_ARCH_LATEST)\" endif -CXXFLAGS += -std=c++11 -fPIC -fopenmp -NVCCFLAGS += -std=c++11 -Xcompiler "-fPIC" $(NVCC_GENCODE) -DBF_GPU_SHAREDMEM=$(GPU_SHAREDMEM) +CXXFLAGS += -std=c++11 +NVCCFLAGS += -std=c++11 $(NVCC_GENCODE) -DBF_GPU_SHAREDMEM=$(GPU_SHAREDMEM) #NVCCFLAGS += -Xcudafe "--diag_suppress=unrecognized_gcc_pragma" #NVCCFLAGS += --expt-relaxed-constexpr From 17a8aef22466e2bfe6bed92e6fbd0bf5fdef4eb9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 19:23:53 -0600 Subject: [PATCH 0238/1155] Missing include according to clang. --- src/assert.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/assert.hpp b/src/assert.hpp index 1328fc1db..1acc135a0 100644 --- a/src/assert.hpp +++ b/src/assert.hpp @@ -31,6 +31,7 @@ #include +#include #include class BFexception : public std::runtime_error { From b88dc1342b71ab370a7681cbb5ea61c6d2f91808 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 19:39:15 -0600 Subject: [PATCH 0239/1155] CUDA fixes. --- configure | 27 +++++++++++++++------------ configure.ac | 30 ++++++++++++++++-------------- src/Makefile.in | 4 ++-- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/configure b/configure index 12f64ff20..38b685800 100755 --- a/configure +++ b/configure @@ -1449,13 +1449,13 @@ Optional Features: --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) - --enable-cuda enable cuda support (default=yes) + --disable-cuda disable cuda support (default=no) --enable-numa enable NUMA support (default=yes) --enable-hwloc enable hwloc support (default=yes) --enable-vma enable vma support (default=no) --enable-debug enable debugging mode (default=no) --enable-trace enable tracing mode for nvprof/nvvp (default=no) - --enable-native-arch enable native architecture compilation (default=yes) + --disable-native-arch disable native architecture compilation (default=no) --enable-cuda-debug enable CUDA debugging (nvcc -G; default=no) --disable-doxygen-doc don't generate any doxygen documentation --enable-doxygen-dot generate graphics for doxygen documentation @@ -1487,12 +1487,12 @@ Optional Packages: --with-cuobjdump=[PATH] absolute path to cuobjdump executable --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler - -Wall') + "-Wall"') --with-gpu-archs=... default GPU architectures (default='35 61') --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) --with-pybuild-flags build flags for python (default='') - --with-pyintall-flags install flags for python (default='') + --with-pyinstall-flags install flags for python (default='') Some influential environment variables: CC C compiler command @@ -17088,7 +17088,10 @@ $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi -CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +if test x$HAVE_OPENMP != x1; then : + CPPFLAGS="$CPPFLAGS -DBF_NO_OPENMP=1" + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : @@ -17245,7 +17248,7 @@ CUDA_HOME=$with_cuda_home # Check whether --enable-cuda was given. if test "${enable_cuda+set}" = set; then : - enableval=$enable_cuda; + enableval=$enable_cuda; enable_cuda=no else enable_cuda=yes fi @@ -17664,7 +17667,7 @@ fi if test "${with_nvcc_flags+set}" = set; then : withval=$with_nvcc_flags; else - with_nvcc_flags='-O3 -Xcompiler -Wall' + with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi NVCCFLAGS=$with_nvcc_flags @@ -17859,7 +17862,7 @@ CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; + enableval=$enable_debug; enable_debug=yes else enable_debug=no fi @@ -17872,7 +17875,7 @@ fi # Check whether --enable-trace was given. if test "${enable_trace+set}" = set; then : - enableval=$enable_trace; + enableval=$enable_trace; enable_trace=yes else enable_trace=no fi @@ -17883,7 +17886,7 @@ fi # Check whether --enable-native_arch was given. if test "${enable_native_arch+set}" = set; then : - enableval=$enable_native_arch; + enableval=$enable_native_arch; enable_native_arch=no else enable_native_arch=yes fi @@ -17892,12 +17895,12 @@ if test x$enable_native_arch != xyes; then : else CXXFLAGS="$CXXFLAGS -march=native" - NVCCFLAGS="$NVCCFLAGS -Xcompiler -march=native" + NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" fi # Check whether --enable-cuda_debug was given. if test "${enable_cuda_debug+set}" = set; then : - enableval=$enable_cuda_debug; + enableval=$enable_cuda_debug; enable_cuda_debug=yes else enable_cuda_debug=no fi diff --git a/configure.ac b/configure.ac index 0af5d4111..a904375d4 100644 --- a/configure.ac +++ b/configure.ac @@ -45,7 +45,9 @@ AC_CHECK_HEADER_STDBOOL AC_FUNC_MALLOC AX_OPENMP -CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +AS_IF([test x$HAVE_OPENMP != x1], + [CPPFLAGS="$CPPFLAGS -DBF_NO_OPENMP=1" + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"]) AC_CHECK_TYPES([ptrdiff_t]) AC_TYPE_INT16_T @@ -68,9 +70,9 @@ AC_ARG_WITH([cuda_home], [with_cuda_home=/usr/local/cuda]) AC_SUBST(CUDA_HOME, $with_cuda_home) AC_ARG_ENABLE([cuda], - [AS_HELP_STRING([--enable-cuda], - [enable cuda support (default=yes)])], - [], + [AS_HELP_STRING([--disable-cuda], + [disable cuda support (default=no)])], + [enable_cuda=no], [enable_cuda=yes]) AS_IF([test x$enable_cuda != xno], [AX_WITH_PROG(NVCC, nvcc, [], [AC_SUBST(HAVE_CUDA, 0)]) @@ -83,9 +85,9 @@ AS_IF([test x$HAVE_CUDA = x1], LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt"]) AC_ARG_WITH([nvcc_flags], [AS_HELP_STRING([--with-nvcc-flags], - [flags to pass to NVCC (default='-O3 -Xcompiler -Wall')])], + [flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"')])], [], - [with_nvcc_flags='-O3 -Xcompiler -Wall']) + [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) AC_SUBST(NVCCFLAGS, $with_nvcc_flags) @@ -144,7 +146,7 @@ CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], [enable debugging mode (default=no)])], - [], + [enable_debug=yes], [enable_debug=no]) AS_IF([test x$enable_debug != xno], [CPPFLAGS="$CPPFLAGS -DBF_DEBUG=1" @@ -154,25 +156,25 @@ AS_IF([test x$enable_debug != xno], AC_ARG_ENABLE([trace], [AS_HELP_STRING([--enable-trace], [enable tracing mode for nvprof/nvvp (default=no)])], - [], + [enable_trace=yes], [enable_trace=no]) AS_IF([test x$enable_trace != xno], [CPPFLAGS="$CPPFLAGS -DBF_TRACE_ENABLED=1"]) AC_ARG_ENABLE([native_arch], - [AS_HELP_STRING([--enable-native-arch], - [enable native architecture compilation (default=yes)])], - [], + [AS_HELP_STRING([--disable-native-arch], + [disable native architecture compilation (default=no)])], + [enable_native_arch=no], [enable_native_arch=yes]) AS_IF([test x$enable_native_arch != xyes], [], [CXXFLAGS="$CXXFLAGS -march=native" - NVCCFLAGS="$NVCCFLAGS -Xcompiler -march=native"]) + NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\""]) AC_ARG_ENABLE([cuda_debug], [AS_HELP_STRING([--enable-cuda-debug], [enable CUDA debugging (nvcc -G; default=no)])], - [], + [enable_cuda_debug=yes], [enable_cuda_debug=no]) AS_IF([test x$enable_cuda_debug != xno], [NVCCFLAGS="$NVCCFLAGS -G"]) @@ -187,7 +189,7 @@ AC_ARG_WITH([pybuild_flags], AC_SUBST(PYBUILDFLAGS, $with_pybuild_flags) AC_ARG_WITH([pyinstall_flags], - [AS_HELP_STRING([--with-pyintall-flags], + [AS_HELP_STRING([--with-pyinstall-flags], [install flags for python (default='')])], [], []) diff --git a/src/Makefile.in b/src/Makefile.in index f28ef7c15..c5e724fda 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -67,7 +67,7 @@ JIT_SOURCES ?= \ MAKEFILES = ../config.mk Makefile -ifeq (NOCUDA,0) +ifeq (HAVE_CUDA,1) # All CUDA archs supported by this version of nvcc GPU_ARCHS_SUPPORTED := $(shell $(NVCC) -h | grep -Po "compute_[0-9]{2}" | cut -d_ -f2 | sort | uniq) # Intersection of user-specified archs and supported archs @@ -109,7 +109,7 @@ $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h echo " *;" >> $@ echo "};" >> $@ -ifndef NOCUDA +ifeq (HAVE_CUDA,1) # TODO: Need to deal with 32/64 detection here LIBCUFFT_STATIC = $(CUDA_LIBDIR64)/libcufft_static.a # All PTX archs included in the lib (typically only one) From b241ccb9c3392297af3bf22791b4ba49246f9bb8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Oct 2021 19:42:02 -0600 Subject: [PATCH 0240/1155] CUDA fixes. --- src/Makefile.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Makefile.in b/src/Makefile.in index c5e724fda..80d9fc2d2 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -14,6 +14,8 @@ DOXYGEN ?= @DX_DOXYGEN@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ +HAVE_CUDA ?= @HAVE_CUDA@ + GPU_ARCHS ?= @GPU_ARCHS@ GPU_SHAREDMEM ?= @GPU_SHAREDMEM@ From 42bf33e57bafd2ed5de23055baa9a1685003b4c3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 08:11:52 -0600 Subject: [PATCH 0241/1155] More OpenMP cleanup and linking cleanup. --- config.mk.in | 8 +++---- configure | 63 ++++++++++++++++++++++++++++++++----------------- configure.ac | 14 +++++++++-- src/Makefile.in | 14 +++++++---- 4 files changed, 66 insertions(+), 33 deletions(-) diff --git a/config.mk.in b/config.mk.in index 415e7633c..a8ed1d807 100644 --- a/config.mk.in +++ b/config.mk.in @@ -21,11 +21,11 @@ PREFIX_DIR = @prefix@ INSTALL_LIB_DIR = @LIBDIR@ INSTALL_INC_DIR = @includedir@ -BIFROST_NAME = @PACKAGE_NAME@ +BIFROST_NAME = bifrost LIBBIFROST_NAME = lib$(BIFROST_NAME) -LIBBIFROST_MAJOR = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $1}') -LIBBIFROST_MINOR = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $2}') -LIBBIFROST_PATCH = $(shell echo @PACKAGE_VERSION@ | awk -F . '{print $3}') +LIBBIFROST_MAJOR = 0 +LIBBIFROST_MINOR = 9 +LIBBIFROST_PATCH = 0 LIBBIFROST_SO = $(LIBBIFROST_NAME)$(SO_EXT) LIBBIFROST_SO_MAJ = $(LIBBIFROST_SO).$(LIBBIFROST_MAJOR) LIBBIFROST_SO_MAJ_MIN = $(LIBBIFROST_SO_MAJ).$(LIBBIFROST_MINOR) diff --git a/configure b/configure index 38b685800..6fe76436b 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. +# Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -585,13 +585,14 @@ MFLAGS= MAKEFLAGS= # Identity of this package. -PACKAGE_NAME='bifrost' -PACKAGE_TARNAME='bifrost' -PACKAGE_VERSION='0.9.0' -PACKAGE_STRING='bifrost 0.9.0' -PACKAGE_BUGREPORT='' -PACKAGE_URL='https://github.com/ledatelescope/bifrost/' - +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="bifrost" ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ @@ -681,6 +682,7 @@ NVPRUNE NVCC HAVE_CUDA CUDA_HOME +HAVE_MMSG LIBOBJS HAVE_CXX11 SO_EXT @@ -871,7 +873,7 @@ sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' @@ -1371,7 +1373,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bifrost 0.9.0 to adapt to many kinds of systems. +\`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1419,7 +1421,7 @@ Fine tuning of the installation directories: --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/bifrost] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1435,9 +1437,7 @@ _ACEOF fi if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of bifrost 0.9.0:";; - esac + cat <<\_ACEOF Optional Features: @@ -1519,7 +1519,6 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. -bifrost home page: . _ACEOF ac_status=$? fi @@ -1582,7 +1581,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bifrost configure 0.9.0 +configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2361,7 +2360,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bifrost $as_me 0.9.0, which was +It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -17089,7 +17088,7 @@ $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi if test x$HAVE_OPENMP != x1; then : - CPPFLAGS="$CPPFLAGS -DBF_NO_OPENMP=1" + CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" fi @@ -17235,6 +17234,27 @@ _ACEOF esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sys/socket.h supports recvmmsg" >&5 +$as_echo_n "checking if sys/socket.h supports recvmmsg... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + int main(void) { + struct mmsghdr *mmsg = NULL; + return 0; + } +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_MMSG=1 + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # Extras # Check whether --with-cuda_home was given. @@ -20591,7 +20611,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bifrost $as_me 0.9.0, which was +This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20642,14 +20662,13 @@ $config_files Configuration commands: $config_commands -Report bugs to the package provider. -bifrost home page: ." +Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -bifrost config.status 0.9.0 +config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index a904375d4..9e8a65f1d 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([bifrost], [0.9.0], [], [], [https://github.com/ledatelescope/bifrost/]) +AC_INIT([bifrost], [], [], [], [https://github.com/ledatelescope/bifrost/]) AC_LANG(C++) AC_CONFIG_SRCDIR([src/cuda.cpp]) @@ -46,7 +46,7 @@ AC_FUNC_MALLOC AX_OPENMP AS_IF([test x$HAVE_OPENMP != x1], - [CPPFLAGS="$CPPFLAGS -DBF_NO_OPENMP=1" + [CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"]) AC_CHECK_TYPES([ptrdiff_t]) @@ -62,6 +62,16 @@ AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_UINT8_T +AC_MSG_CHECKING([if sys/socket.h supports recvmmsg]) +AC_COMPILE_IFELSE([#include + int main(void) { + struct mmsghdr *mmsg = NULL; + return 0; + }], + [AC_MSG_RESULT([yes]) + AC_SUBST(HAVE_MMSG, 1)], + [AC_MSG_RESULT([no])]) + # Extras AC_ARG_WITH([cuda_home], [AS_HELP_STRING([--with-cuda-home], diff --git a/src/Makefile.in b/src/Makefile.in index 80d9fc2d2..8d9f2307d 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -5,7 +5,7 @@ include ../config.mk CXX ?= @CXX@ NVCC ?= @NVCC@ -LINKER ?= @LD@ +LINKER ?= @CXX@ CPPFLAGS ?= @CPPFLAGS@ CXXFLAGS ?= @CXXFLAGS@ NVCCFLAGS ?= @NVCCFLAGS@ @@ -15,6 +15,7 @@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ HAVE_CUDA ?= @HAVE_CUDA@ +HAVE_MMSG ?= @HAVE_MMSG@ GPU_ARCHS ?= @GPU_ARCHS@ @@ -33,13 +34,16 @@ LIBBIFROST_OBJS = \ ring.o \ ring_impl.o \ array.o \ - address.o \ - udp_socket.o \ - udp_capture.o \ - udp_transmit.o \ unpack.o \ quantize.o \ proclog.o +ifeq (HAVE_MMSG,1) + LIBBIFROST_OBJS += \ + address.o \ + udp_socket.o \ + udp_capture.o \ + udp_transmit.o +endif ifeq (HAVE_CUDA,1) # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ From 96fa33a15f8ec1f2df12af7caa94eff9563701ba Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 08:13:21 -0600 Subject: [PATCH 0242/1155] BF_OPENMP support toggle. --- src/affinity.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/affinity.cpp b/src/affinity.cpp index 36030c486..00e499ccf 100644 --- a/src/affinity.cpp +++ b/src/affinity.cpp @@ -30,7 +30,13 @@ #include #include "assert.hpp" +#ifndef BF_OPENMP +#define BF_OPENMP 1 +#endif + +#if BF_OPENMP == 1 #include +#endif #include //#include @@ -73,6 +79,7 @@ BFstatus bfAffinitySetCore(int core) { #endif } BFstatus bfAffinityGetCore(int* core) { +#if defined __linux__ && __linux__ BF_ASSERT(core, BF_STATUS_INVALID_POINTER); pthread_t tid = pthread_self(); cpu_set_t cpuset; @@ -95,9 +102,14 @@ BFstatus bfAffinityGetCore(int* core) { } // No cores are set! (Not sure if this is possible) return BF_STATUS_INVALID_STATE; +#else +#warning CPU core binding/affinity not supported on this OS + return BF_STATUS_UNSUPPORTED; +#endif } BFstatus bfAffinitySetOpenMPCores(BFsize nthread, const int* thread_cores) { +#if BF_OPENMP == 1 int host_core = -1; // TODO: Check these for errors bfAffinityGetCore(&host_core); @@ -109,4 +121,8 @@ BFstatus bfAffinitySetOpenMPCores(BFsize nthread, bfAffinitySetCore(thread_cores[tid]); } return bfAffinitySetCore(host_core); +#else +#warning CPU core binding/affinity not supported on this OS + return BF_STATUS_UNSUPPORTED; +#endif } From c20e8ed1aa4d7fde2821ad0a885ff87d8e016a87 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 09:57:51 -0600 Subject: [PATCH 0243/1155] Will this work? --- config.mk.in | 5 +++-- src/Makefile.in | 7 ++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/config.mk.in b/config.mk.in index a8ed1d807..bedcb1880 100644 --- a/config.mk.in +++ b/config.mk.in @@ -17,8 +17,9 @@ else endif -PREFIX_DIR = @prefix@ -INSTALL_LIB_DIR = @LIBDIR@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +INSTALL_LIB_DIR = @libdir@ INSTALL_INC_DIR = @includedir@ BIFROST_NAME = bifrost diff --git a/src/Makefile.in b/src/Makefile.in index 8d9f2307d..dcf82fad0 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -144,12 +144,17 @@ else CUDA_DEVICE_LINK_OBJ = endif +WLFLAGS ?= $(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) +ifeq ($(OS),Linux) + WLFLAGS = --version-script=$(LIBBIFROST_VERSION_FILE),$(WLFLAGS) +endif + # Note: $(LIB) must go at after OBJS $(LIBBIFROST_SO): $(LIBBIFROST_OBJS) $(LIBBIFROST_VERSION_FILE) $(CUDA_DEVICE_LINK_OBJ) $(CLEAR_LINE) @echo -n "Linking $(LIBBIFROST_SO_NAME)\r" mkdir -p $(LIB_DIR) - $(LINKER) $(SHARED_FLAG) -Wl,--version-script=$(LIBBIFROST_VERSION_FILE),$(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) -o $@ $(LIBBIFROST_OBJS) $(CUDA_DEVICE_LINK_OBJ) $(LIB) $(LDFLAGS) + $(LINKER) $(SHARED_FLAG) -Wl,$(WLFLAGS) -o $@ $(LIBBIFROST_OBJS) $(CUDA_DEVICE_LINK_OBJ) $(LIB) $(LDFLAGS) ln -s -f $(LIBBIFROST_SO_NAME) $(LIBBIFROST_SO_STEM).$(LIBBIFROST_MAJOR) ln -s -f $(LIBBIFROST_SO_NAME) $(LIBBIFROST_SO_STEM) $(CLEAR_LINE) From 2e5a7713939ad3248b06dbb9e0092b58644255a5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 10:55:23 -0600 Subject: [PATCH 0244/1155] Worked on bringing affinity to mac. --- src/affinity.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 5 deletions(-) diff --git a/src/affinity.cpp b/src/affinity.cpp index 00e499ccf..a547f0ebc 100644 --- a/src/affinity.cpp +++ b/src/affinity.cpp @@ -43,9 +43,77 @@ #include #include +#if defined __APPLE__ && __APPLE__ + +// Based on information from: +// http://www.hybridkernel.com/2015/01/18/binding_threads_to_cores_osx.html + +#include +#include +#include +#include +#include + +typedef struct cpu_set { + uint32_t count; +} cpu_set_t; + +static inline void +CPU_ZERO(cpu_set_t *cs) { cs->count = 0; } + +static inline void +CPU_SET(int num, cpu_set_t *cs) { cs->count |= (1 << num); } + +static inline int +CPU_ISSET(int num, cpu_set_t *cs) { return (cs->count & (1 << num)); } + +static inline int +CPU_COUNT(cpu_set_t *cs) { + int count = 0; + for(int i=0; i<8*sizeof(cpu_set_t); i++) { + count += CPU_ISSET(i, cs); + } + return count; +} + +int pthread_getaffinity_np(pthread_t thread, + size_t cpu_size, + cpu_set_t *cpu_set) { + thread_port_t mach_thread; + mach_msg_type_number_t count; + boolean_t get_default; + + thread_affinity_policy_data_t policy; + mach_thread = pthread_mach_thread_np(thread); + thread_policy_get(mach_thread, THREAD_AFFINITY_POLICY, + (thread_policy_t)&policy, &count, + &get_default); + + cpu_set->count |= (1<<(policy.affinity_tag)); + return 0; +} + +int pthread_setaffinity_np(pthread_t thread, + size_t cpu_size, + cpu_set_t *cpu_set) { + thread_port_t mach_thread; + int core = 0; + + for (core=0; core<8*cpu_size; core++) { + if (CPU_ISSET(core, cpu_set)) break; + } + thread_affinity_policy_data_t policy = { core }; + mach_thread = pthread_mach_thread_np(thread); + thread_policy_set(mach_thread, THREAD_AFFINITY_POLICY, + (thread_policy_t)&policy, 1); + return 0; +} + +#endif + // Note: Pass core_id = -1 to unbind BFstatus bfAffinitySetCore(int core) { -#if defined __linux__ && __linux__ +#if (defined __linux__ && __linux__) || (defined __APPLE__ && __APPLE__) // Check for valid core int ncore = sysconf(_SC_NPROCESSORS_ONLN); BF_ASSERT(core >= -1 && core < ncore, BF_STATUS_INVALID_ARGUMENT); @@ -75,11 +143,11 @@ BFstatus bfAffinitySetCore(int core) { } #else #warning CPU core binding/affinity not supported on this OS - return BF_STATUS_UNSUPPORTED; + return BF_STATUS_UNSUPPORTED; #endif } BFstatus bfAffinityGetCore(int* core) { -#if defined __linux__ && __linux__ +#if (defined __linux__ && __linux__) || (defined __APPLE__ && __APPLE__) BF_ASSERT(core, BF_STATUS_INVALID_POINTER); pthread_t tid = pthread_self(); cpu_set_t cpuset; @@ -104,7 +172,7 @@ BFstatus bfAffinityGetCore(int* core) { return BF_STATUS_INVALID_STATE; #else #warning CPU core binding/affinity not supported on this OS - return BF_STATUS_UNSUPPORTED; + return BF_STATUS_UNSUPPORTED; #endif } BFstatus bfAffinitySetOpenMPCores(BFsize nthread, @@ -122,7 +190,6 @@ BFstatus bfAffinitySetOpenMPCores(BFsize nthread, } return bfAffinitySetCore(host_core); #else -#warning CPU core binding/affinity not supported on this OS return BF_STATUS_UNSUPPORTED; #endif } From 1cff6cb6dcc87e01eff0685902511a183e5210ca Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 11:32:59 -0600 Subject: [PATCH 0245/1155] Even more cleanup. --- .gitignore | 9 + Makefile => Makefile.in | 13 +- config/libtool.m4 | 8364 ++++++++++++++++++++++++++++++ config/ltoptions.m4 | 437 ++ config/ltsugar.m4 | 124 + config/ltversion.m4 | 23 + config/lt~obsolete.m4 | 99 + configure | 472 +- configure.ac | 37 +- python/{Makefile => Makefile.in} | 10 +- src/Makefile.in | 2 +- 11 files changed, 9457 insertions(+), 133 deletions(-) rename Makefile => Makefile.in (92%) create mode 100644 config/libtool.m4 create mode 100644 config/ltoptions.m4 create mode 100644 config/ltsugar.m4 create mode 100644 config/ltversion.m4 create mode 100644 config/lt~obsolete.m4 rename python/{Makefile => Makefile.in} (89%) diff --git a/.gitignore b/.gitignore index 74a87e23a..e66e6c010 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,15 @@ version.py test/data/ *.bin +# Local configuration +aclocal.m4 +autom4te.cache +config.status +config.mk +Makefile +src/Makefile +python/Makefile + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/Makefile b/Makefile.in similarity index 92% rename from Makefile rename to Makefile.in index bb75f0c09..7babc22ec 100644 --- a/Makefile +++ b/Makefile.in @@ -5,6 +5,9 @@ LIB_DIR = lib INC_DIR = src SRC_DIR = src +HAVE_PYTHON ?= @HAVE_PYTHON@ +HAVE_DOCKER ?= @HAVE_DOCKER@ + BIFROST_PYTHON_DIR = python all: libbifrost python @@ -34,30 +37,38 @@ uninstall: .PHONY: uninstall doc: $(INC_DIR)/bifrost/*.h Doxyfile - $(DOXYGEN) Doxyfile + @DX_DOXYGEN@ Doxyfile .PHONY: doc python: libbifrost +ifeq ($HAVE_PYTHON,1) $(MAKE) -C $(BIFROST_PYTHON_DIR) build +endif .PHONY: python #GPU Docker build IMAGE_NAME ?= ledatelescope/bifrost docker: +ifeq ($HAVE_DOCKER,1) docker build --pull -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile.gpu -t $(IMAGE_NAME) . +endif .PHONY: docker #GPU Docker prereq build # (To be used for testing new builds rapidly) IMAGE_NAME ?= ledatelescope/bifrost docker_prereq: +ifeq ($HAVE_DOCKER,1) docker build --pull -t $(IMAGE_NAME)_prereq:$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile_prereq.gpu -t $(IMAGE_NAME)_prereq . +endif .PHONY: docker_prereq #CPU-only Docker build IMAGE_NAME ?= ledatelescope/bifrost docker-cpu: +ifeq ($HAVE_DOCKER,1) docker build --pull -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile.cpu -t $(IMAGE_NAME) . +endif .PHONY: docker # TODO: Consider adding a mode 'develop=1' that makes symlinks instead of copying diff --git a/config/libtool.m4 b/config/libtool.m4 new file mode 100644 index 000000000..92060119f --- /dev/null +++ b/config/libtool.m4 @@ -0,0 +1,8364 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) + case ${MACOSX_DEPLOYMENT_TARGET},$host in + 10.[[012]],*|,*powerpc*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/config/ltoptions.m4 b/config/ltoptions.m4 new file mode 100644 index 000000000..94b082976 --- /dev/null +++ b/config/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/config/ltsugar.m4 b/config/ltsugar.m4 new file mode 100644 index 000000000..48bc9344a --- /dev/null +++ b/config/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/config/ltversion.m4 b/config/ltversion.m4 new file mode 100644 index 000000000..fa04b52a3 --- /dev/null +++ b/config/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/config/lt~obsolete.m4 b/config/lt~obsolete.m4 new file mode 100644 index 000000000..c6b26f88f --- /dev/null +++ b/config/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/configure b/configure index 6fe76436b..7942b9038 100755 --- a/configure +++ b/configure @@ -670,11 +670,12 @@ DX_ENV DX_DOCDIR DX_CONFIG DX_PROJECT +HAVE_DOCKER +DOCKER PYINSTALLFLAGS PYBUILDFLAGS -PYTHON_LIB -PYTHON_INCLUDE_DIR -PYTHON_BIN +HAVE_PYTHON +PYTHON GPU_ARCHS NVCCFLAGS CUOBJDUMP @@ -801,8 +802,10 @@ enable_debug enable_trace enable_native_arch enable_cuda_debug +with_python with_pybuild_flags with_pyinstall_flags +with_docker enable_doxygen_doc enable_doxygen_dot enable_doxygen_man @@ -832,6 +835,8 @@ CTAGS NVCC NVPRUNE CUOBJDUMP +PYTHON +DOCKER DOXYGEN_PAPER_SIZE' @@ -1491,8 +1496,10 @@ Optional Packages: --with-gpu-archs=... default GPU architectures (default='35 61') --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) + --with-python=[PATH] absolute path to python executable --with-pybuild-flags build flags for python (default='') --with-pyinstall-flags install flags for python (default='') + --with-docker=[PATH] absolute path to docker executable Some influential environment variables: CC C compiler command @@ -1512,6 +1519,8 @@ Some influential environment variables: NVCC Absolute path to nvcc executable NVPRUNE Absolute path to nvprune executable CUOBJDUMP Absolute path to cuobjdump executable + PYTHON Absolute path to python executable + DOCKER Absolute path to docker executable DOXYGEN_PAPER_SIZE a4wide (default), a4, letter, legal or executive @@ -2746,9 +2755,13 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + : ${CXXFLAGS="-O3 -Wall -pedantic"} +# # Programs +# + case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 @@ -8120,6 +8133,10 @@ _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= @@ -16050,6 +16067,75 @@ fi test -n "$AWK" && break done +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: @@ -16334,7 +16420,10 @@ fi SO_EXT=$shrext_cmds +# # Features +# + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : @@ -17255,7 +17344,10 @@ $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# # Extras +# + # Check whether --with-cuda_home was given. if test "${with_cuda_home+set}" = set; then : @@ -17929,31 +18021,61 @@ if test x$enable_cuda_debug != xno; then : NVCCFLAGS="$NVCCFLAGS -G" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build information" >&5 -$as_echo_n "checking for python build information... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } -for python in python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python; do -for ac_prog in $python -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 +# +# Python +# + + + + + + + + + + + + if test -z "$PYTHON"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +$as_echo_n "checking whether python executable path has been provided... " >&6; } + +# Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; + if test "$withval" != yes && test "$withval" != no; then : + + PYTHON="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } + +else + + PYTHON="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PYTHON_BIN+:} false; then : +if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$PYTHON_BIN"; then - ac_cv_prog_PYTHON_BIN="$PYTHON_BIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PYTHON_BIN="$ac_prog" + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -17961,138 +18083,95 @@ done done IFS=$as_save_IFS + ;; +esac fi -fi -PYTHON_BIN=$ac_cv_prog_PYTHON_BIN -if test -n "$PYTHON_BIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_BIN" >&5 -$as_echo "$PYTHON_BIN" >&6; } +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$PYTHON_BIN" && break -done - -ax_python_bin=$PYTHON_BIN -if test x$ax_python_bin != x; then - as_ac_Lib=`$as_echo "ac_cv_lib_$ax_python_bin''_main" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_python_bin" >&5 -$as_echo_n "checking for main in -l$ax_python_bin... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$ax_python_bin $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - ax_python_lib=$ax_python_bin + else - ax_python_lib=no -fi - if test x$ax_python_lib == xno; then - as_ac_Lib=`$as_echo "ac_cv_lib_${ax_python_bin}m''_main" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${ax_python_bin}m" >&5 -$as_echo_n "checking for main in -l${ax_python_bin}m... " >&6; } -if eval \${$as_ac_Lib+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ax_python_bin}m $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + ;; +esac fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - ax_python_lib=${ax_python_bin}m +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } else - ax_python_lib=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - fi - if test x$ax_python_lib != xno; then - ax_python_header=`$ax_python_bin -c "from distutils.sysconfig import *; print(get_config_var('CONFINCLUDEPY'))"` - if test x$ax_python_header != x; then - break; - fi - fi -fi -done -if test x$ax_python_bin = x; then - ax_python_bin=no -fi -if test x$ax_python_header = x; then - ax_python_header=no + + fi -if test x$ax_python_lib = x; then - ax_python_lib=no + + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: results of the Python check:" >&5 -$as_echo " results of the Python check:" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Binary: $ax_python_bin" >&5 -$as_echo " Binary: $ax_python_bin" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Library: $ax_python_lib" >&5 -$as_echo " Library: $ax_python_lib" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Include Dir: $ax_python_header" >&5 -$as_echo " Include Dir: $ax_python_header" >&6; } -if test x$ax_python_header != xno; then - PYTHON_INCLUDE_DIR=$ax_python_header -fi -if test x$ax_python_lib != xno; then - PYTHON_LIB=$ax_python_lib -fi +if test x${PYTHON} != x; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +$as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } + if ! test $(PYTHON) -c "import ctypesgen"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +$as_echo "$as_me: WARNING: python module will not be built" >&2;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_PYTHON=1 + +fi +fi + # Check whether --with-pybuild_flags was given. if test "${with_pybuild_flags+set}" = set; then : @@ -18111,7 +18190,150 @@ fi PYINSTALLFLAGS=$with_pyinstall_flags +# +# Docker +# + + + + + + + + + + + + if test -z "$DOCKER"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 +$as_echo_n "checking whether docker executable path has been provided... " >&6; } + +# Check whether --with-docker was given. +if test "${with_docker+set}" = set; then : + withval=$with_docker; + if test "$withval" != yes && test "$withval" != no; then : + + DOCKER="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } + +else + + DOCKER="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "docker", so it can be a program name with args. +set dummy docker; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOCKER+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DOCKER in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DOCKER=$ac_cv_path_DOCKER +if test -n "$DOCKER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "docker", so it can be a program name with args. +set dummy docker; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOCKER+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DOCKER in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DOCKER=$ac_cv_path_DOCKER +if test -n "$DOCKER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + +if test x${PYTHON} != x; then : + HAVE_DOCKER=1 + +fi + +# # Documentation +# + @@ -20066,7 +20288,7 @@ DX_RULES="${DX_SNIPPET_doc}" CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -ac_config_files="$ac_config_files config.mk src/Makefile" +ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile" cat >confcache <<\_ACEOF @@ -21167,7 +21389,9 @@ do case $ac_config_target in "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "config.mk") CONFIG_FILES="$CONFIG_FILES config.mk" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac diff --git a/configure.ac b/configure.ac index 9e8a65f1d..b46deb372 100644 --- a/configure.ac +++ b/configure.ac @@ -3,14 +3,19 @@ AC_LANG(C++) AC_CONFIG_SRCDIR([src/cuda.cpp]) AC_CONFIG_AUX_DIR([config]) +AC_CONFIG_MACRO_DIR([config]) : ${CXXFLAGS="-O3 -Wall -pedantic"} +# # Programs +# + LT_INIT AC_PROG_CC AC_PROG_CXX AC_PROG_AWK +AC_PROG_SED AC_PROG_INSTALL AC_PROG_LIBTOOL AC_PROG_LN_S @@ -27,7 +32,10 @@ AS_IF([! ${CTAGS} --version | grep -q Exuberant], AC_SUBST(SO_EXT, $shrext_cmds) +# # Features +# + AC_C_INLINE AX_CXX_COMPILE_STDCXX(11, noext, mandatory) AC_CHECK_FUNCS([memset]) @@ -72,7 +80,10 @@ AC_COMPILE_IFELSE([#include AC_SUBST(HAVE_MMSG, 1)], [AC_MSG_RESULT([no])]) +# # Extras +# + AC_ARG_WITH([cuda_home], [AS_HELP_STRING([--with-cuda-home], [CUDA install path (default=/usr/local/cuda)])], @@ -189,7 +200,18 @@ AC_ARG_ENABLE([cuda_debug], AS_IF([test x$enable_cuda_debug != xno], [NVCCFLAGS="$NVCCFLAGS -G"]) -AX_PYTHON +# +# Python +# + +AX_WITH_PROG(PYTHON, python) +AS_IF([test x${PYTHON} != x], + [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) + AS_IF([! test $(PYTHON) -c "import ctypesgen"], + [AC_MSG_RESULT([no]) + AC_MSG_WARN([python module will not be built])], + [AC_MSG_RESULT([yes]) + AC_SUBST(HAVE_PYTHON, 1)])]) AC_ARG_WITH([pybuild_flags], [AS_HELP_STRING([--with-pybuild-flags], @@ -205,7 +227,18 @@ AC_ARG_WITH([pyinstall_flags], []) AC_SUBST(PYINSTALLFLAGS, $with_pyinstall_flags) +# +# Docker +# + +AX_WITH_PROG(DOCKER, docker) +AS_IF([test x${PYTHON} != x], + [AC_SUBST(HAVE_DOCKER, 1)]) + +# # Documentation +# + DX_DOT_FEATURE(OFF) DX_HTML_FEATURE(ON) DX_CHM_FEATURE(OFF) @@ -220,6 +253,6 @@ DX_INIT_DOXYGEN([bifrost]) CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -AC_CONFIG_FILES([config.mk src/Makefile]) +AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile]) AC_OUTPUT diff --git a/python/Makefile b/python/Makefile.in similarity index 89% rename from python/Makefile rename to python/Makefile.in index 6f41494ef..1e242de85 100644 --- a/python/Makefile +++ b/python/Makefile.in @@ -21,7 +21,7 @@ $(BIFROST_PYTHON_VERSION_FILE): ../config.mk @echo "__version__ = \"$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR).$(LIBBIFROST_PATCH)\"" > $@ define run_ctypesgen - python -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -l$1 -I$2 $^ -o $@ + @PYTHON@ -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -l$1 -I$2 $^ -o $@ # WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p) sed -i 's/POINTER(c_char)/c_char_p/g' $@ # WAR for a buggy WAR in ctypesgen that breaks type checking and auto-byref functionality @@ -47,19 +47,19 @@ $(BIFROST_PYTHON_BINDINGS_FILE): $(INC_DIR)/bifrost/*.h $(call run_ctypesgen,$(BIFROST_NAME),$(INC_DIR)) build: bifrost/*.py Makefile $(BIFROST_PYTHON_VERSION_FILE) $(BIFROST_PYTHON_BINDINGS_FILE) $(PSRDADA_PYTHON_BINDINGS_FILE) - python setup.py build $(PYBUILDFLAGS) + @PYTHON@ setup.py build $(PYBUILDFLAGS) .PHONY: build install: build - python setup.py install $(PYINSTALLFLAGS) + @PYTHON@ setup.py install $(PYINSTALLFLAGS) .PHONY: install clean: - python setup.py clean --all + @PYTHON@ setup.py clean --all rm -f $(BIFROST_PYTHON_VERSION_FILE) rm -f $(BIFROST_PYTHON_BINDINGS_FILE) rm -f $(PSRDADA_PYTHON_BINDINGS_FILE) .PHONY: clean uninstall: - pip uninstall bifrost + @PYTHON@ -m pip uninstall bifrost diff --git a/src/Makefile.in b/src/Makefile.in index dcf82fad0..fb07d2d8f 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -110,7 +110,7 @@ $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h @echo -n "Generating $(LIBBIFROST_VERSION_FILE)\r" echo "VERS_$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) {" > $@ echo " global:" >> $@ - ctags -x --c-kinds=p $^ | awk '{print " " $$1 ";"}' >> $@ + @CTAGS@ -x --c-kinds=p $^ | awk '{print " " $$1 ";"}' >> $@ echo " local:" >> $@ echo " *;" >> $@ echo "};" >> $@ From d8f8cb3f7bcd545553a45081188737e1d1289640 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 13:00:58 -0600 Subject: [PATCH 0246/1155] Switched some enables to disables and more cleanup. --- configure | 85 +++++++++++++++++++++++++++++++++------------------- configure.ac | 69 ++++++++++++++++++++++++++++-------------- 2 files changed, 100 insertions(+), 54 deletions(-) diff --git a/configure b/configure index 7942b9038..3a8cfe8c8 100755 --- a/configure +++ b/configure @@ -792,11 +792,11 @@ with_nvcc with_nvprune with_cuobjdump with_nvcc_flags +with_gpu_archs +with_shared_mem enable_numa enable_hwloc enable_vma -with_gpu_archs -with_shared_mem with_alignment enable_debug enable_trace @@ -1455,8 +1455,8 @@ Optional Features: optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-cuda disable cuda support (default=no) - --enable-numa enable NUMA support (default=yes) - --enable-hwloc enable hwloc support (default=yes) + --disable-numa disable NUMA support (default=no) + --disable-hwloc disable hwloc support (default=no) --enable-vma enable vma support (default=no) --enable-debug enable debugging mode (default=no) --enable-trace enable tracing mode for nvprof/nvvp (default=no) @@ -16421,7 +16421,7 @@ SO_EXT=$shrext_cmds # -# Features +# System/Compiler Features # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 @@ -17345,7 +17345,7 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # -# Extras +# CUDA # @@ -17786,9 +17786,35 @@ NVCCFLAGS=$with_nvcc_flags +# Check whether --with-gpu_archs was given. +if test "${with_gpu_archs+set}" = set; then : + withval=$with_gpu_archs; +else + with_gpu_archs='35 61' +fi + +GPU_ARCHS=$with_gpu_archs + + + +# Check whether --with-shared_mem was given. +if test "${with_shared_mem+set}" = set; then : + withval=$with_shared_mem; +else + with_shared_mem=16384 +fi + +if test x$HAVE_CUDA = x1; then : + NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem" +fi + +# +# NUMA +# + # Check whether --enable-numa was given. if test "${enable_numa+set}" = set; then : - enableval=$enable_numa; + enableval=$enable_numa; enable_numa=no else enable_numa=yes fi @@ -17837,9 +17863,13 @@ fi fi +# +# HWLOC +# + # Check whether --enable-hwloc was given. if test "${enable_hwloc+set}" = set; then : - enableval=$enable_hwloc; + enableval=$enable_hwloc; enable_hwloc=no else enable_hwloc=yes fi @@ -17888,9 +17918,13 @@ fi fi +# +# VMA +# + # Check whether --enable-vma was given. if test "${enable_vma+set}" = set; then : - enableval=$enable_vma; + enableval=$enable_vma; enable_vma=yes else enable_vma=no fi @@ -17939,28 +17973,9 @@ fi fi - -# Check whether --with-gpu_archs was given. -if test "${with_gpu_archs+set}" = set; then : - withval=$with_gpu_archs; -else - with_gpu_archs='35 61' -fi - -GPU_ARCHS=$with_gpu_archs - - - -# Check whether --with-shared_mem was given. -if test "${with_shared_mem+set}" = set; then : - withval=$with_shared_mem; -else - with_shared_mem=16384 -fi - -if test x$HAVE_CUDA = x1; then : - NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem" -fi +# +# Bifrost memory alignment +# # Check whether --with-alignment was given. @@ -17972,6 +17987,10 @@ fi CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" +# +# Bifrost Features +# + # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; enable_debug=yes @@ -20285,6 +20304,10 @@ DX_RULES="${DX_SNIPPET_doc}" #echo DX_ENV=$DX_ENV +# +# Linking flags +# + CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" diff --git a/configure.ac b/configure.ac index b46deb372..5d61ddd9f 100644 --- a/configure.ac +++ b/configure.ac @@ -33,7 +33,7 @@ AS_IF([! ${CTAGS} --version | grep -q Exuberant], AC_SUBST(SO_EXT, $shrext_cmds) # -# Features +# System/Compiler Features # AC_C_INLINE @@ -81,7 +81,7 @@ AC_COMPILE_IFELSE([#include [AC_MSG_RESULT([no])]) # -# Extras +# CUDA # AC_ARG_WITH([cuda_home], @@ -111,51 +111,66 @@ AC_ARG_WITH([nvcc_flags], [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) AC_SUBST(NVCCFLAGS, $with_nvcc_flags) +AC_ARG_WITH([gpu_archs], + [AS_HELP_STRING([--with-gpu-archs=...], + [default GPU architectures (default='35 61')])], + [], + [with_gpu_archs='35 61']) +AC_SUBST(GPU_ARCHS, $with_gpu_archs) + +AC_ARG_WITH([shared_mem], + [AS_HELP_STRING([--with-shared-mem=N], + [default GPU shared memory in bytes (default=16384)])], + [], + [with_shared_mem=16384]) +AS_IF([test x$HAVE_CUDA = x1], + [NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem"]) + +# +# NUMA +# AC_ARG_ENABLE([numa], - AS_HELP_STRING([--enable-numa], - [enable NUMA support (default=yes)]), - [], + AS_HELP_STRING([--disable-numa], + [disable NUMA support (default=no)]), + [enable_numa=no], [enable_numa=yes]) AS_IF([test x$enable_numa != xno], [AC_CHECK_LIB([numa], [numa_tonode_memory], [CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" LIBS="$LIBS -lnuma"])]) +# +# HWLOC +# + AC_ARG_ENABLE([hwloc], - AS_HELP_STRING([--enable-hwloc], - [enable hwloc support (default=yes)]), - [], + AS_HELP_STRING([--disable-hwloc], + [disable hwloc support (default=no)]), + [enable_hwloc=no], [enable_hwloc=yes]) AS_IF([test x$enable_hwloc != xno], [AC_CHECK_LIB([hwloc], [hwloc_topology_init], [CPPFLAGS="$CPPFLAGS -DBF_HWLOC_ENABLED=1" LIBS="$LIBS -lhwloc"])]) +# +# VMA +# + AC_ARG_ENABLE([vma], AS_HELP_STRING([--enable-vma], [enable vma support (default=no)]), - [], + [enable_vma=yes], [enable_vma=no]) AS_IF([test x$enable_vma != xno], [AC_CHECK_LIB([vma], [recvfrom_zcopy], [CPPFLAGS="$CPPFLAGS -DBF_VMA_ENABLED=1" LIBS="$LIBS -lvma"])]) -AC_ARG_WITH([gpu_archs], - [AS_HELP_STRING([--with-gpu-archs=...], - [default GPU architectures (default='35 61')])], - [], - [with_gpu_archs='35 61']) -AC_SUBST(GPU_ARCHS, $with_gpu_archs) - -AC_ARG_WITH([shared_mem], - [AS_HELP_STRING([--with-shared-mem=N], - [default GPU shared memory in bytes (default=16384)])], - [], - [with_shared_mem=16384]) -AS_IF([test x$HAVE_CUDA = x1], - [NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem"]) +# +# Bifrost memory alignment +# AC_ARG_WITH([alignment], [AS_HELP_STRING([--with-alignment=N], @@ -164,6 +179,10 @@ AC_ARG_WITH([alignment], [with_alignment=4096]) CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" +# +# Bifrost Features +# + AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], [enable debugging mode (default=no)])], @@ -250,6 +269,10 @@ DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) DX_INIT_DOXYGEN([bifrost]) +# +# Linking flags +# + CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" From 244d3d49821bb925a3135fce280d2c9b92cc940c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Oct 2021 15:15:43 -0600 Subject: [PATCH 0247/1155] More MacOS work. --- configure | 22 ----------- configure.ac | 10 ----- src/Makefile.in | 6 +-- src/Socket.hpp | 91 +++++++++++++++++++++++++++++++++++++++++++- src/udp_capture.cpp | 12 +++++- src/udp_socket.cpp | 4 +- src/udp_transmit.cpp | 9 +++-- 7 files changed, 107 insertions(+), 47 deletions(-) diff --git a/configure b/configure index 3a8cfe8c8..397e41f16 100755 --- a/configure +++ b/configure @@ -683,7 +683,6 @@ NVPRUNE NVCC HAVE_CUDA CUDA_HOME -HAVE_MMSG LIBOBJS HAVE_CXX11 SO_EXT @@ -17323,27 +17322,6 @@ _ACEOF esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sys/socket.h supports recvmmsg" >&5 -$as_echo_n "checking if sys/socket.h supports recvmmsg... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - int main(void) { - struct mmsghdr *mmsg = NULL; - return 0; - } -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - HAVE_MMSG=1 - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - # # CUDA # diff --git a/configure.ac b/configure.ac index 5d61ddd9f..118c26779 100644 --- a/configure.ac +++ b/configure.ac @@ -70,16 +70,6 @@ AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_UINT8_T -AC_MSG_CHECKING([if sys/socket.h supports recvmmsg]) -AC_COMPILE_IFELSE([#include - int main(void) { - struct mmsghdr *mmsg = NULL; - return 0; - }], - [AC_MSG_RESULT([yes]) - AC_SUBST(HAVE_MMSG, 1)], - [AC_MSG_RESULT([no])]) - # # CUDA # diff --git a/src/Makefile.in b/src/Makefile.in index fb07d2d8f..c4f92a8f7 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -15,7 +15,6 @@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ HAVE_CUDA ?= @HAVE_CUDA@ -HAVE_MMSG ?= @HAVE_MMSG@ GPU_ARCHS ?= @GPU_ARCHS@ @@ -36,14 +35,11 @@ LIBBIFROST_OBJS = \ array.o \ unpack.o \ quantize.o \ - proclog.o -ifeq (HAVE_MMSG,1) - LIBBIFROST_OBJS += \ + proclog.o \ address.o \ udp_socket.o \ udp_capture.o \ udp_transmit.o -endif ifeq (HAVE_CUDA,1) # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ diff --git a/src/Socket.hpp b/src/Socket.hpp index da145e898..4b694c264 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -126,6 +126,81 @@ client.send/recv_block/packet(...); #include //#include +#if defined __APPLE__ && __APPLE__ + +#include +#include + +#define SOCK_NONBLOCK O_NONBLOCK + +inline static int accept4(int sockfd, + struct sockaddr *addr, + socklen_t *addrlen, + int flags) { + return ::accept(sockfd, addr, addrlen); +} + +inline static sa_family_t get_family(int sockfd) { + int ret; + sockaddr addr; + socklen_t len; + ret = ::getsockname(sockfd, &addr, &len); + if(ret<0) { + return AF_UNSPEC; + } + + sockaddr_in* sa = reinterpret_cast (&addr); + return sa->sin_family; +} + +inline static int get_mtu(int sockfd) { + ifreq ifr; + int mtu = 0; + if( ::ioctl(sockfd, SIOCGIFMTU, &ifr) != -1) { + mtu = ifr.ifr_mtu; + } + return mtu; +} + +typedef struct mmsghdr { + struct msghdr msg_hdr; /* Message header */ + unsigned int msg_len; /* Number of bytes transmitted */ +} mmsghdr; + +// TODO: What about recvmsg_x? +inline static int recvmmsg(int sockfd, + struct mmsghdr *msgvec, + unsigned int vlen, + int flags, + struct timespec *timeout) { + int count = 0; + int recv; + for(int i=0; i 0) { + count++; + } + } + return count; +} + +// TODO: What about sendmsg_x? +inline static int sendmmsg(int sockfd, + struct mmsghdr *msgvec, + unsigned int vlen, + int flags) { + int count = 0; + int sent; + for(int i=0; iget_option(IP_MTU, IPPROTO_IP); +#endif } template inline void set_option(int optname, T value, int level=SOL_SOCKET) { @@ -429,7 +508,11 @@ std::string Socket::address_string(sockaddr_storage addr) { int Socket::discover_mtu(sockaddr_storage remote_address) { Socket s(SOCK_DGRAM); s.connect(remote_address); +#if defined __APPLE__ && __APPLE__ + return ::get_mtu(s._fd); +#else return s.get_option(IP_MTU, IPPROTO_IP); +#endif } void Socket::bind(sockaddr_storage local_address, int max_conn_queue) { @@ -820,7 +903,11 @@ void Socket::swap(Socket& s) { } Socket::Socket(int fd, ManageTag ) : _fd(fd) { _type = this->get_option(SO_TYPE); +#if defined __APPLE__ && __APPLE__ + _family = get_family(fd); +#else _family = this->get_option(SO_DOMAIN); +#endif if( this->get_option(SO_ACCEPTCONN) ) { _mode = Socket::MODE_LISTENING; } diff --git a/src/udp_capture.cpp b/src/udp_capture.cpp index ce393cd3b..87ca89133 100644 --- a/src/udp_capture.cpp +++ b/src/udp_capture.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -70,6 +70,14 @@ enum { JUMBO_FRAME_SIZE = 9000 }; +#if defined __APPLE__ && __APPLE__ + +#include + +#define be64toh(x) OSSwapBigToHostInt64(x) + +#endif + template inline T atomic_add_and_fetch(T* dst, T val) { return __sync_add_and_fetch(dst, val); // GCC builtin @@ -572,7 +580,7 @@ class BFudpcapture_impl { if( payload_size == -1 ) { payload_size = _payload_size; } - return _nseq_per_buf * _nsrc * payload_size * BF_UNPACK_FACTOR; + return (size_t) _nseq_per_buf * _nsrc * payload_size * BF_UNPACK_FACTOR; } inline void reserve_buf() { _buf_ngood_bytes.push(0); diff --git a/src/udp_socket.cpp b/src/udp_socket.cpp index 4af7babbe..c07410e09 100644 --- a/src/udp_socket.cpp +++ b/src/udp_socket.cpp @@ -32,12 +32,12 @@ #include struct BFudpsocket_impl : public Socket { - BFudpsocket_impl() : Socket(SOCK_DGRAM) {} + BFudpsocket_impl() : Socket(BF_SOCK_DGRAM) {} }; BFstatus bfUdpSocketCreate(BFudpsocket* obj) { BF_ASSERT(obj, BF_STATUS_INVALID_POINTER); - BF_TRY_RETURN_ELSE(*obj = (BFudpsocket)new BFudpsocket_impl(),//BFudpsocket_impl::SOCK_DGRAM), + BF_TRY_RETURN_ELSE(*obj = (BFudpsocket)new BFudpsocket_impl(),//BFudpsocket_impl::BF_SOCK_DGRAM), *obj = 0); } BFstatus bfUdpSocketDestroy(BFudpsocket obj) { diff --git a/src/udp_transmit.cpp b/src/udp_transmit.cpp index a470c8e76..ef6ad9adb 100644 --- a/src/udp_transmit.cpp +++ b/src/udp_transmit.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2017, The Bifrost Authors. All rights reserved. - * Copyright (c) 2017, The University of New Mexico. All rights reserved. + * Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. + * Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,6 +31,7 @@ #include #include #include "proclog.hpp" +#include "Socket.hpp" #include // For ntohs #include // For recvfrom @@ -125,10 +126,10 @@ class UDPTransmitThread : public BoundThread { ssize_t nsent = sendmmsg(_fd, packets, npackets, 0); if( nsent == -1 ) { _stats.ninvalid += npackets; - _stats.ninvalid_bytes += npackets * packets->msg_len; + _stats.ninvalid_bytes += (size_t) npackets * packets->msg_len; } else { _stats.nvalid += npackets; - _stats.nvalid_bytes += npackets * packets->msg_len; + _stats.nvalid_bytes += (size_t) npackets * packets->msg_len; } return nsent; } From 6cdf8c96946efaa1714fd6ae5589cb8c5aa2c4a1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Oct 2021 07:47:06 -0600 Subject: [PATCH 0248/1155] Try an update. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 9d17b8cad..0b8d6df8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ services: addons: apt: + update: true packages: - build-essential - curl From 08d49d5d25ae2ae0aae8f0544ae23da4806fff94 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Oct 2021 07:49:48 -0600 Subject: [PATCH 0249/1155] Try to make the certificate update explicit. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 0b8d6df8b..5ec1d5997 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,7 @@ addons: update: true packages: - build-essential + - ca-certificates - curl - git - pkg-config From 747d9d0e998dfd962479602d6951fd75633f8b2f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Oct 2021 07:55:34 -0600 Subject: [PATCH 0250/1155] Try Bionic. --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 5ec1d5997..d449142ab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ sudo: required +dist: bionic + language: python python: From 0332f8fb7e0584b3b131ba248c57fdf725fba33f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Oct 2021 08:02:29 -0600 Subject: [PATCH 0251/1155] Reorder linking flags. --- src/Makefile.in | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index c4f92a8f7..fef9fd32e 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -140,10 +140,11 @@ else CUDA_DEVICE_LINK_OBJ = endif -WLFLAGS ?= $(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) +WLFLAGS ?= ifeq ($(OS),Linux) - WLFLAGS = --version-script=$(LIBBIFROST_VERSION_FILE),$(WLFLAGS) + WLFLAGS += --version-script=$(LIBBIFROST_VERSION_FILE) endif +WLFLAGS += $(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) # Note: $(LIB) must go at after OBJS $(LIBBIFROST_SO): $(LIBBIFROST_OBJS) $(LIBBIFROST_VERSION_FILE) $(CUDA_DEVICE_LINK_OBJ) From 15ad42e88e50c9f20be4594843a650f59ce6cd24 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Oct 2021 08:45:34 -0600 Subject: [PATCH 0252/1155] Revert. --- src/Makefile.in | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index fef9fd32e..675fed232 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -140,11 +140,10 @@ else CUDA_DEVICE_LINK_OBJ = endif -WLFLAGS ?= +WLFLAGS ?= $(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) ifeq ($(OS),Linux) - WLFLAGS += --version-script=$(LIBBIFROST_VERSION_FILE) + WLFLAGS := --version-script=$(LIBBIFROST_VERSION_FILE),$(WLFLAGS) endif -WLFLAGS += $(SONAME_FLAG),$(LIBBIFROST_NAME)$(SO_EXT).$(LIBBIFROST_MAJOR) # Note: $(LIB) must go at after OBJS $(LIBBIFROST_SO): $(LIBBIFROST_OBJS) $(LIBBIFROST_VERSION_FILE) $(CUDA_DEVICE_LINK_OBJ) From 077a9319feb8335086e0d2876a5edbb06dda70d1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 17:17:37 -0600 Subject: [PATCH 0253/1155] A lot of fixes to configure.ac. --- config/cuda.m4 | 61 +++ configure | 1193 +++++++++++++++++++++++++---------------------- configure.ac | 43 +- src/Makefile.in | 10 +- 4 files changed, 719 insertions(+), 588 deletions(-) create mode 100644 config/cuda.m4 diff --git a/config/cuda.m4 b/config/cuda.m4 new file mode 100644 index 000000000..4f4cbff1d --- /dev/null +++ b/config/cuda.m4 @@ -0,0 +1,61 @@ +AC_DEFUN([AX_CHECK_CUDA], +[ + AC_PROVIDE([AX_CHECK_CUDA]) + AC_ARG_WITH([cuda_home], + [AS_HELP_STRING([--with-cuda-home], + [CUDA install path (default=/usr/local/cuda)])], + [], + [with_cuda_home=/usr/local/cuda]) + AC_SUBST(CUDA_HOME, $with_cuda_home) + + AC_ARG_ENABLE([cuda], + [AS_HELP_STRING([--disable-cuda], + [disable cuda support (default=no)])], + [enable_cuda=no], + [enable_cuda=yes]) + + AC_SUBST([HAVE_CUDA], [0]) + if test "$enable_cuda" != "no"; then + AC_SUBST([HAVE_CUDA], [1]) + + AC_PATH_PROG(NVCC, nvcc, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) + AC_PATH_PROG(NVPRUNE, nvprune, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) + AC_PATH_PROG(CUOBJDUMP, cuobjdump, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) + fi + + if test "$HAVE_CUDA" = "1"; then + AC_MSG_CHECKING([for a working CUDA installation]) + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include ]], + [[cudaMalloc(0, 0);]])], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_SUBST([HAVE_CUDA], [0])]) + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + fi + + if test "$HAVE_CUDA" = "1"; then + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -lculibos -lnvToolsExt" + fi + + AC_ARG_WITH([nvcc_flags], + [AS_HELP_STRING([--with-nvcc-flags], + [flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"')])], + [], + [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) + AC_SUBST(NVCCFLAGS, $with_nvcc_flags) +]) + diff --git a/configure b/configure index 397e41f16..c18183a95 100755 --- a/configure +++ b/configure @@ -683,6 +683,7 @@ NVPRUNE NVCC HAVE_CUDA CUDA_HOME +HAVE_OPENMP LIBOBJS HAVE_CXX11 SO_EXT @@ -754,6 +755,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -787,9 +789,6 @@ enable_libtool_lock with_ctags with_cuda_home enable_cuda -with_nvcc -with_nvprune -with_cuobjdump with_nvcc_flags with_gpu_archs with_shared_mem @@ -831,9 +830,6 @@ LT_SYS_LIBRARY_PATH CPP CXXCPP CTAGS -NVCC -NVPRUNE -CUOBJDUMP PYTHON DOCKER DOXYGEN_PAPER_SIZE' @@ -875,6 +871,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1127,6 +1124,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1264,7 +1270,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1417,6 +1423,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1454,7 +1461,7 @@ Optional Features: optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-cuda disable cuda support (default=no) - --disable-numa disable NUMA support (default=no) + --disable-numa disable numa support (default=no) --disable-hwloc disable hwloc support (default=no) --enable-vma enable vma support (default=no) --enable-debug enable debugging mode (default=no) @@ -1486,10 +1493,6 @@ Optional Packages: compiler's sysroot if not specified). --with-ctags=[PATH] absolute path to ctags executable --with-cuda-home CUDA install path (default=/usr/local/cuda) - --with-nvcc=[PATH] absolute path to nvcc executable - --with-nvprune=[PATH] absolute path to nvprune executable - --with-cuobjdump=[PATH] - absolute path to cuobjdump executable --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"') --with-gpu-archs=... default GPU architectures (default='35 61') @@ -1515,9 +1518,6 @@ Some influential environment variables: CPP C preprocessor CXXCPP C++ preprocessor CTAGS Absolute path to ctags executable - NVCC Absolute path to nvcc executable - NVPRUNE Absolute path to nvprune executable - CUOBJDUMP Absolute path to cuobjdump executable PYTHON Absolute path to python executable DOCKER Absolute path to docker executable DOXYGEN_PAPER_SIZE @@ -16472,21 +16472,12 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no - - - - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : $as_echo_n "(cached) " >&6 else - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16776,183 +16767,499 @@ namespace cxx11 _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : - eval $cachevar=yes + ax_cv_cxx_compile_cxx11=yes else - eval $cachevar=no + ax_cv_cxx_compile_cxx11=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CXX="$ac_save_CXX" fi -eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$ax_cxx_compile_cxx11_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX11=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -$as_echo "$as_me: No compiler with C++11 support was found" >&6;} - else - HAVE_CXX11=1 -$as_echo "#define HAVE_CXX11 1" >>confdefs.h - fi + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -for ac_func in memset -do : - ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMSET 1 -_ACEOF +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. -fi -done +#ifndef __cplusplus -for ac_func in rint -do : - ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_RINT 1 -_ACEOF +#error "This is not a C++ compiler" -fi -done +#elif __cplusplus < 201103L -for ac_func in socket -do : - ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SOCKET 1 -_ACEOF +#error "This is not a C++11 compiler" -fi -done +#else -for ac_func in sqrt -do : - ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQRT 1 -_ACEOF +namespace cxx11 +{ -fi -done + namespace test_static_assert + { -for ac_func in strerror -do : - ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRERROR 1 -_ACEOF + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; -fi -done + } + namespace test_final_override + { -for ac_header in arpa/inet.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ARPA_INET_H 1 -_ACEOF + struct Base + { + virtual void f() {} + }; -fi + struct Derived : public Base + { + virtual void f() override {} + }; -done + } -for ac_header in netdb.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETDB_H 1 -_ACEOF + namespace test_double_right_angle_brackets + { -fi + template < typename T > + struct check {}; -done + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; -for ac_header in netinet/in.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETINET_IN_H 1 -_ACEOF + } -fi + namespace test_decltype + { -done + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } -for ac_header in sys/file.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_FILE_H 1 -_ACEOF + } -fi + namespace test_type_deduction + { -done + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; -for ac_header in sys/ioctl.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_IOCTL_H 1 -_ACEOF + template < typename T > + struct is_same + { + static const bool value = true; + }; -fi + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } -done + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } -for ac_header in sys/socket.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_SOCKET_H 1 -_ACEOF + } -fi + namespace test_noexcept + { -done + int f() { return 0; } + int g() noexcept { return 0; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX11=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +$as_echo "#define HAVE_CXX11 1" >>confdefs.h + + fi + + + +for ac_func in memset +do : + ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMSET 1 +_ACEOF + +fi +done + +for ac_func in rint +do : + ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RINT 1 +_ACEOF + +fi +done + +for ac_func in socket +do : + ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKET 1 +_ACEOF + +fi +done + +for ac_func in sqrt +do : + ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SQRT 1 +_ACEOF + +fi +done + +for ac_func in strerror +do : + ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR 1 +_ACEOF + +fi +done + + +for ac_header in arpa/inet.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ARPA_INET_H 1 +_ACEOF + +fi + +done + +for ac_header in netdb.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETDB_H 1 +_ACEOF + +fi + +done + +for ac_header in netinet/in.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETINET_IN_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/file.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_FILE_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/ioctl.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_IOCTL_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/socket.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_SOCKET_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else @@ -17175,9 +17482,14 @@ $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi +if ! echo $DEFS | grep OPENMP; then : + HAVE_OPENMP=1 + +fi if test x$HAVE_OPENMP != x1; then : CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" - CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +else + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" @@ -17235,300 +17547,145 @@ _ACEOF esac ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define pid_t int -_ACEOF - -fi - -ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define ssize_t int -_ACEOF - -fi - -ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" -case $ac_cv_c_uint16_t in #( - no|yes) ;; #( - *) - - -cat >>confdefs.h <<_ACEOF -#define uint16_t $ac_cv_c_uint16_t -_ACEOF -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" -case $ac_cv_c_uint32_t in #( - no|yes) ;; #( - *) - -$as_echo "#define _UINT32_T 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define uint32_t $ac_cv_c_uint32_t -_ACEOF -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" -case $ac_cv_c_uint64_t in #( - no|yes) ;; #( - *) - -$as_echo "#define _UINT64_T 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define uint64_t $ac_cv_c_uint64_t -_ACEOF -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" -case $ac_cv_c_uint8_t in #( - no|yes) ;; #( - *) - -$as_echo "#define _UINT8_T 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define uint8_t $ac_cv_c_uint8_t -_ACEOF -;; - esac - - -# -# CUDA -# - - -# Check whether --with-cuda_home was given. -if test "${with_cuda_home+set}" = set; then : - withval=$with_cuda_home; -else - with_cuda_home=/usr/local/cuda -fi - -CUDA_HOME=$with_cuda_home - -# Check whether --enable-cuda was given. -if test "${enable_cuda+set}" = set; then : - enableval=$enable_cuda; enable_cuda=no -else - enable_cuda=yes -fi - -if test x$enable_cuda != xno; then : - - - - - - - - - - - if test -z "$NVCC"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvcc executable path has been provided" >&5 -$as_echo_n "checking whether nvcc executable path has been provided... " >&6; } - -# Check whether --with-nvcc was given. -if test "${with_nvcc+set}" = set; then : - withval=$with_nvcc; - if test "$withval" != yes && test "$withval" != no; then : - - NVCC="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } - -else - - NVCC="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : - - # Extract the first word of "nvcc", so it can be a program name with args. -set dummy nvcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $NVCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 - -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -NVCC=$ac_cv_path_NVCC -if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - +if test "x$ac_cv_type_pid_t" = xyes; then : +else -fi +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF fi -else +ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "nvcc", so it can be a program name with args. -set dummy nvcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : - $as_echo_n "(cached) " >&6 else - case $NVCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF - ;; -esac -fi -NVCC=$ac_cv_path_NVCC -if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } fi +ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" +if test "x$ac_cv_type_ssize_t" = xyes; then : + +else +cat >>confdefs.h <<_ACEOF +#define ssize_t int +_ACEOF fi +ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" +case $ac_cv_c_uint16_t in #( + no|yes) ;; #( + *) + -fi +cat >>confdefs.h <<_ACEOF +#define uint16_t $ac_cv_c_uint16_t +_ACEOF +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" +case $ac_cv_c_uint32_t in #( + no|yes) ;; #( + *) +$as_echo "#define _UINT32_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint32_t $ac_cv_c_uint32_t +_ACEOF +;; + esac +ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" +case $ac_cv_c_uint64_t in #( + no|yes) ;; #( + *) +$as_echo "#define _UINT64_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint64_t $ac_cv_c_uint64_t +_ACEOF +;; + esac +ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" +case $ac_cv_c_uint8_t in #( + no|yes) ;; #( + *) +$as_echo "#define _UINT8_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint8_t $ac_cv_c_uint8_t +_ACEOF +;; + esac +# +# CUDA +# - if test -z "$NVPRUNE"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nvprune executable path has been provided" >&5 -$as_echo_n "checking whether nvprune executable path has been provided... " >&6; } +# Check whether --with-cuda_home was given. +if test "${with_cuda_home+set}" = set; then : + withval=$with_cuda_home; +else + with_cuda_home=/usr/local/cuda +fi -# Check whether --with-nvprune was given. -if test "${with_nvprune+set}" = set; then : - withval=$with_nvprune; - if test "$withval" != yes && test "$withval" != no; then : + CUDA_HOME=$with_cuda_home - NVPRUNE="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } + # Check whether --enable-cuda was given. +if test "${enable_cuda+set}" = set; then : + enableval=$enable_cuda; enable_cuda=no else + enable_cuda=yes +fi - NVPRUNE="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : - # Extract the first word of "nvprune", so it can be a program name with args. -set dummy nvprune; ac_word=$2 + HAVE_CUDA=0 + + if test "$enable_cuda" != "no"; then + HAVE_CUDA=1 + + + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVPRUNE+:} false; then : +if ${ac_cv_path_NVCC+:} false; then : $as_echo_n "(cached) " >&6 else - case $NVPRUNE in + case $NVCC in [\\/]* | ?:[\\/]*) - ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 - +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -17536,29 +17693,22 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="HAVE_CUDA=0 +" ;; esac fi -NVPRUNE=$ac_cv_path_NVPRUNE -if test -n "$NVPRUNE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - -fi - -fi - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "nvprune", so it can be a program name with args. + # Extract the first word of "nvprune", so it can be a program name with args. set dummy nvprune; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } @@ -17571,8 +17721,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 - +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -17586,6 +17736,8 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="HAVE_CUDA=0 +" ;; esac fi @@ -17599,49 +17751,7 @@ $as_echo "no" >&6; } fi - -fi - - -fi - - - - - - - - - - - - - - - - - if test -z "$CUOBJDUMP"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cuobjdump executable path has been provided" >&5 -$as_echo_n "checking whether cuobjdump executable path has been provided... " >&6; } - -# Check whether --with-cuobjdump was given. -if test "${with_cuobjdump+set}" = set; then : - withval=$with_cuobjdump; - if test "$withval" != yes && test "$withval" != no; then : - - CUOBJDUMP="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } - -else - - CUOBJDUMP="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : - - # Extract the first word of "cuobjdump", so it can be a program name with args. + # Extract the first word of "cuobjdump", so it can be a program name with args. set dummy cuobjdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } @@ -17654,8 +17764,8 @@ else ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 - +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. @@ -17669,6 +17779,8 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="HAVE_CUDA=0 +" ;; esac fi @@ -17682,77 +17794,54 @@ $as_echo "no" >&6; } fi + fi -fi - -fi + if test "$HAVE_CUDA" = "1"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +$as_echo_n "checking for a working CUDA installation... " >&6; } -else + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "cuobjdump", so it can be a program name with args. -set dummy cuobjdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CUOBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $CUOBJDUMP in - [\\/]* | ?:[\\/]*) - ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in HAVE_CUDA=0 + ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - ;; -esac -fi -CUOBJDUMP=$ac_cv_path_CUOBJDUMP -if test -n "$CUOBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } + #include + #include +int +main () +{ +cudaMalloc(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } -fi - - - -fi - + HAVE_CUDA=0 fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + fi + if test "$HAVE_CUDA" = "1"; then + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -lculibos -lnvToolsExt" + fi - - -else - HAVE_CUDA=0 - -fi -if test x$HAVE_CUDA = x1; then : - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" -fi - # Check whether --with-nvcc_flags was given. if test "${with_nvcc_flags+set}" = set; then : withval=$with_nvcc_flags; @@ -17760,7 +17849,8 @@ else with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi -NVCCFLAGS=$with_nvcc_flags + NVCCFLAGS=$with_nvcc_flags + @@ -17798,9 +17888,9 @@ else fi if test x$enable_numa != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_tonode_memory in -lnuma" >&5 -$as_echo_n "checking for numa_tonode_memory in -lnuma... " >&6; } -if ${ac_cv_lib_numa_numa_tonode_memory+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -17814,27 +17904,27 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #ifdef __cplusplus extern "C" #endif -char numa_tonode_memory (); +char numa_node_of_cpu (); int main () { -return numa_tonode_memory (); +return numa_node_of_cpu (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_numa_numa_tonode_memory=yes + ac_cv_lib_numa_numa_node_of_cpu=yes else - ac_cv_lib_numa_numa_tonode_memory=no + ac_cv_lib_numa_numa_node_of_cpu=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_tonode_memory" >&5 -$as_echo "$ac_cv_lib_numa_numa_tonode_memory" >&6; } -if test "x$ac_cv_lib_numa_numa_tonode_memory" = xyes; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" LIBS="$LIBS -lnuma" fi @@ -18156,7 +18246,7 @@ fi if test x${PYTHON} != x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 $as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } - if ! test $(PYTHON) -c "import ctypesgen"; then : + if ! ${PYTHON} -c "import ctypesgen"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 @@ -18322,7 +18412,7 @@ fi -if test x${PYTHON} != x; then : +if test x${DOCKER} != x; then : HAVE_DOCKER=1 fi @@ -18631,7 +18721,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18793,7 +18883,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18847,7 +18937,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18901,7 +18991,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18955,7 +19045,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19120,7 +19210,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19174,10 +19264,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19234,7 +19324,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19707,7 +19797,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20288,6 +20378,9 @@ DX_RULES="${DX_SNIPPET_doc}" CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" +if test x$HAVE_CUDA = x1; then : + LIBS="$LIBS -L. -lcufft_static_pruned" +fi ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile" diff --git a/configure.ac b/configure.ac index 118c26779..69d17f351 100644 --- a/configure.ac +++ b/configure.ac @@ -53,9 +53,11 @@ AC_CHECK_HEADER_STDBOOL AC_FUNC_MALLOC AX_OPENMP +AS_IF([! echo $DEFS | grep OPENMP], + [AC_SUBST(HAVE_OPENMP, 1)]) AS_IF([test x$HAVE_OPENMP != x1], - [CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" - CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"]) + [CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0"], + [CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"]) AC_CHECK_TYPES([ptrdiff_t]) AC_TYPE_INT16_T @@ -74,32 +76,7 @@ AC_TYPE_UINT8_T # CUDA # -AC_ARG_WITH([cuda_home], - [AS_HELP_STRING([--with-cuda-home], - [CUDA install path (default=/usr/local/cuda)])], - [], - [with_cuda_home=/usr/local/cuda]) -AC_SUBST(CUDA_HOME, $with_cuda_home) -AC_ARG_ENABLE([cuda], - [AS_HELP_STRING([--disable-cuda], - [disable cuda support (default=no)])], - [enable_cuda=no], - [enable_cuda=yes]) -AS_IF([test x$enable_cuda != xno], - [AX_WITH_PROG(NVCC, nvcc, [], [AC_SUBST(HAVE_CUDA, 0)]) - AX_WITH_PROG(NVPRUNE, nvprune, [], [AC_SUBST(HAVE_CUDA, 0)]) - AX_WITH_PROG(CUOBJDUMP, cuobjdump, [], [AC_SUBST(HAVE_CUDA, 0)])], - [AC_SUBST(HAVE_CUDA, 0)]) -AS_IF([test x$HAVE_CUDA = x1], - [CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt"]) -AC_ARG_WITH([nvcc_flags], - [AS_HELP_STRING([--with-nvcc-flags], - [flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"')])], - [], - [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) -AC_SUBST(NVCCFLAGS, $with_nvcc_flags) +AX_CHECK_CUDA AC_ARG_WITH([gpu_archs], [AS_HELP_STRING([--with-gpu-archs=...], @@ -122,11 +99,11 @@ AS_IF([test x$HAVE_CUDA = x1], AC_ARG_ENABLE([numa], AS_HELP_STRING([--disable-numa], - [disable NUMA support (default=no)]), + [disable numa support (default=no)]), [enable_numa=no], [enable_numa=yes]) AS_IF([test x$enable_numa != xno], - [AC_CHECK_LIB([numa], [numa_tonode_memory], + [AC_CHECK_LIB([numa], [numa_node_of_cpu], [CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" LIBS="$LIBS -lnuma"])]) @@ -216,7 +193,7 @@ AS_IF([test x$enable_cuda_debug != xno], AX_WITH_PROG(PYTHON, python) AS_IF([test x${PYTHON} != x], [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) - AS_IF([! test $(PYTHON) -c "import ctypesgen"], + AS_IF([! ${PYTHON} -c "import ctypesgen"], [AC_MSG_RESULT([no]) AC_MSG_WARN([python module will not be built])], [AC_MSG_RESULT([yes]) @@ -241,7 +218,7 @@ AC_SUBST(PYINSTALLFLAGS, $with_pyinstall_flags) # AX_WITH_PROG(DOCKER, docker) -AS_IF([test x${PYTHON} != x], +AS_IF([test x${DOCKER} != x], [AC_SUBST(HAVE_DOCKER, 1)]) # @@ -265,6 +242,8 @@ DX_INIT_DOXYGEN([bifrost]) CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" +AS_IF([test x$HAVE_CUDA = x1], + [LIBS="$LIBS -L. -lcufft_static_pruned"]) AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile]) diff --git a/src/Makefile.in b/src/Makefile.in index 675fed232..936a19642 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -18,8 +18,6 @@ HAVE_CUDA ?= @HAVE_CUDA@ GPU_ARCHS ?= @GPU_ARCHS@ -GPU_SHAREDMEM ?= @GPU_SHAREDMEM@ - CUDA_HOME ?= @CUDA_HOME@ CUDA_LIBDIR ?= $(CUDA_HOME)/lib CUDA_LIBDIR64 ?= $(CUDA_HOME)/lib64 @@ -40,7 +38,7 @@ LIBBIFROST_OBJS = \ udp_socket.o \ udp_capture.o \ udp_transmit.o -ifeq (HAVE_CUDA,1) +ifeq ($(HAVE_CUDA),1) # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ transpose.o \ @@ -69,7 +67,7 @@ JIT_SOURCES ?= \ MAKEFILES = ../config.mk Makefile -ifeq (HAVE_CUDA,1) +ifeq ($(HAVE_CUDA),1) # All CUDA archs supported by this version of nvcc GPU_ARCHS_SUPPORTED := $(shell $(NVCC) -h | grep -Po "compute_[0-9]{2}" | cut -d_ -f2 | sort | uniq) # Intersection of user-specified archs and supported archs @@ -84,7 +82,7 @@ NVCC_GENCODE ?= $(foreach arch, $(GPU_ARCHS_VALID), \ endif CXXFLAGS += -std=c++11 -NVCCFLAGS += -std=c++11 $(NVCC_GENCODE) -DBF_GPU_SHAREDMEM=$(GPU_SHAREDMEM) +NVCCFLAGS += -std=c++11 $(NVCC_GENCODE) #NVCCFLAGS += -Xcudafe "--diag_suppress=unrecognized_gcc_pragma" #NVCCFLAGS += --expt-relaxed-constexpr @@ -111,7 +109,7 @@ $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h echo " *;" >> $@ echo "};" >> $@ -ifeq (HAVE_CUDA,1) +ifeq ($(HAVE_CUDA),1) # TODO: Need to deal with 32/64 detection here LIBCUFFT_STATIC = $(CUDA_LIBDIR64)/libcufft_static.a # All PTX archs included in the lib (typically only one) From c0bb31e75f90af2ec1d6896c3d518f911853cf5e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 17:38:47 -0600 Subject: [PATCH 0254/1155] More fixes for CUDA and OpenMP detection. --- config/cuda.m4 | 6 +++--- configure | 14 ++++++-------- configure.ac | 7 ++++--- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 4f4cbff1d..ffc4df83e 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -18,9 +18,9 @@ AC_DEFUN([AX_CHECK_CUDA], if test "$enable_cuda" != "no"; then AC_SUBST([HAVE_CUDA], [1]) - AC_PATH_PROG(NVCC, nvcc, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) - AC_PATH_PROG(NVPRUNE, nvprune, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) - AC_PATH_PROG(CUOBJDUMP, cuobjdump, [AC_SUBST(HAVE_CUDA, 0)], [$CUDA_HOME/bin:$PATH]) + AC_PATH_PROG(NVCC, nvcc, no, [$CUDA_HOME/bin:$PATH]) + AC_PATH_PROG(NVPRUNE, nvprune, no, [$CUDA_HOME/bin:$PATH]) + AC_PATH_PROG(CUOBJDUMP, cuobjdump, no, [$CUDA_HOME/bin:$PATH]) fi if test "$HAVE_CUDA" = "1"; then diff --git a/configure b/configure index c18183a95..7c62dd7da 100755 --- a/configure +++ b/configure @@ -17482,7 +17482,7 @@ $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi -if ! echo $DEFS | grep OPENMP; then : +if test x$OPENMP_CXXFLAGS != x; then : HAVE_OPENMP=1 fi @@ -17490,6 +17490,7 @@ if test x$HAVE_OPENMP != x1; then : CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" else CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" + LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" @@ -17693,8 +17694,7 @@ done done IFS=$as_save_IFS - test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="HAVE_CUDA=0 -" + test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="no" ;; esac fi @@ -17736,8 +17736,7 @@ done done IFS=$as_save_IFS - test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="HAVE_CUDA=0 -" + test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="no" ;; esac fi @@ -17779,8 +17778,7 @@ done done IFS=$as_save_IFS - test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="HAVE_CUDA=0 -" + test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="no" ;; esac fi @@ -18246,7 +18244,7 @@ fi if test x${PYTHON} != x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 $as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen"; then : + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 diff --git a/configure.ac b/configure.ac index 69d17f351..238048581 100644 --- a/configure.ac +++ b/configure.ac @@ -53,11 +53,12 @@ AC_CHECK_HEADER_STDBOOL AC_FUNC_MALLOC AX_OPENMP -AS_IF([! echo $DEFS | grep OPENMP], +AS_IF([test x$OPENMP_CXXFLAGS != x], [AC_SUBST(HAVE_OPENMP, 1)]) AS_IF([test x$HAVE_OPENMP != x1], [CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0"], - [CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"]) + [CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" + LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS"]) AC_CHECK_TYPES([ptrdiff_t]) AC_TYPE_INT16_T @@ -193,7 +194,7 @@ AS_IF([test x$enable_cuda_debug != xno], AX_WITH_PROG(PYTHON, python) AS_IF([test x${PYTHON} != x], [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) - AS_IF([! ${PYTHON} -c "import ctypesgen"], + AS_IF([! ${PYTHON} -c "import ctypesgen" 2>/dev/null], [AC_MSG_RESULT([no]) AC_MSG_WARN([python module will not be built])], [AC_MSG_RESULT([yes]) From 114cbc110883a4a3e0da977b57f9ff88d8ba0ae0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 17:50:05 -0600 Subject: [PATCH 0255/1155] Allow Py2 to fail and try OSX. --- .travis.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.travis.yml b/.travis.yml index d449142ab..a0f179bbf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,18 @@ python: services: - docker +jobs: + include: + - os: osx + osx_image: xcode12 + language: sh + env: + - HOMEBREW_NO_INSTALL_CLEANUP=1 + - HOMEBREW_NO_ANALYTICS=1 + allow_failures: + - python: 2.7 + - python: pypy2.7-6.0 + addons: apt: update: true @@ -27,6 +39,13 @@ addons: - exuberant-ctags - python-dev - pylint + homebrew: + update: false + packages: + - curl + - git + - pkg-config + - python3 jobs: include: From 97244f3ffb51e66d2ab74d6d716d60292bb297ea Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 17:52:59 -0600 Subject: [PATCH 0256/1155] Merge the two jobs sections. --- .travis.yml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index a0f179bbf..84a07e5cb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,12 @@ jobs: env: - HOMEBREW_NO_INSTALL_CLEANUP=1 - HOMEBREW_NO_ANALYTICS=1 + - stage: docker and deploy docs + python: 2.7 + script: + - make docker-cpu + - make docker + - bash ./.travis_deploy_docs.sh allow_failures: - python: 2.7 - python: pypy2.7-6.0 @@ -47,15 +53,6 @@ addons: - pkg-config - python3 -jobs: - include: - - stage: docker and deploy docs - python: 2.7 - script: - - make docker-cpu - - make docker - - bash ./.travis_deploy_docs.sh - script: - sudo pip --no-cache-dir install \ setuptools \ From c80840ecdc4fd5899bed2a5c7a7303552b878140 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 18:06:19 -0600 Subject: [PATCH 0257/1155] Makefile.in fixes. --- Makefile.in | 8 ++++---- python/Makefile.in | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Makefile.in b/Makefile.in index 7babc22ec..e6409fd0b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -41,7 +41,7 @@ doc: $(INC_DIR)/bifrost/*.h Doxyfile .PHONY: doc python: libbifrost -ifeq ($HAVE_PYTHON,1) +ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) build endif .PHONY: python @@ -49,7 +49,7 @@ endif #GPU Docker build IMAGE_NAME ?= ledatelescope/bifrost docker: -ifeq ($HAVE_DOCKER,1) +ifeq ($(HAVE_DOCKER),1) docker build --pull -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile.gpu -t $(IMAGE_NAME) . endif .PHONY: docker @@ -58,7 +58,7 @@ endif # (To be used for testing new builds rapidly) IMAGE_NAME ?= ledatelescope/bifrost docker_prereq: -ifeq ($HAVE_DOCKER,1) +ifeq ($(HAVE_DOCKER),1) docker build --pull -t $(IMAGE_NAME)_prereq:$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile_prereq.gpu -t $(IMAGE_NAME)_prereq . endif .PHONY: docker_prereq @@ -66,7 +66,7 @@ endif #CPU-only Docker build IMAGE_NAME ?= ledatelescope/bifrost docker-cpu: -ifeq ($HAVE_DOCKER,1) +ifeq ($(HAVE_DOCKER),1) docker build --pull -t $(IMAGE_NAME):$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) -f Dockerfile.cpu -t $(IMAGE_NAME) . endif .PHONY: docker diff --git a/python/Makefile.in b/python/Makefile.in index 1e242de85..61702fabe 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -23,14 +23,14 @@ $(BIFROST_PYTHON_VERSION_FILE): ../config.mk define run_ctypesgen @PYTHON@ -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -l$1 -I$2 $^ -o $@ # WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p) - sed -i 's/POINTER(c_char)/c_char_p/g' $@ + sed -i -e 's/POINTER(c_char)/c_char_p/g' $@ # WAR for a buggy WAR in ctypesgen that breaks type checking and auto-byref functionality - sed -i 's/def POINTER/def POINTER_not_used/' $@ + sed -i -e 's/def POINTER/def POINTER_not_used/' $@ # WAR for a buggy WAR in ctypesgen that breaks string buffer arguments (e.g., as in address.py) - sed -i 's/class String/String = c_char_p\nclass String_not_used/' $@ - sed -i 's/String.from_param/String_not_used.from_param/g' $@ - sed -i 's/def ReturnString/ReturnString = c_char_p\ndef ReturnString_not_used/' $@ - sed -i '/errcheck = ReturnString/s/^/#/' $@ + sed -i -e 's/class String/String = c_char_p\nclass String_not_used/' $@ + sed -i -e 's/String.from_param/String_not_used.from_param/g' $@ + sed -i -e 's/def ReturnString/ReturnString = c_char_p\ndef ReturnString_not_used/' $@ + sed -i -e '/errcheck = ReturnString/s/^/#/' $@ endef ifeq "$(wildcard $(PSRDADA_HEADERS))" "" @@ -41,7 +41,7 @@ $(PSRDADA_PYTHON_BINDINGS_FILE): $(PSRDADA_HEADERS) $(call run_ctypesgen,psrdada,$(PSRHOME)/include) # WAR for psrdada API using char* instead of void* for buffer pointers, which # otherwise get inadvertently converted to Python strings. - sed -i 's/c_char_p/POINTER(c_char)/g' $@ + sed -i -e 's/c_char_p/POINTER(c_char)/g' $@ $(BIFROST_PYTHON_BINDINGS_FILE): $(INC_DIR)/bifrost/*.h $(call run_ctypesgen,$(BIFROST_NAME),$(INC_DIR)) From 5c0dc0dd09f2a838988a6c2d5dc7e4e03aaf5e42 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 18:25:43 -0600 Subject: [PATCH 0258/1155] More Python building cleanups. --- python/Makefile.in | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/python/Makefile.in b/python/Makefile.in index 61702fabe..a0577d6d8 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -23,14 +23,14 @@ $(BIFROST_PYTHON_VERSION_FILE): ../config.mk define run_ctypesgen @PYTHON@ -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -l$1 -I$2 $^ -o $@ # WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p) - sed -i -e 's/POINTER(c_char)/c_char_p/g' $@ + @SED@ -i.orig -e 's/POINTER(c_char)/c_char_p/g' $@ # WAR for a buggy WAR in ctypesgen that breaks type checking and auto-byref functionality - sed -i -e 's/def POINTER/def POINTER_not_used/' $@ + @SED@ -i.orig -e 's/def POINTER/def POINTER_not_used/' $@ # WAR for a buggy WAR in ctypesgen that breaks string buffer arguments (e.g., as in address.py) - sed -i -e 's/class String/String = c_char_p\nclass String_not_used/' $@ - sed -i -e 's/String.from_param/String_not_used.from_param/g' $@ - sed -i -e 's/def ReturnString/ReturnString = c_char_p\ndef ReturnString_not_used/' $@ - sed -i -e '/errcheck = ReturnString/s/^/#/' $@ + @SED@ -i.orig -e 's/class String/String = c_char_p\nclass String_not_used/' $@ + @SED@ -i.orig -e 's/String.from_param/String_not_used.from_param/g' $@ + @SED@ -i.orig -e 's/def ReturnString/ReturnString = c_char_p\ndef ReturnString_not_used/' $@ + @SED@ -i.orig -e '/errcheck = ReturnString/s/^/#/' $@ endef ifeq "$(wildcard $(PSRDADA_HEADERS))" "" @@ -41,17 +41,17 @@ $(PSRDADA_PYTHON_BINDINGS_FILE): $(PSRDADA_HEADERS) $(call run_ctypesgen,psrdada,$(PSRHOME)/include) # WAR for psrdada API using char* instead of void* for buffer pointers, which # otherwise get inadvertently converted to Python strings. - sed -i -e 's/c_char_p/POINTER(c_char)/g' $@ + @SED@ -i.orig -e 's/c_char_p/POINTER(c_char)/g' $@ $(BIFROST_PYTHON_BINDINGS_FILE): $(INC_DIR)/bifrost/*.h $(call run_ctypesgen,$(BIFROST_NAME),$(INC_DIR)) build: bifrost/*.py Makefile $(BIFROST_PYTHON_VERSION_FILE) $(BIFROST_PYTHON_BINDINGS_FILE) $(PSRDADA_PYTHON_BINDINGS_FILE) - @PYTHON@ setup.py build $(PYBUILDFLAGS) + @PYTHON@ setup.py build @PYBUILDFLAGS@ .PHONY: build install: build - @PYTHON@ setup.py install $(PYINSTALLFLAGS) + @PYTHON@ setup.py install @PYINSTALLFLAGS@ .PHONY: install clean: From e419edd87f6de70f206be6f43efadcc0c05bae6d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Oct 2021 18:30:27 -0600 Subject: [PATCH 0259/1155] Fill in awk as needed. --- src/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.in b/src/Makefile.in index 936a19642..e115b354c 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -104,7 +104,7 @@ $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h @echo -n "Generating $(LIBBIFROST_VERSION_FILE)\r" echo "VERS_$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) {" > $@ echo " global:" >> $@ - @CTAGS@ -x --c-kinds=p $^ | awk '{print " " $$1 ";"}' >> $@ + @CTAGS@ -x --c-kinds=p $^ | @AWK@ '{print " " $$1 ";"}' >> $@ echo " local:" >> $@ echo " *;" >> $@ echo "};" >> $@ From 0a727e66c7c48442258e20ce31bafee3534311fc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Oct 2021 09:21:11 -0600 Subject: [PATCH 0260/1155] Fixed ProcLog logging on OSX and added a config.h to control how Bifrost is built. --- config/tmpfs.m4 | 25 ++ configure | 482 +++++++++++--------------------------- configure.ac | 35 ++- python/bifrost/proclog.py | 4 +- src/Complex.hpp | 2 + src/affinity.cpp | 9 +- src/assert.hpp | 1 + src/bifrost/config.h.in | 67 ++++++ src/bifrost/memory.h | 4 - src/common.cpp | 3 +- src/cuda.hpp | 1 + src/map.cpp | 1 + src/memory.cpp | 1 + src/proclog.cpp | 3 +- src/quantize.cpp | 26 +- src/ring.cpp | 1 + src/ring_impl.cpp | 1 + src/romein.cu | 1 + src/trace.hpp | 1 + src/transpose.cu | 1 + src/udp_capture.cpp | 1 + src/udp_transmit.cpp | 1 + src/unpack.cpp | 32 +-- src/utils.hpp | 1 + tools/like_bmon.py | 8 +- tools/like_ps.py | 4 +- tools/like_top.py | 4 +- tools/pipeline2dot.py | 4 +- 28 files changed, 319 insertions(+), 405 deletions(-) create mode 100644 config/tmpfs.m4 create mode 100644 src/bifrost/config.h.in diff --git a/config/tmpfs.m4 b/config/tmpfs.m4 new file mode 100644 index 000000000..1ee5ffcb1 --- /dev/null +++ b/config/tmpfs.m4 @@ -0,0 +1,25 @@ +AC_DEFUN([AX_CHECK_TMPFS], +[ + AC_PROVIDE([AX_CHECK_TMPFS]) + + AC_SUBST([HAVE_TMPFS], [/tmp]) + + if test "$HAVE_TMPFS" = "/tmp"; then + AC_CHECK_FILE([/dev/shm], + [AC_SUBST([HAVE_TMPFS], [/dev/shm/bifrost])]) + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + AC_CHECK_FILE([/Volumes/RAMDisk], + [AC_SUBST([HAVE_TMPFS], [/Volumes/RAMDisk/bifrost])]) + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + AC_CHECK_FILE([/tmp], + [AC_SUBST([HAVE_TMPFS], [/tmp])]) + AC_MSG_WARN([$HAVE_TMPFS may have performance problems for logging]) + AC_SUBST([HAVE_TMPFS], [/tmp/bifrost]) + fi + + CPPFLAGS="$CPPFLAGS -DBF_PROCLOG_DIR='\"$HAVE_TMPFS\"'" +]) diff --git a/configure b/configure index 7c62dd7da..b75a112db 100755 --- a/configure +++ b/configure @@ -676,6 +676,15 @@ PYINSTALLFLAGS PYBUILDFLAGS HAVE_PYTHON PYTHON +HAVE_CUDA_DEBUG +HAVE_TRACE +HAVE_DEBUG +HAVE_TMPFS +ALIGNMENT +HAVE_VMA +HAVE_HWLOC +HAVE_NUMA +GPU_SHAREDMEM GPU_ARCHS NVCCFLAGS CUOBJDUMP @@ -755,7 +764,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -871,7 +879,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1124,15 +1131,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1270,7 +1268,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1423,7 +1421,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -16472,312 +16469,6 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 -$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } -if ${ax_cv_cxx_compile_cxx11+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201103L - -#error "This is not a C++11 compiler" - -#else - -namespace cxx11 -{ - - namespace test_static_assert - { - - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; - - } - - namespace test_final_override - { - - struct Base - { - virtual void f() {} - }; - - struct Derived : public Base - { - virtual void f() override {} - }; - - } - - namespace test_double_right_angle_brackets - { - - template < typename T > - struct check {}; - - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; - - } - - namespace test_decltype - { - - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - - } - - namespace test_type_deduction - { - - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - - template < typename T > - struct is_same - { - static const bool value = true; - }; - - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - - } - - namespace test_noexcept - { - - int f() { return 0; } - int g() noexcept { return 0; } - - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); - - } - - namespace test_constexpr - { - - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } - - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); - - } - - namespace test_rvalue_references - { - - template < int N > - struct answer - { - static constexpr int value = N; - }; - - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } - - } - - namespace test_uniform_initialization - { - - struct test - { - static const int zero {}; - static const int one {1}; - }; - - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - - } - - namespace test_lambdas - { - - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } - - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } - - } - - namespace test_variadic_templates - { - - template - struct sum; - - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; - - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - - } - - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - - struct foo {}; - - template - using member = typename T::member_type; - - template - void func(...) {} - - template - void func(member*) {} - - void test(); - - void test() { func(0); } - - } - -} // namespace cxx11 - -#endif // __cplusplus >= 201103L - - - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ax_cv_cxx_compile_cxx11=yes -else - ax_cv_cxx_compile_cxx11=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 -$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } - if test x$ax_cv_cxx_compile_cxx11 = xyes; then - ac_success=yes - fi @@ -17129,7 +16820,6 @@ $as_echo "#define HAVE_CXX11 1" >>confdefs.h fi - for ac_func in memset do : ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" @@ -17413,6 +17103,8 @@ fi +HAVE_OPENMP=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 @@ -17487,7 +17179,7 @@ if test x$OPENMP_CXXFLAGS != x; then : fi if test x$HAVE_OPENMP != x1; then : - CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0" + else CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" @@ -17870,9 +17562,8 @@ else with_shared_mem=16384 fi -if test x$HAVE_CUDA = x1; then : - NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem" -fi +GPU_SHAREDMEM=$with_shared_mem + # # NUMA @@ -17885,6 +17576,8 @@ else enable_numa=yes fi +HAVE_NUMA=0 + if test x$enable_numa != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 $as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } @@ -17923,7 +17616,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 $as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : - CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" + HAVE_NUMA=1 + LIBS="$LIBS -lnuma" fi @@ -17940,6 +17634,8 @@ else enable_hwloc=yes fi +HAVE_HWLOC=0 + if test x$enable_hwloc != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 $as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } @@ -17978,7 +17674,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 $as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : - CPPFLAGS="$CPPFLAGS -DBF_HWLOC_ENABLED=1" + HAVE_HWLOC=1 + LIBS="$LIBS -lhwloc" fi @@ -17995,6 +17692,8 @@ else enable_vma=no fi +HAVE_VMA=0 + if test x$enable_vma != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 $as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } @@ -18033,7 +17732,8 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 $as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : - CPPFLAGS="$CPPFLAGS -DBF_VMA_ENABLED=1" + HAVE_VMA=1 + LIBS="$LIBS -lvma" fi @@ -18051,7 +17751,94 @@ else with_alignment=4096 fi -CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" +ALIGNMENT=$with_alignment + + +# +# Bifrost proclog location +# + + + + + HAVE_TMPFS=/tmp + + + if test "$HAVE_TMPFS" = "/tmp"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +$as_echo_n "checking for /dev/shm... " >&6; } +if ${ac_cv_file__dev_shm+:} false; then : + $as_echo_n "(cached) " >&6 +else + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/dev/shm"; then + ac_cv_file__dev_shm=yes +else + ac_cv_file__dev_shm=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +$as_echo "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes; then : + HAVE_TMPFS=/dev/shm/bifrost + +fi + + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +$as_echo_n "checking for /Volumes/RAMDisk... " >&6; } +if ${ac_cv_file__Volumes_RAMDisk+:} false; then : + $as_echo_n "(cached) " >&6 +else + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/Volumes/RAMDisk"; then + ac_cv_file__Volumes_RAMDisk=yes +else + ac_cv_file__Volumes_RAMDisk=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +$as_echo "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes; then : + HAVE_TMPFS=/Volumes/RAMDisk/bifrost + +fi + + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +$as_echo_n "checking for /tmp... " >&6; } +if ${ac_cv_file__tmp+:} false; then : + $as_echo_n "(cached) " >&6 +else + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/tmp"; then + ac_cv_file__tmp=yes +else + ac_cv_file__tmp=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +$as_echo "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes; then : + HAVE_TMPFS=/tmp + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +$as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + HAVE_TMPFS=/tmp/bifrost + + fi + + CPPFLAGS="$CPPFLAGS -DBF_PROCLOG_DIR='\"$HAVE_TMPFS\"'" + # # Bifrost Features @@ -18064,8 +17851,11 @@ else enable_debug=no fi +HAVE_DEBUG=0 + if test x$enable_debug != xno; then : - CPPFLAGS="$CPPFLAGS -DBF_DEBUG=1" + HAVE_DEBUG=1 + CXXFLAGS="$CXXFLAGS -g" NVCCFLAGS="$NVCCFLAGS -g" fi @@ -18077,8 +17867,11 @@ else enable_trace=no fi +HAVE_TRACE=0 + if test x$enable_trace != xno; then : - CPPFLAGS="$CPPFLAGS -DBF_TRACE_ENABLED=1" + HAVE_TRACE=1 + fi # Check whether --enable-native_arch was given. @@ -18102,8 +17895,12 @@ else enable_cuda_debug=no fi +HAVE_CUDA_DEBUG=0 + if test x$enable_cuda_debug != xno; then : - NVCCFLAGS="$NVCCFLAGS -G" + HAVE_CUDA_DEBUG=1 + + NVCCFLAGS="$NVCCFLAGS -G" fi # @@ -18719,7 +18516,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18881,7 +18678,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18935,7 +18732,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18989,7 +18786,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19043,7 +18840,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19208,7 +19005,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19262,10 +19059,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19322,7 +19119,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19795,7 +19592,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20380,7 +20177,7 @@ if test x$HAVE_CUDA = x1; then : LIBS="$LIBS -L. -lcufft_static_pruned" fi -ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile" +ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h" cat >confcache <<\_ACEOF @@ -21484,6 +21281,7 @@ do "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; + "src/bifrost/config.h") CONFIG_FILES="$CONFIG_FILES src/bifrost/config.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac diff --git a/configure.ac b/configure.ac index 238048581..2bd5ef0b3 100644 --- a/configure.ac +++ b/configure.ac @@ -52,11 +52,12 @@ AC_CHECK_HEADERS([sys/socket.h]) AC_CHECK_HEADER_STDBOOL AC_FUNC_MALLOC +AC_SUBST(HAVE_OPENMP, 0) AX_OPENMP AS_IF([test x$OPENMP_CXXFLAGS != x], [AC_SUBST(HAVE_OPENMP, 1)]) AS_IF([test x$HAVE_OPENMP != x1], - [CPPFLAGS="$CPPFLAGS -DBF_OPENMP=0"], + [], [CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS"]) @@ -91,8 +92,7 @@ AC_ARG_WITH([shared_mem], [default GPU shared memory in bytes (default=16384)])], [], [with_shared_mem=16384]) -AS_IF([test x$HAVE_CUDA = x1], - [NVCCFLAGS="$NVCCFLAGS -DBF_GPU_SHAREDMEM=$with_shared_mem"]) +AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) # # NUMA @@ -103,9 +103,10 @@ AC_ARG_ENABLE([numa], [disable numa support (default=no)]), [enable_numa=no], [enable_numa=yes]) +AC_SUBST([HAVE_NUMA], [0]) AS_IF([test x$enable_numa != xno], [AC_CHECK_LIB([numa], [numa_node_of_cpu], - [CPPFLAGS="$CPPFLAGS -DBF_NUMA_ENABLED=1" + [AC_SUBST([HAVE_NUMA], [1]) LIBS="$LIBS -lnuma"])]) # @@ -117,9 +118,10 @@ AC_ARG_ENABLE([hwloc], [disable hwloc support (default=no)]), [enable_hwloc=no], [enable_hwloc=yes]) +AC_SUBST([HAVE_HWLOC], [0]) AS_IF([test x$enable_hwloc != xno], [AC_CHECK_LIB([hwloc], [hwloc_topology_init], - [CPPFLAGS="$CPPFLAGS -DBF_HWLOC_ENABLED=1" + [AC_SUBST([HAVE_HWLOC], [1]) LIBS="$LIBS -lhwloc"])]) # @@ -131,9 +133,10 @@ AC_ARG_ENABLE([vma], [enable vma support (default=no)]), [enable_vma=yes], [enable_vma=no]) +AC_SUBST([HAVE_VMA], [0]) AS_IF([test x$enable_vma != xno], [AC_CHECK_LIB([vma], [recvfrom_zcopy], - [CPPFLAGS="$CPPFLAGS -DBF_VMA_ENABLED=1" + [AC_SUBST([HAVE_VMA], [1]) LIBS="$LIBS -lvma"])]) # @@ -145,7 +148,13 @@ AC_ARG_WITH([alignment], [default memory alignment in bytes (default=4096)])], [], [with_alignment=4096]) -CPPFLAGS="$CPPFLAGS -DBF_ALIGNMENT=$with_alignment" +AC_SUBST([ALIGNMENT], [$with_alignment]) + +# +# Bifrost proclog location +# + +AX_CHECK_TMPFS # # Bifrost Features @@ -156,8 +165,9 @@ AC_ARG_ENABLE([debug], [enable debugging mode (default=no)])], [enable_debug=yes], [enable_debug=no]) +AC_SUBST([HAVE_DEBUG], [0]) AS_IF([test x$enable_debug != xno], - [CPPFLAGS="$CPPFLAGS -DBF_DEBUG=1" + [AC_SUBST([HAVE_DEBUG], [1]) CXXFLAGS="$CXXFLAGS -g" NVCCFLAGS="$NVCCFLAGS -g"]) @@ -166,8 +176,9 @@ AC_ARG_ENABLE([trace], [enable tracing mode for nvprof/nvvp (default=no)])], [enable_trace=yes], [enable_trace=no]) +AC_SUBST([HAVE_TRACE], [0]) AS_IF([test x$enable_trace != xno], - [CPPFLAGS="$CPPFLAGS -DBF_TRACE_ENABLED=1"]) + [AC_SUBST([HAVE_TRACE], [1])]) AC_ARG_ENABLE([native_arch], [AS_HELP_STRING([--disable-native-arch], @@ -184,8 +195,10 @@ AC_ARG_ENABLE([cuda_debug], [enable CUDA debugging (nvcc -G; default=no)])], [enable_cuda_debug=yes], [enable_cuda_debug=no]) +AC_SUBST([HAVE_CUDA_DEBUG], [0]) AS_IF([test x$enable_cuda_debug != xno], - [NVCCFLAGS="$NVCCFLAGS -G"]) + [AC_SUBST([HAVE_CUDA_DEBUG], [1]) + NVCCFLAGS="$NVCCFLAGS -G"]) # # Python @@ -246,6 +259,6 @@ NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" AS_IF([test x$HAVE_CUDA = x1], [LIBS="$LIBS -L. -lcufft_static_pruned"]) -AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile]) +AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h]) AC_OUTPUT diff --git a/python/bifrost/proclog.py b/python/bifrost/proclog.py index 490962d45..91bbd2c0f 100644 --- a/python/bifrost/proclog.py +++ b/python/bifrost/proclog.py @@ -36,6 +36,8 @@ import os import time +PROCLOG_DIR = _bf.BF_PROCLOG_DIR + class ProcLog(BifrostObject): def __init__(self, name): try: @@ -120,7 +122,7 @@ def load_by_pid(pid, include_rings=False): # Make sure we have a directory to load from - baseDir = os.path.join('/dev/shm/bifrost/', str(pid)) + baseDir = os.path.join(PROCLOG_DIR, str(pid)) if not os.path.isdir(baseDir): raise RuntimeError("Cannot find log directory associated with PID %s" % pid) diff --git a/src/Complex.hpp b/src/Complex.hpp index 47f218f3c..7f5ecc2c0 100644 --- a/src/Complex.hpp +++ b/src/Complex.hpp @@ -28,6 +28,8 @@ #pragma once +#include + #if BF_CUDA_ENABLED #include #endif diff --git a/src/affinity.cpp b/src/affinity.cpp index a547f0ebc..39f143a5f 100644 --- a/src/affinity.cpp +++ b/src/affinity.cpp @@ -27,14 +27,11 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include "assert.hpp" -#ifndef BF_OPENMP -#define BF_OPENMP 1 -#endif - -#if BF_OPENMP == 1 +#if BF_OPENMP_ENABLED #include #endif @@ -177,7 +174,7 @@ BFstatus bfAffinityGetCore(int* core) { } BFstatus bfAffinitySetOpenMPCores(BFsize nthread, const int* thread_cores) { -#if BF_OPENMP == 1 +#if BF_OPENMP_ENABLED int host_core = -1; // TODO: Check these for errors bfAffinityGetCore(&host_core); diff --git a/src/assert.hpp b/src/assert.hpp index 1acc135a0..e2d76e151 100644 --- a/src/assert.hpp +++ b/src/assert.hpp @@ -29,6 +29,7 @@ #pragma once +#include #include #include diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in new file mode 100644 index 000000000..3748db126 --- /dev/null +++ b/src/bifrost/config.h.in @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021, The Bifrost Authors. All rights reserved. + * Copyright (c) 2021, The University of New Mexico. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/*! \file config.h + * \brief Configuration parameters used for building the library + */ + +#ifndef BF_CONFIG_H_INCLUDE_GUARD_ +#define BF_CONFIG_H_INCLUDE_GUARD_ + +#ifdef __cplusplus +extern "C" { +#endif + +// Memory alignment +#define BF_ALIGNMENT @ALIGNMENT@ + +// CUDA support +#define BF_CUDA_ENABLED @HAVE_CUDA@ +#define BF_GPU_ARCHS "@GPU_ARCHS@" +#define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ + +// Features +#define BF_OPENMP_ENABLED @HAVE_OPENMP@ +#define BF_NUMA_ENABLED @HAVE_NUMA@ +#define BF_HWLOC_ENABLED @HAVE_HWLOC@ +#define BF_VMA_ENABLED @HAVE_VMA@ + +// Debugging features +#define BF_DEBUG_ENABLED @HAVE_DEBUG@ +#define BF_HAVE_TRACE @HAVE_TRACE@ +#define BF_CUDA_DEBUG_ENABLED @HAVE_CUDA_DEBUG@ + +// Logging directory +#define BF_PROCLOG_DIR "@HAVE_TMPFS@" + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // BF_CONFIG_H_INCLUDE_GUARD_ diff --git a/src/bifrost/memory.h b/src/bifrost/memory.h index 653a701f0..48624ae3c 100644 --- a/src/bifrost/memory.h +++ b/src/bifrost/memory.h @@ -40,10 +40,6 @@ extern "C" { #endif -#ifndef BF_ALIGNMENT - #define BF_ALIGNMENT 4096//512 -#endif - typedef enum BFspace_ { BF_SPACE_AUTO = 0, BF_SPACE_SYSTEM = 1, // aligned_alloc diff --git a/src/common.cpp b/src/common.cpp index a595de8ed..ac75391af 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -27,6 +27,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include @@ -83,7 +84,7 @@ BFstatus bfSetDebugEnabled(BFbool b) { #endif } BFbool bfGetCudaEnabled() { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED return BF_CUDA_ENABLED; #else return false; diff --git a/src/cuda.hpp b/src/cuda.hpp index a410ecb7a..0f0be3ea8 100644 --- a/src/cuda.hpp +++ b/src/cuda.hpp @@ -28,6 +28,7 @@ #pragma once +#include #include #include "assert.hpp" diff --git a/src/map.cpp b/src/map.cpp index a8b627b3e..f49dfc414 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -42,6 +42,7 @@ bfMap(3, c.shape, {"dm", "t"}, #define BF_MAP_KERNEL_CACHE_SIZE 128 #endif +#include #include #include "cuda.hpp" diff --git a/src/memory.cpp b/src/memory.cpp index 881b328c5..2b2abb57b 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -27,6 +27,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include "utils.hpp" #include "cuda.hpp" diff --git a/src/proclog.cpp b/src/proclog.cpp index e0380dfe7..dfd900063 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -26,6 +26,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include "trace.hpp" #include "proclog.hpp" @@ -101,7 +102,7 @@ class LockFile { }; class ProcLogMgr { - static constexpr const char* base_logdir = "/dev/shm/bifrost"; + static constexpr const char* base_logdir = BF_PROCLOG_DIR; std::string _logdir; std::set _logs; std::set _created_dirs; diff --git a/src/quantize.cpp b/src/quantize.cpp index ebdfede9f..f73ef6390 100644 --- a/src/quantize.cpp +++ b/src/quantize.cpp @@ -34,7 +34,7 @@ #include -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED #include "cuda.hpp" #include "trace.hpp" #include @@ -251,7 +251,7 @@ BFstatus bfQuantize(BFarray const* in, BF_ASSERT(is_contiguous(in), BF_STATUS_UNSUPPORTED_STRIDE); BF_ASSERT(is_contiguous(out), BF_STATUS_UNSUPPORTED_STRIDE); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED BF_ASSERT(space_accessible_from(in->space, BF_SPACE_SYSTEM) || (space_accessible_from(in->space, BF_SPACE_CUDA) && space_accessible_from(out->space, BF_SPACE_CUDA)), BF_STATUS_UNSUPPORTED_SPACE); BF_ASSERT(space_accessible_from(out->space, BF_SPACE_SYSTEM) || (space_accessible_from(in->space, BF_SPACE_CUDA) && space_accessible_from(out->space, BF_SPACE_CUDA)), @@ -267,7 +267,7 @@ BFstatus bfQuantize(BFarray const* in, bool byteswap_in = ( in->big_endian != is_big_endian()); bool byteswap_out = (out->big_endian != is_big_endian()); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { BF_ASSERT(nelement<=(size_t)512*65535*65535, BF_STATUS_UNSUPPORTED_SHAPE); } @@ -280,7 +280,7 @@ BFstatus bfQuantize(BFarray const* in, QuantizeFunctor \ (scale,byteswap_in,byteswap_out)) -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED #define CALL_FOREACH_SIMPLE_GPU_QUANTIZE(itype,stype,otype) \ { \ BF_TRACE(); \ @@ -301,7 +301,7 @@ BFstatus bfQuantize(BFarray const* in, case BF_DTYPE_CI1: nelement *= 2; case BF_DTYPE_I1: { BF_ASSERT(nelement % 8 == 0, BF_STATUS_INVALID_SHAPE); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { BF_TRACE(); BF_TRACE_STREAM(g_cuda_stream); @@ -330,7 +330,7 @@ BFstatus bfQuantize(BFarray const* in, case BF_DTYPE_CI2: nelement *= 2; case BF_DTYPE_I2: { BF_ASSERT(nelement % 4 == 0, BF_STATUS_INVALID_SHAPE); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { BF_TRACE(); BF_TRACE_STREAM(g_cuda_stream); @@ -359,7 +359,7 @@ BFstatus bfQuantize(BFarray const* in, case BF_DTYPE_CI4: nelement *= 2; case BF_DTYPE_I4: { BF_ASSERT(nelement % 2 == 0, BF_STATUS_INVALID_SHAPE); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { BF_TRACE(); BF_TRACE_STREAM(g_cuda_stream); @@ -387,7 +387,7 @@ BFstatus bfQuantize(BFarray const* in, } case BF_DTYPE_CI8: nelement *= 2; case BF_DTYPE_I8: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_QUANTIZE(float,float,int8_t); } else { @@ -400,7 +400,7 @@ BFstatus bfQuantize(BFarray const* in, } case BF_DTYPE_CI16: nelement *= 2; case BF_DTYPE_I16: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_QUANTIZE(float,float,int16_t); } else { @@ -413,7 +413,7 @@ BFstatus bfQuantize(BFarray const* in, } case BF_DTYPE_CI32: nelement *= 2; case BF_DTYPE_I32: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_QUANTIZE(float,double,int32_t); } else { @@ -425,7 +425,7 @@ BFstatus bfQuantize(BFarray const* in, break; } case BF_DTYPE_U8: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { } else { @@ -437,7 +437,7 @@ BFstatus bfQuantize(BFarray const* in, break; } case BF_DTYPE_U16: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_QUANTIZE(float,float,uint16_t); } else { @@ -449,7 +449,7 @@ BFstatus bfQuantize(BFarray const* in, break; } case BF_DTYPE_U32: { -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_QUANTIZE(float,double,uint32_t); } else { diff --git a/src/ring.cpp b/src/ring.cpp index ce0614b4a..cf96eb372 100644 --- a/src/ring.cpp +++ b/src/ring.cpp @@ -29,6 +29,7 @@ // TODO: Consider adding Add BF_TRY( ) to destructors too to ease debugging +#include #include #include "ring_impl.hpp" #include "assert.hpp" diff --git a/src/ring_impl.cpp b/src/ring_impl.cpp index 57da516df..cf80e854a 100644 --- a/src/ring_impl.cpp +++ b/src/ring_impl.cpp @@ -48,6 +48,7 @@ #include "ring_impl.hpp" #include "utils.hpp" #include "assert.hpp" +#include #include #include diff --git a/src/romein.cu b/src/romein.cu index 866bf869b..5e8ab85ee 100644 --- a/src/romein.cu +++ b/src/romein.cu @@ -32,6 +32,7 @@ Implements the Romein convolutional algorithm onto a GPU using CUDA. */ #include +#include #include #include "romein_kernels.cuh" diff --git a/src/trace.hpp b/src/trace.hpp index 783bf9489..13a127d0a 100644 --- a/src/trace.hpp +++ b/src/trace.hpp @@ -28,6 +28,7 @@ #pragma once +#include #include "cuda.hpp" #if BF_CUDA_ENABLED diff --git a/src/transpose.cu b/src/transpose.cu index 4acaafd96..67baecfc7 100644 --- a/src/transpose.cu +++ b/src/transpose.cu @@ -27,6 +27,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include "assert.hpp" diff --git a/src/udp_capture.cpp b/src/udp_capture.cpp index 87ca89133..aef972785 100644 --- a/src/udp_capture.cpp +++ b/src/udp_capture.cpp @@ -27,6 +27,7 @@ */ #include "assert.hpp" +#include #include #include #include diff --git a/src/udp_transmit.cpp b/src/udp_transmit.cpp index ef6ad9adb..7d91ee210 100644 --- a/src/udp_transmit.cpp +++ b/src/udp_transmit.cpp @@ -28,6 +28,7 @@ */ #include "assert.hpp" +#include #include #include #include "proclog.hpp" diff --git a/src/unpack.cpp b/src/unpack.cpp index 7266bd3f3..6095c185b 100644 --- a/src/unpack.cpp +++ b/src/unpack.cpp @@ -29,7 +29,7 @@ #include #include "utils.hpp" -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED #include "cuda.hpp" #include "trace.hpp" #include @@ -264,7 +264,7 @@ BFstatus bfUnpack(BFarray const* in, BF_ASSERT(is_contiguous(in), BF_STATUS_UNSUPPORTED_STRIDE); BF_ASSERT(is_contiguous(out), BF_STATUS_UNSUPPORTED_STRIDE); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED BF_ASSERT(space_accessible_from(in->space, BF_SPACE_SYSTEM) || (space_accessible_from(in->space, BF_SPACE_CUDA) && space_accessible_from(out->space, BF_SPACE_CUDA)), BF_STATUS_UNSUPPORTED_SPACE); BF_ASSERT(space_accessible_from(out->space, BF_SPACE_SYSTEM) || (space_accessible_from(in->space, BF_SPACE_CUDA) && space_accessible_from(out->space, BF_SPACE_CUDA)), @@ -280,7 +280,7 @@ BFstatus bfUnpack(BFarray const* in, bool byteswap = ( in->big_endian != is_big_endian()); bool conjugate = (in->conjugated != out->conjugated); -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { BF_ASSERT(nelement<=(size_t)512*65535*65535, BF_STATUS_UNSUPPORTED_SHAPE); } @@ -305,7 +305,7 @@ BFstatus bfUnpack(BFarray const* in, align_msb, \ conjugate)) -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED #define CALL_FOREACH_SIMPLE_GPU_UNPACK(itype,otype) \ { \ BF_TRACE(); \ @@ -343,7 +343,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I1: { BF_ASSERT(nelement % 8 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 8; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_UNPACK(uint8_t,int64_t); } else { @@ -358,7 +358,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I2: { BF_ASSERT(nelement % 4 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 4; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_UNPACK(uint8_t,int32_t); } else { @@ -373,7 +373,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I4: { BF_ASSERT(nelement % 2 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 2; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_UNPACK(uint8_t,int16_t); } else { @@ -390,7 +390,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_U2: { BF_ASSERT(nelement % 4 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 4; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_UNPACK(uint8_t,uint32_t); } else { @@ -404,7 +404,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_U4: { BF_ASSERT(nelement % 2 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 2; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_SIMPLE_GPU_UNPACK(uint8_t,uint16_t); } else { @@ -426,7 +426,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I1: { BF_ASSERT(nelement % 8 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 8; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int64_t,float); } else { @@ -441,7 +441,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I2: { BF_ASSERT(nelement % 4 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 4; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int32_t,float); } else { @@ -456,7 +456,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I4: { BF_ASSERT(nelement % 2 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 2; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int16_t,float); } else { @@ -478,7 +478,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I1: { BF_ASSERT(nelement % 8 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 8; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int64_t,double); } else { @@ -492,7 +492,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I2: { BF_ASSERT(nelement % 4 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 4; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int32_t,double); } else { @@ -507,7 +507,7 @@ BFstatus bfUnpack(BFarray const* in, case BF_DTYPE_I4: { BF_ASSERT(nelement % 2 == 0, BF_STATUS_INVALID_SHAPE); nelement /= 2; -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED if( space_accessible_from(in->space, BF_SPACE_CUDA) ) { CALL_FOREACH_PROMOTE_GPU_UNPACK(uint8_t,int16_t,double); } else { @@ -526,7 +526,7 @@ BFstatus bfUnpack(BFarray const* in, } #undef CALL_FOREACH_SIMPLE_CPU_UNPACK #undef CALL_FOREACH_PROMOTE_CPU_UNPACK -#ifdef BF_CUDA_ENABLED +#if BF_CUDA_ENABLED #undef CALL_FOREACH_SIMPLE_GPU_UNPACK #undef CALL_FOREACH_PROMOTE_GPU_UNPACK #endif diff --git a/src/utils.hpp b/src/utils.hpp index 710e3488b..c79bc2295 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -29,6 +29,7 @@ #pragma once +#include #include #include #include diff --git a/tools/like_bmon.py b/tools/like_bmon.py index 0448c7468..e89a9abf3 100755 --- a/tools/like_bmon.py +++ b/tools/like_bmon.py @@ -1,7 +1,7 @@ #!/usr/bin/env python -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2020, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -45,10 +45,10 @@ from io import StringIO os.environ['VMA_TRACELEVEL'] = '0' -from bifrost.proclog import load_by_pid +from bifrost.proclog import PROCLOG_DIR, load_by_pid -BIFROST_STATS_BASE_DIR = '/dev/shm/bifrost/' +BIFROST_STATS_BASE_DIR = PROCLOG_DIR def get_transmit_receive(): diff --git a/tools/like_ps.py b/tools/like_ps.py index 8fb0529e6..62da498de 100755 --- a/tools/like_ps.py +++ b/tools/like_ps.py @@ -36,10 +36,10 @@ import subprocess os.environ['VMA_TRACELEVEL'] = '0' -from bifrost.proclog import load_by_pid +from bifrost.proclog import PROCLOG_DIR, load_by_pid -BIFROST_STATS_BASE_DIR = '/dev/shm/bifrost/' +BIFROST_STATS_BASE_DIR = PROCLOG_DIR def get_process_details(pid): diff --git a/tools/like_top.py b/tools/like_top.py index b0dee865f..c29daaf4f 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -48,10 +48,10 @@ from io import StringIO os.environ['VMA_TRACELEVEL'] = '0' -from bifrost.proclog import load_by_pid +from bifrost.proclog import PROCLOG_DIR, load_by_pid -BIFROST_STATS_BASE_DIR = '/dev/shm/bifrost/' +BIFROST_STATS_BASE_DIR = PROCLOG_DIR def get_load_average(): diff --git a/tools/pipeline2dot.py b/tools/pipeline2dot.py index a254954b3..4cf47e5b0 100755 --- a/tools/pipeline2dot.py +++ b/tools/pipeline2dot.py @@ -36,10 +36,10 @@ import argparse import subprocess -from bifrost.proclog import load_by_pid +from bifrost.proclog import PROCLOG_DIR, load_by_pid -BIFROST_STATS_BASE_DIR = '/dev/shm/bifrost/' +BIFROST_STATS_BASE_DIR = PROCLOG_DIR def get_process_details(pid): From 11a10f36cf3d699ba20d4011d46e6d53ae022407 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Oct 2021 09:46:38 -0600 Subject: [PATCH 0261/1155] Started on a m4 file that can be installed to help others find Bifrost. --- .gitignore | 1 + Makefile.in | 12 +++++++++++- config.mk.in | 1 + share/bifrost.m4 | 45 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 share/bifrost.m4 diff --git a/.gitignore b/.gitignore index e66e6c010..3af2b2a93 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ config.mk Makefile src/Makefile python/Makefile +src/bifrost/config.h # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/Makefile.in b/Makefile.in index e6409fd0b..34b3610af 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3,6 +3,7 @@ include config.mk LIB_DIR = lib INC_DIR = src +DAT_DIR = share SRC_DIR = src HAVE_PYTHON ?= @HAVE_PYTHON@ @@ -25,7 +26,7 @@ clean: $(MAKE) -C $(BIFROST_PYTHON_DIR) clean || true $(MAKE) -C $(SRC_DIR) clean .PHONY: clean -install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) +install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) $(INSTALL_DAT_DIR)/$(BIFROST_NAME) $(MAKE) -C $(BIFROST_PYTHON_DIR) install .PHONY: install uninstall: @@ -95,3 +96,12 @@ else @echo "mkdir -p $@" @echo "cp $? $@/" endif + +$(INSTALL_DAT_DIR)/bifrost: $(DAT_DIR)/* +ifeq ($(DRY_RUN),0) + mkdir -p $@ + cp $? $@/ +else + @echo "mkdir -p $@" + @echo "cp $? $@/" +endif diff --git a/config.mk.in b/config.mk.in index bedcb1880..9e86358b8 100644 --- a/config.mk.in +++ b/config.mk.in @@ -21,6 +21,7 @@ prefix = @prefix@ exec_prefix = @exec_prefix@ INSTALL_LIB_DIR = @libdir@ INSTALL_INC_DIR = @includedir@ +INSTALL_DAT_DIR = @datadir@ BIFROST_NAME = bifrost LIBBIFROST_NAME = lib$(BIFROST_NAME) diff --git a/share/bifrost.m4 b/share/bifrost.m4 new file mode 100644 index 000000000..db8ec6c6b --- /dev/null +++ b/share/bifrost.m4 @@ -0,0 +1,45 @@ +AC_DEFUN([AX_CHECK_BIFROST], +[ + AC_PROVIDE([AX_CHECK_BIFROST]) + AC_ARG_WITH([bifrost], + [AS_HELP_STRING([--with-bifrost], + [Bifrost install path (default=/usr/local)])], + [], + [with_bifrost=/usr/local/]) + AC_SUBST([BIFROST_PATH], [$with_bifrost]) + + AS_SUBST([HAVE_BIFROST], [1]) + AC_CHECK_HEADER([bifrost/config.h], [], [AC_SUBST([HAVE_BIFROST], [0])]) + if test "$HAVE_BIFROST" = "1"; then + AC_MSG_CHECKING([for a working Bifrost installation]) + + CPPFLAGS_save="$CPPFLAGS" + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + CPPFLAGS="$CPPFLAGS -L$with_bifrost" + LDFLAGS="$LDFLAGS -L$with_bifrost" + LIBS="$LIBS -lbifrost" + + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include ]], + [[bfGetCudaEnabled();]])], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_SUBST([HAVE_BIFROST], [0])]) + + CPPFLAGS="$CPPFLAGS_save" + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + fi + + if test "$HAVE_BIFROST" = "1"; then + CPPFLAGS="$CPPFLAGS -L$with_bifrost" + LDFLAGS="$LDFLAGS -L$with_bifrost" + LIBS="$LIBS -lbifrost" + fi +]) From cc3930b4c61aad789b5eab286da1660dfa389b04 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Oct 2021 10:09:31 -0600 Subject: [PATCH 0262/1155] Indentation fix. --- .travis.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 84a07e5cb..d0b34d954 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,11 +23,11 @@ jobs: - HOMEBREW_NO_INSTALL_CLEANUP=1 - HOMEBREW_NO_ANALYTICS=1 - stage: docker and deploy docs - python: 2.7 - script: - - make docker-cpu - - make docker - - bash ./.travis_deploy_docs.sh + python: 2.7 + script: + - make docker-cpu + - make docker + - bash ./.travis_deploy_docs.sh allow_failures: - python: 2.7 - python: pypy2.7-6.0 From 20125f8e94edcd496ecaf5edeed5f2e8a5b7771d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Oct 2021 10:31:36 -0600 Subject: [PATCH 0263/1155] Disable homebrew auto-update. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index d0b34d954..9f58c1612 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ jobs: env: - HOMEBREW_NO_INSTALL_CLEANUP=1 - HOMEBREW_NO_ANALYTICS=1 + - HOMEBREW_NO_AUTO_UPDATE=1 - stage: docker and deploy docs python: 2.7 script: From de381182c3f59e80b5efaf3e9c7af8e59e78635c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Oct 2021 10:48:46 -0600 Subject: [PATCH 0264/1155] Added ctags-exuberant to the homebrew install. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 9f58c1612..07ffb463d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,6 +50,7 @@ addons: update: false packages: - curl + - ctags-exuberant - git - pkg-config - python3 From a3b8cd37bf92814bf9ad39dd40ca3d754f6d15c0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 13 Oct 2021 11:14:49 -0600 Subject: [PATCH 0265/1155] Switch to datarootdir to avoid a warning. --- config.mk.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.mk.in b/config.mk.in index 9e86358b8..08749d957 100644 --- a/config.mk.in +++ b/config.mk.in @@ -21,7 +21,7 @@ prefix = @prefix@ exec_prefix = @exec_prefix@ INSTALL_LIB_DIR = @libdir@ INSTALL_INC_DIR = @includedir@ -INSTALL_DAT_DIR = @datadir@ +INSTALL_DAT_DIR = @datarootdir@ BIFROST_NAME = bifrost LIBBIFROST_NAME = lib$(BIFROST_NAME) From e6757eab4d7a7ca65bb4fd66d3c8413764657aed Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 13 Oct 2021 11:15:22 -0600 Subject: [PATCH 0266/1155] Allow the user to specify a specific proclog location. --- config/tmpfs.m4 | 10 ++++++---- configure | 13 +++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/config/tmpfs.m4 b/config/tmpfs.m4 index 1ee5ffcb1..7791a3f1c 100644 --- a/config/tmpfs.m4 +++ b/config/tmpfs.m4 @@ -1,8 +1,12 @@ AC_DEFUN([AX_CHECK_TMPFS], [ AC_PROVIDE([AX_CHECK_TMPFS]) - - AC_SUBST([HAVE_TMPFS], [/tmp]) + + AC_ARG_WITH([logging_dir], + [AS_HELP_STRING([--with-logging-dir=[DIR]], + [directory for Bifrost proclog logging (default=autodetect)])], + [AC_SUBST([HAVE_TMPFS], [$with_logging_dir])], + [AC_SUBST([HAVE_TMPFS], [/tmp])]) if test "$HAVE_TMPFS" = "/tmp"; then AC_CHECK_FILE([/dev/shm], @@ -20,6 +24,4 @@ AC_DEFUN([AX_CHECK_TMPFS], AC_MSG_WARN([$HAVE_TMPFS may have performance problems for logging]) AC_SUBST([HAVE_TMPFS], [/tmp/bifrost]) fi - - CPPFLAGS="$CPPFLAGS -DBF_PROCLOG_DIR='\"$HAVE_TMPFS\"'" ]) diff --git a/configure b/configure index b75a112db..fc918a292 100755 --- a/configure +++ b/configure @@ -804,6 +804,7 @@ enable_numa enable_hwloc enable_vma with_alignment +with_logging_dir enable_debug enable_trace enable_native_arch @@ -1495,6 +1496,8 @@ Optional Packages: --with-gpu-archs=... default GPU architectures (default='35 61') --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) + --with-logging-dir=DIR directory for Bifrost proclog logging + (default=autodetect) --with-python=[PATH] absolute path to python executable --with-pybuild-flags build flags for python (default='') --with-pyinstall-flags install flags for python (default='') @@ -17761,8 +17764,16 @@ ALIGNMENT=$with_alignment + +# Check whether --with-logging_dir was given. +if test "${with_logging_dir+set}" = set; then : + withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir + +else HAVE_TMPFS=/tmp +fi + if test "$HAVE_TMPFS" = "/tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 @@ -17837,8 +17848,6 @@ $as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging fi - CPPFLAGS="$CPPFLAGS -DBF_PROCLOG_DIR='\"$HAVE_TMPFS\"'" - # # Bifrost Features From e79ebfa0be30ce32e3c0baa53723b47f551b13e7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 13 Oct 2021 11:32:02 -0600 Subject: [PATCH 0267/1155] Add gawk and gsed to the homebrew install. --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 07ffb463d..c3178092f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,7 +51,9 @@ addons: packages: - curl - ctags-exuberant + - gawk - git + - gnu-sed - pkg-config - python3 From ddcbe50468426aec11905888fb7a37daf7e02e03 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 13 Oct 2021 13:14:27 -0600 Subject: [PATCH 0268/1155] A couple of residual Py3 things. --- python/bifrost/blocks/print_header.py | 2 +- python/bifrost/sigproc.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/bifrost/blocks/print_header.py b/python/bifrost/blocks/print_header.py index 21713aebe..bd1e8d26f 100644 --- a/python/bifrost/blocks/print_header.py +++ b/python/bifrost/blocks/print_header.py @@ -24,7 +24,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import +from __future__ import absolute_import, print_function import pprint from bifrost.pipeline import SinkBlock diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index 82e7de42b..8fbc6ce0f 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -249,9 +249,9 @@ def pack(data, nbit): raise ValueError("unpack: nbit must divide into 8") if data.dtype not in (np.uint8, np.int8): raise TypeError("unpack: dtype must be 8-bit") - outdata = np.zeros(data.size / (8 / nbit)).astype('uint8') - for index in range(1, 8 / nbit): - outdata += data[index::8 / nbit] / (2**nbit)**index + outdata = np.zeros(data.size // (8 // nbit)).astype('uint8') + for index in range(1, 8 // nbit): + outdata += data[index::8 // nbit] // (2**nbit)**index return outdata def _write_data(data, nbit, file_object): From 1a6b74e02d0afb9b3a80a44b9104973885d0576e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Oct 2021 13:03:31 -0600 Subject: [PATCH 0269/1155] Rearragned the CUDA linking flags to fix build problems. --- config/cuda.m4 | 2 +- configure | 346 ++++++++++++++++++++++++++++++++++++++++++++++--- configure.ac | 2 - 3 files changed, 332 insertions(+), 18 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index ffc4df83e..01d67aedc 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -48,7 +48,7 @@ AC_DEFUN([AX_CHECK_CUDA], if test "$HAVE_CUDA" = "1"; then CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -lculibos -lnvToolsExt" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" fi AC_ARG_WITH([nvcc_flags], diff --git a/configure b/configure index fc918a292..4774e5ecd 100755 --- a/configure +++ b/configure @@ -764,6 +764,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -880,6 +881,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1132,6 +1134,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1269,7 +1280,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1422,6 +1433,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -16472,6 +16484,312 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi @@ -16823,6 +17141,7 @@ $as_echo "#define HAVE_CXX11 1" >>confdefs.h fi + for ac_func in memset do : ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" @@ -17531,7 +17850,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -lculibos -lnvToolsExt" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" fi @@ -18525,7 +18844,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18687,7 +19006,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18741,7 +19060,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18795,7 +19114,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -18849,7 +19168,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19014,7 +19333,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19068,10 +19387,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19128,7 +19447,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19601,7 +19920,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20182,9 +20501,6 @@ DX_RULES="${DX_SNIPPET_doc}" CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -if test x$HAVE_CUDA = x1; then : - LIBS="$LIBS -L. -lcufft_static_pruned" -fi ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h" diff --git a/configure.ac b/configure.ac index 2bd5ef0b3..f41a1b70f 100644 --- a/configure.ac +++ b/configure.ac @@ -256,8 +256,6 @@ DX_INIT_DOXYGEN([bifrost]) CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -AS_IF([test x$HAVE_CUDA = x1], - [LIBS="$LIBS -L. -lcufft_static_pruned"]) AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h]) From bfcb5bbd9d8ad1f0c75d3cd0392bd34da57b42c2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Oct 2021 14:36:57 -0600 Subject: [PATCH 0270/1155] bifrost/config.h breaks map. This should fix that. --- config/cuda.m4 | 16 +++++++++------- configure | 15 +++++++++------ src/Complex.hpp | 2 -- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 01d67aedc..a497d8eea 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -45,17 +45,19 @@ AC_DEFUN([AX_CHECK_CUDA], LIBS="$LIBS_save" fi - if test "$HAVE_CUDA" = "1"; then - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" - fi - AC_ARG_WITH([nvcc_flags], [AS_HELP_STRING([--with-nvcc-flags], [flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"')])], [], [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) AC_SUBST(NVCCFLAGS, $with_nvcc_flags) + + if test "$HAVE_CUDA" = "1"; then + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" + NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" + fi + ]) - diff --git a/configure b/configure index 4774e5ecd..db01b33a2 100755 --- a/configure +++ b/configure @@ -17847,12 +17847,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext LIBS="$LIBS_save" fi - if test "$HAVE_CUDA" = "1"; then - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" - fi - # Check whether --with-nvcc_flags was given. if test "${with_nvcc_flags+set}" = set; then : @@ -17864,6 +17858,15 @@ fi NVCCFLAGS=$with_nvcc_flags + if test "$HAVE_CUDA" = "1"; then + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" + NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" + fi + + # Check whether --with-gpu_archs was given. diff --git a/src/Complex.hpp b/src/Complex.hpp index 7f5ecc2c0..47f218f3c 100644 --- a/src/Complex.hpp +++ b/src/Complex.hpp @@ -28,8 +28,6 @@ #pragma once -#include - #if BF_CUDA_ENABLED #include #endif From 4ef2e2705203dfdf9f3c970b6489390c2b986815 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Oct 2021 12:51:12 -0600 Subject: [PATCH 0271/1155] Added a feature to try to auto-determine which CUDA architectures to target. --- config/cuda.m4 | 81 ++++++++- configure | 470 +++++++++++++++++++++++++++++++------------------ configure.ac | 41 ++--- 3 files changed, 393 insertions(+), 199 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index a497d8eea..1780886e8 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -36,9 +36,26 @@ AC_DEFUN([AX_CHECK_CUDA], #include #include ]], [[cudaMalloc(0, 0);]])], - [AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no) - AC_SUBST([HAVE_CUDA], [0])]) + [], + [AC_SUBST([HAVE_CUDA], [0])]) + + if test "$HAVE_CUDA" = "1"; then + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart" + + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include ]], + [[cudaMalloc(0, 0);]])], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_SUBST([HAVE_CUDA], [0])]) + else + AC_MSG_RESULT(no) + AC_SUBST([HAVE_CUDA], [0]) + fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" @@ -60,4 +77,62 @@ AC_DEFUN([AX_CHECK_CUDA], LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" fi + AC_ARG_WITH([gpu_archs], + [AS_HELP_STRING([--with-gpu-archs=...], + [default GPU architectures (default=dectect)])], + [], + [with_gpu_archs='auto']) + if test "$HAVE_CUDA" = "1"; then + if test "$with_gpu_archs" = "auto"; then + AC_MSG_CHECKING([which CUDA architectures to target]) + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include + #include + #include + #include ]], + [[ + std::set archs; + int major, minor, arch; + int deviceCount = 0; + cudaGetDeviceCount(&deviceCount); + if( deviceCount == 0 ) { + return 1; + } + std::ofstream fh; + fh.open("confarchs.out"); + for(int dev=0; dev 0 ) { + fh << " "; + } + fh << arch; + } + } + fh.close();]])], + [AC_SUBST([GPU_ARCHS], [`cat confarchs.out`]) + AC_MSG_RESULT([$GPU_ARCHS])], + [AC_MSG_ERROR(failed to find any)]) + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + else + AC_SUBST([GPU_ARCHS], [$with_gpu_archs]) + fi + fi ]) diff --git a/configure b/configure index db01b33a2..e9ea89ccc 100755 --- a/configure +++ b/configure @@ -681,9 +681,6 @@ HAVE_TRACE HAVE_DEBUG HAVE_TMPFS ALIGNMENT -HAVE_VMA -HAVE_HWLOC -HAVE_NUMA GPU_SHAREDMEM GPU_ARCHS NVCCFLAGS @@ -692,6 +689,9 @@ NVPRUNE NVCC HAVE_CUDA CUDA_HOME +HAVE_VMA +HAVE_HWLOC +HAVE_NUMA HAVE_OPENMP LIBOBJS HAVE_CXX11 @@ -796,14 +796,14 @@ with_gnu_ld with_sysroot enable_libtool_lock with_ctags +enable_numa +enable_hwloc +enable_vma with_cuda_home enable_cuda with_nvcc_flags with_gpu_archs with_shared_mem -enable_numa -enable_hwloc -enable_vma with_alignment with_logging_dir enable_debug @@ -1470,10 +1470,10 @@ Optional Features: --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) - --disable-cuda disable cuda support (default=no) --disable-numa disable numa support (default=no) --disable-hwloc disable hwloc support (default=no) --enable-vma enable vma support (default=no) + --disable-cuda disable cuda support (default=no) --enable-debug enable debugging mode (default=no) --enable-trace enable tracing mode for nvprof/nvvp (default=no) --disable-native-arch disable native architecture compilation (default=no) @@ -1505,7 +1505,7 @@ Optional Packages: --with-cuda-home CUDA install path (default=/usr/local/cuda) --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"') - --with-gpu-archs=... default GPU architectures (default='35 61') + --with-gpu-archs=... default GPU architectures (default=dectect) --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) --with-logging-dir=DIR directory for Bifrost proclog logging @@ -17649,10 +17649,192 @@ _ACEOF esac +# +# NUMA +# + +# Check whether --enable-numa was given. +if test "${enable_numa+set}" = set; then : + enableval=$enable_numa; enable_numa=no +else + enable_numa=yes +fi + +HAVE_NUMA=0 + +if test x$enable_numa != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnuma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char numa_node_of_cpu (); +int +main () +{ +return numa_node_of_cpu (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_numa_numa_node_of_cpu=yes +else + ac_cv_lib_numa_numa_node_of_cpu=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : + HAVE_NUMA=1 + + LIBS="$LIBS -lnuma" +fi + +fi + +# +# HWLOC +# + +# Check whether --enable-hwloc was given. +if test "${enable_hwloc+set}" = set; then : + enableval=$enable_hwloc; enable_hwloc=no +else + enable_hwloc=yes +fi + +HAVE_HWLOC=0 + +if test x$enable_hwloc != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } +if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lhwloc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char hwloc_topology_init (); +int +main () +{ +return hwloc_topology_init (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_hwloc_hwloc_topology_init=yes +else + ac_cv_lib_hwloc_hwloc_topology_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : + HAVE_HWLOC=1 + + LIBS="$LIBS -lhwloc" +fi + +fi + +# +# VMA +# + +# Check whether --enable-vma was given. +if test "${enable_vma+set}" = set; then : + enableval=$enable_vma; enable_vma=yes +else + enable_vma=no +fi + +HAVE_VMA=0 + +if test x$enable_vma != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } +if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lvma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char recvfrom_zcopy (); +int +main () +{ +return recvfrom_zcopy (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_vma_recvfrom_zcopy=yes +else + ac_cv_lib_vma_recvfrom_zcopy=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : + HAVE_VMA=1 + + LIBS="$LIBS -lvma" +fi + +fi + # # CUDA # +################################# +# NOTE # +# This needs to come after all # +# other compiler/library tests # +# since it changes LIB to # +# include CUDA-specific entries # +################################# + @@ -17832,15 +18014,49 @@ cudaMalloc(0, 0); } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : + +else + HAVE_CUDA=0 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + if test "$HAVE_CUDA" = "1"; then + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart" + + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #include +int +main () +{ +cudaMalloc(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - HAVE_CUDA=0 + HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_CUDA=0 + + fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" @@ -17867,202 +18083,104 @@ fi fi - - # Check whether --with-gpu_archs was given. if test "${with_gpu_archs+set}" = set; then : withval=$with_gpu_archs; else - with_gpu_archs='35 61' -fi - -GPU_ARCHS=$with_gpu_archs - - - -# Check whether --with-shared_mem was given. -if test "${with_shared_mem+set}" = set; then : - withval=$with_shared_mem; -else - with_shared_mem=16384 + with_gpu_archs='auto' fi -GPU_SHAREDMEM=$with_shared_mem - - -# -# NUMA -# - -# Check whether --enable-numa was given. -if test "${enable_numa+set}" = set; then : - enableval=$enable_numa; enable_numa=no -else - enable_numa=yes -fi - -HAVE_NUMA=0 - -if test x$enable_numa != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } -if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : - $as_echo_n "(cached) " >&6 + if test "$HAVE_CUDA" = "1"; then + if test "$with_gpu_archs" = "auto"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +$as_echo_n "checking which CUDA architectures to target... " >&6; } + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnuma $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char numa_node_of_cpu (); -int -main () -{ -return numa_node_of_cpu (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_numa_numa_node_of_cpu=yes -else - ac_cv_lib_numa_numa_node_of_cpu=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : - HAVE_NUMA=1 - - LIBS="$LIBS -lnuma" -fi - -fi - -# -# HWLOC -# - -# Check whether --enable-hwloc was given. -if test "${enable_hwloc+set}" = set; then : - enableval=$enable_hwloc; enable_hwloc=no -else - enable_hwloc=yes -fi - -HAVE_HWLOC=0 -if test x$enable_hwloc != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } -if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lhwloc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char hwloc_topology_init (); + #include + #include + #include + #include + #include int main () { -return hwloc_topology_init (); + + std::set archs; + int major, minor, arch; + int deviceCount = 0; + cudaGetDeviceCount(&deviceCount); + if( deviceCount == 0 ) { + return 1; + } + std::ofstream fh; + fh.open("confarchs.out"); + for(int dev=0; dev 0 ) { + fh << " "; + } + fh << arch; + } + } + fh.close(); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_hwloc_hwloc_topology_init=yes +if ac_fn_cxx_try_run "$LINENO"; then : + GPU_ARCHS=`cat confarchs.out` + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +$as_echo "$GPU_ARCHS" >&6; } else - ac_cv_lib_hwloc_hwloc_topology_init=no + as_fn_error $? "failed to find any" "$LINENO" 5 fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : - HAVE_HWLOC=1 - - LIBS="$LIBS -lhwloc" +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -fi -# -# VMA -# + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + else + GPU_ARCHS=$with_gpu_archs -# Check whether --enable-vma was given. -if test "${enable_vma+set}" = set; then : - enableval=$enable_vma; enable_vma=yes -else - enable_vma=no -fi + fi + fi -HAVE_VMA=0 -if test x$enable_vma != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } -if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lvma $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char recvfrom_zcopy (); -int -main () -{ -return recvfrom_zcopy (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_vma_recvfrom_zcopy=yes +# Check whether --with-shared_mem was given. +if test "${with_shared_mem+set}" = set; then : + withval=$with_shared_mem; else - ac_cv_lib_vma_recvfrom_zcopy=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + with_shared_mem=16384 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : - HAVE_VMA=1 - LIBS="$LIBS -lvma" -fi +GPU_SHAREDMEM=$with_shared_mem -fi # # Bifrost memory alignment diff --git a/configure.ac b/configure.ac index f41a1b70f..6f2978972 100644 --- a/configure.ac +++ b/configure.ac @@ -74,26 +74,6 @@ AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_UINT8_T -# -# CUDA -# - -AX_CHECK_CUDA - -AC_ARG_WITH([gpu_archs], - [AS_HELP_STRING([--with-gpu-archs=...], - [default GPU architectures (default='35 61')])], - [], - [with_gpu_archs='35 61']) -AC_SUBST(GPU_ARCHS, $with_gpu_archs) - -AC_ARG_WITH([shared_mem], - [AS_HELP_STRING([--with-shared-mem=N], - [default GPU shared memory in bytes (default=16384)])], - [], - [with_shared_mem=16384]) -AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) - # # NUMA # @@ -139,6 +119,27 @@ AS_IF([test x$enable_vma != xno], [AC_SUBST([HAVE_VMA], [1]) LIBS="$LIBS -lvma"])]) +# +# CUDA +# + +################################# +# NOTE # +# This needs to come after all # +# other compiler/library tests # +# since it changes LIB to # +# include CUDA-specific entries # +################################# + +AX_CHECK_CUDA + +AC_ARG_WITH([shared_mem], + [AS_HELP_STRING([--with-shared-mem=N], + [default GPU shared memory in bytes (default=16384)])], + [], + [with_shared_mem=16384]) +AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) + # # Bifrost memory alignment # From 2953eef4d5651c69fb95cabfa3f2441c033240a5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Oct 2021 13:04:01 -0600 Subject: [PATCH 0272/1155] BF_DEBUG -> BF_DEBUG_ENABLED. --- src/assert.hpp | 4 ++-- src/common.cpp | 14 +++----------- src/map.cpp | 4 ++-- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/assert.hpp b/src/assert.hpp index e2d76e151..b3cdcc5a5 100644 --- a/src/assert.hpp +++ b/src/assert.hpp @@ -55,7 +55,7 @@ inline bool should_report_error(BFstatus err) { #include using std::cout; using std::endl; -#if defined(BF_DEBUG) && BF_DEBUG +#if defined(BF_DEBUG_ENABLED) && BF_DEBUG_ENABLED #define BF_REPORT_ERROR(err) do { \ if( bfGetDebugEnabled() && \ should_report_error(err) ) { \ @@ -82,7 +82,7 @@ using std::endl; #define BF_REPORT_ERROR(err) #define BF_DEBUG_PRINT(x) #define BF_REPORT_PREDFAIL(pred, err) -#endif // BF_DEBUG +#endif // BF_DEBUG_ENABLED #define BF_REPORT_INTERNAL_ERROR(msg) do { \ std::cerr << __FILE__ << ":" << __LINE__ \ << " internal error: " \ diff --git a/src/common.cpp b/src/common.cpp index ac75391af..bf6419261 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -66,17 +66,13 @@ const char* bfGetStatusString(BFstatus status) { #undef BF_STATUS_STRING_CASE } -static thread_local bool g_debug_enabled = true; +static thread_local bool g_debug_enabled = BF_DEBUG_ENABLED; BFbool bfGetDebugEnabled() { -#if BF_DEBUG return g_debug_enabled; -#else - return false; -#endif } BFstatus bfSetDebugEnabled(BFbool b) { -#if !BF_DEBUG +#if !BF_DEBUG_ENABLED return BF_STATUS_INVALID_STATE; #else g_debug_enabled = b; @@ -84,9 +80,5 @@ BFstatus bfSetDebugEnabled(BFbool b) { #endif } BFbool bfGetCudaEnabled() { -#if BF_CUDA_ENABLED - return BF_CUDA_ENABLED; -#else - return false; -#endif + return BF_CUDA_ENABLED; } diff --git a/src/map.cpp b/src/map.cpp index f49dfc414..1d96566eb 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -344,7 +344,7 @@ BFstatus build_map_kernel(int* external_ndim, nvrtcResult ret = nvrtcCompileProgram(program, options_c.size(), &options_c[0]); -#if BF_DEBUG +#if BF_DEBUG_ENABLED size_t logsize; // Note: Includes the trailing NULL BF_CHECK_NVRTC( nvrtcGetProgramLogSize(program, &logsize) ); @@ -374,7 +374,7 @@ BFstatus build_map_kernel(int* external_ndim, char* ptx = &vptx[0]; BF_CHECK_NVRTC( nvrtcGetPTX(program, &ptx[0]) ); BF_CHECK_NVRTC( nvrtcDestroyProgram(&program) ); -#if BF_DEBUG +#if BF_DEBUG_ENABLED if( EnvVars::get("BF_PRINT_MAP_KERNELS_PTX", "0") != "0" ) { std::cout << ptx << std::endl; } From 56b4fe0564b3d5d6e0b5ac9f10f9e24cb846cbb4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Oct 2021 16:02:25 -0600 Subject: [PATCH 0273/1155] Switch over to fornax for the test data. --- test/download_test_data.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/download_test_data.sh b/test/download_test_data.sh index 0fc93517b..9ae9fbbc3 100755 --- a/test/download_test_data.sh +++ b/test/download_test_data.sh @@ -1,8 +1,5 @@ #!/bin/bash -curl -L -O http://mcranmer.com/data/bf_test_files.tar.gz -if [[ "$?" != "0" ]]; then - curl -L -O https://fornax.phys.unm.edu/lwa/data/bf_test_files.tar.gz -fi +curl -L -O https://fornax.phys.unm.edu/lwa/data/bf_test_files.tar.gz tar xzf bf_test_files.tar.gz mv for_test_suite data rm bf_test_files.tar.gz From 2ccbd0ecc0a94af4d112b9ac0754ff94e6807308 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 09:27:55 -0600 Subject: [PATCH 0274/1155] Moved the versioning into AC_INIT. --- config.mk.in | 6 +++--- configure | 53 ++++++++++++++++++++++++++++++++++------------------ configure.ac | 10 +++++++++- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/config.mk.in b/config.mk.in index 08749d957..cff27d162 100644 --- a/config.mk.in +++ b/config.mk.in @@ -25,9 +25,9 @@ INSTALL_DAT_DIR = @datarootdir@ BIFROST_NAME = bifrost LIBBIFROST_NAME = lib$(BIFROST_NAME) -LIBBIFROST_MAJOR = 0 -LIBBIFROST_MINOR = 9 -LIBBIFROST_PATCH = 0 +LIBBIFROST_MAJOR = @PACKAGE_VERSION_MAJOR@ +LIBBIFROST_MINOR = @PACKAGE_VERSION_MINOR@ +LIBBIFROST_PATCH = @PACKAGE_VERSION_MICRO@ LIBBIFROST_SO = $(LIBBIFROST_NAME)$(SO_EXT) LIBBIFROST_SO_MAJ = $(LIBBIFROST_SO).$(LIBBIFROST_MAJOR) LIBBIFROST_SO_MAJ_MIN = $(LIBBIFROST_SO_MAJ).$(LIBBIFROST_MINOR) diff --git a/configure b/configure index e9ea89ccc..05f4b5d12 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69. +# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -585,14 +585,13 @@ MFLAGS= MAKEFLAGS= # Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="bifrost" +PACKAGE_NAME='bifrost' +PACKAGE_TARNAME='bifrost' +PACKAGE_VERSION='0.9.0' +PACKAGE_STRING='bifrost 0.9.0' +PACKAGE_BUGREPORT='' +PACKAGE_URL='https://github.com/ledatelescope/bifrost/' + ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ @@ -631,6 +630,9 @@ ac_includes_default="\ #endif" ac_subst_vars='LTLIBOBJS +PACKAGE_VERSION_MICRO +PACKAGE_VERSION_MINOR +PACKAGE_VERSION_MAJOR DX_RULES PAPER_SIZE DOXYGEN_PAPER_SIZE @@ -884,7 +886,7 @@ localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' @@ -1393,7 +1395,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. +\`configure' configures bifrost 0.9.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1442,7 +1444,7 @@ Fine tuning of the installation directories: --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --docdir=DIR documentation root [DATAROOTDIR/doc/bifrost] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1458,7 +1460,9 @@ _ACEOF fi if test -n "$ac_init_help"; then - + case $ac_init_help in + short | recursive ) echo "Configuration of bifrost 0.9.0:";; + esac cat <<\_ACEOF Optional Features: @@ -1539,6 +1543,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. +bifrost home page: . _ACEOF ac_status=$? fi @@ -1601,7 +1606,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -configure +bifrost configure 0.9.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2380,7 +2385,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by $as_me, which was +It was created by bifrost $as_me 0.9.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -20616,6 +20621,17 @@ DX_RULES="${DX_SNIPPET_doc}" #echo DX_ENV=$DX_ENV +# +# Version splitting +# + +PACKAGE_VERSION_MAJOR=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $1}'` + +PACKAGE_VERSION_MINOR=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $2}'` + +PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $3}'` + + # # Linking flags # @@ -21168,7 +21184,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by $as_me, which was +This file was extended by bifrost $as_me 0.9.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21219,13 +21235,14 @@ $config_files Configuration commands: $config_commands -Report bugs to the package provider." +Report bugs to the package provider. +bifrost home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -config.status +bifrost config.status 0.9.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 6f2978972..a488bbb57 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([bifrost], [], [], [], [https://github.com/ledatelescope/bifrost/]) +AC_INIT([bifrost], [0.9.0], [], [], [https://github.com/ledatelescope/bifrost/]) AC_LANG(C++) AC_CONFIG_SRCDIR([src/cuda.cpp]) @@ -251,6 +251,14 @@ DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) DX_INIT_DOXYGEN([bifrost]) +# +# Version splitting +# + +AC_SUBST([PACKAGE_VERSION_MAJOR], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $1}'`]) +AC_SUBST([PACKAGE_VERSION_MINOR], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $2}'`]) +AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $3}'`]) + # # Linking flags # From 8b2ce5427b1ec832970b5404086e8e502f8cb08c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 09:49:15 -0600 Subject: [PATCH 0275/1155] Allow DRY_RUN to also control the Python install. --- python/Makefile.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/Makefile.in b/python/Makefile.in index a0577d6d8..f9a1510ac 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -51,7 +51,11 @@ build: bifrost/*.py Makefile $(BIFROST_PYTHON_VERSION_FILE) $(BIFROST_PYTHON_BIN .PHONY: build install: build +ifeq ($(DRY_RUN),0) @PYTHON@ setup.py install @PYINSTALLFLAGS@ +else + @echo "@PYTHON@ setup.py install @PYINSTALLFLAGS@" +endif .PHONY: install clean: From 189cb22e5f8aadc937502698d9defe1e4ed63935 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 09:50:16 -0600 Subject: [PATCH 0276/1155] Added in a pkgconfig file for Bifrost. --- .gitignore | 1 + Makefile.in | 13 +++++++++++-- configure | 3 ++- configure.ac | 2 +- share/bifrost.pc.in | 11 +++++++++++ 5 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 share/bifrost.pc.in diff --git a/.gitignore b/.gitignore index 3af2b2a93..e91378b43 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ config.mk Makefile src/Makefile python/Makefile +share/bifrost.pc src/bifrost/config.h # Byte-compiled / optimized / DLL files diff --git a/Makefile.in b/Makefile.in index 34b3610af..efb043b73 100644 --- a/Makefile.in +++ b/Makefile.in @@ -26,7 +26,7 @@ clean: $(MAKE) -C $(BIFROST_PYTHON_DIR) clean || true $(MAKE) -C $(SRC_DIR) clean .PHONY: clean -install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) $(INSTALL_DAT_DIR)/$(BIFROST_NAME) +install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) $(INSTALL_DAT_DIR)/$(BIFROST_NAME) $(INSTALL_LIB_DIR)/pkgconfig $(MAKE) -C $(BIFROST_PYTHON_DIR) install .PHONY: install uninstall: @@ -97,7 +97,16 @@ else @echo "cp $? $@/" endif -$(INSTALL_DAT_DIR)/bifrost: $(DAT_DIR)/* +$(INSTALL_DAT_DIR)/bifrost: $(DAT_DIR)/*.m4 +ifeq ($(DRY_RUN),0) + mkdir -p $@ + cp $? $@/ +else + @echo "mkdir -p $@" + @echo "cp $? $@/" +endif + +$(INSTALL_LIB_DIR)/pkgconfig: $(DAT_DIR)/*.pc ifeq ($(DRY_RUN),0) mkdir -p $@ cp $? $@/ diff --git a/configure b/configure index 05f4b5d12..c8b115e39 100755 --- a/configure +++ b/configure @@ -20639,7 +20639,7 @@ PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $3}'` CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h" +ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h" cat >confcache <<\_ACEOF @@ -21744,6 +21744,7 @@ do "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; + "share/bifrost.pc") CONFIG_FILES="$CONFIG_FILES share/bifrost.pc" ;; "src/bifrost/config.h") CONFIG_FILES="$CONFIG_FILES src/bifrost/config.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; diff --git a/configure.ac b/configure.ac index a488bbb57..c6d728dab 100644 --- a/configure.ac +++ b/configure.ac @@ -266,6 +266,6 @@ AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile src/bifrost/config.h]) +AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h]) AC_OUTPUT diff --git a/share/bifrost.pc.in b/share/bifrost.pc.in new file mode 100644 index 000000000..1a038acc9 --- /dev/null +++ b/share/bifrost.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: bifrost +Description: A stream processing framework for high-throughput applications. +Requires: +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lbifrost +Cflags: -I${includedir} From 7399086956bd681dea553b54bc6983ffdae30a52 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 10:34:23 -0600 Subject: [PATCH 0277/1155] Added an option to disable build the Python bindings. --- Makefile.in | 14 ++++++++++++-- configure | 30 +++++++++++++++++++++++------- configure.ac | 28 +++++++++++++++++----------- 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/Makefile.in b/Makefile.in index efb043b73..751a0050d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -6,8 +6,8 @@ INC_DIR = src DAT_DIR = share SRC_DIR = src -HAVE_PYTHON ?= @HAVE_PYTHON@ -HAVE_DOCKER ?= @HAVE_DOCKER@ +HAVE_PYTHON = @HAVE_PYTHON@ +HAVE_DOCKER = @HAVE_DOCKER@ BIFROST_PYTHON_DIR = python @@ -20,21 +20,31 @@ libbifrost: test: #$(MAKE) -C $(SRC_DIR) test +ifeq ($(HAVE_PYTHON),1) cd test && ./download_test_data.sh ; python -m unittest discover +endif .PHONY: test clean: +ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) clean || true +endif $(MAKE) -C $(SRC_DIR) clean .PHONY: clean install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) $(INSTALL_DAT_DIR)/$(BIFROST_NAME) $(INSTALL_LIB_DIR)/pkgconfig +ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) install +endif .PHONY: install uninstall: rm -f $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO) rm -f $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ) rm -f $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) rm -rf $(INSTALL_INC_DIR)/bifrost/ + rm -ff $(INSTALL_DAT_DIR)/bifrost/ + rm -f $(INSTALL_LIB_DIR)/pkgconfig/bifrost.pc +ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) uninstall +endif .PHONY: uninstall doc: $(INC_DIR)/bifrost/*.h Doxyfile diff --git a/configure b/configure index c8b115e39..a0abf3b36 100755 --- a/configure +++ b/configure @@ -676,8 +676,8 @@ HAVE_DOCKER DOCKER PYINSTALLFLAGS PYBUILDFLAGS -HAVE_PYTHON PYTHON +HAVE_PYTHON HAVE_CUDA_DEBUG HAVE_TRACE HAVE_DEBUG @@ -812,6 +812,7 @@ enable_debug enable_trace enable_native_arch enable_cuda_debug +enable_python with_python with_pybuild_flags with_pyinstall_flags @@ -1482,6 +1483,7 @@ Optional Features: --enable-trace enable tracing mode for nvprof/nvvp (default=no) --disable-native-arch disable native architecture compilation (default=no) --enable-cuda-debug enable CUDA debugging (nvcc -G; default=no) + --disable-python disable building the Python bindings (default=no) --disable-doxygen-doc don't generate any doxygen documentation --enable-doxygen-dot generate graphics for doxygen documentation --disable-doxygen-man don't generate doxygen manual pages @@ -18361,6 +18363,16 @@ fi # Python # +# Check whether --enable-python was given. +if test "${enable_python+set}" = set; then : + enableval=$enable_python; enable_python=no +else + enable_python=yes +fi + +HAVE_PYTHON=0 + +if test x$enable_python != xno; then : @@ -18419,6 +18431,7 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="no" ;; esac fi @@ -18468,6 +18481,7 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="no" ;; esac fi @@ -18492,22 +18506,22 @@ fi -if test x${PYTHON} != x; then : + if test x${PYTHON} != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 $as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 $as_echo "$as_me: WARNING: python module will not be built" >&2;} else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - HAVE_PYTHON=1 + HAVE_PYTHON=1 fi fi - +fi # Check whether --with-pybuild_flags was given. if test "${with_pybuild_flags+set}" = set; then : @@ -18588,6 +18602,7 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_DOCKER" && ac_cv_path_DOCKER="no" ;; esac fi @@ -18637,6 +18652,7 @@ done done IFS=$as_save_IFS + test -z "$ac_cv_path_DOCKER" && ac_cv_path_DOCKER="no" ;; esac fi @@ -18661,7 +18677,7 @@ fi -if test x${DOCKER} != x; then : +if test x${DOCKER} != xno; then : HAVE_DOCKER=1 fi diff --git a/configure.ac b/configure.ac index c6d728dab..66aa0c246 100644 --- a/configure.ac +++ b/configure.ac @@ -205,15 +205,21 @@ AS_IF([test x$enable_cuda_debug != xno], # Python # -AX_WITH_PROG(PYTHON, python) -AS_IF([test x${PYTHON} != x], - [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) - AS_IF([! ${PYTHON} -c "import ctypesgen" 2>/dev/null], - [AC_MSG_RESULT([no]) - AC_MSG_WARN([python module will not be built])], - [AC_MSG_RESULT([yes]) - AC_SUBST(HAVE_PYTHON, 1)])]) - +AC_ARG_ENABLE([python], + [AS_HELP_STRING([--disable-python], + [disable building the Python bindings (default=no)])], + [enable_python=no], + [enable_python=yes]) +AC_SUBST([HAVE_PYTHON], [0]) +AS_IF([test x$enable_python != xno], + [AX_WITH_PROG(PYTHON, python, no, $PATH) + AS_IF([test x${PYTHON} != xno], + [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) + AS_IF([! ${PYTHON} -c "import ctypesgen" 2>/dev/null], + [AC_MSG_RESULT([no]) + AC_MSG_WARN([python module will not be built])], + [AC_MSG_RESULT([yes]) + AC_SUBST(HAVE_PYTHON, 1)])])]) AC_ARG_WITH([pybuild_flags], [AS_HELP_STRING([--with-pybuild-flags], [build flags for python (default='')])], @@ -232,8 +238,8 @@ AC_SUBST(PYINSTALLFLAGS, $with_pyinstall_flags) # Docker # -AX_WITH_PROG(DOCKER, docker) -AS_IF([test x${DOCKER} != x], +AX_WITH_PROG(DOCKER, docker, no, $PATH) +AS_IF([test x${DOCKER} != xno], [AC_SUBST(HAVE_DOCKER, 1)]) # From 9789e0fc3b7ff3ef25ee5b9d8310f970c913c82c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 11:27:54 -0600 Subject: [PATCH 0278/1155] Try without sudo. --- .travis.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index c3178092f..db38c8926 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,3 @@ -sudo: required - dist: bionic language: python @@ -58,7 +56,7 @@ addons: - python3 script: - - sudo pip --no-cache-dir install \ + - pip --no-cache-dir install \ setuptools \ numpy \ matplotlib \ @@ -69,9 +67,9 @@ script: git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ coveralls \ codecov - - sudo ./configure --disable-cuda - - sudo make -j - - sudo make install + - ./configure --disable-cuda + - make -j + - make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - cd test && sudo -E bash ./travis.sh && cd .. From 56e5e97ea63df0ab7b12c8734b660223365b6cd7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 11:34:47 -0600 Subject: [PATCH 0279/1155] Maybe one sudo. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index db38c8926..5e5c4a714 100644 --- a/.travis.yml +++ b/.travis.yml @@ -69,7 +69,7 @@ script: codecov - ./configure --disable-cuda - make -j - - make install + - sudo make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - cd test && sudo -E bash ./travis.sh && cd .. From b6b9cecc257267c54a9ae9f44d76f97d63ea2613 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 13:07:50 -0600 Subject: [PATCH 0280/1155] One too many sudos. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5e5c4a714..b61c3e101 100644 --- a/.travis.yml +++ b/.travis.yml @@ -71,7 +71,7 @@ script: - make -j - sudo make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - - cd test && sudo -E bash ./travis.sh && cd .. + - cd test && bash ./travis.sh && cd .. env: global: From b67e1d13f344bd64ad943bcb1abfa3c9e05e115c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 13:26:06 -0600 Subject: [PATCH 0281/1155] Split the Python install off. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b61c3e101..963592736 100644 --- a/.travis.yml +++ b/.travis.yml @@ -71,6 +71,7 @@ script: - make -j - sudo make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} + - cd python && make install && cd .. - cd test && bash ./travis.sh && cd .. env: From 53831928893db372c8f153735836509af4727030 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 13:42:09 -0600 Subject: [PATCH 0282/1155] Try a pip install? --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 963592736..ca760aa00 100644 --- a/.travis.yml +++ b/.travis.yml @@ -71,7 +71,7 @@ script: - make -j - sudo make install - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - - cd python && make install && cd .. + - cd python && pip install . && cd .. - cd test && bash ./travis.sh && cd .. env: From 1414aa141ce986340e76a59c44959392d91d568c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 17:01:12 -0600 Subject: [PATCH 0283/1155] What about skipping the install? --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index ca760aa00..547d4d88e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -69,9 +69,8 @@ script: codecov - ./configure --disable-cuda - make -j - - sudo make install - - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} - - cd python && pip install . && cd .. + - export LD_LIBRARY_PATH=`realpath ./lib`:${LD_LIBRARY_PATH} + - export PYTHONPATH=`realpath ./python` - cd test && bash ./travis.sh && cd .. env: From ecf08642ef25e9e009b0e49adaf10e6b8f7736c4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 19:42:11 -0600 Subject: [PATCH 0284/1155] BF_HAVE_TRACE -> BF_TRACE_ENABLED. --- src/bifrost/config.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 3748db126..f2ade0f4e 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -54,7 +54,7 @@ extern "C" { // Debugging features #define BF_DEBUG_ENABLED @HAVE_DEBUG@ -#define BF_HAVE_TRACE @HAVE_TRACE@ +#define BF_TRACE_ENABLED @HAVE_TRACE@ #define BF_CUDA_DEBUG_ENABLED @HAVE_CUDA_DEBUG@ // Logging directory From 9b5e15f7be4d5dc8e515a88a9171e9b905f5171d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 19:57:53 -0600 Subject: [PATCH 0285/1155] Use BF_CUDA_ENABLED to auto-skip some tests. --- test/jenkins.sh | 24 +----------------------- test/test_accumulate.py | 3 +++ test/test_fdmt.py | 3 +++ test/test_fft.py | 3 +++ test/test_fir.py | 3 +++ test/test_gunpack.py | 5 ++++- test/test_linalg.py | 3 +++ test/test_map.py | 3 +++ test/test_pipeline.py | 3 +++ test/test_reduce.py | 4 ++++ test/test_romein.py | 3 +++ test/test_scrunch.py | 3 +++ test/test_transpose.py | 3 +++ test/travis.sh | 13 +------------ 14 files changed, 40 insertions(+), 36 deletions(-) diff --git a/test/jenkins.sh b/test/jenkins.sh index 0171f8b16..e6c767641 100755 --- a/test/jenkins.sh +++ b/test/jenkins.sh @@ -1,26 +1,4 @@ #!/bin/bash # This file runs CPU and GPU tests for jenkins ./download_test_data.sh -export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest \ - test_block \ - test_sigproc \ - test_resizing \ - test_quantize \ - test_unpack \ - test_print_header \ - test_pipeline_cpu \ - test_serialize \ - test_binary_io \ - test_address \ - test_fdmt \ - test_fft \ - test_fir \ - test_guantize \ - test_gunpack \ - test_linalg \ - test_map \ - test_reduce \ - test_romein \ - test_scrunch \ - test_transpose +coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover diff --git a/test/test_accumulate.py b/test/test_accumulate.py index a70235ef5..be3fd9f85 100644 --- a/test/test_accumulate.py +++ b/test/test_accumulate.py @@ -32,6 +32,8 @@ import bifrost.pipeline as bfp import bifrost.blocks as blocks +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + class CallbackBlock(blocks.CopyBlock): """Testing-only block which calls user-defined @@ -47,6 +49,7 @@ def on_data(self, ispan, ospan): self.data_callback(ispan, ospan) return super(CallbackBlock, self).on_data(ispan, ospan) +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestAccumulateBlock(unittest.TestCase): def setUp(self): """Create settings shared between tests""" diff --git a/test/test_fdmt.py b/test/test_fdmt.py index 04ae40398..e00471851 100644 --- a/test/test_fdmt.py +++ b/test/test_fdmt.py @@ -30,6 +30,9 @@ import bifrost as bf from bifrost.fdmt import Fdmt +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class FdmtTest(unittest.TestCase): def run_test(self, ntime, nchan, max_delay, batch_shape=()): fdmt = Fdmt() diff --git a/test/test_fft.py b/test/test_fft.py index 4858c6703..ef15fe345 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -37,6 +37,8 @@ from bifrost.fft import Fft import bifrost as bf +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + MTOL = 1e-6 # Relative tolerance at the mean magnitude RTOL = 1e-1 @@ -48,6 +50,7 @@ def compare(result, gold): absmean = np.abs(gold).mean() np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestFFT(unittest.TestCase): def setUp(self): np.random.seed(1234) diff --git a/test/test_fir.py b/test/test_fir.py index bcfa0d42d..fd79658ee 100644 --- a/test/test_fir.py +++ b/test/test_fir.py @@ -38,6 +38,8 @@ from bifrost.fir import Fir import bifrost as bf +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + MTOL = 1e-6 # Relative tolerance at the mean magnitude RTOL = 1e-1 @@ -49,6 +51,7 @@ def compare(result, gold): absmean = np.abs(gold).mean() np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestFIR(unittest.TestCase): def setUp(self): np.random.seed(1234) diff --git a/test/test_gunpack.py b/test/test_gunpack.py index 94ced4409..cb8995d65 100644 --- a/test/test_gunpack.py +++ b/test/test_gunpack.py @@ -30,6 +30,9 @@ import bifrost as bf import bifrost.unpack +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class UnpackTest(unittest.TestCase): def run_unpack_to_ci8_test(self, iarray): oarray = bf.ndarray(shape=iarray.shape, dtype='ci8', space='cuda') @@ -97,4 +100,4 @@ def test_ci4_to_cf32_byteswap_conjugate(self): [(0x4B,),(0x69,)], [(0x87,),(0xA5,)]], dtype='ci4') - self.run_unpack_to_cf32_test(iarray.byteswap().conj()) \ No newline at end of file + self.run_unpack_to_cf32_test(iarray.byteswap().conj()) diff --git a/test/test_linalg.py b/test/test_linalg.py index 4153e207e..763f26a8c 100644 --- a/test/test_linalg.py +++ b/test/test_linalg.py @@ -37,6 +37,8 @@ from bifrost.linalg import LinAlg import bifrost as bf +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + import time RTOL = 1e-4 @@ -45,6 +47,7 @@ def H(c): return np.swapaxes(c, -1, -2).conj() +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestLinAlg(unittest.TestCase): def setUp(self): self.linalg = LinAlg() diff --git a/test/test_map.py b/test/test_map.py index 2325e14de..da10bb591 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -30,6 +30,9 @@ import numpy as np import bifrost as bf +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestMap(unittest.TestCase): def setUp(self): np.random.seed(1234) diff --git a/test/test_pipeline.py b/test/test_pipeline.py index 88acdd527..00e79c079 100644 --- a/test/test_pipeline.py +++ b/test/test_pipeline.py @@ -33,6 +33,8 @@ from bifrost.blocks import * from bifrost.pipeline import SourceBlock, TransformBlock, SinkBlock +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + from copy import deepcopy RTOL = 1e-4 @@ -107,6 +109,7 @@ def on_data(self, ispan): # downstream callback blocks from ever executing. self.data_ref['idata'] = ispan.data.copy() +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class PipelineTest(unittest.TestCase): def setUp(self): # Note: This file needs to be large enough to fill the minimum-size diff --git a/test/test_reduce.py b/test/test_reduce.py index 634a83fa6..e9eccc8db 100644 --- a/test/test_reduce.py +++ b/test/test_reduce.py @@ -28,6 +28,9 @@ import unittest import numpy as np import bifrost as bf + +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + #import time def stderr(data, axis): @@ -61,6 +64,7 @@ def pwrscrunch(data, factor=2, axis=0, func=np.sum): axis = axis + 1 if axis >= 0 else axis return func(np.abs(data.reshape(s))**2, axis=axis) +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class ReduceTest(unittest.TestCase): def setUp(self): np.random.seed(1234) diff --git a/test/test_romein.py b/test/test_romein.py index 93b327a5d..8b5bef40f 100644 --- a/test/test_romein.py +++ b/test/test_romein.py @@ -35,6 +35,9 @@ from bifrost.unpack import unpack from bifrost.DataType import ci4 +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class RomeinTest(unittest.TestCase): def setUp(self): self.romein=Romein() diff --git a/test/test_scrunch.py b/test/test_scrunch.py index 8a6a3b7ea..10c32e7a6 100644 --- a/test/test_scrunch.py +++ b/test/test_scrunch.py @@ -32,6 +32,8 @@ import bifrost.pipeline as bfp import bifrost.blocks as blocks +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + class CallbackBlock(blocks.CopyBlock): """Testing-only block which calls user-defined functions on sequence and on data""" @@ -46,6 +48,7 @@ def on_data(self, ispan, ospan): self.data_callback(ispan, ospan) return super(CallbackBlock, self).on_data(ispan, ospan) +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestScrunchBlock(unittest.TestCase): def setUp(self): """Create settings shared between tests""" diff --git a/test/test_transpose.py b/test/test_transpose.py index b83d90c92..20d239069 100644 --- a/test/test_transpose.py +++ b/test/test_transpose.py @@ -32,6 +32,9 @@ from functools import reduce from itertools import permutations +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TransposeTest(unittest.TestCase): def run_simple_test(self, axes, dtype, shape): n = reduce(lambda a,b:a*b, shape) diff --git a/test/travis.sh b/test/travis.sh index 7c85ddaca..d560ae0cc 100755 --- a/test/travis.sh +++ b/test/travis.sh @@ -2,15 +2,4 @@ # This file runs CPU-safe tests for travis-ci ./download_test_data.sh export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest \ - test_block \ - test_sigproc \ - test_resizing \ - test_quantize \ - test_unpack \ - test_print_header \ - test_pipeline_cpu \ - test_serialize \ - test_binary_io \ - test_address \ - test_scripts +coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover From a0cf3696695fa105aee9da4351ddb33eaa8a3332 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 20:03:46 -0600 Subject: [PATCH 0286/1155] Use BF_CUDA_ENABLED to auto-skip some tests. --- test/test_guantize.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test_guantize.py b/test/test_guantize.py index 4c8a618b2..941675240 100644 --- a/test/test_guantize.py +++ b/test/test_guantize.py @@ -30,6 +30,9 @@ import bifrost as bf import bifrost.quantize +from bifrost.libbifrost.bf import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class QuantizeTest(unittest.TestCase): def run_quantize_from_cf32_test(self, out_dtype): iarray = bf.ndarray([[0.4 + 0.5j, 1.4 + 1.5j], From de2b2a1e18e7d0726623e04b20b1e35344a98ba0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 20:16:19 -0600 Subject: [PATCH 0287/1155] Fix the OSX build. --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index 547d4d88e..277561711 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,6 +55,11 @@ addons: - pkg-config - python3 +before_script: + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then python3 -m pip install --upgrade virtualenv; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then virtualenv -p python3 "$HOME/venv"; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then source "$HOME/venv/bin/activate"; fi + script: - pip --no-cache-dir install \ setuptools \ From a79d24a222b2a5c6dde5c2a4b4b32a8fe7f5381e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Oct 2021 20:18:18 -0600 Subject: [PATCH 0288/1155] libbifrost.bf -> libbifrost_generated. --- test/test_accumulate.py | 2 +- test/test_fdmt.py | 2 +- test/test_fft.py | 2 +- test/test_fir.py | 2 +- test/test_guantize.py | 2 +- test/test_gunpack.py | 2 +- test/test_linalg.py | 2 +- test/test_map.py | 2 +- test/test_pipeline.py | 2 +- test/test_reduce.py | 2 +- test/test_romein.py | 2 +- test/test_scrunch.py | 2 +- test/test_transpose.py | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/test/test_accumulate.py b/test/test_accumulate.py index be3fd9f85..c4107381d 100644 --- a/test/test_accumulate.py +++ b/test/test_accumulate.py @@ -32,7 +32,7 @@ import bifrost.pipeline as bfp import bifrost.blocks as blocks -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED class CallbackBlock(blocks.CopyBlock): diff --git a/test/test_fdmt.py b/test/test_fdmt.py index e00471851..844e7fe01 100644 --- a/test/test_fdmt.py +++ b/test/test_fdmt.py @@ -30,7 +30,7 @@ import bifrost as bf from bifrost.fdmt import Fdmt -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class FdmtTest(unittest.TestCase): diff --git a/test/test_fft.py b/test/test_fft.py index ef15fe345..6aa9b09d8 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -37,7 +37,7 @@ from bifrost.fft import Fft import bifrost as bf -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED MTOL = 1e-6 # Relative tolerance at the mean magnitude RTOL = 1e-1 diff --git a/test/test_fir.py b/test/test_fir.py index fd79658ee..cca287c98 100644 --- a/test/test_fir.py +++ b/test/test_fir.py @@ -38,7 +38,7 @@ from bifrost.fir import Fir import bifrost as bf -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED MTOL = 1e-6 # Relative tolerance at the mean magnitude RTOL = 1e-1 diff --git a/test/test_guantize.py b/test/test_guantize.py index 941675240..352346082 100644 --- a/test/test_guantize.py +++ b/test/test_guantize.py @@ -30,7 +30,7 @@ import bifrost as bf import bifrost.quantize -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class QuantizeTest(unittest.TestCase): diff --git a/test/test_gunpack.py b/test/test_gunpack.py index cb8995d65..5bd036731 100644 --- a/test/test_gunpack.py +++ b/test/test_gunpack.py @@ -30,7 +30,7 @@ import bifrost as bf import bifrost.unpack -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class UnpackTest(unittest.TestCase): diff --git a/test/test_linalg.py b/test/test_linalg.py index 763f26a8c..ae920f2ba 100644 --- a/test/test_linalg.py +++ b/test/test_linalg.py @@ -37,7 +37,7 @@ from bifrost.linalg import LinAlg import bifrost as bf -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED import time diff --git a/test/test_map.py b/test/test_map.py index da10bb591..9dae19baa 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -30,7 +30,7 @@ import numpy as np import bifrost as bf -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestMap(unittest.TestCase): diff --git a/test/test_pipeline.py b/test/test_pipeline.py index 00e79c079..f40d30cac 100644 --- a/test/test_pipeline.py +++ b/test/test_pipeline.py @@ -33,7 +33,7 @@ from bifrost.blocks import * from bifrost.pipeline import SourceBlock, TransformBlock, SinkBlock -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED from copy import deepcopy diff --git a/test/test_reduce.py b/test/test_reduce.py index e9eccc8db..73bec5c77 100644 --- a/test/test_reduce.py +++ b/test/test_reduce.py @@ -29,7 +29,7 @@ import numpy as np import bifrost as bf -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED #import time diff --git a/test/test_romein.py b/test/test_romein.py index 8b5bef40f..c764eb3b9 100644 --- a/test/test_romein.py +++ b/test/test_romein.py @@ -35,7 +35,7 @@ from bifrost.unpack import unpack from bifrost.DataType import ci4 -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class RomeinTest(unittest.TestCase): diff --git a/test/test_scrunch.py b/test/test_scrunch.py index 10c32e7a6..332d09853 100644 --- a/test/test_scrunch.py +++ b/test/test_scrunch.py @@ -32,7 +32,7 @@ import bifrost.pipeline as bfp import bifrost.blocks as blocks -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED class CallbackBlock(blocks.CopyBlock): """Testing-only block which calls user-defined diff --git a/test/test_transpose.py b/test/test_transpose.py index 20d239069..e8c0cb2d6 100644 --- a/test/test_transpose.py +++ b/test/test_transpose.py @@ -32,7 +32,7 @@ from functools import reduce from itertools import permutations -from bifrost.libbifrost.bf import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TransposeTest(unittest.TestCase): From b0b85d634802640cd5e43fb1b7cbf488cacf4e78 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 07:45:45 -0600 Subject: [PATCH 0289/1155] Added a missing 'skip is not CUDA'. --- test/test_ndarray.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index d587c17c1..26ef7e209 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -29,6 +29,9 @@ import numpy as np import bifrost as bf +from bifrost.libbifrost_generated import BF_CUDA_ENABLED + +@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class NDArrayTest(unittest.TestCase): def setUp(self): self.known_vals = [[0,1],[2,3],[4,5]] From 319031c87fe29234586645dbf7a7372546478b3f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 07:46:13 -0600 Subject: [PATCH 0290/1155] Switched to pip for installation and added DRY_RUN. --- python/Makefile.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/python/Makefile.in b/python/Makefile.in index f9a1510ac..8728232b4 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -50,11 +50,13 @@ build: bifrost/*.py Makefile $(BIFROST_PYTHON_VERSION_FILE) $(BIFROST_PYTHON_BIN @PYTHON@ setup.py build @PYBUILDFLAGS@ .PHONY: build +DRY_RUN ?= 0 + install: build ifeq ($(DRY_RUN),0) - @PYTHON@ setup.py install @PYINSTALLFLAGS@ + @PYTHON@ -m pip install @PYINSTALLFLAGS@ . else - @echo "@PYTHON@ setup.py install @PYINSTALLFLAGS@" + @echo "@PYTHON@ -m pip install @PYINSTALLFLAGS@ ." endif .PHONY: install From c0f168375e320b207d9551f86229232a3f273017 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 07:48:53 -0600 Subject: [PATCH 0291/1155] Fixed a typing problem on a numpy index. --- python/bifrost/block.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index 94fbb1ebb..d6cb14535 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -132,7 +132,7 @@ def insert_zeros_evenly(input_data, number_zeros): insert_index = np.floor( np.arange( number_zeros, - step=1.0) * float(input_data.size) / number_zeros) + step=1.0) * float(input_data.size) / number_zeros).astype(int) output_data = np.insert( input_data, insert_index, np.zeros(number_zeros)) From 27bc73091da3d193e7d6640aecf22507f0122b0b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 09:43:19 -0600 Subject: [PATCH 0292/1155] .next() -> next() --- test/test_resizing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_resizing.py b/test/test_resizing.py index 7630b7137..40fc31145 100644 --- a/test/test_resizing.py +++ b/test/test_resizing.py @@ -58,7 +58,7 @@ def main(self, input_ring): """Initiate the writing to file @param[in] input_rings First ring in this list will be used""" span_generator = self.iterate_ring_read(input_ring) - span = span_generator.next() + span = next(span_generator) text_file = open(self.filename, 'a') np.savetxt(text_file, span.data_view(np.float32).reshape((1,-1))) text_file.close() From 2015f0aea45179a30164ff55ac86b5ff1018ecfa Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 10:01:04 -0600 Subject: [PATCH 0293/1155] Also add in major-only CUDA archs. --- config/cuda.m4 | 10 +++++++++- configure | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 1780886e8..ad9e5405f 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -114,7 +114,15 @@ AC_DEFUN([AX_CHECK_CUDA], cudaSetDevice(dev); cudaDeviceGetAttribute(&major, cudaDevAttrComputeCapabilityMajor, dev); cudaDeviceGetAttribute(&minor, cudaDevAttrComputeCapabilityMinor, dev); - arch = 10*major + minor; + arch = 10*major; + if( archs.count(arch) == 0 ) { + archs.insert(arch); + if( dev > 0 ) { + fh << " "; + } + fh << arch; + } + arch += minor; if( archs.count(arch) == 0 ) { archs.insert(arch); if( dev > 0 ) { diff --git a/configure b/configure index a0abf3b36..7b3f0c5f2 100755 --- a/configure +++ b/configure @@ -18141,7 +18141,15 @@ main () cudaSetDevice(dev); cudaDeviceGetAttribute(&major, cudaDevAttrComputeCapabilityMajor, dev); cudaDeviceGetAttribute(&minor, cudaDevAttrComputeCapabilityMinor, dev); - arch = 10*major + minor; + arch = 10*major; + if( archs.count(arch) == 0 ) { + archs.insert(arch); + if( dev > 0 ) { + fh << " "; + } + fh << arch; + } + arch += minor; if( archs.count(arch) == 0 ) { archs.insert(arch); if( dev > 0 ) { From 329894615e91f50bd40df4319ce3c9caf3b60a71 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 10:13:55 -0600 Subject: [PATCH 0294/1155] Close out dangling files. --- python/bifrost/block.py | 9 ++++----- test/test_block.py | 33 +++++++++++++++++++++------------ 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index d6cb14535..6a8ab3cd7 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -447,8 +447,8 @@ def __init__(self, filename): def load_settings(self, input_header): """Load the header from json @param[in] input_header The header from the ring""" - write_file = open(self.filename, 'w') - write_file.write(str(json.loads(input_header.tostring()))) + with open(self.filename, 'w') as write_file: + write_file.write(str(json.loads(input_header.tostring()))) def main(self, input_ring): """Put the header into the file @param[in] input_ring Contains the header in question""" @@ -576,9 +576,8 @@ def main(self, input_ring): data_accumulate = np.concatenate((data_accumulate, unpacked_data[0])) else: data_accumulate = unpacked_data[0] - text_file = open(self.filename, 'a') - np.savetxt(text_file, data_accumulate.reshape((1, -1))) - text_file.close() + with open(self.filename, 'a') as text_file: + np.savetxt(text_file, data_accumulate.reshape((1, -1))) class CopyBlock(TransformBlock): """Copies input ring's data to the output ring""" def __init__(self, gulp_size=1048576): diff --git a/test/test_block.py b/test/test_block.py index a27fea44d..7e86d9005 100644 --- a/test/test_block.py +++ b/test/test_block.py @@ -69,7 +69,8 @@ def test_multi_dimensional_input(self): self.blocks.append((TestingBlock(test_array), [], [0])) self.blocks.append((WriteHeaderBlock('.log2.txt'), [0], [])) Pipeline(self.blocks).main() - header = eval(open('.log2.txt').read()) # pylint:disable=eval-used + with open('.log2.txt') as fh: + header = eval(fh.read()) # pylint:disable=eval-used dumped_numbers = np.loadtxt('.log.txt').reshape(header['shape']) np.testing.assert_almost_equal(dumped_numbers, test_array) class TestCopyBlock(unittest.TestCase): @@ -90,7 +91,8 @@ def test_simple_copy(self): self.blocks.append((CopyBlock(), [0], [1])) self.blocks.append((WriteAsciiBlock(logfile), [1], [])) Pipeline(self.blocks).main() - test_byte = open(logfile, 'r').read(1) + with open(logfile, 'r') as fh: + test_byte = fh.read(1) self.assertEqual(test_byte, '2') def test_multi_copy(self): """Test which performs a read of a sigproc file, @@ -102,7 +104,8 @@ def test_multi_copy(self): (CopyBlock(), [i], [i + 1])) self.blocks.append((WriteAsciiBlock(logfile), [10], [])) Pipeline(self.blocks).main() - test_byte = open(logfile, 'r').read(1) + with open(logfile, 'r') as fh: + test_byte = fh.read(1) self.assertEqual(test_byte, '2') def test_non_linear_multi_copy(self): """Test which reads in a sigproc file, and @@ -117,7 +120,8 @@ def test_non_linear_multi_copy(self): self.blocks.append((CopyBlock(), [5], [6])) self.blocks.append((WriteAsciiBlock(logfile), [6], [])) Pipeline(self.blocks).main() - log_nums = open(logfile, 'r').read(500).split(' ') + with open(logfile, 'r') as fh: + log_nums = fh.read(500).split(' ') test_num = np.float(log_nums[8]) self.assertEqual(test_num, 3) def test_single_block_multi_copy(self): @@ -129,9 +133,9 @@ def test_single_block_multi_copy(self): self.blocks.append((WriteAsciiBlock(logfiles[0]), [1], [])) self.blocks.append((WriteAsciiBlock(logfiles[1]), [2], [])) Pipeline(self.blocks).main() - test_bytes = int( - open(logfiles[0], 'r').read(1)) + int( - open(logfiles[1], 'r').read(1)) + with open(logfiles[0], 'r') as fh0: + with open(logfiles[1], 'r') as fh1: + test_bytes = int(fh0.read(1)) + int(fh1.read(1)) self.assertEqual(test_bytes, 4) def test_32bit_copy(self): """Perform a simple test to confirm that 32 bit @@ -145,7 +149,8 @@ def test_32bit_copy(self): self.blocks.append((CopyBlock(), [0], [1])) self.blocks.append((WriteAsciiBlock(logfile), [1], [])) Pipeline(self.blocks).main() - test_bytes = open(logfile, 'r').read(500).split(' ') + with open(logfile, 'r') as fh: + test_bytes = fh.read(500).split(' ') self.assertAlmostEqual(np.float(test_bytes[0]), 0.72650784254) class TestFoldBlock(unittest.TestCase): """This tests functionality of the FoldBlock.""" @@ -163,7 +168,8 @@ def dump_ring_and_read(self): logfile = ".log.txt" self.blocks.append((WriteAsciiBlock(logfile), [1], [])) Pipeline(self.blocks).main() - test_bytes = open(logfile, 'r').read().split(' ') + with open(logfile, 'r') as fh: + test_bytes = fh.read().split(' ') histogram = np.array([np.float(x) for x in test_bytes]) return histogram def test_simple_pulsar(self): @@ -234,7 +240,8 @@ def test_data_throughput(self): blocks.append(( WriteAsciiBlock('.log.txt'), [1], [])) Pipeline(blocks).main() - test_byte = open('.log.txt', 'r').read().split(' ') + with open('.log.txt', 'r') as fh: + test_byte = fh.read().split(' ') test_nums = np.array([float(x) for x in test_byte]) self.assertLess(np.max(test_nums), 256) self.assertEqual(test_nums.size, 12800) @@ -253,12 +260,14 @@ def setUp(self): def test_throughput(self): """Test that any data is being put through""" Pipeline(self.blocks).main() - test_string = open(self.logfile, 'r').read() + with open(self.logfile, 'r') as fh: + test_string = fh.read() self.assertGreater(len(test_string), 0) def test_throughput_size(self): """Number of elements going out should be double that of basic copy""" Pipeline(self.blocks).main() - number_fftd = len(open(self.logfile, 'r').read().split('\n')) + with open(self.logfile, 'r') as fh: + number_fftd = len(fh.read().split('\n')) number_fftd = np.loadtxt(self.logfile).size open(self.logfile, 'w').close() # Run pipeline again with simple copy From d362160af79f91a878621efa5ba92e323ac8d151 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 10:25:40 -0600 Subject: [PATCH 0295/1155] Close out dangling files. --- python/bifrost/sigproc.py | 6 +++--- test/test_sigproc.py | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index 8fbc6ce0f..5a6b114e5 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -392,9 +392,9 @@ def read_data(self, start=None, end=None): return self.data def write_to(self, filename): """writes data and header to a different file""" - file_object = open(filename, 'wb') - _write_header(self.header, file_object) - _write_data(self.data, self.nbits, file_object) + with open(filename, 'wb') as file_object: + _write_header(self.header, file_object) + _write_data(self.data, self.nbits, file_object) def append_data(self, input_data): """append data to local data and file""" input_frames = input_data.size // self.nifs // self.nchans diff --git a/test/test_sigproc.py b/test/test_sigproc.py index f75e17357..7216d43cd 100644 --- a/test/test_sigproc.py +++ b/test/test_sigproc.py @@ -136,11 +136,13 @@ def test_append_data(self): random_stream = np.random.randint(63, size=10000).astype('uint8').T testfile.append_data(random_stream) self.assertEqual(testfile.data.shape[0], initial_nframe + 10000) + testfile.close() def test_data_slice(self): testFile = SigprocFile() testFile.open(filename='./data/1chan8bitNoDM.fil', mode='r+b') testFile.read_header() self.assertEqual(testFile.read_data(-1).shape, (1, 1, 1)) + testFile.close() def test_append_untransposed_data(self): """test if appending data in different shape affects output""" initial_nframe = self.my8bitfile.get_nframe() @@ -161,6 +163,8 @@ def test_append_untransposed_data(self): testfile1.open(filename='./data/test_write1.fil', mode='rb') testfile2.open(filename='./data/test_write1.fil', mode='rb') np.testing.assert_array_equal(testfile1.read_data(), testfile2.read_data()) + testfile1.close() + testfile2.close() class Test_16bit_2chan(unittest.TestCase): def setUp(self): self.my16bitfile = SigprocFile() @@ -187,6 +191,8 @@ def test_append_2chan_data(self): file2.read_header() file2.read_data() np.testing.assert_array_equal(file1.read_data(),file2.read_data()) + file1.close() + file2.close() class Test_data_slicing(unittest.TestCase): def setUp(self): self.myfile = SigprocFile() From c9e5c769b5f926a705ca984a384707c485d48754 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 10:34:51 -0600 Subject: [PATCH 0296/1155] Close out dangling files. --- python/bifrost/blocks/binary_io.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/python/bifrost/blocks/binary_io.py b/python/bifrost/blocks/binary_io.py index fce718167..09513ad5b 100644 --- a/python/bifrost/blocks/binary_io.py +++ b/python/bifrost/blocks/binary_io.py @@ -57,7 +57,7 @@ def __enter__(self): return self def close(self): - pass + self.file_obj.close() def __exit__(self, type, value, tb): self.close() @@ -105,6 +105,12 @@ def __init__(self, iring, file_ext='out', *args, **kwargs): self.current_fileobj = None self.file_ext = file_ext + def __del__(self): + try: + self.current_fileobj.close() + except AttributeError: + pass + def on_sequence(self, iseq): if self.current_fileobj is not None: self.current_fileobj.close() From b6e819589c5c625179fb92a18feb500671c3f917 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 11:30:58 -0600 Subject: [PATCH 0297/1155] Split script into install and script. --- .travis.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 277561711..4554823b9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,12 +55,12 @@ addons: - pkg-config - python3 -before_script: +before_install: - if [ "$TRAVIS_OS_NAME" = "osx" ]; then python3 -m pip install --upgrade virtualenv; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then virtualenv -p python3 "$HOME/venv"; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then source "$HOME/venv/bin/activate"; fi -script: +install: - pip --no-cache-dir install \ setuptools \ numpy \ @@ -73,9 +73,14 @@ script: coveralls \ codecov - ./configure --disable-cuda - - make -j - - export LD_LIBRARY_PATH=`realpath ./lib`:${LD_LIBRARY_PATH} - - export PYTHONPATH=`realpath ./python` + - make -j all + - sudo HAVE_PYTHON=0 make install + - make -C python install + +script: + - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} + - pip --no-cache-dir install \ + scipy - cd test && bash ./travis.sh && cd .. env: From 33563cc7137ffac909158c19ac80f0039784ad62 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 11:40:16 -0600 Subject: [PATCH 0298/1155] Simplify. --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4554823b9..436ef383f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -72,10 +72,9 @@ install: git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ coveralls \ codecov - - ./configure --disable-cuda + - ./configure --disable-cuda --with-pyinstall-flags="--user" - make -j all - - sudo HAVE_PYTHON=0 make install - - make -C python install + - sudo make install script: - export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} From cebefa81c410c25ca2a74813470173256d9eb110 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Oct 2021 11:44:38 -0600 Subject: [PATCH 0299/1155] Ugh. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 436ef383f..432e22403 100644 --- a/.travis.yml +++ b/.travis.yml @@ -72,7 +72,7 @@ install: git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ coveralls \ codecov - - ./configure --disable-cuda --with-pyinstall-flags="--user" + - ./configure --disable-cuda - make -j all - sudo make install From 4e5ed37a37e036e9b56f66696f4729137b5ef0b3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 16:41:44 -0600 Subject: [PATCH 0300/1155] Prefer C++14 support but fall back to C++11. --- configure | 8762 +++++++++++++++++++++++++++++--------------------- configure.ac | 4 +- 2 files changed, 5163 insertions(+), 3603 deletions(-) diff --git a/configure b/configure index 7b3f0c5f2..c4ba6af78 100755 --- a/configure +++ b/configure @@ -1,9 +1,10 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. +# Generated by GNU Autoconf 2.71 for bifrost 0.9.0. # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -14,14 +15,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -31,46 +34,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -94,8 +90,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -107,30 +107,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -152,20 +132,22 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -185,12 +167,15 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -205,30 +190,38 @@ test -x / || exit 1" test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -236,14 +229,21 @@ fi esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -261,18 +261,19 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -299,6 +300,7 @@ as_fn_unset () } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -316,6 +318,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -330,7 +340,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -339,7 +349,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -378,12 +388,13 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -395,18 +406,27 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -418,9 +438,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -447,7 +467,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -491,7 +511,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -505,6 +525,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -518,6 +542,13 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -595,40 +626,36 @@ PACKAGE_URL='https://github.com/ledatelescope/bifrost/' ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= ac_subst_vars='LTLIBOBJS PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR @@ -697,6 +724,7 @@ HAVE_NUMA HAVE_OPENMP LIBOBJS HAVE_CXX11 +HAVE_CXX14 SO_EXT CTAGS SET_MAKE @@ -704,7 +732,6 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CXXCPP -CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -840,7 +867,6 @@ CXX CXXFLAGS CCC LT_SYS_LIBRARY_PATH -CPP CXXCPP CTAGS PYTHON @@ -914,8 +940,6 @@ do *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -956,9 +980,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -982,9 +1006,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1195,9 +1219,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1211,9 +1235,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1257,9 +1281,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1275,7 +1299,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1339,7 +1363,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1533,7 +1557,6 @@ Some influential environment variables: CXXFLAGS C++ compiler flags LT_SYS_LIBRARY_PATH User-defined run-time library search path. - CPP C preprocessor CXXCPP C++ preprocessor CTAGS Absolute path to ctags executable PYTHON Absolute path to python executable @@ -1561,9 +1584,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1591,7 +1614,8 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1599,7 +1623,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1609,9 +1633,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF bifrost configure 0.9.0 -generated by GNU Autoconf 2.69 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1628,14 +1652,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1643,14 +1667,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1666,14 +1691,14 @@ fi ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1681,14 +1706,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1704,14 +1730,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1719,17 +1745,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1751,120 +1778,44 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1872,16 +1823,9 @@ else #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1899,24 +1843,25 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func @@ -1933,7 +1878,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1941,14 +1886,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1964,14 +1910,14 @@ fi ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1979,17 +1925,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2010,11 +1957,12 @@ fi ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -2022,16 +1970,9 @@ else #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -2049,114 +1990,61 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no +if ac_fn_cxx_try_compile "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_cxx_check_header_mongrel +} # ac_fn_cxx_check_header_compile # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- @@ -2165,17 +2053,18 @@ fi ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof ($2)) return 0; @@ -2183,12 +2072,13 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof (($2))) return 0; @@ -2196,26 +2086,27 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_try_run LINENO # ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -2225,25 +2116,26 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -2261,11 +2153,12 @@ fi ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 -$as_echo_n "checking for int$2_t... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +printf %s "checking for int$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2276,7 +2169,7 @@ else $ac_includes_default enum { N = $2 / 2 - 1 }; int -main () +main (void) { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; @@ -2286,13 +2179,14 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int -main () +main (void) { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; @@ -2303,9 +2197,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( @@ -2313,19 +2208,20 @@ else eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no"; then : +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : -else +else $as_nop break fi done fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t @@ -2337,11 +2233,12 @@ $as_echo "$ac_res" >&6; } ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 -$as_echo_n "checking for uint$2_t... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +printf %s "checking for uint$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2351,7 +2248,7 @@ else /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; @@ -2361,7 +2258,8 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( @@ -2369,28 +2267,49 @@ if ac_fn_cxx_try_compile "$LINENO"; then : eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no"; then : +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : -else +else $as_nop break fi done fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2423,8 +2342,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2459,7 +2382,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2494,11 +2417,13 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2509,8 +2434,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2534,7 +2459,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2542,14 +2467,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2557,15 +2482,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2573,8 +2498,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2588,63 +2513,48 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2654,122 +2564,726 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; -ac_aux_dir= -for ac_dir in config "$srcdir"/config; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' + +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +# Test code for whether the C++ compiler supports C++98 (global declarations) +ac_cxx_conftest_cxx98_globals=' +// Does the compiler advertise C++98 conformance? +#if !defined __cplusplus || __cplusplus < 199711L +# error "Compiler does not advertise C++98 conformance" +#endif + +// These inclusions are to reject old compilers that +// lack the unsuffixed header files. +#include +#include + +// and are *not* freestanding headers in C++98. +extern void assert (int); +namespace std { + extern int strcmp (const char *, const char *); +} + +// Namespaces, exceptions, and templates were all added after "C++ 2.0". +using std::exception; +using std::strcmp; + +namespace { + +void test_exception_syntax() +{ + try { + throw "test"; + } catch (const char *s) { + // Extra parentheses suppress a warning when building autoconf itself, + // due to lint rules shared with more typical C programs. + assert (!(strcmp) (s, "test")); + } +} + +template struct test_template +{ + T const val; + explicit test_template(T t) : val(t) {} + template T add(U u) { return static_cast(u) + val; } +}; + +} // anonymous namespace +' + +# Test code for whether the C++ compiler supports C++98 (body of main) +ac_cxx_conftest_cxx98_main=' + assert (argc); + assert (! argv[0]); +{ + test_exception_syntax (); + test_template tt (2.0); + assert (tt.add (4) == 6.0); + assert (true && !false); +} +' + +# Test code for whether the C++ compiler supports C++11 (global declarations) +ac_cxx_conftest_cxx11_globals=' +// Does the compiler advertise C++ 2011 conformance? +#if !defined __cplusplus || __cplusplus < 201103L +# error "Compiler does not advertise C++11 conformance" +#endif + +namespace cxx11test +{ + constexpr int get_val() { return 20; } + + struct testinit + { + int i; + double d; + }; + + class delegate + { + public: + delegate(int n) : n(n) {} + delegate(): delegate(2354) {} + + virtual int getval() { return this->n; }; + protected: + int n; + }; + + class overridden : public delegate + { + public: + overridden(int n): delegate(n) {} + virtual int getval() override final { return this->n * 2; } + }; + + class nocopy + { + public: + nocopy(int i): i(i) {} + nocopy() = default; + nocopy(const nocopy&) = delete; + nocopy & operator=(const nocopy&) = delete; + private: + int i; + }; + + // for testing lambda expressions + template Ret eval(Fn f, Ret v) + { + return f(v); + } + + // for testing variadic templates and trailing return types + template auto sum(V first) -> V + { + return first; + } + template auto sum(V first, Args... rest) -> V + { + return first + sum(rest...); + } +} +' + +# Test code for whether the C++ compiler supports C++11 (body of main) +ac_cxx_conftest_cxx11_main=' +{ + // Test auto and decltype + auto a1 = 6538; + auto a2 = 48573953.4; + auto a3 = "String literal"; + + int total = 0; + for (auto i = a3; *i; ++i) { total += *i; } + + decltype(a2) a4 = 34895.034; +} +{ + // Test constexpr + short sa[cxx11test::get_val()] = { 0 }; +} +{ + // Test initializer lists + cxx11test::testinit il = { 4323, 435234.23544 }; +} +{ + // Test range-based for + int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, + 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; + for (auto &x : array) { x += 23; } +} +{ + // Test lambda expressions + using cxx11test::eval; + assert (eval ([](int x) { return x*2; }, 21) == 42); + double d = 2.0; + assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); + assert (d == 5.0); + assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); + assert (d == 5.0); +} +{ + // Test use of variadic templates + using cxx11test::sum; + auto a = sum(1); + auto b = sum(1, 2); + auto c = sum(1.0, 2.0, 3.0); +} +{ + // Test constructor delegation + cxx11test::delegate d1; + cxx11test::delegate d2(); + cxx11test::delegate d3(45); +} +{ + // Test override and final + cxx11test::overridden o1(55464); +} +{ + // Test nullptr + char *c = nullptr; +} +{ + // Test template brackets + test_template<::test_template> v(test_template(12)); +} +{ + // Unicode literals + char const *utf8 = u8"UTF-8 string \u2500"; + char16_t const *utf16 = u"UTF-8 string \u2500"; + char32_t const *utf32 = U"UTF-32 string \u2500"; +} +' + +# Test code for whether the C compiler supports C++11 (complete). +ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} +${ac_cxx_conftest_cxx11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + ${ac_cxx_conftest_cxx11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C++98 (complete). +ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" + +# Auxiliary files required by this configure script. +ac_aux_files="install-sh config.guess config.sub ltmain.sh" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}/config" + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" break fi + ac_first_candidate=false + + as_found=false done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi + # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + @@ -2780,10 +3294,12 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Programs # + + case `pwd` in *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac @@ -2803,28 +3319,32 @@ macro_revision='2.4.6' + ltmain=$ac_aux_dir/ltmain.sh -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else + + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -2843,21 +3363,22 @@ IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -2897,8 +3418,8 @@ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then @@ -2924,12 +3445,12 @@ func_echo_all () } case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; + printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +printf "%s\n" "printf" >&6; } ;; + print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +printf "%s\n" "print -r" >&6; } ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +printf "%s\n" "cat" >&6; } ;; esac @@ -2942,6 +3463,15 @@ esac + + + + + + + + + @@ -2953,11 +3483,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -2965,11 +3496,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2980,11 +3515,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2993,11 +3528,12 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3005,11 +3541,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3020,11 +3560,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -3032,8 +3572,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3046,11 +3586,12 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3058,11 +3599,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3073,11 +3618,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3086,11 +3631,12 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3099,15 +3645,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3123,18 +3673,18 @@ if test $ac_prog_rejected = yes; then # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3145,11 +3695,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3157,11 +3708,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3172,11 +3727,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3189,11 +3744,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3201,11 +3757,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3216,11 +3776,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3232,8 +3792,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3241,25 +3801,129 @@ esac fi fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -3269,7 +3933,7 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -3277,7 +3941,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3289,9 +3953,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -3312,11 +3976,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -3333,7 +3998,7 @@ do # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -3349,44 +4014,46 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else +else $as_nop ac_file='' fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3400,15 +4067,15 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -3417,7 +4084,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -3429,8 +4096,8 @@ _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -3438,10 +4105,10 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -3449,39 +4116,40 @@ $as_echo "$ac_try_echo"; } >&5 *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3495,11 +4163,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -3508,31 +4177,32 @@ $as_echo "$ac_try_echo"; } >&5 break;; esac done -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -3542,29 +4212,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -3573,57 +4247,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -3638,94 +4315,144 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi ac_ext=cpp @@ -3734,11 +4461,12 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -3752,10 +4480,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -3764,13 +4497,13 @@ case `"$ac_path_SED" --version 2>&1` in ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -3798,8 +4531,8 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed @@ -3816,11 +4549,12 @@ Xsed="$SED -e 1s/^X//" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST @@ -3828,10 +4562,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP @@ -3840,13 +4579,13 @@ case `"$ac_path_GREP" --version 2>&1` in ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -3874,16 +4613,17 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else @@ -3894,10 +4634,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP @@ -3906,13 +4651,13 @@ case `"$ac_path_EGREP" --version 2>&1` in ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -3941,16 +4686,17 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +printf %s "checking for fgrep... " >&6; } +if test ${ac_cv_path_FGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else @@ -3961,10 +4707,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in fgrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP @@ -3973,13 +4724,13 @@ case `"$ac_path_FGREP" --version 2>&1` in ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" + printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4008,8 +4759,8 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" @@ -4034,17 +4785,18 @@ test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else +else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -4073,15 +4825,16 @@ $as_echo_n "checking for ld used by $CC... " >&6; } ;; esac elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -4110,18 +4863,19 @@ fi LD=$lt_cv_path_LD if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -4144,11 +4898,12 @@ with_gnu_ld=$lt_cv_prog_gnu_ld -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test ${lt_cv_path_NM+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM @@ -4198,8 +4953,8 @@ else : ${lt_cv_path_NM=no} fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else @@ -4212,11 +4967,12 @@ else do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else @@ -4224,11 +4980,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4239,11 +4999,11 @@ fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +printf "%s\n" "$DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4256,11 +5016,12 @@ if test -z "$DUMPBIN"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else @@ -4268,11 +5029,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4283,11 +5048,11 @@ fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4299,8 +5064,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN @@ -4328,11 +5093,12 @@ test -z "$NM" && NM=nm -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +printf %s "checking the name lister ($NM) interface... " >&6; } +if test ${lt_cv_nm_interface+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) @@ -4348,26 +5114,27 @@ else fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +printf "%s\n" "$lt_cv_nm_interface" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +printf %s "checking the maximum length of command line arguments... " >&6; } +if test ${lt_cv_sys_max_cmd_len+y} +then : + printf %s "(cached) " >&6 +else $as_nop i=0 teststring=ABCD @@ -4494,11 +5261,11 @@ else fi if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len @@ -4542,11 +5309,12 @@ esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +printf %s "checking how to convert $build file names to $host format... " >&6; } +if test ${lt_cv_to_host_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $host in *-*-mingw* ) case $build in @@ -4582,18 +5350,19 @@ esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +printf %s "checking how to convert $build file names to toolchain format... " >&6; } +if test ${lt_cv_to_tool_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in @@ -4609,22 +5378,23 @@ esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +printf %s "checking for $LD option to reload object files... " >&6; } +if test ${lt_cv_ld_reload_flag+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_reload_flag='-r' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; @@ -4657,11 +5427,12 @@ esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else @@ -4669,11 +5440,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4684,11 +5459,11 @@ fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4697,11 +5472,12 @@ if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else @@ -4709,11 +5485,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4724,11 +5504,11 @@ fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then @@ -4736,8 +5516,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP @@ -4756,11 +5536,12 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +printf %s "checking how to recognize dependent libraries... " >&6; } +if test ${lt_cv_deplibs_check_method+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' @@ -4956,8 +5737,8 @@ os2*) esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no @@ -5001,11 +5782,12 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else @@ -5013,11 +5795,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5028,11 +5814,11 @@ fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5041,11 +5827,12 @@ if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else @@ -5053,11 +5840,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5068,11 +5859,11 @@ fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then @@ -5080,8 +5871,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL @@ -5101,11 +5892,12 @@ test -z "$DLLTOOL" && DLLTOOL=dlltool -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +printf %s "checking how to associate runtime and link libraries... " >&6; } +if test ${lt_cv_sharedlib_from_linklib_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in @@ -5128,8 +5920,8 @@ cygwin* | mingw* | pw32* | cegcc*) esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO @@ -5139,6 +5931,12 @@ test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -5149,15 +5947,16 @@ if test -z "$CXX"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else @@ -5165,11 +5964,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5180,11 +5983,11 @@ fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5193,15 +5996,16 @@ fi fi if test -z "$CXX"; then ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else @@ -5209,11 +6013,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5224,11 +6032,11 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5240,8 +6048,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -5251,7 +6059,7 @@ fi fi fi # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do @@ -5261,7 +6069,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -5271,20 +6079,21 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 +printf %s "checking whether the compiler supports GNU C++... " >&6; } +if test ${ac_cv_cxx_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -5294,29 +6103,33 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi -ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +printf %s "checking whether $CXX accepts -g... " >&6; } +if test ${ac_cv_prog_cxx_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no @@ -5325,57 +6138,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_prog_cxx_g=yes -else +else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_prog_cxx_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } +if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then @@ -5390,6 +6206,100 @@ else CXXFLAGS= fi fi +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +printf %s "checking for $CXX option to enable C++11 features... " >&6; } +if test ${ac_cv_prog_cxx_11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_11=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx11_program +_ACEOF +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx11" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 +printf %s "checking for $CXX option to enable C++98 features... " >&6; } +if test ${ac_cv_prog_cxx_98+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_98=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx98_program +_ACEOF +for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx98=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx98" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx98" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 +fi +fi + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -5402,11 +6312,12 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -5414,11 +6325,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5429,11 +6344,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5446,11 +6361,12 @@ if test -z "$AR"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -5458,11 +6374,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5473,11 +6393,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5489,8 +6409,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -5510,30 +6430,32 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +printf %s "checking for archiver @FILE support... " >&6; } +if test ${lt_cv_ar_at_file+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. @@ -5541,7 +6463,7 @@ if ac_fn_cxx_try_compile "$LINENO"; then : { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ @@ -5550,11 +6472,11 @@ if ac_fn_cxx_try_compile "$LINENO"; then : rm -f conftest.* libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= @@ -5571,11 +6493,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -5583,11 +6506,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5598,11 +6525,11 @@ fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5611,11 +6538,12 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else @@ -5623,11 +6551,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5638,11 +6570,11 @@ fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -5650,8 +6582,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -5670,11 +6602,12 @@ test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -5682,11 +6615,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5697,11 +6634,11 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5710,11 +6647,12 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -5722,11 +6660,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5737,11 +6679,11 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -5749,8 +6691,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -5814,11 +6756,12 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -5826,11 +6769,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5841,11 +6788,11 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5881,11 +6828,12 @@ compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +printf %s "checking command to parse $NM output from $compiler object... " >&6; } +if test ${lt_cv_sys_global_symbol_pipe+y} +then : + printf %s "(cached) " >&6 +else $as_nop # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -6037,14 +6985,14 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then @@ -6113,7 +7061,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi @@ -6148,11 +7096,11 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +printf "%s\n" "failed" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +printf "%s\n" "ok" >&6; } fi # Response file support. @@ -6198,13 +7146,14 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : +if test ${with_sysroot+y} +then : withval=$with_sysroot; -else +else $as_nop with_sysroot=no fi @@ -6222,24 +7171,25 @@ case $with_sysroot in #( no|'') ;; #( *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +printf "%s\n" "${lt_sysroot:-no}" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +printf %s "checking for a working dd... " >&6; } +if test ${ac_cv_path_lt_DD+y} +then : + printf %s "(cached) " >&6 +else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} @@ -6250,10 +7200,15 @@ if test -z "$lt_DD"; then for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in dd; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in dd + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ @@ -6273,15 +7228,16 @@ fi rm -f conftest.i conftest2.i conftest.out fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +printf "%s\n" "$ac_cv_path_lt_DD" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +printf %s "checking how to truncate binary pipes... " >&6; } +if test ${lt_cv_truncate_bin+y} +then : + printf %s "(cached) " >&6 +else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= @@ -6292,8 +7248,8 @@ fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$lt_cv_truncate_bin" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +printf "%s\n" "$lt_cv_truncate_bin" >&6; } @@ -6317,7 +7273,8 @@ func_cc_basename () # Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : +if test ${enable_libtool_lock+y} +then : enableval=$enable_libtool_lock; fi @@ -6333,7 +7290,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) @@ -6353,7 +7310,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in @@ -6391,7 +7348,7 @@ mips64*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in @@ -6432,7 +7389,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) @@ -6495,11 +7452,12 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +printf %s "checking whether the C compiler needs -belf... " >&6; } +if test ${lt_cv_cc_needs_belf+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -6510,19 +7468,20 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_cc_needs_belf=yes -else +else $as_nop lt_cv_cc_needs_belf=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -6531,8 +7490,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS @@ -6545,7 +7504,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) @@ -6582,11 +7541,12 @@ need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else @@ -6594,11 +7554,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6609,11 +7573,11 @@ fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +printf "%s\n" "$MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6622,11 +7586,12 @@ if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else @@ -6634,11 +7599,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6649,11 +7618,11 @@ fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then @@ -6661,8 +7630,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL @@ -6672,11 +7641,12 @@ else fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if test ${lt_cv_path_mainfest_tool+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out @@ -6686,8 +7656,8 @@ else fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -6702,11 +7672,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else @@ -6714,11 +7685,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6729,11 +7704,11 @@ fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +printf "%s\n" "$DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6742,11 +7717,12 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else @@ -6754,11 +7730,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6769,11 +7749,11 @@ fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then @@ -6781,8 +7761,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL @@ -6794,11 +7774,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else @@ -6806,11 +7787,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6821,11 +7806,11 @@ fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +printf "%s\n" "$NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6834,11 +7819,12 @@ if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else @@ -6846,11 +7832,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6861,11 +7851,11 @@ fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +printf "%s\n" "$ac_ct_NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then @@ -6873,8 +7863,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT @@ -6886,11 +7876,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else @@ -6898,11 +7889,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6913,11 +7908,11 @@ fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +printf "%s\n" "$LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6926,11 +7921,12 @@ if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else @@ -6938,11 +7934,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6953,11 +7953,11 @@ fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +printf "%s\n" "$ac_ct_LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then @@ -6965,8 +7965,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO @@ -6978,11 +7978,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else @@ -6990,11 +7991,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7005,11 +8010,11 @@ fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +printf "%s\n" "$OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7018,11 +8023,12 @@ if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else @@ -7030,11 +8036,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7045,11 +8055,11 @@ fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +printf "%s\n" "$ac_ct_OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then @@ -7057,8 +8067,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL @@ -7070,11 +8080,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else @@ -7082,11 +8093,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7097,11 +8112,11 @@ fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +printf "%s\n" "$OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7110,11 +8125,12 @@ if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else @@ -7122,11 +8138,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7137,11 +8157,11 @@ fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +printf "%s\n" "$ac_ct_OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then @@ -7149,8 +8169,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 @@ -7185,11 +8205,12 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +printf %s "checking for -single_module linker flag... " >&6; } +if test ${lt_cv_apple_cc_single_mod+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override @@ -7218,14 +8239,15 @@ else rm -f conftest.* fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +printf %s "checking for -exported_symbols_list linker flag... " >&6; } +if test ${lt_cv_ld_exported_symbols_list+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym @@ -7234,31 +8256,33 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_ld_exported_symbols_list=yes -else +else $as_nop lt_cv_ld_exported_symbols_list=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +printf %s "checking for -force_load linker flag... " >&6; } +if test ${lt_cv_ld_force_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} @@ -7286,8 +8310,8 @@ _LT_EOF rm -rf conftest.dSYM fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; @@ -7334,305 +8358,62 @@ $as_echo "$lt_cv_ld_force_load" >&6; } # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi +done -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then -$as_echo "#define STDC_HEADERS 1" >>confdefs.h -fi +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi -done - func_stripname_cnf () @@ -7658,7 +8439,8 @@ func_stripname_cnf () # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : +if test ${enable_shared+y} +then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; @@ -7676,7 +8458,7 @@ if test "${enable_shared+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_shared=yes fi @@ -7689,7 +8471,8 @@ fi # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : +if test ${enable_static+y} +then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; @@ -7707,7 +8490,7 @@ if test "${enable_static+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_static=yes fi @@ -7721,7 +8504,8 @@ fi # Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : +if test ${with_pic+y} +then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; @@ -7738,7 +8522,7 @@ if test "${with_pic+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop pic_mode=default fi @@ -7750,7 +8534,8 @@ fi # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : +if test ${enable_fast_install+y} +then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; @@ -7768,7 +8553,7 @@ if test "${enable_fast_install+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_fast_install=yes fi @@ -7782,11 +8567,12 @@ fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; then : +if test ${with_aix_soname+y} +then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; @@ -7795,18 +8581,19 @@ if test "${with_aix_soname+set}" = set; then : ;; esac lt_cv_with_aix_soname=$with_aix_soname -else - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + if test ${lt_cv_with_aix_soname+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$with_aix_soname" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', @@ -7888,11 +8675,12 @@ if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +printf %s "checking for objdir... " >&6; } +if test ${lt_cv_objdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then @@ -7903,17 +8691,15 @@ else fi rmdir .libs 2>/dev/null fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF +printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h @@ -7959,11 +8745,12 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +printf %s "checking for ${ac_tool_prefix}file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8012,11 +8799,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8025,11 +8812,12 @@ fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +printf %s "checking for file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8078,11 +8866,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8167,11 +8955,12 @@ if test yes = "$GCC"; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test ${lt_cv_prog_compiler_rtti_exceptions+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -8202,8 +8991,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -8560,26 +9349,28 @@ case $host_os in ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -8610,8 +9401,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in @@ -8639,11 +9430,12 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -8667,8 +9459,8 @@ else LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : @@ -8682,11 +9474,12 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -8729,19 +9522,20 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -8784,8 +9578,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -8793,19 +9587,19 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -8817,8 +9611,8 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -9373,21 +10167,23 @@ _LT_EOF if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -9402,7 +10198,7 @@ if ac_fn_c_try_link "$LINENO"; then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -9426,21 +10222,23 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -9455,7 +10253,7 @@ if ac_fn_c_try_link "$LINENO"; then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -9706,11 +10504,12 @@ fi # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +printf %s "checking if $CC understands -b... " >&6; } +if test ${lt_cv_prog_compiler__b+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" @@ -9734,8 +10533,8 @@ else LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' @@ -9775,28 +10574,30 @@ fi # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if test ${lt_cv_irix_exported_symbol+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_irix_exported_symbol=yes -else +else $as_nop lt_cv_irix_exported_symbol=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi @@ -10076,8 +10877,8 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -10113,18 +10914,19 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc+y} +then : + printf %s "(cached) " >&6 +else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -10142,7 +10944,7 @@ else if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no @@ -10156,8 +10958,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac @@ -10316,8 +11118,8 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in @@ -10878,9 +11680,10 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -10890,19 +11693,21 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : +if ac_fn_c_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -11134,8 +11939,8 @@ uts4*) dynamic_linker=no ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -11256,8 +12061,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -11281,8 +12086,8 @@ else # directories. hardcode_action=unsupported fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then @@ -11326,11 +12131,12 @@ else darwin*) # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11339,32 +12145,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else +else $as_nop lt_cv_dlopen=dyld lt_cv_dlopen_libs= @@ -11384,14 +12189,16 @@ fi *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : +if test "x$ac_cv_func_shl_load" = xyes +then : lt_cv_dlopen=shl_load -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +printf %s "checking for shl_load in -ldld... " >&6; } +if test ${ac_cv_lib_dld_shl_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11400,41 +12207,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char shl_load (); int -main () +main (void) { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_shl_load=yes -else +else $as_nop ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes +then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else +else $as_nop ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : +if test "x$ac_cv_func_dlopen" = xyes +then : lt_cv_dlopen=dlopen -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11443,37 +12251,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +printf %s "checking for dlopen in -lsvld... " >&6; } +if test ${ac_cv_lib_svld_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11482,37 +12290,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_svld_dlopen=yes -else +else $as_nop ac_cv_lib_svld_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +printf %s "checking for dld_link in -ldld... " >&6; } +if test ${ac_cv_lib_dld_dld_link+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11521,30 +12329,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dld_link (); int -main () +main (void) { return dld_link (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_dld_link=yes -else +else $as_nop ac_cv_lib_dld_dld_link=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes +then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -11583,11 +12390,12 @@ fi save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +printf %s "checking whether a program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else @@ -11666,7 +12474,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -11684,16 +12492,17 @@ rm -fr conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +printf %s "checking whether a statically linked program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self_static+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else @@ -11772,7 +12581,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -11790,8 +12599,8 @@ rm -fr conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS @@ -11829,13 +12638,13 @@ fi striplib= old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +printf %s "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in @@ -11843,16 +12652,16 @@ else if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; esac fi @@ -11869,13 +12678,13 @@ fi # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +printf %s "checking if libtool supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +printf "%s\n" "$can_build_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -11899,15 +12708,15 @@ $as_echo_n "checking whether to build shared libraries... " >&6; } fi ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +printf "%s\n" "$enable_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +printf "%s\n" "$enable_static" >&6; } @@ -11929,36 +12738,32 @@ ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +printf %s "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" + if test ${ac_cv_prog_CXXCPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CXX needs to be expanded + for CXXCPP in "$CXX -E" cpp /lib/cpp do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -11970,10 +12775,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -11983,7 +12789,8 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : break fi @@ -11995,29 +12802,24 @@ fi else ac_cv_prog_CXXCPP=$CXXCPP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +printf "%s\n" "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -12029,10 +12831,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -12042,11 +12845,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -12182,17 +12986,18 @@ cc_basename=$func_cc_basename_result # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else +else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -12221,15 +13026,16 @@ $as_echo_n "checking for ld used by $CC... " >&6; } ;; esac elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -12258,18 +13064,19 @@ fi LD=$lt_cv_path_LD if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -12335,8 +13142,8 @@ with_gnu_ld=$lt_cv_prog_gnu_ld fi # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) @@ -12474,21 +13281,23 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -12503,7 +13312,7 @@ if ac_fn_cxx_try_link "$LINENO"; then : lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -12528,21 +13337,23 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -12557,7 +13368,7 @@ if ac_fn_cxx_try_link "$LINENO"; then : lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -13408,8 +14219,8 @@ fi ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX @@ -13447,7 +14258,7 @@ esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. @@ -13928,26 +14739,28 @@ case $host_os in ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -13978,8 +14791,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in @@ -14001,11 +14814,12 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -14029,8 +14843,8 @@ else LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : @@ -14041,11 +14855,12 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -14088,16 +14903,17 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -14140,8 +14956,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } @@ -14149,19 +14965,19 @@ $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -14170,8 +14986,8 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' @@ -14210,8 +15026,8 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld @@ -14238,18 +15054,19 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -14267,7 +15084,7 @@ else if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no @@ -14281,8 +15098,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac @@ -14351,8 +15168,8 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' @@ -14840,9 +15657,10 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -14852,19 +15670,21 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : +if ac_fn_cxx_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -15096,8 +15916,8 @@ uts4*) dynamic_linker=no ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -15161,8 +15981,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || @@ -15186,8 +16006,8 @@ else # directories. hardcode_action_CXX=unsupported fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +printf "%s\n" "$hardcode_action_CXX" >&6; } if test relink = "$hardcode_action_CXX" || test yes = "$inherit_rpath_CXX"; then @@ -15255,11 +16075,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -15267,11 +16088,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15282,11 +16107,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15295,11 +16120,12 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -15307,11 +16133,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15322,11 +16152,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -15334,8 +16164,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -15348,11 +16178,12 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -15360,11 +16191,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15375,11 +16210,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15388,11 +16223,12 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -15401,15 +16237,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15425,18 +16265,18 @@ if test $ac_prog_rejected = yes; then # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15447,11 +16287,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -15459,11 +16300,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15474,11 +16319,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15491,11 +16336,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -15503,11 +16349,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15518,11 +16368,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15534,34 +16384,138 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi +else + CC="$ac_cv_prog_CC" fi fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -15571,20 +16525,21 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -15594,29 +16549,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -15625,57 +16584,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -15690,94 +16652,144 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi ac_ext=cpp @@ -15796,15 +16808,16 @@ if test -z "$CXX"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else @@ -15812,11 +16825,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15827,11 +16844,11 @@ fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15840,15 +16857,16 @@ fi fi if test -z "$CXX"; then ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else @@ -15856,11 +16874,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15871,11 +16893,11 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15887,8 +16909,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -15898,7 +16920,7 @@ fi fi fi # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do @@ -15908,7 +16930,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -15918,20 +16940,21 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 +printf %s "checking whether the compiler supports GNU C++... " >&6; } +if test ${ac_cv_cxx_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -15941,29 +16964,33 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi -ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +printf %s "checking whether $CXX accepts -g... " >&6; } +if test ${ac_cv_prog_cxx_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no @@ -15972,57 +16999,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_prog_cxx_g=yes -else +else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_prog_cxx_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } +if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then @@ -16037,6 +17067,100 @@ else CXXFLAGS= fi fi +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +printf %s "checking for $CXX option to enable C++11 features... " >&6; } +if test ${ac_cv_prog_cxx_11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_11=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx11_program +_ACEOF +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx11" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 +printf %s "checking for $CXX option to enable C++98 features... " >&6; } +if test ${ac_cv_prog_cxx_98+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_98=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx98_program +_ACEOF +for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx98=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx98" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx98" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 +fi +fi + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -16047,11 +17171,12 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -16059,11 +17184,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -16074,22 +17203,23 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -16103,10 +17233,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -16115,13 +17250,13 @@ case `"$ac_path_SED" --version 2>&1` in ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -16149,12 +17284,13 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed -# Find a good install program. We prefer a C program (faster), + + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install @@ -16168,20 +17304,25 @@ $as_echo "$ac_cv_path_SED" >&6; } # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -16191,13 +17332,13 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -16205,12 +17346,12 @@ case $as_dir/ in #(( echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -16226,7 +17367,7 @@ IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi - if test "${ac_cv_path_install+set}" = set; then + if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -16236,8 +17377,8 @@ fi INSTALL=$ac_install_sh fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -16248,24 +17389,25 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else +ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval test \${ac_cv_prog_make_${ac_make}_set+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @@ -16281,12 +17423,12 @@ esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } SET_MAKE= else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -16300,34 +17442,39 @@ fi - if test -z "$CTAGS"; then : + if test -z "$CTAGS" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 -$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +printf %s "checking whether ctags executable path has been provided... " >&6; } # Check whether --with-ctags was given. -if test "${with_ctags+set}" = set; then : +if test ${with_ctags+y} +then : withval=$with_ctags; - if test "$withval" != yes && test "$withval" != no; then : + if test "$withval" != yes && test "$withval" != no +then : CTAGS="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } -else +else $as_nop CTAGS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : # Extract the first word of "ctags", so it can be a program name with args. set dummy ctags; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CTAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CTAGS in [\\/]* | ?:[\\/]*) ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. @@ -16337,11 +17484,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -16353,11 +17504,11 @@ esac fi CTAGS=$ac_cv_path_CTAGS if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -16366,17 +17517,18 @@ fi fi -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Extract the first word of "ctags", so it can be a program name with args. set dummy ctags; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CTAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CTAGS in [\\/]* | ?:[\\/]*) ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. @@ -16386,11 +17538,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -16402,11 +17558,11 @@ esac fi CTAGS=$ac_cv_path_CTAGS if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -16421,18 +17577,20 @@ fi -if test x${CTAGS} = x; then : +if test x${CTAGS} = x +then : as_fn_error $? "Required program ctags was not found" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } -if ! ${CTAGS} --version | grep -q Exuberant; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +printf %s "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi SO_EXT=$shrext_cmds @@ -16442,32 +17600,34 @@ SO_EXT=$shrext_cmds # System/Compiler Features # -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -$as_echo_n "checking for inline... " >&6; } -if ${ac_cv_c_inline+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +printf %s "checking for inline... " >&6; } +if test ${ac_cv_c_inline+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; -static $ac_kw foo_t static_foo () {return 0; } -$ac_kw foo_t foo () {return 0; } +static $ac_kw foo_t static_foo (void) {return 0; } +$ac_kw foo_t foo (void) {return 0; } #endif _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_c_inline=$ac_kw fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -$as_echo "$ac_cv_c_inline" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +printf "%s\n" "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; @@ -16484,19 +17644,31 @@ _ACEOF ;; esac - ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 -$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } -if ${ax_cv_cxx_compile_cxx11+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + + + + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 +printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16532,11 +17704,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -16784,31 +17958,200 @@ namespace cxx11 + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture + { + + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + + } + + namespace test_digit_separators + { + + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L + + + _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ax_cv_cxx_compile_cxx11=yes -else - ax_cv_cxx_compile_cxx11=no +if ac_fn_cxx_try_compile "$LINENO" +then : + eval $cachevar=yes +else $as_nop + eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 -$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } - if test x$ax_cv_cxx_compile_cxx11 = xyes; then - ac_success=yes +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx14_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX14=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} + else + HAVE_CXX14=1 + +printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h + fi +if test x$HAVE_CXX14 != x1 +then : + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + + + + if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : - $as_echo_n "(cached) " >&6 -else + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16847,11 +18190,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -17100,17 +18445,18 @@ namespace cxx11 _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : eval $cachevar=yes -else +else $as_nop eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then @@ -17138,271 +18484,266 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test x$ac_success = xno; then HAVE_CXX11=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 -$as_echo "#define HAVE_CXX11 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h fi - -for ac_func in memset -do : - ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMSET 1 -_ACEOF +fi +ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes +then : + printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h fi -done -for ac_func in rint -do : - ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_RINT 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes +then : + printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h fi -done -for ac_func in socket -do : - ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SOCKET 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes +then : + printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h fi -done -for ac_func in sqrt -do : - ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQRT 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes +then : + printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h fi -done -for ac_func in strerror -do : - ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRERROR 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes +then : + printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h fi -done - -for ac_header in arpa/inet.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ARPA_INET_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h fi -done - -for ac_header in netdb.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETDB_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes +then : + printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h fi -done - -for ac_header in netinet/in.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETINET_IN_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes +then : + printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h fi -done - -for ac_header in sys/file.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_FILE_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h fi -done +ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h -for ac_header in sys/ioctl.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_IOCTL_H 1 -_ACEOF +fi + +ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h fi -done +ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes +then : + +printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h -for ac_header in sys/socket.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_SOCKET_H 1 -_ACEOF fi -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } -if ${ac_cv_header_stdbool_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +printf %s "checking for stdbool.h that conforms to C99... " >&6; } +if test ${ac_cv_header_stdbool_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include - #include - #ifndef bool - "error: bool is not defined" - #endif - #ifndef false - "error: false is not defined" - #endif - #if false - "error: false is not 0" + #ifndef __bool_true_false_are_defined + #error "__bool_true_false_are_defined is not defined" #endif - #ifndef true - "error: true is not defined" + char a[__bool_true_false_are_defined == 1 ? 1 : -1]; + + /* Regardless of whether this is C++ or "_Bool" is a + valid type name, "true" and "false" should be usable + in #if expressions and integer constant expressions, + and "bool" should be a valid type name. */ + + #if !true + #error "'true' is not true" #endif #if true != 1 - "error: true is not 1" + #error "'true' is not equal to 1" #endif - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" + char b[true == 1 ? 1 : -1]; + char c[true]; + + #if false + #error "'false' is not false" #endif + #if false != 0 + #error "'false' is not equal to 0" + #endif + char d[false == 0 ? 1 : -1]; + + enum { e = false, f = true, g = false * true, h = true * 256 }; + + char i[(bool) 0.5 == true ? 1 : -1]; + char j[(bool) 0.0 == false ? 1 : -1]; + char k[sizeof (bool) > 0 ? 1 : -1]; + + struct sb { bool s: 1; bool t; } s; + char l[sizeof s.t > 0 ? 1 : -1]; - struct s { _Bool s: 1; _Bool t; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(_Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (_Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - _Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + bool m[h]; + char n[sizeof m == h * sizeof m[0] ? 1 : -1]; + char o[-1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ - _Bool q = true; - _Bool *pq = &q; + bool p = true; + bool *pp = &p; + + /* C 1999 specifies that bool, true, and false are to be + macros, but C++ 2011 and later overrule this. */ + #if __cplusplus < 201103 + #ifndef bool + #error "bool is not defined" + #endif + #ifndef false + #error "false is not defined" + #endif + #ifndef true + #error "true is not defined" + #endif + #endif + + /* If _Bool is available, repeat with it all the tests + above that used bool. */ + #ifdef HAVE__BOOL + struct sB { _Bool s: 1; _Bool t; } t; + + char q[(_Bool) 0.5 == true ? 1 : -1]; + char r[(_Bool) 0.0 == false ? 1 : -1]; + char u[sizeof (_Bool) > 0 ? 1 : -1]; + char v[sizeof t.t > 0 ? 1 : -1]; + + _Bool w[h]; + char x[sizeof m == h * sizeof m[0] ? 1 : -1]; + char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; + _Bool z = true; + _Bool *pz = &p; + #endif int -main () +main (void) { - bool e = &s; - *pq |= q; - *pq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq); + bool ps = &s; + *pp |= p; + *pp |= ! p; + + #ifdef HAVE__BOOL + _Bool pt = &t; + *pz |= z; + *pz |= ! z; + #endif + + /* Refer to every declared value, so they cannot be + discarded as unused. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + + !l + !m + !n + !o + !p + !pp + !ps + #ifdef HAVE__BOOL + + !q + !r + !u + !v + !w + !x + !y + !z + !pt + #endif + ); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_header_stdbool_h=yes -else +else $as_nop ac_cv_header_stdbool_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -$as_echo "$ac_cv_header_stdbool_h" >&6; } - ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE__BOOL 1 -_ACEOF - - -fi - - -for ac_header in stdlib.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" -if test "x$ac_cv_header_stdlib_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STDLIB_H 1 -_ACEOF - -fi - -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -$as_echo_n "checking for GNU libc compatible malloc... " >&6; } -if ${ac_cv_func_malloc_0_nonnull+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_malloc_0_nonnull=no -else +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +printf %s "checking for GNU libc compatible malloc... " >&6; } +if test ${ac_cv_func_malloc_0_nonnull+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + case "$host_os" in # (( + # Guess yes on platforms where we know the result. + *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ + | hpux* | solaris* | cygwin* | mingw* | msys* ) + ac_cv_func_malloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_malloc_0_nonnull=no ;; + esac +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined STDC_HEADERS || defined HAVE_STDLIB_H -# include -#else -char *malloc (); -#endif +#include int -main () +main (void) { -return ! malloc (0); +void *p = malloc (0); + int result = !p; + free (p); + return result; ; return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : +if ac_fn_cxx_try_run "$LINENO" +then : ac_cv_func_malloc_0_nonnull=yes -else +else $as_nop ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17410,14 +18751,15 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes +then : -$as_echo "#define HAVE_MALLOC 1" >>confdefs.h +printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h -else - $as_echo "#define HAVE_MALLOC 0" >>confdefs.h +else $as_nop + printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; @@ -17426,7 +18768,7 @@ else esac -$as_echo "#define malloc rpl_malloc" >>confdefs.h +printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h fi @@ -17436,11 +18778,12 @@ HAVE_OPENMP=0 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 -$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } -if ${ax_cv_cxx_openmp+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +printf %s "checking for OpenMP flag of C++ compiler... " >&6; } +if test ${ax_cv_cxx_openmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop saveCXXFLAGS=$CXXFLAGS ax_cv_cxx_openmp=unknown # Flags to try: -fopenmp (gcc), -mp (SGI & PGI), @@ -17481,17 +18824,18 @@ main() } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ax_cv_cxx_openmp=$ax_openmp_flag; break fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done CXXFLAGS=$saveCXXFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 -$as_echo "$ax_cv_cxx_openmp" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +printf "%s\n" "$ax_cv_cxx_openmp" >&6; } if test "x$ax_cv_cxx_openmp" = "xunknown"; then : else @@ -17499,27 +18843,28 @@ else OPENMP_CXXFLAGS=$ax_cv_cxx_openmp fi -$as_echo "#define HAVE_OPENMP 1" >>confdefs.h +printf "%s\n" "#define HAVE_OPENMP 1" >>confdefs.h fi -if test x$OPENMP_CXXFLAGS != x; then : +if test x$OPENMP_CXXFLAGS != x +then : HAVE_OPENMP=1 fi -if test x$HAVE_OPENMP != x1; then : +if test x$HAVE_OPENMP != x1 +then : -else +else $as_nop CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_PTRDIFF_T 1 -_ACEOF +printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h fi @@ -17529,9 +18874,7 @@ case $ac_cv_c_int16_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int16_t $ac_cv_c_int16_t -_ACEOF +printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h ;; esac @@ -17540,9 +18883,7 @@ case $ac_cv_c_int32_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int32_t $ac_cv_c_int32_t -_ACEOF +printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h ;; esac @@ -17551,9 +18892,7 @@ case $ac_cv_c_int64_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int64_t $ac_cv_c_int64_t -_ACEOF +printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h ;; esac @@ -17562,42 +18901,64 @@ case $ac_cv_c_int8_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int8_t $ac_cv_c_int8_t -_ACEOF +printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h ;; esac -ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = xyes; then : -else + ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default +" +if test "x$ac_cv_type_pid_t" = xyes +then : + +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if defined _WIN64 && !defined __CYGWIN__ + LLP64 + #endif + +int +main (void) +{ + + ; + return 0; +} -cat >>confdefs.h <<_ACEOF -#define pid_t int _ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_pid_type='int' +else $as_nop + ac_pid_type='__int64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h + fi + ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : +if test "x$ac_cv_type_size_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF +printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes; then : +if test "x$ac_cv_type_ssize_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define ssize_t int -_ACEOF +printf "%s\n" "#define ssize_t int" >>confdefs.h fi @@ -17607,9 +18968,7 @@ case $ac_cv_c_uint16_t in #( *) -cat >>confdefs.h <<_ACEOF -#define uint16_t $ac_cv_c_uint16_t -_ACEOF +printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h ;; esac @@ -17618,12 +18977,10 @@ case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT32_T 1" >>confdefs.h +printf "%s\n" "#define _UINT32_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint32_t $ac_cv_c_uint32_t -_ACEOF +printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h ;; esac @@ -17632,12 +18989,10 @@ case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT64_T 1" >>confdefs.h +printf "%s\n" "#define _UINT64_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint64_t $ac_cv_c_uint64_t -_ACEOF +printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h ;; esac @@ -17646,12 +19001,10 @@ case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT8_T 1" >>confdefs.h +printf "%s\n" "#define _UINT8_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint8_t $ac_cv_c_uint8_t -_ACEOF +printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h ;; esac @@ -17661,52 +19014,53 @@ _ACEOF # # Check whether --enable-numa was given. -if test "${enable_numa+set}" = set; then : +if test ${enable_numa+y} +then : enableval=$enable_numa; enable_numa=no -else +else $as_nop enable_numa=yes fi HAVE_NUMA=0 -if test x$enable_numa != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } -if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_numa != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } +if test ${ac_cv_lib_numa_numa_node_of_cpu+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lnuma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char numa_node_of_cpu (); +namespace conftest { + extern "C" int numa_node_of_cpu (); +} int -main () +main (void) { -return numa_node_of_cpu (); +return conftest::numa_node_of_cpu (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_numa_numa_node_of_cpu=yes -else +else $as_nop ac_cv_lib_numa_numa_node_of_cpu=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes +then : HAVE_NUMA=1 LIBS="$LIBS -lnuma" @@ -17719,52 +19073,53 @@ fi # # Check whether --enable-hwloc was given. -if test "${enable_hwloc+set}" = set; then : +if test ${enable_hwloc+y} +then : enableval=$enable_hwloc; enable_hwloc=no -else +else $as_nop enable_hwloc=yes fi HAVE_HWLOC=0 -if test x$enable_hwloc != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } -if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_hwloc != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } +if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lhwloc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char hwloc_topology_init (); +namespace conftest { + extern "C" int hwloc_topology_init (); +} int -main () +main (void) { -return hwloc_topology_init (); +return conftest::hwloc_topology_init (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_hwloc_hwloc_topology_init=yes -else +else $as_nop ac_cv_lib_hwloc_hwloc_topology_init=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes +then : HAVE_HWLOC=1 LIBS="$LIBS -lhwloc" @@ -17777,52 +19132,53 @@ fi # # Check whether --enable-vma was given. -if test "${enable_vma+set}" = set; then : +if test ${enable_vma+y} +then : enableval=$enable_vma; enable_vma=yes -else +else $as_nop enable_vma=no fi HAVE_VMA=0 -if test x$enable_vma != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } -if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_vma != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } +if test ${ac_cv_lib_vma_recvfrom_zcopy+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lvma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char recvfrom_zcopy (); +namespace conftest { + extern "C" int recvfrom_zcopy (); +} int -main () +main (void) { -return recvfrom_zcopy (); +return conftest::recvfrom_zcopy (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_vma_recvfrom_zcopy=yes -else +else $as_nop ac_cv_lib_vma_recvfrom_zcopy=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes +then : HAVE_VMA=1 LIBS="$LIBS -lvma" @@ -17846,9 +19202,10 @@ fi # Check whether --with-cuda_home was given. -if test "${with_cuda_home+set}" = set; then : +if test ${with_cuda_home+y} +then : withval=$with_cuda_home; -else +else $as_nop with_cuda_home=/usr/local/cuda fi @@ -17856,9 +19213,10 @@ fi # Check whether --enable-cuda was given. -if test "${enable_cuda+set}" = set; then : +if test ${enable_cuda+y} +then : enableval=$enable_cuda; enable_cuda=no -else +else $as_nop enable_cuda=yes fi @@ -17871,11 +19229,12 @@ fi # Extract the first word of "nvcc", so it can be a program name with args. set dummy nvcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVCC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $NVCC in [\\/]* | ?:[\\/]*) ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. @@ -17886,11 +19245,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -17903,21 +19266,22 @@ esac fi NVCC=$ac_cv_path_NVCC if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +printf "%s\n" "$NVCC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "nvprune", so it can be a program name with args. set dummy nvprune; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVPRUNE+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVPRUNE+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $NVPRUNE in [\\/]* | ?:[\\/]*) ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. @@ -17928,11 +19292,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -17945,21 +19313,22 @@ esac fi NVPRUNE=$ac_cv_path_NVPRUNE if test -n "$NVPRUNE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +printf "%s\n" "$NVPRUNE" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "cuobjdump", so it can be a program name with args. set dummy cuobjdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CUOBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CUOBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CUOBJDUMP in [\\/]* | ?:[\\/]*) ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. @@ -17970,11 +19339,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -17987,19 +19360,19 @@ esac fi CUOBJDUMP=$ac_cv_path_CUOBJDUMP if test -n "$CUOBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +printf "%s\n" "$CUOBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi fi if test "$HAVE_CUDA" = "1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 -$as_echo_n "checking for a working CUDA installation... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +printf %s "checking for a working CUDA installation... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -18013,20 +19386,21 @@ $as_echo_n "checking for a working CUDA installation... " >&6; } #include #include int -main () +main (void) { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" @@ -18040,27 +19414,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include #include int -main () +main (void) { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if ac_fn_cxx_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } HAVE_CUDA=0 fi @@ -18072,9 +19447,10 @@ $as_echo "no" >&6; } # Check whether --with-nvcc_flags was given. -if test "${with_nvcc_flags+set}" = set; then : +if test ${with_nvcc_flags+y} +then : withval=$with_nvcc_flags; -else +else $as_nop with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi @@ -18091,16 +19467,17 @@ fi # Check whether --with-gpu_archs was given. -if test "${with_gpu_archs+set}" = set; then : +if test ${with_gpu_archs+y} +then : withval=$with_gpu_archs; -else +else $as_nop with_gpu_archs='auto' fi if test "$HAVE_CUDA" = "1"; then if test "$with_gpu_archs" = "auto"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 -$as_echo_n "checking which CUDA architectures to target... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +printf %s "checking which CUDA architectures to target... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -18109,12 +19486,13 @@ $as_echo_n "checking which CUDA architectures to target... " >&6; } LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' - if test "$cross_compiling" = yes; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18125,7 +19503,7 @@ else #include #include int -main () +main (void) { std::set archs; @@ -18163,12 +19541,13 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : +if ac_fn_cxx_try_run "$LINENO" +then : GPU_ARCHS=`cat confarchs.out` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 -$as_echo "$GPU_ARCHS" >&6; } -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +printf "%s\n" "$GPU_ARCHS" >&6; } +else $as_nop as_fn_error $? "failed to find any" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18188,9 +19567,10 @@ fi # Check whether --with-shared_mem was given. -if test "${with_shared_mem+set}" = set; then : +if test ${with_shared_mem+y} +then : withval=$with_shared_mem; -else +else $as_nop with_shared_mem=16384 fi @@ -18203,9 +19583,10 @@ GPU_SHAREDMEM=$with_shared_mem # Check whether --with-alignment was given. -if test "${with_alignment+set}" = set; then : +if test ${with_alignment+y} +then : withval=$with_alignment; -else +else $as_nop with_alignment=4096 fi @@ -18221,21 +19602,23 @@ ALIGNMENT=$with_alignment # Check whether --with-logging_dir was given. -if test "${with_logging_dir+set}" = set; then : +if test ${with_logging_dir+y} +then : withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir -else +else $as_nop HAVE_TMPFS=/tmp fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 -$as_echo_n "checking for /dev/shm... " >&6; } -if ${ac_cv_file__dev_shm+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +printf %s "checking for /dev/shm... " >&6; } +if test ${ac_cv_file__dev_shm+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/shm"; then @@ -18244,9 +19627,10 @@ else ac_cv_file__dev_shm=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 -$as_echo "$ac_cv_file__dev_shm" >&6; } -if test "x$ac_cv_file__dev_shm" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +printf "%s\n" "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes +then : HAVE_TMPFS=/dev/shm/bifrost fi @@ -18254,11 +19638,12 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 -$as_echo_n "checking for /Volumes/RAMDisk... " >&6; } -if ${ac_cv_file__Volumes_RAMDisk+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +printf %s "checking for /Volumes/RAMDisk... " >&6; } +if test ${ac_cv_file__Volumes_RAMDisk+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/Volumes/RAMDisk"; then @@ -18267,9 +19652,10 @@ else ac_cv_file__Volumes_RAMDisk=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 -$as_echo "$ac_cv_file__Volumes_RAMDisk" >&6; } -if test "x$ac_cv_file__Volumes_RAMDisk" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes +then : HAVE_TMPFS=/Volumes/RAMDisk/bifrost fi @@ -18277,11 +19663,12 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 -$as_echo_n "checking for /tmp... " >&6; } -if ${ac_cv_file__tmp+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +printf %s "checking for /tmp... " >&6; } +if test ${ac_cv_file__tmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/tmp"; then @@ -18290,15 +19677,16 @@ else ac_cv_file__tmp=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 -$as_echo "$ac_cv_file__tmp" >&6; } -if test "x$ac_cv_file__tmp" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +printf "%s\n" "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes +then : HAVE_TMPFS=/tmp fi - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 -$as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} HAVE_TMPFS=/tmp/bifrost fi @@ -18309,15 +19697,17 @@ $as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging # # Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : +if test ${enable_debug+y} +then : enableval=$enable_debug; enable_debug=yes -else +else $as_nop enable_debug=no fi HAVE_DEBUG=0 -if test x$enable_debug != xno; then : +if test x$enable_debug != xno +then : HAVE_DEBUG=1 CXXFLAGS="$CXXFLAGS -g" @@ -18325,43 +19715,49 @@ if test x$enable_debug != xno; then : fi # Check whether --enable-trace was given. -if test "${enable_trace+set}" = set; then : +if test ${enable_trace+y} +then : enableval=$enable_trace; enable_trace=yes -else +else $as_nop enable_trace=no fi HAVE_TRACE=0 -if test x$enable_trace != xno; then : +if test x$enable_trace != xno +then : HAVE_TRACE=1 fi # Check whether --enable-native_arch was given. -if test "${enable_native_arch+set}" = set; then : +if test ${enable_native_arch+y} +then : enableval=$enable_native_arch; enable_native_arch=no -else +else $as_nop enable_native_arch=yes fi -if test x$enable_native_arch != xyes; then : +if test x$enable_native_arch != xyes +then : -else +else $as_nop CXXFLAGS="$CXXFLAGS -march=native" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" fi # Check whether --enable-cuda_debug was given. -if test "${enable_cuda_debug+set}" = set; then : +if test ${enable_cuda_debug+y} +then : enableval=$enable_cuda_debug; enable_cuda_debug=yes -else +else $as_nop enable_cuda_debug=no fi HAVE_CUDA_DEBUG=0 -if test x$enable_cuda_debug != xno; then : +if test x$enable_cuda_debug != xno +then : HAVE_CUDA_DEBUG=1 NVCCFLAGS="$NVCCFLAGS -G" @@ -18372,15 +19768,17 @@ fi # # Check whether --enable-python was given. -if test "${enable_python+set}" = set; then : +if test ${enable_python+y} +then : enableval=$enable_python; enable_python=no -else +else $as_nop enable_python=yes fi HAVE_PYTHON=0 -if test x$enable_python != xno; then : +if test x$enable_python != xno +then : @@ -18391,34 +19789,39 @@ if test x$enable_python != xno; then : - if test -z "$PYTHON"; then : + if test -z "$PYTHON" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 -$as_echo_n "checking whether python executable path has been provided... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +printf %s "checking whether python executable path has been provided... " >&6; } # Check whether --with-python was given. -if test "${with_python+set}" = set; then : +if test ${with_python+y} +then : withval=$with_python; - if test "$withval" != yes && test "$withval" != no; then : + if test "$withval" != yes && test "$withval" != no +then : PYTHON="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } -else +else $as_nop PYTHON="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -18428,11 +19831,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18445,11 +19852,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18458,17 +19865,18 @@ fi fi -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -18478,11 +19886,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18495,11 +19907,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18514,17 +19926,19 @@ fi - if test x${PYTHON} != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 -$as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 -$as_echo "$as_me: WARNING: python module will not be built" >&2;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + if test x${PYTHON} != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +printf %s "checking whether $PYTHON as ctypesgen... " >&6; } + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } HAVE_PYTHON=1 fi @@ -18532,7 +19946,8 @@ fi fi # Check whether --with-pybuild_flags was given. -if test "${with_pybuild_flags+set}" = set; then : +if test ${with_pybuild_flags+y} +then : withval=$with_pybuild_flags; fi @@ -18541,7 +19956,8 @@ PYBUILDFLAGS=$with_pybuild_flags # Check whether --with-pyinstall_flags was given. -if test "${with_pyinstall_flags+set}" = set; then : +if test ${with_pyinstall_flags+y} +then : withval=$with_pyinstall_flags; fi @@ -18562,34 +19978,39 @@ PYINSTALLFLAGS=$with_pyinstall_flags - if test -z "$DOCKER"; then : + if test -z "$DOCKER" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 -$as_echo_n "checking whether docker executable path has been provided... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 +printf %s "checking whether docker executable path has been provided... " >&6; } # Check whether --with-docker was given. -if test "${with_docker+set}" = set; then : +if test ${with_docker+y} +then : withval=$with_docker; - if test "$withval" != yes && test "$withval" != no; then : + if test "$withval" != yes && test "$withval" != no +then : DOCKER="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } -else +else $as_nop DOCKER="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DOCKER+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DOCKER+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -18599,11 +20020,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18616,11 +20041,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18629,17 +20054,18 @@ fi fi -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DOCKER+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DOCKER+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -18649,11 +20075,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18666,11 +20096,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18685,7 +20115,8 @@ fi -if test x${DOCKER} != xno; then : +if test x${DOCKER} != xno +then : HAVE_DOCKER=1 fi @@ -18728,7 +20159,8 @@ DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" # Check whether --enable-doxygen-doc was given. -if test "${enable_doxygen_doc+set}" = set; then : +if test ${enable_doxygen_doc+y} +then : enableval=$enable_doxygen_doc; case "$enableval" in #( @@ -18746,7 +20178,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_doc=1 @@ -18759,11 +20191,12 @@ if test "$DX_FLAG_doc" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. set dummy ${ac_tool_prefix}doxygen; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DOXYGEN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DOXYGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. @@ -18773,11 +20206,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18789,11 +20226,11 @@ esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN if test -n "$DX_DOXYGEN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 -$as_echo "$DX_DOXYGEN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +printf "%s\n" "$DX_DOXYGEN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18802,11 +20239,12 @@ if test -z "$ac_cv_path_DX_DOXYGEN"; then ac_pt_DX_DOXYGEN=$DX_DOXYGEN # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DOXYGEN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. @@ -18816,11 +20254,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18832,11 +20274,11 @@ esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN if test -n "$ac_pt_DX_DOXYGEN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 -$as_echo "$ac_pt_DX_DOXYGEN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DOXYGEN" = x; then @@ -18844,8 +20286,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOXYGEN=$ac_pt_DX_DOXYGEN @@ -18855,8 +20297,8 @@ else fi if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 -$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -18865,11 +20307,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. set dummy ${ac_tool_prefix}perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_PERL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_PERL+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. @@ -18879,11 +20322,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18895,11 +20342,11 @@ esac fi DX_PERL=$ac_cv_path_DX_PERL if test -n "$DX_PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 -$as_echo "$DX_PERL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +printf "%s\n" "$DX_PERL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -18908,11 +20355,12 @@ if test -z "$ac_cv_path_DX_PERL"; then ac_pt_DX_PERL=$DX_PERL # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_PERL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_PERL+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. @@ -18922,11 +20370,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18938,11 +20390,11 @@ esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL if test -n "$ac_pt_DX_PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 -$as_echo "$ac_pt_DX_PERL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +printf "%s\n" "$ac_pt_DX_PERL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_PERL" = x; then @@ -18950,8 +20402,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PERL=$ac_pt_DX_PERL @@ -18961,8 +20413,8 @@ else fi if test "$DX_FLAG_doc$DX_PERL" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 -$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -18985,7 +20437,8 @@ fi # Check whether --enable-doxygen-dot was given. -if test "${enable_doxygen_dot+set}" = set; then : +if test ${enable_doxygen_dot+y} +then : enableval=$enable_doxygen_dot; case "$enableval" in #( @@ -18994,7 +20447,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19006,7 +20459,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_dot=0 @@ -19022,11 +20475,12 @@ if test "$DX_FLAG_dot" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. set dummy ${ac_tool_prefix}dot; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DOT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DOT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. @@ -19036,11 +20490,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19052,11 +20510,11 @@ esac fi DX_DOT=$ac_cv_path_DX_DOT if test -n "$DX_DOT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 -$as_echo "$DX_DOT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +printf "%s\n" "$DX_DOT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19065,11 +20523,12 @@ if test -z "$ac_cv_path_DX_DOT"; then ac_pt_DX_DOT=$DX_DOT # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DOT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DOT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. @@ -19079,11 +20538,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19095,11 +20558,11 @@ esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT if test -n "$ac_pt_DX_DOT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 -$as_echo "$ac_pt_DX_DOT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +printf "%s\n" "$ac_pt_DX_DOT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DOT" = x; then @@ -19107,8 +20570,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOT=$ac_pt_DX_DOT @@ -19118,8 +20581,8 @@ else fi if test "$DX_FLAG_dot$DX_DOT" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 -$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} DX_FLAG_dot=0 fi @@ -19147,7 +20610,8 @@ fi # Check whether --enable-doxygen-man was given. -if test "${enable_doxygen_man+set}" = set; then : +if test ${enable_doxygen_man+y} +then : enableval=$enable_doxygen_man; case "$enableval" in #( @@ -19156,7 +20620,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19168,7 +20632,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_man=1 @@ -19201,7 +20665,8 @@ fi # Check whether --enable-doxygen-rtf was given. -if test "${enable_doxygen_rtf+set}" = set; then : +if test ${enable_doxygen_rtf+y} +then : enableval=$enable_doxygen_rtf; case "$enableval" in #( @@ -19210,7 +20675,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19222,7 +20687,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_rtf=0 @@ -19255,7 +20720,8 @@ fi # Check whether --enable-doxygen-xml was given. -if test "${enable_doxygen_xml+set}" = set; then : +if test ${enable_doxygen_xml+y} +then : enableval=$enable_doxygen_xml; case "$enableval" in #( @@ -19264,7 +20730,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19276,7 +20742,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_xml=0 @@ -19309,7 +20775,8 @@ fi # Check whether --enable-doxygen-chm was given. -if test "${enable_doxygen_chm+set}" = set; then : +if test ${enable_doxygen_chm+y} +then : enableval=$enable_doxygen_chm; case "$enableval" in #( @@ -19318,7 +20785,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19330,7 +20797,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_chm=0 @@ -19346,11 +20813,12 @@ if test "$DX_FLAG_chm" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. set dummy ${ac_tool_prefix}hhc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_HHC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_HHC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. @@ -19360,11 +20828,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19376,11 +20848,11 @@ esac fi DX_HHC=$ac_cv_path_DX_HHC if test -n "$DX_HHC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 -$as_echo "$DX_HHC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +printf "%s\n" "$DX_HHC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19389,11 +20861,12 @@ if test -z "$ac_cv_path_DX_HHC"; then ac_pt_DX_HHC=$DX_HHC # Extract the first word of "hhc", so it can be a program name with args. set dummy hhc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_HHC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_HHC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. @@ -19403,11 +20876,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19419,11 +20896,11 @@ esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC if test -n "$ac_pt_DX_HHC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 -$as_echo "$ac_pt_DX_HHC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +printf "%s\n" "$ac_pt_DX_HHC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_HHC" = x; then @@ -19431,8 +20908,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_HHC=$ac_pt_DX_HHC @@ -19442,8 +20919,8 @@ else fi if test "$DX_FLAG_chm$DX_HHC" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 -$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} DX_FLAG_chm=0 fi @@ -19474,7 +20951,8 @@ fi # Check whether --enable-doxygen-chi was given. -if test "${enable_doxygen_chi+set}" = set; then : +if test ${enable_doxygen_chi+y} +then : enableval=$enable_doxygen_chi; case "$enableval" in #( @@ -19483,7 +20961,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19495,7 +20973,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_chi=0 @@ -19528,7 +21006,8 @@ fi # Check whether --enable-doxygen-html was given. -if test "${enable_doxygen_html+set}" = set; then : +if test ${enable_doxygen_html+y} +then : enableval=$enable_doxygen_html; case "$enableval" in #( @@ -19537,10 +21016,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19552,7 +21031,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_html=1 @@ -19588,7 +21067,8 @@ fi # Check whether --enable-doxygen-ps was given. -if test "${enable_doxygen_ps+set}" = set; then : +if test ${enable_doxygen_ps+y} +then : enableval=$enable_doxygen_ps; case "$enableval" in #( @@ -19597,7 +21077,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19609,7 +21089,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_ps=1 @@ -19625,11 +21105,12 @@ if test "$DX_FLAG_ps" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. set dummy ${ac_tool_prefix}latex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_LATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_LATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. @@ -19639,11 +21120,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19655,11 +21140,11 @@ esac fi DX_LATEX=$ac_cv_path_DX_LATEX if test -n "$DX_LATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 -$as_echo "$DX_LATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +printf "%s\n" "$DX_LATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19668,11 +21153,12 @@ if test -z "$ac_cv_path_DX_LATEX"; then ac_pt_DX_LATEX=$DX_LATEX # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_LATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_LATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. @@ -19682,11 +21168,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19698,11 +21188,11 @@ esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX if test -n "$ac_pt_DX_LATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 -$as_echo "$ac_pt_DX_LATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +printf "%s\n" "$ac_pt_DX_LATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_LATEX" = x; then @@ -19710,8 +21200,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_LATEX=$ac_pt_DX_LATEX @@ -19721,8 +21211,8 @@ else fi if test "$DX_FLAG_ps$DX_LATEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -19731,11 +21221,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -19745,11 +21236,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19761,11 +21256,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -$as_echo "$DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +printf "%s\n" "$DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19774,11 +21269,12 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -19788,11 +21284,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19804,11 +21304,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -19816,8 +21316,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -19827,8 +21327,8 @@ else fi if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -19837,11 +21337,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. set dummy ${ac_tool_prefix}dvips; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DVIPS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DVIPS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. @@ -19851,11 +21352,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19867,11 +21372,11 @@ esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS if test -n "$DX_DVIPS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 -$as_echo "$DX_DVIPS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +printf "%s\n" "$DX_DVIPS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19880,11 +21385,12 @@ if test -z "$ac_cv_path_DX_DVIPS"; then ac_pt_DX_DVIPS=$DX_DVIPS # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DVIPS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DVIPS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. @@ -19894,11 +21400,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19910,11 +21420,11 @@ esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS if test -n "$ac_pt_DX_DVIPS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 -$as_echo "$ac_pt_DX_DVIPS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +printf "%s\n" "$ac_pt_DX_DVIPS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DVIPS" = x; then @@ -19922,8 +21432,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DVIPS=$ac_pt_DX_DVIPS @@ -19933,8 +21443,8 @@ else fi if test "$DX_FLAG_ps$DX_DVIPS" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -19943,11 +21453,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -19957,11 +21468,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19973,11 +21488,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -$as_echo "$DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +printf "%s\n" "$DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19986,11 +21501,12 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -20000,11 +21516,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20016,11 +21536,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -$as_echo "$ac_pt_DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +printf "%s\n" "$ac_pt_DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -20028,8 +21548,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -20039,8 +21559,8 @@ else fi if test "$DX_FLAG_ps$DX_EGREP" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -20061,7 +21581,8 @@ fi # Check whether --enable-doxygen-pdf was given. -if test "${enable_doxygen_pdf+set}" = set; then : +if test ${enable_doxygen_pdf+y} +then : enableval=$enable_doxygen_pdf; case "$enableval" in #( @@ -20070,7 +21591,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20082,7 +21603,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_pdf=1 @@ -20098,11 +21619,12 @@ if test "$DX_FLAG_pdf" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_PDFLATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_PDFLATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. @@ -20112,11 +21634,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20128,11 +21654,11 @@ esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX if test -n "$DX_PDFLATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 -$as_echo "$DX_PDFLATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +printf "%s\n" "$DX_PDFLATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20141,11 +21667,12 @@ if test -z "$ac_cv_path_DX_PDFLATEX"; then ac_pt_DX_PDFLATEX=$DX_PDFLATEX # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_PDFLATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. @@ -20155,11 +21682,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20171,11 +21702,11 @@ esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX if test -n "$ac_pt_DX_PDFLATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 -$as_echo "$ac_pt_DX_PDFLATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_PDFLATEX" = x; then @@ -20183,8 +21714,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PDFLATEX=$ac_pt_DX_PDFLATEX @@ -20194,8 +21725,8 @@ else fi if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -20204,11 +21735,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -20218,11 +21750,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20234,11 +21770,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -$as_echo "$DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +printf "%s\n" "$DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20247,11 +21783,12 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -20261,11 +21798,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20277,11 +21818,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -20289,8 +21830,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -20300,8 +21841,8 @@ else fi if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -20310,11 +21851,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -20324,11 +21866,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20340,11 +21886,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -$as_echo "$DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +printf "%s\n" "$DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20353,11 +21899,12 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -20367,11 +21914,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20383,11 +21934,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -$as_echo "$ac_pt_DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +printf "%s\n" "$ac_pt_DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -20395,8 +21946,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -20406,8 +21957,8 @@ else fi if test "$DX_FLAG_pdf$DX_EGREP" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -20453,24 +22004,27 @@ PAPER_SIZE=$DOXYGEN_PAPER_SIZE esac # Rules: -if test $DX_FLAG_html -eq 1; then : +if test $DX_FLAG_html -eq 1 +then : DX_SNIPPET_html="## ------------------------------- ## DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ \$(DX_DOCDIR)/html " -else +else $as_nop DX_SNIPPET_html="" fi -if test $DX_FLAG_chi -eq 1; then : +if test $DX_FLAG_chi -eq 1 +then : DX_SNIPPET_chi=" DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ \$(DX_DOCDIR)/\$(PACKAGE).chi" -else +else $as_nop DX_SNIPPET_chi="" fi -if test $DX_FLAG_chm -eq 1; then : +if test $DX_FLAG_chm -eq 1 +then : DX_SNIPPET_chm="## ------------------------------ ## DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ @@ -20478,40 +22032,44 @@ DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ ${DX_SNIPPET_chi} " -else +else $as_nop DX_SNIPPET_chm="" fi -if test $DX_FLAG_man -eq 1; then : +if test $DX_FLAG_man -eq 1 +then : DX_SNIPPET_man="## ------------------------------ ## DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ \$(DX_DOCDIR)/man " -else +else $as_nop DX_SNIPPET_man="" fi -if test $DX_FLAG_rtf -eq 1; then : +if test $DX_FLAG_rtf -eq 1 +then : DX_SNIPPET_rtf="## ------------------------------ ## DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ \$(DX_DOCDIR)/rtf " -else +else $as_nop DX_SNIPPET_rtf="" fi -if test $DX_FLAG_xml -eq 1; then : +if test $DX_FLAG_xml -eq 1 +then : DX_SNIPPET_xml="## ------------------------------ ## DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ \$(DX_DOCDIR)/xml " -else +else $as_nop DX_SNIPPET_xml="" fi -if test $DX_FLAG_ps -eq 1; then : +if test $DX_FLAG_ps -eq 1 +then : DX_SNIPPET_ps="## ----------------------------- ## DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ @@ -20537,10 +22095,11 @@ doxygen-ps: \$(DX_CLEAN_PS) \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi " -else +else $as_nop DX_SNIPPET_ps="" fi -if test $DX_FLAG_pdf -eq 1; then : +if test $DX_FLAG_pdf -eq 1 +then : DX_SNIPPET_pdf="## ------------------------------ ## DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ @@ -20566,10 +22125,11 @@ doxygen-pdf: \$(DX_CLEAN_PDF) mv refman.pdf ../\$(PACKAGE).pdf " -else +else $as_nop DX_SNIPPET_pdf="" fi -if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1; then : +if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 +then : DX_SNIPPET_latex="## ------------------------------------------------- ## DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) @@ -20580,11 +22140,12 @@ DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ \$(DX_DOCDIR)/latex " -else +else $as_nop DX_SNIPPET_latex="" fi -if test $DX_FLAG_doc -eq 1; then : +if test $DX_FLAG_doc -eq 1 +then : DX_SNIPPET_doc="## --------------------------------- ## ${DX_SNIPPET_html}\ @@ -20625,7 +22186,7 @@ DX_CLEANFILES = \\ \$(DX_CLEAN_PS) \\ \$(DX_CLEAN_PDF) \\ \$(DX_CLEAN_LATEX)" -else +else $as_nop DX_SNIPPET_doc="" fi DX_RULES="${DX_SNIPPET_doc}" @@ -20693,8 +22254,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -20724,15 +22285,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -20746,8 +22307,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;} fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -20800,7 +22361,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -20816,8 +22377,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -20840,14 +22401,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -20857,46 +22420,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -20905,13 +22468,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -20920,8 +22476,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -20933,30 +22493,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -20969,13 +22509,14 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -21002,18 +22543,20 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -21025,12 +22568,13 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -21061,7 +22605,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -21083,6 +22627,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -21096,6 +22644,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -21137,7 +22691,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -21146,7 +22700,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21209,7 +22763,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -21263,14 +22817,16 @@ Report bugs to the package provider. bifrost home page: ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ bifrost config.status 0.9.0 -configured by $0, generated by GNU Autoconf 2.69, +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -21309,21 +22865,21 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -21351,7 +22907,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -21365,7 +22921,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -21781,8 +23337,8 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -22010,7 +23566,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -22018,17 +23574,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -22045,7 +23601,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22069,9 +23625,9 @@ $as_echo X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -22128,8 +23684,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -22172,9 +23728,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -22186,8 +23742,8 @@ which seems to be undefined. Please make sure it is defined" >&2;} ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -22735,6 +24291,7 @@ _LT_EOF esac + ltmain=$ac_aux_dir/ltmain.sh @@ -22937,7 +24494,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi + diff --git a/configure.ac b/configure.ac index 66aa0c246..b3848f3c1 100644 --- a/configure.ac +++ b/configure.ac @@ -37,7 +37,9 @@ AC_SUBST(SO_EXT, $shrext_cmds) # AC_C_INLINE -AX_CXX_COMPILE_STDCXX(11, noext, mandatory) +AX_CXX_COMPILE_STDCXX(14, noext, optional) +AS_IF([test x$HAVE_CXX14 != x1], + [AX_CXX_COMPILE_STDCXX(11, noext, mandatory)]) AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) From b20c13d67f9020884dfadd08cb059e5b479efaa0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 17:06:25 -0600 Subject: [PATCH 0301/1155] Cleanup more things in bifrost/config.h. --- src/ring_impl.hpp | 4 ---- src/udp_capture.cpp | 9 --------- 2 files changed, 13 deletions(-) diff --git a/src/ring_impl.hpp b/src/ring_impl.hpp index 7a6f71a79..6645132bf 100644 --- a/src/ring_impl.hpp +++ b/src/ring_impl.hpp @@ -43,10 +43,6 @@ #include #include -#ifndef BF_NUMA_ENABLED -#define BF_NUMA_ENABLED 0 -#endif - class BFsequence_impl; class BFspan_impl; class BFrspan_impl; diff --git a/src/udp_capture.cpp b/src/udp_capture.cpp index aef972785..b5fb65c6a 100644 --- a/src/udp_capture.cpp +++ b/src/udp_capture.cpp @@ -55,15 +55,6 @@ using bifrost::ring::WriteSequence; //#include // SSE // TODO: The VMA API is returning unaligned buffers, which prevents use of SSE -#ifndef BF_VMA_ENABLED -#define BF_VMA_ENABLED 0 -//#define BF_VMA_ENABLED 1 -#endif - -#ifndef BF_HWLOC_ENABLED -#define BF_HWLOC_ENABLED 0 -//#define BF_HWLOC_ENABLED 1 -#endif #define BF_UNPACK_FACTOR 1 From 04c834637670268b20e401d16eb0689c5716bf40 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 17:17:42 -0600 Subject: [PATCH 0302/1155] Toggle off the packet capture/transmission if recvmsg isn't found. --- configure | 16 ++++++++++++++++ configure.ac | 3 +++ src/Makefile.in | 8 +++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/configure b/configure index c4ba6af78..f470f35be 100755 --- a/configure +++ b/configure @@ -723,6 +723,7 @@ HAVE_HWLOC HAVE_NUMA HAVE_OPENMP LIBOBJS +HAVE_RECVMSG HAVE_CXX11 HAVE_CXX14 SO_EXT @@ -18516,6 +18517,21 @@ then : fi + + for ac_func in recvmsg +do : + ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" +if test "x$ac_cv_func_recvmsg" = xyes +then : + printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h + HAVE_RECVMSG=1 + +else $as_nop + HAVE_RECVMSG=0 + +fi + +done ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" if test "x$ac_cv_func_sqrt" = xyes then : diff --git a/configure.ac b/configure.ac index b3848f3c1..83c04cd41 100644 --- a/configure.ac +++ b/configure.ac @@ -43,6 +43,9 @@ AS_IF([test x$HAVE_CXX14 != x1], AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) +AC_CHECK_FUNCS([recvmsg], + [AC_SUBST([HAVE_RECVMSG], [1])], + [AC_SUBST([HAVE_RECVMSG], [0])]) AC_CHECK_FUNCS([sqrt]) AC_CHECK_FUNCS([strerror]) AC_CHECK_HEADERS([arpa/inet.h]) diff --git a/src/Makefile.in b/src/Makefile.in index e115b354c..a94ac3fbb 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -14,6 +14,8 @@ DOXYGEN ?= @DX_DOXYGEN@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ +HAVE_RECVMSG ?= @HAVE_RECVMSG@ + HAVE_CUDA ?= @HAVE_CUDA@ GPU_ARCHS ?= @GPU_ARCHS@ @@ -33,11 +35,15 @@ LIBBIFROST_OBJS = \ array.o \ unpack.o \ quantize.o \ - proclog.o \ + proclog.o +ifeq ($(HAVE_RECVMSG),1) + # These files require recvmsg to compile + LIBBIFROST_OBJS += \ address.o \ udp_socket.o \ udp_capture.o \ udp_transmit.o +endif ifeq ($(HAVE_CUDA),1) # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ From f5dcb4fe60bf9cd530601daa16fc592c45c11ac9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 17:36:34 -0600 Subject: [PATCH 0303/1155] Added fixes from @telegraphic to address #147. --- python/bifrost/ring2.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index 0919606a3..456fb21d3 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -81,6 +81,7 @@ class Ring(BifrostObject): def __init__(self, space='system', name=None, owner=None, core=None): # If this is non-None, then the object is wrapping a base Ring instance self.base = None + self.is_view = False # This gets set to True by use of .view() self.space = space if name is None: name = 'ring_%i' % Ring.instance_count @@ -102,11 +103,12 @@ def __init__(self, space='system', name=None, owner=None, core=None): self.owner = owner self.header_transform = None def __del__(self): - if self.base is not None: + if self.base is not None and not self.is_view: BifrostObject.__del__(self) def view(self): new_ring = copy(self) new_ring.base = self + new_ring.is_view = True return new_ring def resize(self, contiguous_bytes, total_bytes=None, nringlet=1): _check( _bf.bfRingResize(self.obj, From 511d76ec38837869149abab101f6c9634264a3b0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 17:41:09 -0600 Subject: [PATCH 0304/1155] PEP479 fixes from @telegraphic. --- python/bifrost/libbifrost.py | 13 +++++++++++-- python/bifrost/pipeline.py | 6 +++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index c55504382..53eba0056 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -43,6 +43,15 @@ # Internal helpers below +class EndOfDataStop(Exception): + """ This class is used as a Py3 StopIterator + + In Python >3.7, reaching a StopIterator in a generator will + raise a RuntimeError (so you can't do 'except StopIterator' to catch it!) + See PEP479 https://www.python.org/dev/peps/pep-0479/ + """ + pass + class BifrostObject(object): """Base class for simple objects with create/destroy functions""" def __init__(self, constructor, destructor, *args): @@ -102,7 +111,7 @@ def _check(status): if status is None: raise RuntimeError("WTF, status is None") if status == _bf.BF_STATUS_END_OF_DATA: - raise StopIteration() + raise EndOfDataStop() elif status == _bf.BF_STATUS_WOULD_BLOCK: raise IOError('BF_STATUS_WOULD_BLOCK') else: @@ -110,7 +119,7 @@ def _check(status): raise RuntimeError(status_str) else: if status == _bf.BF_STATUS_END_OF_DATA: - raise StopIteration() + raise EndOfDataStop() elif status == _bf.BF_STATUS_WOULD_BLOCK: raise IOError('BF_STATUS_WOULD_BLOCK') return status diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index b5093dc9c..7d9fcb930 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -51,6 +51,7 @@ from bifrost.temp_storage import TempStorage from bifrost.proclog import ProcLog from bifrost.ndarray import memset_array # TODO: This feels a bit hacky +from bifrost.libbifrost import EndOfDataStop # Note: This must be called before any devices are initialized. It's also # almost always desirable when running pipelines, so we do it here at @@ -59,7 +60,10 @@ def izip(*iterables): while True: - yield [next(it) for it in iterables] + try: + yield [next(it) for it in iterables] + except EndOfDataStop: + return thread_local = threading.local() thread_local.pipeline_stack = [] From 7a60b4a600a03f4c503c51a51c08940ceab42cdb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 17:41:43 -0600 Subject: [PATCH 0305/1155] Deprecation fixes for Py3 from @telegraphic. --- python/bifrost/block.py | 14 +++++++------- python/bifrost/ring2.py | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index 6a8ab3cd7..0351d971e 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -224,7 +224,7 @@ def __init__(self, gulp_size=4096): self.core = -1 def load_settings(self, input_header): """Load in settings from input ring header""" - self.header = json.loads(input_header.tostring()) + self.header = json.loads(input_header.tobytes()) def iterate_ring_read(self, input_ring): """Iterate through one input ring @param[in] input_ring Ring to read through""" @@ -292,7 +292,7 @@ def read(self, *args): for ring_name in args]): # sequences is a tuple of all sequences for ring_name, sequence in self.izip(args, sequences): - self.header[ring_name] = json.loads(sequence.header.tostring()) + self.header[ring_name] = json.loads(sequence.header.tobytes()) self.load_settings() # resize all rings for ring_name in args: @@ -448,7 +448,7 @@ def load_settings(self, input_header): """Load the header from json @param[in] input_header The header from the ring""" with open(self.filename, 'w') as write_file: - write_file.write(str(json.loads(input_header.tostring()))) + write_file.write(str(json.loads(input_header.tobytes()))) def main(self, input_ring): """Put the header into the file @param[in] input_ring Contains the header in question""" @@ -463,7 +463,7 @@ def __init__(self, gulp_size): self.dtype = np.uint8 self.shape = (1, 1) def load_settings(self, input_header): - header = json.loads(input_header.tostring()) + header = json.loads(input_header.tobytes()) self.nbit = header['nbit'] self.dtype = np.dtype(header['dtype'].split()[1].split(".")[1].split("'")[0]).type if 'frame_shape' in header: @@ -503,7 +503,7 @@ def __init__(self, gulp_size): self.nbit = 8 self.dtype = np.uint8 def load_settings(self, input_header): - header = json.loads(input_header.tostring()) + header = json.loads(input_header.tobytes()) self.nbit = header['nbit'] try: self.dtype = np.dtype(header['dtype']).type @@ -548,7 +548,7 @@ def __init__(self, filename, gulp_size=1048576): self.dtype = np.uint8 open(self.filename, "w").close() # erase file def load_settings(self, input_header): - header_dict = json.loads(input_header.tostring()) + header_dict = json.loads(input_header.tobytes()) self.nbit = header_dict['nbit'] try: self.dtype = np.dtype(header_dict['dtype']).type @@ -652,7 +652,7 @@ def __init__(self, gulp_size=1048576, core=-1): self.dtype = np.uint8 def load_settings(self, input_header): self.output_header = input_header - self.settings = json.loads(input_header.tostring()) + self.settings = json.loads(input_header.tobytes()) self.nchan = self.settings["frame_shape"][0] dtype_str = self.settings["dtype"].split()[1].split(".")[1].split("'")[0] self.dtype = np.dtype(dtype_str) diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index 456fb21d3..9c2028f3f 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -230,11 +230,11 @@ def header(self): # WAR for hdr_buffer_ptr.contents crashing when size == 0 hdr_array = np.empty(0, dtype=np.uint8) hdr_array.flags['WRITEABLE'] = False - return json.loads(hdr_array.tostring()) + return json.loads(hdr_array.tobytes()) hdr_buffer = _address_as_buffer(self._header_ptr, size, readonly=True) hdr_array = np.frombuffer(hdr_buffer, dtype=np.uint8) hdr_array.flags['WRITEABLE'] = False - self._header = json.loads(hdr_array.tostring()) + self._header = json.loads(hdr_array.tobytes()) return self._header class WriteSequence(SequenceBase): From 156e141d7913b1b7252ffea85bc0a32517e0f103 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Oct 2021 18:03:12 -0600 Subject: [PATCH 0306/1155] More Py3 fixes from @telegraphic. --- python/bifrost/sigproc2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index 12a6d73b6..a8f8d4323 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -134,12 +134,12 @@ def id2telescope(id_): return _telescopes[id_] def telescope2id(name): # TODO: Would be better to use a pre-made reverse lookup dict - return _telescopes.keys()[_telescopes.values().index(name)] + return list(_telescopes.keys())[list(_telescopes.values()).index(name)] def id2machine(id_): return _machines[id_] def machine2id(name): # TODO: Would be better to use a pre-made reverse lookup dict - return _machines.keys()[_machines.values().index(name)] + return list(_machines.keys())[list(_machines.values()).index(name)] def _header_write_string(f, key): f.write(struct.pack('=i', len(key))) From b7366e10c2d2f1f1eaf9dcf119a2da6b7ba1b31e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Oct 2021 13:43:40 -0600 Subject: [PATCH 0307/1155] More PEP479 work. --- python/bifrost/block.py | 10 +++++++--- python/bifrost/libbifrost.py | 10 +++++----- python/bifrost/pipeline.py | 2 +- python/bifrost/psrdada.py | 3 ++- python/bifrost/ring.py | 18 ++++++++++++------ python/bifrost/ring2.py | 18 ++++++++++++------ 6 files changed, 39 insertions(+), 22 deletions(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index 0351d971e..d079c3469 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -48,6 +48,7 @@ from bifrost import affinity, memory from bifrost.ring import Ring from bifrost.sigproc import SigprocFile, unpack +from bifrost.libbifrost import EndOfDataStop class Pipeline(object): """Class which connects blocks linearly, with @@ -280,8 +281,11 @@ def izip(self, *iterables): into a single list generator""" iterators = [iter(iterable) for iterable in iterables] while True: - next_set = [next(iterator) for iterator in iterators] - yield self.flatten(*next_set) + try: + next_set = [next(iterator) for iterator in iterators] + yield self.flatten(*next_set) + except (EndOfDataStop, StopIteration): + return def load_settings(self): """Set by user to interpret input rings""" pass @@ -1076,7 +1080,7 @@ def main(self): arrays = [output_data] else: arrays = output_data - except StopIteration: + except (EndOfDataStop, StopIteration): break if self.changing: diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 53eba0056..64204b032 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -43,11 +43,11 @@ # Internal helpers below -class EndOfDataStop(Exception): - """ This class is used as a Py3 StopIterator +class EndOfDataStop(RuntimeError): + """This class is used as a Py3 StopIterator In Python >3.7, reaching a StopIterator in a generator will - raise a RuntimeError (so you can't do 'except StopIterator' to catch it!) + raise a RuntimeError (so you can't do 'except StopIteration' to catch it!) See PEP479 https://www.python.org/dev/peps/pep-0479/ """ pass @@ -111,7 +111,7 @@ def _check(status): if status is None: raise RuntimeError("WTF, status is None") if status == _bf.BF_STATUS_END_OF_DATA: - raise EndOfDataStop() + raise EndOfDataStop('BF_STATUS_END_OF_DATA') elif status == _bf.BF_STATUS_WOULD_BLOCK: raise IOError('BF_STATUS_WOULD_BLOCK') else: @@ -119,7 +119,7 @@ def _check(status): raise RuntimeError(status_str) else: if status == _bf.BF_STATUS_END_OF_DATA: - raise EndOfDataStop() + raise EndOfDataStop('BF_STATUS_END_OF_DATA') elif status == _bf.BF_STATUS_WOULD_BLOCK: raise IOError('BF_STATUS_WOULD_BLOCK') return status diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 7d9fcb930..61efafc98 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -62,7 +62,7 @@ def izip(*iterables): while True: try: yield [next(it) for it in iterables] - except EndOfDataStop: + except (EndOfDataStop, StopIteration): return thread_local = threading.local() diff --git a/python/bifrost/psrdada.py b/python/bifrost/psrdada.py index 67ff55230..b2f172298 100644 --- a/python/bifrost/psrdada.py +++ b/python/bifrost/psrdada.py @@ -44,6 +44,7 @@ import bifrost.libpsrdada_generated as _dada import numpy as np from bifrost.ndarray import _address_as_buffer +from bifrost.libbifrost import EndOfDataStop import ctypes @@ -115,7 +116,7 @@ def __next__(self): else: del block self.reset() - raise StopIteration() + raise EndOfDataStop('IpcBufBlock empty') def next(self): return self.__next__() def open(self): diff --git a/python/bifrost/ring.py b/python/bifrost/ring.py index ddf2c71e0..55336078b 100644 --- a/python/bifrost/ring.py +++ b/python/bifrost/ring.py @@ -29,7 +29,7 @@ # Python2 compatibility from __future__ import print_function, absolute_import -from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space, _space2string +from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space, _space2string, EndOfDataStop #from GPUArray import GPUArray from bifrost.DataType import DataType from bifrost.ndarray import ndarray, _address_as_buffer @@ -112,8 +112,11 @@ def open_earliest_sequence(self, guarantee=True): def read(self, whence='earliest', guarantee=True): with ReadSequence(self, which=whence, guarantee=guarantee) as cur_seq: while True: - yield cur_seq - cur_seq.increment() + try: + yield cur_seq + cur_seq.increment() + except EndOfDataStop: + return #def _data(self): # data_ptr = _get(self.lib.bfRingLockedGetData, self.obj) # #data_ptr = c_void_p() @@ -273,9 +276,12 @@ def read(self, span_size, stride=None, begin=0): stride = span_size offset = begin while True: - with self.acquire(offset, span_size) as ispan: - yield ispan - offset += stride + try: + with self.acquire(offset, span_size) as ispan: + yield ispan + offset += stride + except EndOfDataStop: + return class SpanBase(object): def __init__(self, ring, writeable): diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index 9c2028f3f..65b02d2a2 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -30,7 +30,7 @@ from __future__ import print_function, absolute_import -from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space +from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space, EndOfDataStop from bifrost.DataType import DataType from bifrost.ndarray import ndarray, _address_as_buffer from copy import copy, deepcopy @@ -146,8 +146,11 @@ def read(self, whence='earliest', guarantee=True): with ReadSequence(self, which=whence, guarantee=guarantee, header_transform=self.header_transform) as cur_seq: while True: - yield cur_seq - cur_seq.increment() + try: + yield cur_seq + cur_seq.increment() + except EndOfDataStop: + return class RingWriter(object): def __init__(self, ring): @@ -319,9 +322,12 @@ def read(self, nframe, stride=None, begin=0): stride = nframe offset = begin while True: - with self.acquire(offset, nframe) as ispan: - yield ispan - offset += stride + try: + with self.acquire(offset, nframe) as ispan: + yield ispan + offset += stride + except EndOfDataStop: + return def resize(self, gulp_nframe, buf_nframe=None, buffer_factor=None): if buf_nframe is None: if buffer_factor is None: From 033c1b11be458a471a5d32996b1ffe8612f225d1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Oct 2021 13:44:03 -0600 Subject: [PATCH 0308/1155] Switched to io.StringIO. --- test/test_print_header.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_print_header.py b/test/test_print_header.py index 23fdce263..25e7fdeed 100644 --- a/test/test_print_header.py +++ b/test/test_print_header.py @@ -44,7 +44,7 @@ def test_read_sigproc(self): """Capture print output, assert it is a long string""" gulp_nframe = 101 - stdout = io.BytesIO() + stdout = io.StringIO() with ExitStack() as stack: pipeline = stack.enter_context(bfp.Pipeline()) stack.enter_context(redirect_stdout(stdout)) From 641c2ab1d152aa0b47a0f2d1bb398fbaf851a926 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Oct 2021 13:44:37 -0600 Subject: [PATCH 0309/1155] Fixed a few Py3-related problems. --- python/bifrost/blocks/serialize.py | 3 +- test/test_serialize.py | 198 ++++++++++++++--------------- 2 files changed, 100 insertions(+), 101 deletions(-) diff --git a/python/bifrost/blocks/serialize.py b/python/bifrost/blocks/serialize.py index 7801966a2..f66cb60bd 100644 --- a/python/bifrost/blocks/serialize.py +++ b/python/bifrost/blocks/serialize.py @@ -102,7 +102,7 @@ def readinto(self, buf, frame_nbyte): if nbyte_read % frame_nbyte != 0: raise IOError("Unexpected end of file") nframe_read += nbyte_read // frame_nbyte - while nbyte_read < buf.nbytes: + while nbyte_read < buf[0].nbytes: self.cur_file += 1 if self.cur_file == self.nfile: break @@ -275,4 +275,3 @@ def serialize(iring, path=None, max_file_size=None, *args, **kwargs): SerializeBlock: A new block instance. """ return SerializeBlock(iring, path, max_file_size, *args, **kwargs) - diff --git a/test/test_serialize.py b/test/test_serialize.py index 09cfdb76e..465f352eb 100644 --- a/test/test_serialize.py +++ b/test/test_serialize.py @@ -34,35 +34,31 @@ import os import shutil +import tempfile class TemporaryDirectory(object): - def __init__(self, path): - self.path = path - os.makedirs(self.path) + def __init__(self): + self.path = tempfile.mkdtemp(suffix='.tmp', prefix='bifrost_test_') def remove(self): shutil.rmtree(self.path) def __enter__(self): - return self + return self.path def __exit__(self, type, value, tb): - self.remove() + #self.remove() + pass def get_sigproc_file_size(filename): """Returns the header and data size of a sigproc file without reading the whole file. """ with open(filename, 'rb') as f: - head = '' - while 'HEADER_END' not in head: + head = b'' + while b'HEADER_END' not in head: more_data = f.read(4096) - try: - more_data = more_data.decode(errors='replace') - except AttributeError: - # Python2 catch - pass if len(more_data) == 0: raise IOError("Not a valid sigproc file: " + filename) head += more_data - hdr_size = head.find('HEADER_END') + len('HEADER_END') + hdr_size = head.find(b'HEADER_END') + len(b'HEADER_END') file_size = os.path.getsize(filename) data_size = file_size - hdr_size return hdr_size, data_size @@ -71,10 +67,6 @@ def rename_sequence(hdr, name): hdr['name'] = name return hdr -def rename_sequence(hdr, name): - hdr['name'] = name - return hdr - class SerializeTest(unittest.TestCase): def setUp(self): self.fil_file = "./data/2chan16bitNoDM.fil" @@ -84,118 +76,126 @@ def setUp(self): with open(self.fil_file, 'rb') as f: self.data = f.read() self.data = self.data[hdr_size:] - self.temp_path = '/tmp/bifrost_test_serialize' self.basename = os.path.basename(self.fil_file) - self.basepath = os.path.join(self.temp_path, self.basename) self.gulp_nframe = 101 def run_test_serialize_with_name_no_ringlets(self, gulp_nframe_inc=0): - with bf.Pipeline() as pipeline: - data = read_sigproc([self.fil_file], self.gulp_nframe, core=0) - for i in range(5): - if gulp_nframe_inc != 0: - data = copy(data, - gulp_nframe=self.gulp_nframe+i*gulp_nframe_inc) - else: - data = copy(data) - data = serialize(data, self.temp_path, core=0) - with TemporaryDirectory(self.temp_path): + with TemporaryDirectory() as temp_path: + with bf.Pipeline() as pipeline: + data = read_sigproc([self.fil_file], self.gulp_nframe, core=0) + for i in range(5): + if gulp_nframe_inc != 0: + data = copy(data, + gulp_nframe=self.gulp_nframe+i*gulp_nframe_inc) + else: + data = copy(data) + data = serialize(data, temp_path, core=0) + pipeline.run() - # Note: SerializeBlock uses os.path.basename if path is given - hdrpath = self.basepath + '.bf.json' - datpath = self.basepath + '.bf.' + '0' * 12 + '.dat' - self.assertTrue(os.path.exists(hdrpath)) - self.assertTrue(os.path.exists(datpath)) - self.assertEqual(os.path.getsize(datpath), self.data_size) - with open(datpath, 'rb') as f: - data = f.read() - self.assertEqual(data, self.data) + + # Note: SerializeBlock uses os.path.basename if path is given + basepath = os.path.join(temp_path, self.basename) + hdrpath = basepath + '.bf.json' + datpath = basepath + '.bf.' + '0' * 12 + '.dat' + self.assertTrue(os.path.exists(hdrpath)) + self.assertTrue(os.path.exists(datpath)) + self.assertEqual(os.path.getsize(datpath), self.data_size) + with open(datpath, 'rb') as f: + data = f.read() + self.assertEqual(data, self.data) def test_serialize_with_name_no_ringlets(self): self.run_test_serialize_with_name_no_ringlets() self.run_test_serialize_with_name_no_ringlets(gulp_nframe_inc=1) self.run_test_serialize_with_name_no_ringlets(gulp_nframe_inc=3) def test_serialize_with_time_tag_no_ringlets(self): - with bf.Pipeline() as pipeline: - data = read_sigproc([self.fil_file], self.gulp_nframe) - # Custom view sets sequence name to '', which causes SerializeBlock - # to use the time_tag instead. - data = bf.views.custom(data, lambda hdr: rename_sequence(hdr, '')) - data = serialize(data, self.temp_path) - with TemporaryDirectory(self.temp_path): + with TemporaryDirectory() as temp_path: + with bf.Pipeline() as pipeline: + data = read_sigproc([self.fil_file], self.gulp_nframe) + # Custom view sets sequence name to '', which causes SerializeBlock + # to use the time_tag instead. + data = bf.views.custom(data, lambda hdr: rename_sequence(hdr, '')) + data = serialize(data, temp_path) pipeline.run() - basepath = os.path.join(self.temp_path, - '%020i' % self.time_tag) - hdrpath = basepath + '.bf.json' - datpath = basepath + '.bf.' + '0' * 12 + '.dat' - self.assertTrue(os.path.exists(hdrpath)) - self.assertTrue(os.path.exists(datpath)) - self.assertEqual(os.path.getsize(datpath), self.data_size) - with open(datpath, 'rb') as f: - data = f.read() - self.assertEqual(data, self.data) + + basepath = os.path.join(temp_path, '%020i' % self.time_tag) + hdrpath = basepath + '.bf.json' + datpath = basepath + '.bf.' + '0' * 12 + '.dat' + self.assertTrue(os.path.exists(hdrpath)) + self.assertTrue(os.path.exists(datpath)) + self.assertEqual(os.path.getsize(datpath), self.data_size) + with open(datpath, 'rb') as f: + data = f.read() + self.assertEqual(data, self.data) def test_serialize_with_name_and_ringlets(self): - with bf.Pipeline() as pipeline: - data = read_sigproc([self.fil_file], self.gulp_nframe) - # Transpose so that freq becomes a ringlet dimension - # TODO: Test multiple ringlet dimensions (e.g., freq + pol) once - # SerializeBlock supports it. - data = transpose(data, ['freq', 'time', 'pol']) - data = serialize(data, self.temp_path) - with TemporaryDirectory(self.temp_path): + with TemporaryDirectory() as temp_path: + with bf.Pipeline() as pipeline: + data = read_sigproc([self.fil_file], self.gulp_nframe) + # Transpose so that freq becomes a ringlet dimension + # TODO: Test multiple ringlet dimensions (e.g., freq + pol) once + # SerializeBlock supports it. + data = transpose(data, ['freq', 'time', 'pol']) + data = serialize(data, temp_path) pipeline.run() - # Note: SerializeBlock uses os.path.basename if path is given - hdrpath = self.basepath + '.bf.json' - datpath0 = self.basepath + '.bf.' + '0' * 12 + '.0.dat' - datpath1 = self.basepath + '.bf.' + '0' * 12 + '.1.dat' - self.assertTrue(os.path.exists(hdrpath)) - self.assertTrue(os.path.exists(datpath0)) - self.assertTrue(os.path.exists(datpath1)) - self.assertEqual(os.path.getsize(datpath0), - self.data_size // 2) - self.assertEqual(os.path.getsize(datpath1), - self.data_size // 2) + + # Note: SerializeBlock uses os.path.basename if path is given + basepath = os.path.join(temp_path, self.basename) + hdrpath = basepath + '.bf.json' + datpath0 = basepath + '.bf.' + '0' * 12 + '.0.dat' + datpath1 = basepath + '.bf.' + '0' * 12 + '.1.dat' + self.assertTrue(os.path.exists(hdrpath)) + self.assertTrue(os.path.exists(datpath0)) + self.assertTrue(os.path.exists(datpath1)) + self.assertEqual(os.path.getsize(datpath0), + self.data_size // 2) + self.assertEqual(os.path.getsize(datpath1), + self.data_size // 2) def test_deserialize_no_ringlets(self): - with TemporaryDirectory(self.temp_path): + with TemporaryDirectory() as temp_path: with bf.Pipeline() as pipeline: data = read_sigproc([self.fil_file], self.gulp_nframe) - serialize(data, self.temp_path) + serialize(data, temp_path) pipeline.run() - datpath = self.basepath + '.bf.' + '0' * 12 + '.dat' + + datpath = os.path.join(temp_path, self.basename) + '.bf.' + '0' * 12 + '.dat' with bf.Pipeline() as pipeline: - data = deserialize([self.basepath + '.bf'], self.gulp_nframe) + data = deserialize([os.path.join(temp_path, self.basename) + '.bf'], self.gulp_nframe) # Note: Must rename the sequence to avoid overwriting the input # file. data = bf.views.custom( data, lambda hdr: rename_sequence(hdr, hdr['name'] + '.2')) - serialize(data, self.temp_path) + serialize(data, temp_path) pipeline.run() - datpath = self.basepath + '.2.bf.' + '0' * 12 + '.dat' - with open(datpath, 'rb') as f: - data = f.read() - self.assertEqual(len(data), len(self.data)) - self.assertEqual(data, self.data) + + datpath = os.path.join(temp_path, self.basename) + '.2.bf.' + '0' * 12 + '.dat' + with open(datpath, 'rb') as f: + data = f.read() + self.assertEqual(len(data), len(self.data)) + self.assertEqual(data, self.data) def test_deserialize_with_ringlets(self): - with TemporaryDirectory(self.temp_path): + with TemporaryDirectory() as temp_path: with bf.Pipeline() as pipeline: data = read_sigproc([self.fil_file], self.gulp_nframe) data = transpose(data, ['freq', 'time', 'pol']) - serialize(data, self.temp_path) + serialize(data, temp_path) pipeline.run() - datpath = self.basepath + '.bf.' + '0' * 12 + '.dat' + + datpath = os.path.join(temp_path, self.basename) + '.bf.' + '0' * 12 + '.dat' with bf.Pipeline() as pipeline: - data = deserialize([self.basepath + '.bf'], self.gulp_nframe) + data = deserialize([os.path.join(temp_path, self.basename) + '.bf'], self.gulp_nframe) # Note: Must rename the sequence to avoid overwriting the input # file. data = bf.views.custom( data, lambda hdr: rename_sequence(hdr, hdr['name'] + '.2')) - serialize(data, self.temp_path) + serialize(data, temp_path) pipeline.run() - hdrpath = self.basepath + '.2.bf.json' - datpath0 = self.basepath + '.2.bf.' + '0' * 12 + '.0.dat' - datpath1 = self.basepath + '.2.bf.' + '0' * 12 + '.1.dat' - self.assertTrue(os.path.exists(hdrpath)) - self.assertTrue(os.path.exists(datpath0)) - self.assertTrue(os.path.exists(datpath1)) - self.assertEqual(os.path.getsize(datpath0), - self.data_size // 2) - self.assertEqual(os.path.getsize(datpath1), - self.data_size // 2) + + basepath = os.path.join(temp_path, self.basename) + hdrpath = basepath + '.2.bf.json' + datpath0 = basepath + '.2.bf.' + '0' * 12 + '.0.dat' + datpath1 = basepath + '.2.bf.' + '0' * 12 + '.1.dat' + self.assertTrue(os.path.exists(hdrpath)) + self.assertTrue(os.path.exists(datpath0)) + self.assertTrue(os.path.exists(datpath1)) + self.assertEqual(os.path.getsize(datpath0), + self.data_size // 2) + self.assertEqual(os.path.getsize(datpath1), + self.data_size // 2) From 3d613fef3d4bed95fda96eeed49f0fedb9976559 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Oct 2021 17:28:02 -0600 Subject: [PATCH 0310/1155] Try StringIO.StringIO for Py2. --- test/test_print_header.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/test_print_header.py b/test/test_print_header.py index 25e7fdeed..24b1d37a5 100644 --- a/test/test_print_header.py +++ b/test/test_print_header.py @@ -26,7 +26,10 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import unittest -import io +try: + from StringIO import StringIO +except importError: + from io import StringIO import bifrost.pipeline as bfp import bifrost.blocks as blocks @@ -44,7 +47,7 @@ def test_read_sigproc(self): """Capture print output, assert it is a long string""" gulp_nframe = 101 - stdout = io.StringIO() + stdout = StringIO() with ExitStack() as stack: pipeline = stack.enter_context(bfp.Pipeline()) stack.enter_context(redirect_stdout(stdout)) From 731b50f7f3dd5f191817cb6cbd94eb9f6cc2b958 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Oct 2021 18:37:00 -0600 Subject: [PATCH 0311/1155] This is what happens when I try to rush. --- test/test_print_header.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_print_header.py b/test/test_print_header.py index 24b1d37a5..60d48fe31 100644 --- a/test/test_print_header.py +++ b/test/test_print_header.py @@ -28,7 +28,7 @@ import unittest try: from StringIO import StringIO -except importError: +except ImportError: from io import StringIO import bifrost.pipeline as bfp From 7d4a14f56d2af59bda0c3bcac0137aca2f28645f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 11:03:17 -0600 Subject: [PATCH 0312/1155] Fix for getting a buffer from a memory address and size on PyPy. --- python/bifrost/ndarray.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index f43cf85e9..f56783c02 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -72,9 +72,18 @@ def _address_as_buffer(address, nbyte, readonly=False): int_asbuffer.argtypes = (ctypes.c_void_p, ctypes.c_ssize_t, ctypes.c_int) return int_asbuffer(address, nbyte, 0x100 if readonly else 0x200) except AttributeError: - # Python2 catch - return np.core.multiarray.int_asbuffer( - address, nbyte, readonly=readonly, check=False) + try: + # Python2 catch + return np.core.multiarray.int_asbuffer(address, + nbyte, + readonly=readonly, + check=False) + except AttributeError: + # PyPy3 catch + # TODO: How do we set read only? Does it matter? + # Should we be using this for everyone? + buf = (ctypes.c_char*nbyte).from_address(address) + return memoryview(buf) def asarray(arr, space=None): if isinstance(arr, ndarray) and (space is None or space == arr.bf.space): From ec1d73868c228cc80cbdde07d0f3134ac8984967 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 11:03:44 -0600 Subject: [PATCH 0313/1155] More work on OSX networking. --- src/Socket.hpp | 58 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 4b694c264..bbd5ba69b 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -154,11 +154,52 @@ inline static sa_family_t get_family(int sockfd) { } inline static int get_mtu(int sockfd) { - ifreq ifr; int mtu = 0; - if( ::ioctl(sockfd, SIOCGIFMTU, &ifr) != -1) { - mtu = ifr.ifr_mtu; + sa_family_t family = ::get_family(sockfd); + + sockaddr addr; + socklen_t addr_len = sizeof(addr); + sockaddr_in* addr4 = reinterpret_cast (&addr); + sockaddr_in6* addr6 = reinterpret_cast(&addr); + ::getsockname(sockfd, (struct sockaddr*)&addr, &addr_len); + + ifaddrs* ifaddr; + if( ::getifaddrs(&ifaddr) == -1 ) { + return 0; } + + ifreq ifr; + bool found = false; + for( ifaddrs* ifa=ifaddr; ifa!=NULL; ifa=ifa->ifa_next ) { + if( ifa->ifa_addr == NULL || found) { + continue; + } + sa_family_t ifa_family = ifa->ifa_addr->sa_family; + if( (family == AF_UNSPEC && (ifa_family == AF_INET || + ifa_family == AF_INET6)) || + ifa_family == family ) { + if( ifa_family == AF_INET ) { + struct sockaddr_in* inaddr = (struct sockaddr_in*) ifa->ifa_addr; + if( inaddr->sin_addr.s_addr == addr4->sin_addr.s_addr ) { + found = true; + } + } else if( ifa_family == AF_INET6 ) { + struct sockaddr_in6* inaddr6 = (struct sockaddr_in6*) ifa->ifa_addr; + if( inaddr6->sin6_addr.s6_addr == addr6->sin6_addr.s6_addr ) { + found = true; + } + } + } + + if( found ) { + ::strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name)); + if( ::ioctl(sockfd, SIOCGIFMTU, &ifr) != -1) { + mtu = ifr.ifr_mtu; + } + } + } + ::freeifaddrs(ifaddr); + return mtu; } @@ -225,8 +266,13 @@ class Socket { : super_t(what_arg) {} }; enum { +#if defined __APPLE__ && __APPLE__ + DEFAULT_SOCK_BUF_SIZE = 4*1024*1024, + DEFAULT_LINGER_SECS = 1, +#else DEFAULT_SOCK_BUF_SIZE = 256*1024*1024, DEFAULT_LINGER_SECS = 3, +#endif DEFAULT_MAX_CONN_QUEUE = 128 }; enum sock_type { @@ -506,10 +552,10 @@ std::string Socket::address_string(sockaddr_storage addr) { } } int Socket::discover_mtu(sockaddr_storage remote_address) { - Socket s(SOCK_DGRAM); + Socket s(SOCK_DGRAM); s.connect(remote_address); #if defined __APPLE__ && __APPLE__ - return ::get_mtu(s._fd); + return ::get_mtu(s.get_fd()); #else return s.get_option(IP_MTU, IPPROTO_IP); #endif @@ -556,7 +602,7 @@ void Socket::connect(sockaddr_storage remote_address) { } this->open(remote_address.ss_family); } - check_error(::connect(_fd, (sockaddr*)&remote_address, sizeof(remote_address)), + check_error(::connect(_fd, (sockaddr*)&remote_address, sizeof(sockaddr)), "connect socket"); if( remote_address.ss_family == AF_UNSPEC ) { _mode = Socket::MODE_BOUND; From 341b3e61efdd2a0e80b68e57c751e9541651c7d4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 13:16:18 -0600 Subject: [PATCH 0314/1155] Cleanup the temporary directories. --- test/test_serialize.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/test_serialize.py b/test/test_serialize.py index 465f352eb..4a60b7a95 100644 --- a/test/test_serialize.py +++ b/test/test_serialize.py @@ -44,8 +44,7 @@ def remove(self): def __enter__(self): return self.path def __exit__(self, type, value, tb): - #self.remove() - pass + self.remove() def get_sigproc_file_size(filename): """Returns the header and data size of a sigproc file without reading From 42f396245d5501772d28b4b89dd904f6aeafe690 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 13:17:51 -0600 Subject: [PATCH 0315/1155] Add OpenBLAS for PyPy. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 432e22403..a50059dc8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,6 +39,7 @@ addons: - ca-certificates - curl - git + - libopenblas-dev - pkg-config - software-properties-common - exuberant-ctags From 206aa8127ef6e52f2d3d4b3f4cbe7eb996a088f2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 13:28:25 -0600 Subject: [PATCH 0316/1155] Drop the memoryview for PyPy. --- python/bifrost/ndarray.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index f56783c02..8825eaed3 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -82,8 +82,7 @@ def _address_as_buffer(address, nbyte, readonly=False): # PyPy3 catch # TODO: How do we set read only? Does it matter? # Should we be using this for everyone? - buf = (ctypes.c_char*nbyte).from_address(address) - return memoryview(buf) + return (ctypes.c_char*nbyte).from_address(address) def asarray(arr, space=None): if isinstance(arr, ndarray) and (space is None or space == arr.bf.space): From 5b69213b5977cf80dd546ed237f7142f3a810c0b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Oct 2021 13:43:26 -0600 Subject: [PATCH 0317/1155] Added gfortran to help build scipy on pypy. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index a50059dc8..3fe2659e7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,6 +38,7 @@ addons: - build-essential - ca-certificates - curl + - gfortran - git - libopenblas-dev - pkg-config From cb3a59f9fbdb4b231add27f2bee31db8a0191e26 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 26 Oct 2021 10:51:20 -0600 Subject: [PATCH 0318/1155] Add a space to between the CUDA archs. --- config/cuda.m4 | 5 +- configure | 14573 ++++++++++++++++++++++------------------------- 2 files changed, 6961 insertions(+), 7617 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index ad9e5405f..014c16e3e 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -125,10 +125,7 @@ AC_DEFUN([AX_CHECK_CUDA], arch += minor; if( archs.count(arch) == 0 ) { archs.insert(arch); - if( dev > 0 ) { - fh << " "; - } - fh << arch; + fh << " " << arch; } } fh.close();]])], diff --git a/configure b/configure index f470f35be..b733b5b8d 100755 --- a/configure +++ b/configure @@ -1,10 +1,9 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for bifrost 0.9.0. +# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, -# Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -15,16 +14,14 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -34,46 +31,46 @@ esac fi - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi # The user is always right. -if ${PATH_SEPARATOR+false} :; then +if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -82,6 +79,13 @@ if ${PATH_SEPARATOR+false} :; then fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -90,12 +94,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -107,10 +107,30 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -132,22 +152,20 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop +else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -167,15 +185,12 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ) -then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : -else \$as_nop +else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 -blah=\$(echo \$(echo blah)) -test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -190,38 +205,30 @@ test -x / || exit 1" test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null -then : + if (eval "$as_required") 2>/dev/null; then : as_have_required=yes -else $as_nop +else as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null -then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -else $as_nop +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir$as_base + as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes - if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null -then : + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi @@ -229,21 +236,14 @@ fi esac as_found=false done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes -fi -fi +fi; } +IFS=$as_save_IFS - if test "x$CONFIG_SHELL" != x -then : + if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -261,19 +261,18 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno -then : - printf "%s\n" "$0: This script requires a shell more modern than all" - printf "%s\n" "$0: the shells that I found on your system." - if test ${ZSH_VERSION+y} ; then - printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" - printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -300,7 +299,6 @@ as_fn_unset () } as_unset=as_fn_unset - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -318,14 +316,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -340,7 +330,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -349,7 +339,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -388,13 +378,12 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' -else $as_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -406,27 +395,18 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -438,9 +418,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -467,7 +447,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -511,7 +491,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -525,10 +505,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -542,13 +518,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -626,36 +595,40 @@ PACKAGE_URL='https://github.com/ledatelescope/bifrost/' ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_STDIO_H -# include +#include +#ifdef HAVE_SYS_TYPES_H +# include #endif -#ifdef HAVE_STDLIB_H +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS # include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif #endif #ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif #ifdef HAVE_UNISTD_H # include #endif" -ac_header_c_list= ac_subst_vars='LTLIBOBJS PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR @@ -733,6 +706,7 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CXXCPP +CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -868,6 +842,7 @@ CXX CXXFLAGS CCC LT_SYS_LIBRARY_PATH +CPP CXXCPP CTAGS PYTHON @@ -941,6 +916,8 @@ do *) ac_optarg=yes ;; esac + # Accept the important Cygnus configure options, so we can diagnose typos. + case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -981,9 +958,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1007,9 +984,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1220,9 +1197,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1236,9 +1213,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1282,9 +1259,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1300,7 +1277,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1364,7 +1341,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_myself" | +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1558,6 +1535,7 @@ Some influential environment variables: CXXFLAGS C++ compiler flags LT_SYS_LIBRARY_PATH User-defined run-time library search path. + CPP C preprocessor CXXCPP C++ preprocessor CTAGS Absolute path to ctags executable PYTHON Absolute path to python executable @@ -1585,9 +1563,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1615,8 +1593,7 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for configure.gnu first; this name is used for a wrapper for - # Metaconfig's "Configure" on case-insensitive file systems. + # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1624,7 +1601,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1634,9 +1611,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF bifrost configure 0.9.0 -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.69 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1653,14 +1630,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam + rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1668,15 +1645,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext -then : + } && test -s conftest.$ac_objext; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1692,14 +1668,14 @@ fi ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam + rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1707,15 +1683,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext -then : + } && test -s conftest.$ac_objext; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1731,14 +1706,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext + rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1746,18 +1721,17 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1779,44 +1753,120 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1824,9 +1874,16 @@ else $as_nop #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1844,25 +1901,24 @@ choke me #endif int -main (void) +main () { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func @@ -1879,7 +1935,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1887,15 +1943,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1911,14 +1966,14 @@ fi ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext + rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1926,18 +1981,17 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1958,12 +2012,11 @@ fi ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1971,9 +2024,16 @@ else $as_nop #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1991,61 +2051,114 @@ choke me #endif int -main (void) +main () { return $2 (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func -# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_cxx_check_header_compile () +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - eval "$3=yes" -else $as_nop - eval "$3=no" +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_cxx_check_header_compile +} # ac_fn_cxx_check_header_mongrel # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- @@ -2054,18 +2167,17 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof ($2)) return 0; @@ -2073,13 +2185,12 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof (($2))) return 0; @@ -2087,27 +2198,26 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_try_run LINENO # ------------------------ -# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that -# executables *can* be run. +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -2117,26 +2227,25 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -2154,12 +2263,11 @@ fi ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 -printf %s "checking for int$2_t... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +$as_echo_n "checking for int$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2170,7 +2278,7 @@ else $as_nop $ac_includes_default enum { N = $2 / 2 - 1 }; int -main (void) +main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; @@ -2180,14 +2288,13 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int -main (void) +main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; @@ -2198,10 +2305,9 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( @@ -2209,20 +2315,19 @@ else $as_nop eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no" -then : +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : -else $as_nop +else break fi done fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t @@ -2234,12 +2339,11 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 -printf %s "checking for uint$2_t... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +$as_echo_n "checking for uint$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2249,7 +2353,7 @@ else $as_nop /* end confdefs.h. */ $ac_includes_default int -main (void) +main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; @@ -2259,8 +2363,7 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( @@ -2268,49 +2371,28 @@ then : eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no" -then : +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : -else $as_nop +else break fi done fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t -ac_configure_args_raw= -for ac_arg -do - case $ac_arg in - *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_configure_args_raw " '$ac_arg'" -done - -case $ac_configure_args_raw in - *$as_nl*) - ac_safe_unquote= ;; - *) - ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. - ac_unsafe_a="$ac_unsafe_z#~" - ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" - ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; -esac - cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was - $ $0$ac_configure_args_raw + $ $0 $@ _ACEOF exec 5>>config.log @@ -2343,12 +2425,8 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - printf "%s\n" "PATH: $as_dir" + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" done IFS=$as_save_IFS @@ -2383,7 +2461,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2418,13 +2496,11 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? - # Sanitize IFS. - IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - printf "%s\n" "## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2435,8 +2511,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2460,7 +2536,7 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ) echo - printf "%s\n" "## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2468,14 +2544,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - printf "%s\n" "## ------------------- ## + $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2483,15 +2559,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - printf "%s\n" "## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2499,8 +2575,8 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} echo fi test "$ac_signal" != 0 && - printf "%s\n" "$as_me: caught signal $ac_signal" - printf "%s\n" "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2514,48 +2590,63 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -printf "%s\n" "/* confdefs.h */" > confdefs.h +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF -printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF -printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF -printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF -printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF -printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - ac_site_files="$CONFIG_SITE" + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac elif test "x$prefix" != xNONE; then - ac_site_files="$prefix/share/config.site $prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi - -for ac_site_file in $ac_site_files +for ac_site_file in "$ac_site_file1" "$ac_site_file2" do - case $ac_site_file in #( - */*) : - ;; #( - *) : - ac_site_file=./$ac_site_file ;; -esac - if test -f "$ac_site_file" && test -r "$ac_site_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2565,1269 +2656,1581 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -printf "%s\n" "$as_me: loading cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -printf "%s\n" "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Test code for whether the C compiler supports C89 (global declarations) -ac_c_conftest_c89_globals=' -/* Does the compiler advertise C89 conformance? - Do not test the value of __STDC__, because some compilers set it to 0 - while being otherwise adequately conformant. */ -#if !defined __STDC__ -# error "Compiler does not advertise C89 conformance" -#endif +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ -struct buf { int x; }; -struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} +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 -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not \xHH hex character constants. - These do not provoke an error unfortunately, instead are silently treated - as an "x". The following induces an error, until -std is added to get - proper ANSI mode. Curiously \x00 != x always comes out true, for an - array size at least. It is necessary to write \x00 == 0 to get something - that is true only with -std. */ -int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) '\''x'\'' -int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), - int, int);' -# Test code for whether the C compiler supports C89 (body of main). -ac_c_conftest_c89_main=' -ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); -' -# Test code for whether the C compiler supports C99 (global declarations) -ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L -# error "Compiler does not advertise C99 conformance" -#endif +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi -#include -extern int puts (const char *); -extern int printf (const char *, ...); -extern int dprintf (int, const char *, ...); -extern void *malloc (size_t); - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -// dprintf is used instead of fprintf to avoid needing to declare -// FILE and stderr. -#define debug(...) dprintf (2, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - #error "your preprocessor is broken" -#endif -#if BIG_OK -#else - #error "your preprocessor is broken" -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; -struct incomplete_array -{ - int datasize; - double data[]; -}; -struct named_init { - int number; - const wchar_t *name; - double average; -}; -typedef const char *ccp; +: ${CXXFLAGS="-O3 -Wall -pedantic"} -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) - continue; - return 0; -} +# +# Programs +# -// Check varargs and va_copy. -static bool -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac - const char *str = ""; - int number = 0; - float fnumber = 0; - while (*format) - { - switch (*format++) - { - case '\''s'\'': // string - str = va_arg (args_copy, const char *); - break; - case '\''d'\'': // int - number = va_arg (args_copy, int); - break; - case '\''f'\'': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); - return *str && number && fnumber; -} -' +macro_version='2.4.6' +macro_revision='2.4.6' -# Test code for whether the C compiler supports C99 (body of main). -ac_c_conftest_c99_main=' - // Check bool. - _Bool success = false; - success |= (argc != 0); - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[0] = argv[0][0]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' - || dynamic_array[ni.number - 1] != 543); -' -# Test code for whether the C compiler supports C11 (global declarations) -ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L -# error "Compiler does not advertise C11 conformance" -#endif -// Check _Alignas. -char _Alignas (double) aligned_as_double; -char _Alignas (0) no_special_alignment; -extern char aligned_as_int; -char _Alignas (0) _Alignas (int) aligned_as_int; -// Check _Alignof. -enum -{ - int_alignment = _Alignof (int), - int_array_alignment = _Alignof (int[100]), - char_alignment = _Alignof (char) -}; -_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); -// Check _Noreturn. -int _Noreturn does_not_return (void) { for (;;) continue; } -// Check _Static_assert. -struct test_static_assert -{ - int x; - _Static_assert (sizeof (int) <= sizeof (long int), - "_Static_assert does not work in struct"); - long int y; -}; -// Check UTF-8 literals. -#define u8 syntax error! -char const utf8_literal[] = u8"happens to be ASCII" "another string"; -// Check duplicate typedefs. -typedef long *long_ptr; -typedef long int *long_ptr; -typedef long_ptr long_ptr; -// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. -struct anonymous -{ - union { - struct { int i; int j; }; - struct { int k; long int l; } w; - }; - int m; -} v1; -' -# Test code for whether the C compiler supports C11 (body of main). -ac_c_conftest_c11_main=' - _Static_assert ((offsetof (struct anonymous, i) - == offsetof (struct anonymous, w.k)), - "Anonymous union alignment botch"); - v1.i = 2; - v1.w.k = 5; - ok |= v1.i != 5; -' -# Test code for whether the C compiler supports C11 (complete). -ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} -${ac_c_conftest_c11_globals} -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - ${ac_c_conftest_c11_main} - return ok; -} -" -# Test code for whether the C compiler supports C99 (complete). -ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} +ltmain=$ac_aux_dir/ltmain.sh -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - return ok; -} -" +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -# Test code for whether the C compiler supports C89 (complete). -ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - return ok; -} -" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -# Test code for whether the C++ compiler supports C++98 (global declarations) -ac_cxx_conftest_cxx98_globals=' -// Does the compiler advertise C++98 conformance? -#if !defined __cplusplus || __cplusplus < 199711L -# error "Compiler does not advertise C++98 conformance" -#endif -// These inclusions are to reject old compilers that -// lack the unsuffixed header files. -#include -#include +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi -// and are *not* freestanding headers in C++98. -extern void assert (int); -namespace std { - extern int strcmp (const char *, const char *); -} +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -// Namespaces, exceptions, and templates were all added after "C++ 2.0". -using std::exception; -using std::strcmp; -namespace { +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -void test_exception_syntax() -{ - try { - throw "test"; - } catch (const char *s) { - // Extra parentheses suppress a warning when building autoconf itself, - // due to lint rules shared with more typical C programs. - assert (!(strcmp) (s, "test")); - } -} +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' -template struct test_template -{ - T const val; - explicit test_template(T t) : val(t) {} - template T add(U u) { return static_cast(u) + val; } -}; +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' -} // anonymous namespace -' +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi -# Test code for whether the C++ compiler supports C++98 (body of main) -ac_cxx_conftest_cxx98_main=' - assert (argc); - assert (! argv[0]); +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () { - test_exception_syntax (); - test_template tt (2.0); - assert (tt.add (4) == 6.0); - assert (true && !false); + $ECHO "" } -' -# Test code for whether the C++ compiler supports C++11 (global declarations) -ac_cxx_conftest_cxx11_globals=' -// Does the compiler advertise C++ 2011 conformance? -#if !defined __cplusplus || __cplusplus < 201103L -# error "Compiler does not advertise C++11 conformance" -#endif +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac -namespace cxx11test -{ - constexpr int get_val() { return 20; } - struct testinit - { - int i; - double d; - }; - class delegate - { - public: - delegate(int n) : n(n) {} - delegate(): delegate(2354) {} - virtual int getval() { return this->n; }; - protected: - int n; - }; - class overridden : public delegate - { - public: - overridden(int n): delegate(n) {} - virtual int getval() override final { return this->n * 2; } - }; - class nocopy - { - public: - nocopy(int i): i(i) {} - nocopy() = default; - nocopy(const nocopy&) = delete; - nocopy & operator=(const nocopy&) = delete; - private: - int i; - }; - - // for testing lambda expressions - template Ret eval(Fn f, Ret v) - { - return f(v); - } - // for testing variadic templates and trailing return types - template auto sum(V first) -> V - { - return first; - } - template auto sum(V first, Args... rest) -> V - { - return first + sum(rest...); - } -} -' -# Test code for whether the C++ compiler supports C++11 (body of main) -ac_cxx_conftest_cxx11_main=' -{ - // Test auto and decltype - auto a1 = 6538; - auto a2 = 48573953.4; - auto a3 = "String literal"; - int total = 0; - for (auto i = a3; *i; ++i) { total += *i; } - decltype(a2) a4 = 34895.034; -} -{ - // Test constexpr - short sa[cxx11test::get_val()] = { 0 }; -} -{ - // Test initializer lists - cxx11test::testinit il = { 4323, 435234.23544 }; -} -{ - // Test range-based for - int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, - 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; - for (auto &x : array) { x += 23; } -} -{ - // Test lambda expressions - using cxx11test::eval; - assert (eval ([](int x) { return x*2; }, 21) == 42); - double d = 2.0; - assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); - assert (d == 5.0); - assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); - assert (d == 5.0); -} -{ - // Test use of variadic templates - using cxx11test::sum; - auto a = sum(1); - auto b = sum(1, 2); - auto c = sum(1.0, 2.0, 3.0); -} -{ - // Test constructor delegation - cxx11test::delegate d1; - cxx11test::delegate d2(); - cxx11test::delegate d3(45); -} -{ - // Test override and final - cxx11test::overridden o1(55464); -} -{ - // Test nullptr - char *c = nullptr; -} -{ - // Test template brackets - test_template<::test_template> v(test_template(12)); -} -{ - // Unicode literals - char const *utf8 = u8"UTF-8 string \u2500"; - char16_t const *utf16 = u"UTF-8 string \u2500"; - char32_t const *utf32 = U"UTF-32 string \u2500"; -} -' -# Test code for whether the C compiler supports C++11 (complete). -ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} -${ac_cxx_conftest_cxx11_globals} -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_cxx_conftest_cxx98_main} - ${ac_cxx_conftest_cxx11_main} - return ok; -} -" -# Test code for whether the C compiler supports C++98 (complete). -ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_cxx_conftest_cxx98_main} - return ok; -} -" -as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" -as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" -as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" -as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" -as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" -as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" -as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" -as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" -as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" - -# Auxiliary files required by this configure script. -ac_aux_files="install-sh config.guess config.sub ltmain.sh" - -# Locations in which to look for auxiliary files. -ac_aux_dir_candidates="${srcdir}/config" - -# Search for a directory containing all of the required auxiliary files, -# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. -# If we don't find one directory that contains all the files we need, -# we report the set of missing files from the *first* directory in -# $ac_aux_dir_candidates and give up. -ac_missing_aux_files="" -ac_first_candidate=: -printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in $ac_aux_dir_candidates +for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - as_found=: + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 - ac_aux_dir_found=yes - ac_install_sh= - for ac_aux in $ac_aux_files - do - # As a special case, if "install-sh" is required, that requirement - # can be satisfied by any of "install-sh", "install.sh", or "shtool", - # and $ac_install_sh is set appropriately for whichever one is found. - if test x"$ac_aux" = x"install-sh" - then - if test -f "${as_dir}install-sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 - ac_install_sh="${as_dir}install-sh -c" - elif test -f "${as_dir}install.sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 - ac_install_sh="${as_dir}install.sh -c" - elif test -f "${as_dir}shtool"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 - ac_install_sh="${as_dir}shtool install -c" - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} install-sh" - else - break - fi - fi - else - if test -f "${as_dir}${ac_aux}"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" - else - break - fi - fi - fi - done - if test "$ac_aux_dir_found" = yes; then - ac_aux_dir="$as_dir" - break - fi - ac_first_candidate=false +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - as_found=false + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi done + done IFS=$as_save_IFS -if $as_found -then : -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi - - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -if test -f "${ac_aux_dir}config.guess"; then - ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi -if test -f "${ac_aux_dir}config.sub"; then - ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -if test -f "$ac_aux_dir/configure"; then - ac_configure="$SHELL ${ac_aux_dir}configure" + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" fi -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi done -if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' - and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## + done +IFS=$as_save_IFS -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -: ${CXXFLAGS="-O3 -Wall -pedantic"} + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -# -# Programs -# +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + test -n "$ac_ct_CC" && break +done -case `pwd` in - *\ * | *\ *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac + CC=$ac_ct_CC + fi +fi +fi -macro_version='2.4.6' -macro_revision='2.4.6' - - - - - - - - - - - - +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -ltmain=$ac_aux_dir/ltmain.sh +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - # Make sure we can run config.sub. -$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -printf %s "checking build system type... " >&6; } -if test ${ac_cv_build+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -printf "%s\n" "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -printf %s "checking host system type... " >&6; } -if test ${ac_cv_host+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 + ac_file='' fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -printf "%s\n" "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -printf %s "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () { - $ECHO "" -} +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; -case $ECHO in - printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -printf "%s\n" "printf" >&6; } ;; - print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -printf "%s\n" "print -r" >&6; } ;; - *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -printf "%s\n" "cat" >&6; } ;; + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done - done -IFS=$as_save_IFS +rm -f conftest.$ac_ext +CC=$ac_save_CC fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_SED=$SED fi - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_GREP=$GREP fi - fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_EGREP=$EGREP fi - - test -n "$CC" && break - done + fi fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_FGREP=$FGREP fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" - test -n "$ac_ct_CC" && break -done - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3836,43 +4239,42 @@ IFS=$as_save_IFS fi fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$DUMPBIN" && break + done fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3881,666 +4283,259 @@ IFS=$as_save_IFS fi fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ac_ct_CC" = x; then - CC="" + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - CC=$ac_ct_CC + DUMPBIN=$ac_ct_DUMPBIN fi -else - CC="$ac_cv_prog_CC" fi + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi fi +test -z "$NM" && NM=nm -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } -# Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion -version; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main (void) -{ - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -printf %s "checking whether the C compiler works... " >&6; } -ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; -else $as_nop - ac_file='' -fi -if test -z "$ac_file" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -printf %s "checking for C compiler default output file name... " >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -printf "%s\n" "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -printf %s "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -printf "%s\n" "$ac_cv_exeext" >&6; } + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -printf %s "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -printf "%s\n" "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -printf %s "checking for suffix of object files... " >&6; } -if test ${ac_cv_objext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -printf "%s\n" "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test $ac_compiler_gnu = yes; then - GCC=yes +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } else - GCC= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } fi -ac_test_CFLAGS=${CFLAGS+y} -ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +max_cmd_len=$lt_cv_sys_max_cmd_len -int -main (void) -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main (void) -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main (void) -{ +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC + lt_unset=false fi -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 -fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -printf %s "checking for a sed that does not truncate output... " >&6; } -if test ${ac_cv_path_SED+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in sed gsed - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; esac - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -printf "%s\n" "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - @@ -4549,230 +4544,109 @@ Xsed="$SED -e 1s/^X//" - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -printf %s "checking for grep that handles long lines and -e... " >&6; } -if test ${ac_cv_path_GREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in grep ggrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_cv_path_GREP=$GREP -fi + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -printf "%s\n" "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -printf %s "checking for egrep... " >&6; } -if test ${ac_cv_path_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in egrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -printf "%s\n" "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -printf %s "checking for fgrep... " >&6; } -if test ${ac_cv_path_FGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in fgrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_cv_path_FGREP=$FGREP -fi + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac - fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -printf "%s\n" "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac @@ -4782,263 +4656,66 @@ test -z "$GREP" && GREP=grep +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -# Check whether --with-gnu-ld was given. -if test ${with_gnu_ld+y} -then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop - with_gnu_ld=no fi - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -printf %s "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -printf %s "checking for GNU ld... " >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -printf %s "checking for non-GNU ld... " >&6; } -fi -if test ${lt_cv_path_LD+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -printf "%s\n" "$LD" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -printf %s "checking if the linker ($LD) is GNU ld... " >&6; } -if test ${lt_cv_prog_gnu_ld+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test ${lt_cv_path_NM+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM -else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} -fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -printf "%s\n" "$lt_cv_path_NM" >&6; } -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DUMPBIN+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -printf "%s\n" "$DUMPBIN" >&6; } +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DUMPBIN+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5047,375 +4724,273 @@ IFS=$as_save_IFS fi fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -printf "%s\n" "$ac_ct_DUMPBIN" >&6; } +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - DUMPBIN=$ac_ct_DUMPBIN + OBJDUMP=$ac_ct_OBJDUMP fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi +test -z "$OBJDUMP" && OBJDUMP=objdump - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi -fi -test -z "$NM" && NM=nm -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -printf %s "checking the name lister ($NM) interface... " >&6; } -if test ${lt_cv_nm_interface+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -printf "%s\n" "$lt_cv_nm_interface" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -printf %s "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -printf "%s\n" "no, using $LN_S" >&6; } -fi + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. -# find the maximum length of command line arguments -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -printf %s "checking the maximum length of command line arguments... " >&6; } -if test ${lt_cv_sys_max_cmd_len+y} -then : - printf %s "(cached) " >&6 -else $as_nop - i=0 - teststring=ABCD +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; +beos*) + lt_cv_deplibs_check_method=pass_all + ;; - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac + ;; -fi +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; -if test -n "$lt_cv_sys_max_cmd_len"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 -printf "%s\n" "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -printf %s "checking how to convert $build file names to $host format... " >&6; } -if test ${lt_cv_to_host_file_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi ;; -esac - + esac fi -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -printf %s "checking how to convert $build file names to toolchain format... " >&6; } -if test ${lt_cv_to_tool_file_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -fi -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -printf %s "checking for $LD option to reload object files... " >&6; } -if test ${lt_cv_ld_reload_flag+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_reload_flag='-r' -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test yes != "$GCC"; then - reload_cmds=false - fi - ;; - darwin*) - if test yes = "$GCC"; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac @@ -5426,30 +5001,25 @@ esac if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5458,43 +5028,38 @@ IFS=$as_save_IFS fi fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -printf "%s\n" "$OBJDUMP" >&6; } +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5503,31 +5068,31 @@ IFS=$as_save_IFS fi fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -printf "%s\n" "$ac_ct_OBJDUMP" >&6; } +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - OBJDUMP=$ac_ct_OBJDUMP + DLLTOOL=$ac_ct_DLLTOOL fi else - OBJDUMP="$ac_cv_prog_OBJDUMP" + DLLTOOL="$ac_cv_prog_DLLTOOL" fi -test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$DLLTOOL" && DLLTOOL=dlltool @@ -5537,400 +5102,38 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -printf %s "checking how to recognize dependent libraries... " >&6; } -if test ${lt_cv_deplibs_check_method+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' -beos*) - lt_cv_deplibs_check_method=pass_all +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; +esac -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -os2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DLLTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -printf "%s\n" "$DLLTOOL" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DLLTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -printf "%s\n" "$ac_ct_DLLTOOL" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -printf %s "checking how to associate runtime and link libraries... " >&6; } -if test ${lt_cv_sharedlib_from_linklib_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO @@ -5948,16 +5151,15 @@ if test -z "$CXX"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else @@ -5965,15 +5167,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5984,11 +5182,11 @@ fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -5997,16 +5195,15 @@ fi fi if test -z "$CXX"; then ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else @@ -6014,15 +5211,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6033,11 +5226,11 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -printf "%s\n" "$ac_ct_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6049,8 +5242,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -6060,7 +5253,7 @@ fi fi fi # Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do @@ -6070,7 +5263,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -6080,21 +5273,20 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 -printf %s "checking whether the compiler supports GNU C++... " >&6; } -if test ${ac_cv_cxx_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { #ifndef __GNUC__ choke me @@ -6104,33 +5296,29 @@ main (void) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes -else $as_nop +else ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi -ac_test_CXXFLAGS=${CXXFLAGS+y} +ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -printf %s "checking whether $CXX accepts -g... " >&6; } -if test ${ac_cv_prog_cxx_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no @@ -6139,60 +5327,57 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes -else $as_nop +else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } -if test $ac_test_CXXFLAGS; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then @@ -6207,100 +5392,6 @@ else CXXFLAGS= fi fi -ac_prog_cxx_stdcxx=no -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 -printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_11=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx11_program -_ACEOF -for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx11" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi - -if test "x$ac_cv_prog_cxx_cxx11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx11" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 - ac_prog_cxx_stdcxx=cxx11 -fi -fi -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 -printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_98+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_98=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx98_program -_ACEOF -for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx98=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx98" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi - -if test "x$ac_cv_prog_cxx_cxx98" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx98" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx98" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 - ac_prog_cxx_stdcxx=cxx98 -fi -fi - ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -6313,12 +5404,11 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -6326,15 +5416,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6345,11 +5431,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -printf "%s\n" "$AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6362,12 +5448,11 @@ if test -z "$AR"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -6375,15 +5460,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6394,11 +5475,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -printf "%s\n" "$ac_ct_AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6410,8 +5491,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -6431,32 +5512,30 @@ fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -printf %s "checking for archiver @FILE support... " >&6; } -if test ${lt_cv_ar_at_file+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. @@ -6464,7 +5543,7 @@ then : { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ @@ -6473,11 +5552,11 @@ then : rm -f conftest.* libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -printf "%s\n" "$lt_cv_ar_at_file" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= @@ -6494,12 +5573,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_STRIP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -6507,15 +5585,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6526,11 +5600,11 @@ fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -printf "%s\n" "$STRIP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6539,12 +5613,11 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_STRIP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else @@ -6552,15 +5625,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6571,11 +5640,11 @@ fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -printf "%s\n" "$ac_ct_STRIP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -6583,8 +5652,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -6603,12 +5672,11 @@ test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -6616,15 +5684,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6635,11 +5699,11 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -printf "%s\n" "$RANLIB" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6648,12 +5712,11 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -6661,15 +5724,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6680,11 +5739,11 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -printf "%s\n" "$ac_ct_RANLIB" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -6692,8 +5751,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -6757,12 +5816,11 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AWK+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -6770,15 +5828,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6789,11 +5843,11 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -printf "%s\n" "$AWK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6829,12 +5883,11 @@ compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -printf %s "checking command to parse $NM output from $compiler object... " >&6; } -if test ${lt_cv_sys_global_symbol_pipe+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -6986,14 +6039,14 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then @@ -7062,7 +6115,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi @@ -7097,11 +6150,11 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -printf "%s\n" "failed" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -printf "%s\n" "ok" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } fi # Response file support. @@ -7147,14 +6200,13 @@ fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -printf %s "checking for sysroot... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. -if test ${with_sysroot+y} -then : +if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; -else $as_nop +else with_sysroot=no fi @@ -7172,25 +6224,24 @@ case $with_sysroot in #( no|'') ;; #( *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -printf "%s\n" "$with_sysroot" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -printf "%s\n" "${lt_sysroot:-no}" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -printf %s "checking for a working dd... " >&6; } -if test ${ac_cv_path_lt_DD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} @@ -7201,15 +6252,10 @@ if test -z "$lt_DD"; then for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in dd - do + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ @@ -7229,16 +6275,15 @@ fi rm -f conftest.i conftest2.i conftest.out fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -printf "%s\n" "$ac_cv_path_lt_DD" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -printf %s "checking how to truncate binary pipes... " >&6; } -if test ${lt_cv_truncate_bin+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= @@ -7249,8 +6294,8 @@ fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -printf "%s\n" "$lt_cv_truncate_bin" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } @@ -7274,8 +6319,7 @@ func_cc_basename () # Check whether --enable-libtool-lock was given. -if test ${enable_libtool_lock+y} -then : +if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi @@ -7291,7 +6335,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) @@ -7311,7 +6355,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in @@ -7349,7 +6393,7 @@ mips64*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in @@ -7390,7 +6434,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) @@ -7453,12 +6497,11 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -printf %s "checking whether the C compiler needs -belf... " >&6; } -if test ${lt_cv_cc_needs_belf+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7469,20 +6512,19 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes -else $as_nop +else lt_cv_cc_needs_belf=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7491,8 +6533,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS @@ -7505,7 +6547,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) @@ -7542,12 +6584,11 @@ need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_MANIFEST_TOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else @@ -7555,15 +6596,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7574,11 +6611,11 @@ fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -printf "%s\n" "$MANIFEST_TOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7587,12 +6624,11 @@ if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else @@ -7600,15 +6636,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7619,11 +6651,11 @@ fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then @@ -7631,8 +6663,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL @@ -7642,12 +6674,11 @@ else fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if test ${lt_cv_path_mainfest_tool+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out @@ -7657,8 +6688,8 @@ else $as_nop fi rm -f conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -7673,12 +6704,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DSYMUTIL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else @@ -7686,15 +6716,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7705,11 +6731,11 @@ fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -printf "%s\n" "$DSYMUTIL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7718,12 +6744,11 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else @@ -7731,15 +6756,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7750,11 +6771,11 @@ fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then @@ -7762,8 +6783,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL @@ -7775,12 +6796,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_NMEDIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else @@ -7788,15 +6808,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7807,11 +6823,11 @@ fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -printf "%s\n" "$NMEDIT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7820,12 +6836,11 @@ if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_NMEDIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else @@ -7833,15 +6848,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7852,11 +6863,11 @@ fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -printf "%s\n" "$ac_ct_NMEDIT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then @@ -7864,8 +6875,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT @@ -7877,12 +6888,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_LIPO+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else @@ -7890,15 +6900,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7909,11 +6915,11 @@ fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -printf "%s\n" "$LIPO" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7922,12 +6928,11 @@ if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_LIPO+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else @@ -7935,15 +6940,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7954,11 +6955,11 @@ fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -printf "%s\n" "$ac_ct_LIPO" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then @@ -7966,8 +6967,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO @@ -7979,12 +6980,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else @@ -7992,15 +6992,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8011,11 +7007,11 @@ fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -printf "%s\n" "$OTOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8024,12 +7020,11 @@ if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else @@ -8037,15 +7032,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8056,11 +7047,11 @@ fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -printf "%s\n" "$ac_ct_OTOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then @@ -8068,8 +7059,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL @@ -8081,12 +7072,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OTOOL64+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else @@ -8094,15 +7084,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8113,11 +7099,11 @@ fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -printf "%s\n" "$OTOOL64" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8126,12 +7112,11 @@ if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OTOOL64+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else @@ -8139,15 +7124,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8158,11 +7139,11 @@ fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -printf "%s\n" "$ac_ct_OTOOL64" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then @@ -8170,8 +7151,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 @@ -8206,12 +7187,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -printf %s "checking for -single_module linker flag... " >&6; } -if test ${lt_cv_apple_cc_single_mod+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override @@ -8240,15 +7220,14 @@ else $as_nop rm -f conftest.* fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -printf %s "checking for -exported_symbols_list linker flag... " >&6; } -if test ${lt_cv_ld_exported_symbols_list+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym @@ -8257,33 +7236,31 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes -else $as_nop +else lt_cv_ld_exported_symbols_list=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -printf %s "checking for -force_load linker flag... " >&6; } -if test ${lt_cv_ld_force_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} @@ -8311,8 +7288,8 @@ _LT_EOF rm -rf conftest.dSYM fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -printf "%s\n" "$lt_cv_ld_force_load" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; @@ -8378,43 +7355,286 @@ func_munge_path_list () esac } -ac_header= ac_cache= -for ac_item in $ac_header_c_list +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes do - if test $ac_cache; then - ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" - if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then - printf "%s\n" "#define $ac_item 1" >> confdefs.h - fi - ac_header= ac_cache= - elif test $ac_header; then - ac_cache=$ac_item - else - ac_header=$ac_item - fi + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : +else + ac_cv_header_stdc=no +fi +rm -f conftest* +fi +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then +$as_echo "#define STDC_HEADERS 1" >>confdefs.h -if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes -then : +fi -printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = xyes -then : - printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF fi +done + func_stripname_cnf () @@ -8440,8 +7660,7 @@ func_stripname_cnf () # Check whether --enable-shared was given. -if test ${enable_shared+y} -then : +if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; @@ -8459,7 +7678,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_shared=yes fi @@ -8472,8 +7691,7 @@ fi # Check whether --enable-static was given. -if test ${enable_static+y} -then : +if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; @@ -8491,7 +7709,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_static=yes fi @@ -8505,8 +7723,7 @@ fi # Check whether --with-pic was given. -if test ${with_pic+y} -then : +if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; @@ -8523,7 +7740,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else pic_mode=default fi @@ -8535,8 +7752,7 @@ fi # Check whether --enable-fast-install was given. -if test ${enable_fast_install+y} -then : +if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; @@ -8554,7 +7770,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_fast_install=yes fi @@ -8568,12 +7784,11 @@ fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -printf %s "checking which variant of shared library versioning to provide... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. -if test ${with_aix_soname+y} -then : +if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; @@ -8582,19 +7797,18 @@ then : ;; esac lt_cv_with_aix_soname=$with_aix_soname -else $as_nop - if test ${lt_cv_with_aix_soname+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -printf "%s\n" "$with_aix_soname" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', @@ -8676,12 +7890,11 @@ if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -printf %s "checking for objdir... " >&6; } -if test ${lt_cv_objdir+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then @@ -8692,15 +7905,17 @@ else fi rmdir .libs 2>/dev/null fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -printf "%s\n" "$lt_cv_objdir" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir -printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF @@ -8746,12 +7961,11 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -printf %s "checking for ${ac_tool_prefix}file... " >&6; } -if test ${lt_cv_path_MAGIC_CMD+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8800,11 +8014,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -printf "%s\n" "$MAGIC_CMD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8813,12 +8027,11 @@ fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -printf %s "checking for file... " >&6; } -if test ${lt_cv_path_MAGIC_CMD+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8867,11 +8080,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -printf "%s\n" "$MAGIC_CMD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8956,12 +8169,11 @@ if test yes = "$GCC"; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test ${lt_cv_prog_compiler_rtti_exceptions+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -8992,8 +8204,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -9350,28 +8562,26 @@ case $host_os in ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -printf %s "checking for $compiler option to produce PIC... " >&6; } -if test ${lt_cv_prog_compiler_pic+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test ${lt_cv_prog_compiler_pic_works+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -9402,8 +8612,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in @@ -9431,12 +8641,11 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test ${lt_cv_prog_compiler_static_works+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -9460,8 +8669,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : @@ -9475,12 +8684,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -9523,20 +8731,19 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -9579,8 +8786,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } @@ -9588,19 +8795,19 @@ printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -printf %s "checking if we can lock with hard links... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -printf "%s\n" "$hard_links" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test no = "$hard_links"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -9612,8 +8819,8 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -10168,23 +9375,21 @@ _LT_EOF if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath_+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10199,7 +9404,7 @@ then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -10223,23 +9428,21 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath_+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10254,7 +9457,7 @@ then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -10505,12 +9708,11 @@ fi # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -printf %s "checking if $CC understands -b... " >&6; } -if test ${lt_cv_prog_compiler__b+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" @@ -10534,8 +9736,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' @@ -10575,30 +9777,28 @@ fi # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if test ${lt_cv_irix_exported_symbol+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes -else $as_nop +else lt_cv_irix_exported_symbol=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi @@ -10878,8 +10078,8 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -printf "%s\n" "$ld_shlibs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -10915,19 +10115,18 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -printf %s "checking whether -lc should be explicitly linked in... " >&6; } -if test ${lt_cv_archive_cmds_need_lc+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -10945,7 +10144,7 @@ else $as_nop if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no @@ -10959,8 +10158,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac @@ -11119,8 +10318,8 @@ esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -printf %s "checking dynamic linker characteristics... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in @@ -11681,10 +10880,9 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if test ${lt_cv_shlibpath_overrides_runpath+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -11694,21 +10892,19 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null -then : +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -11940,8 +11136,8 @@ uts4*) dynamic_linker=no ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -printf "%s\n" "$dynamic_linker" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -12062,8 +11258,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -printf %s "checking how to hardcode library paths into programs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -12087,8 +11283,8 @@ else # directories. hardcode_action=unsupported fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -printf "%s\n" "$hardcode_action" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then @@ -12132,12 +11328,11 @@ else darwin*) # if libdl is installed we need to link against it - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12146,31 +11341,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop +else lt_cv_dlopen=dyld lt_cv_dlopen_libs= @@ -12190,16 +11386,14 @@ fi *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes -then : +if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -printf %s "checking for shl_load in -ldld... " >&6; } -if test ${ac_cv_lib_dld_shl_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12208,42 +11402,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char shl_load (); int -main (void) +main () { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes -else $as_nop +else ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else $as_nop +else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes -then : +if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12252,37 +11445,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -printf %s "checking for dlopen in -lsvld... " >&6; } -if test ${ac_cv_lib_svld_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12291,37 +11484,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes -else $as_nop +else ac_cv_lib_svld_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -printf %s "checking for dld_link in -ldld... " >&6; } -if test ${ac_cv_lib_dld_dld_link+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12330,29 +11523,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dld_link (); int -main (void) +main () { return dld_link (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes -else $as_nop +else ac_cv_lib_dld_dld_link=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -12391,12 +11585,11 @@ fi save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -printf %s "checking whether a program can dlopen itself... " >&6; } -if test ${lt_cv_dlopen_self+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else @@ -12475,7 +11668,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -12493,17 +11686,16 @@ rm -fr conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -printf "%s\n" "$lt_cv_dlopen_self" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -printf %s "checking whether a statically linked program can dlopen itself... " >&6; } -if test ${lt_cv_dlopen_self_static+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else @@ -12582,7 +11774,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -12600,8 +11792,8 @@ rm -fr conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS @@ -12639,13 +11831,13 @@ fi striplib= old_striplib= -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -printf %s "checking whether stripping libraries is possible... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in @@ -12653,16 +11845,16 @@ else if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi ;; *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac fi @@ -12679,13 +11871,13 @@ fi # Report what library types will actually be built - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -printf %s "checking if libtool supports shared libraries... " >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -printf "%s\n" "$can_build_shared" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -printf %s "checking whether to build shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -12709,15 +11901,15 @@ printf %s "checking whether to build shared libraries... " >&6; } fi ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -printf "%s\n" "$enable_shared" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -printf %s "checking whether to build static libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -printf "%s\n" "$enable_static" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } @@ -12739,32 +11931,36 @@ ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -printf %s "checking how to run the C++ preprocessor... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then - if test ${ac_cv_prog_CXXCPP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CXX needs to be expanded - for CXXCPP in "$CXX -E" cpp /lib/cpp + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef __STDC__ +# include +#else +# include +#endif Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : -else $as_nop +else # Broken: fails on valid input. continue fi @@ -12776,11 +11972,10 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue -else $as_nop +else # Passes both tests. ac_preproc_ok=: break @@ -12790,8 +11985,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : +if $ac_preproc_ok; then : break fi @@ -12803,24 +11997,29 @@ fi else ac_cv_prog_CXXCPP=$CXXCPP fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -printf "%s\n" "$CXXCPP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef __STDC__ +# include +#else +# include +#endif Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : -else $as_nop +else # Broken: fails on valid input. continue fi @@ -12832,11 +12031,10 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue -else $as_nop +else # Passes both tests. ac_preproc_ok=: break @@ -12846,12 +12044,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : +if $ac_preproc_ok; then : -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -12987,18 +12184,17 @@ cc_basename=$func_cc_basename_result # Check whether --with-gnu-ld was given. -if test ${with_gnu_ld+y} -then : +if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop +else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -printf %s "checking for ld used by $CC... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -13027,16 +12223,15 @@ printf %s "checking for ld used by $CC... " >&6; } ;; esac elif test yes = "$with_gnu_ld"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -printf %s "checking for GNU ld... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -printf %s "checking for non-GNU ld... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } fi -if test ${lt_cv_path_LD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -13065,19 +12260,18 @@ fi LD=$lt_cv_path_LD if test -n "$LD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -printf "%s\n" "$LD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -printf %s "checking if the linker ($LD) is GNU ld... " >&6; } -if test ${lt_cv_prog_gnu_ld+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -13143,8 +12337,8 @@ with_gnu_ld=$lt_cv_prog_gnu_ld fi # PORTME: fill in a description of your system's C++ link characteristics - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) @@ -13282,23 +12476,21 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath__CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -13313,7 +12505,7 @@ then : lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -13338,23 +12530,21 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath__CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -13369,7 +12559,7 @@ then : lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -14220,8 +13410,8 @@ fi ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -printf "%s\n" "$ld_shlibs_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX @@ -14259,7 +13449,7 @@ esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. @@ -14740,28 +13930,26 @@ case $host_os in ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -printf %s "checking for $compiler option to produce PIC... " >&6; } -if test ${lt_cv_prog_compiler_pic_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if test ${lt_cv_prog_compiler_pic_works_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -14792,8 +13980,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in @@ -14815,12 +14003,11 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test ${lt_cv_prog_compiler_static_works_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -14844,8 +14031,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : @@ -14856,12 +14043,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -14904,17 +14090,16 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -14957,8 +14142,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } @@ -14966,19 +14151,19 @@ printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -printf %s "checking if we can lock with hard links... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -printf "%s\n" "$hard_links" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test no = "$hard_links"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -14987,8 +14172,8 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' @@ -15027,8 +14212,8 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -printf "%s\n" "$ld_shlibs_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld @@ -15055,19 +14240,18 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -printf %s "checking whether -lc should be explicitly linked in... " >&6; } -if test ${lt_cv_archive_cmds_need_lc_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -15085,7 +14269,7 @@ else $as_nop if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no @@ -15099,8 +14283,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac @@ -15169,8 +14353,8 @@ esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -printf %s "checking dynamic linker characteristics... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' @@ -15636,2040 +14820,2591 @@ linux*android*) shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec_CXX='-L$libdir' - ;; +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac - # Some binutils ld are patched to set DT_RUNPATH - if test ${lt_cv_shlibpath_overrides_runpath+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + done +IFS=$as_save_IFS -int -main (void) -{ +rm -rf conftest.one conftest.two conftest.dir - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null -then : - lt_cv_shlibpath_overrides_runpath=yes -fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; -rdos*) - dynamic_linker=no - ;; -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' + + if test -z "$CTAGS"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + +# Check whether --with-ctags was given. +if test "${with_ctags+set}" = set; then : + withval=$with_ctags; + if test "$withval" != yes && test "$withval" != no; then : + + CTAGS="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } + +else + + CTAGS="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -*) - dynamic_linker=no ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -printf "%s\n" "$dynamic_linker" >&6; } -test no = "$dynamic_linker" && can_build_shared=no +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec + fi -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec + + + + + +if test x${CTAGS} = x; then : + as_fn_error $? "Required program ctags was not found" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec +SO_EXT=$shrext_cmds -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH +# +# System/Compiler Features +# + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++14 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx14+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + } + namespace test_final_override + { + struct Base + { + virtual void f() {} + }; + struct Derived : public Base + { + virtual void f() override {} + }; + } + namespace test_double_right_angle_brackets + { + template < typename T > + struct check {}; + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + } + namespace test_decltype + { + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + } + namespace test_type_deduction + { + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + template < typename T > + struct is_same + { + static const bool value = true; + }; + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + } + namespace test_noexcept + { + int f() { return 0; } + int g() noexcept { return 0; } + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + } + namespace test_constexpr + { + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + } + namespace test_rvalue_references + { + template < int N > + struct answer + { + static constexpr int value = N; + }; + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + } + namespace test_uniform_initialization + { + struct test + { + static const int zero {}; + static const int one {1}; + }; + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + } + namespace test_lambdas + { + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -printf %s "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test yes = "$hardcode_automatic_CXX"; then + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } - # We can hardcode non-existent directories. - if test no != "$hardcode_direct_CXX" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && - test no != "$hardcode_minus_L_CXX"; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -printf "%s\n" "$hardcode_action_CXX" >&6; } + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } -if test relink = "$hardcode_action_CXX" || - test yes = "$inherit_rpath_CXX"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi + } + namespace test_variadic_templates + { + template + struct sum; + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + } - fi # test -n "$compiler" + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test yes != "$_lt_caught_CXX_error" + struct foo {}; -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template + using member = typename T::member_type; + template + void func(...) {} + template + void func(member*) {} + void test(); + void test() { func(0); } + } +} // namespace cxx11 +#endif // __cplusplus >= 201103L +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. +#ifndef __cplusplus +#error "This is not a C++ compiler" +#elif __cplusplus < 201402L - ac_config_commands="$ac_config_commands libtool" +#error "This is not a C++14 compiler" +#else +namespace cxx14 +{ + namespace test_polymorphic_lambdas + { -# Only expand once: + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + namespace test_binary_literals + { -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + } -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + namespace test_generalized_constexpr + { -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_lambda_init_capture + { + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_digit_separators + { + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_return_type_deduction + { + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } - test -n "$ac_ct_CC" && break -done + } - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi +} // namespace cxx14 -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +#endif // __cplusplus >= 201402L -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx14=yes else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi + ax_cv_cxx_compile_cxx14=no fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx14" >&5 +$as_echo "$ax_cv_cxx_compile_cxx14" >&6; } + if test x$ax_cv_cxx_compile_cxx14 = xyes; then + ac_success=yes fi -else - CC="$ac_cv_prog_CC" -fi -fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++14 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -# Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion -version; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif +#ifndef __cplusplus - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu +#error "This is not a C++ compiler" -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu +#elif __cplusplus < 201103L -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+y} -ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +#error "This is not a C++11 compiler" -int -main (void) +#else + +namespace cxx11 { - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_static_assert + { -int -main (void) -{ + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : + } -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_final_override + { -int -main (void) -{ + struct Base + { + virtual void f() {} + }; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi + struct Derived : public Base + { + virtual void f() override {} + }; -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi + } -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 -fi -fi + namespace test_decltype + { -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_type_deduction + { + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + template < typename T > + struct is_same + { + static const bool value = true; + }; -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -printf "%s\n" "$ac_ct_CXX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + } - test -n "$ac_ct_CXX" && break -done + namespace test_noexcept + { - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi + int f() { return 0; } + int g() noexcept { return 0; } - fi -fi -# Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 -printf %s "checking whether the compiler supports GNU C++... " >&6; } -if test ${ac_cv_cxx_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + } -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif + namespace test_constexpr + { - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+y} -ac_save_CXXFLAGS=$CXXFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -printf %s "checking whether $CXX accepts -g... " >&6; } -if test ${ac_cv_prog_cxx_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); -int -main (void) -{ + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_g=yes -else $as_nop - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_rvalue_references + { -int -main (void) -{ + template < int N > + struct answer + { + static constexpr int value = N; + }; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } -else $as_nop - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } -int -main (void) -{ + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } -if test $ac_test_CXXFLAGS; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_prog_cxx_stdcxx=no -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 -printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_11=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx11_program -_ACEOF -for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx11" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi - -if test "x$ac_cv_prog_cxx_cxx11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx11" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 - ac_prog_cxx_stdcxx=cxx11 -fi -fi -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 -printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_98+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_98=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx98_program -_ACEOF -for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx98=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx98" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi + namespace test_uniform_initialization + { -if test "x$ac_cv_prog_cxx_cxx98" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx98" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx98" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 - ac_prog_cxx_stdcxx=cxx98 -fi -fi + struct test + { + static const int zero {}; + static const int one {1}; + }; -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AWK+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -printf "%s\n" "$AWK" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_lambdas + { + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } - test -n "$AWK" && break -done + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -printf %s "checking for a sed that does not truncate output... " >&6; } -if test ${ac_cv_path_SED+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in sed gsed - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi + } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -printf "%s\n" "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed + namespace test_variadic_templates + { + template + struct sum; - # Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -printf %s "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test ${ac_cv_path_install+y} -then : - printf %s "(cached) " >&6 -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - # Account for fact that we put trailing slashes in our PATH walk. -case $as_dir in #(( - ./ | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; - done -IFS=$as_save_IFS + template <> + struct sum<> + { + static constexpr auto value = 0; + }; -rm -rf conftest.one conftest.two conftest.dir + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); -fi - if test ${ac_cv_path_install+y}; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -printf "%s\n" "$INSTALL" >&6; } + } -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + struct foo {}; -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + template + using member = typename T::member_type; + template + void func(...) {} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -printf %s "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -printf "%s\n" "no, using $LN_S" >&6; } -fi + template + void func(member*) {} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval test \${ac_cv_prog_make_${ac_make}_set+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - SET_MAKE= -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi + void test(); + void test() { func(0); } + } +} // namespace cxx11 +#endif // __cplusplus >= 201103L +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. +#ifndef __cplusplus +#error "This is not a C++ compiler" - if test -z "$CTAGS" -then : +#elif __cplusplus < 201402L - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 -printf %s "checking whether ctags executable path has been provided... " >&6; } +#error "This is not a C++14 compiler" -# Check whether --with-ctags was given. -if test ${with_ctags+y} -then : - withval=$with_ctags; - if test "$withval" != yes && test "$withval" != no -then : +#else - CTAGS="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } +namespace cxx14 +{ -else $as_nop + namespace test_polymorphic_lambdas + { - CTAGS="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CTAGS+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } - ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_binary_literals + { + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + } -fi + namespace test_generalized_constexpr + { -fi + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } -else $as_nop + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CTAGS+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } - ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_lambda_init_capture + { + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + } -fi + namespace test_digit_separators + { + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); -fi + } + namespace test_return_type_deduction + { + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } -if test x${CTAGS} = x -then : - as_fn_error $? "Required program ctags was not found" "$LINENO" 5 -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -printf %s "checking whether ${CTAGS} is exuberant... " >&6; } -if ! ${CTAGS} --version | grep -q Exuberant -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi + } -SO_EXT=$shrext_cmds +} // namespace cxx14 +#endif // __cplusplus >= 201402L -# -# System/Compiler Features -# -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -printf %s "checking for inline... " >&6; } -if test ${ac_cv_c_inline+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo (void) {return 0; } -$ac_kw foo_t foo (void) {return 0; } -#endif _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_c_inline=$ac_kw +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -printf "%s\n" "$ac_cv_c_inline" >&6; } - -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac - - ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no + if test x$ax_cxx_compile_cxx14_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX14=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 +$as_echo "$as_me: No compiler with C++14 support was found" >&6;} + else + HAVE_CXX14=1 + +$as_echo "#define HAVE_CXX14 1" >>confdefs.h + fi - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 -printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +if test x$HAVE_CXX14 != x1; then : + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17705,13 +17440,11 @@ namespace cxx11 struct Base { - virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { - virtual ~Derived() override {} virtual void f() override {} }; @@ -17959,200 +17692,31 @@ namespace cxx11 - -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201402L - -#error "This is not a C++14 compiler" - -#else - -namespace cxx14 -{ - - namespace test_polymorphic_lambdas - { - - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } - - } - - namespace test_binary_literals - { - - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); - - } - - namespace test_generalized_constexpr - { - - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); - - } - - namespace test_lambda_init_capture - { - - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } - - } - - namespace test_digit_separators - { - - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); - - } - - namespace test_return_type_deduction - { - - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } - - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; - - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; - - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } - - } - -} // namespace cxx14 - -#endif // __cplusplus >= 201402L - - - _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - eval $cachevar=yes -else $as_nop - eval $cachevar=no +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - if test x$ax_cxx_compile_cxx14_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes fi - if test x$ac_success = xno; then - HAVE_CXX14=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} - else - HAVE_CXX14=1 - -printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h - - fi - - -if test x$HAVE_CXX14 != x1 -then : - ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - - if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else $as_nop + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18191,13 +17755,11 @@ namespace cxx11 struct Base { - virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { - virtual ~Derived() override {} virtual void f() override {} }; @@ -18446,18 +18008,17 @@ namespace cxx11 _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : eval $cachevar=yes -else $as_nop +else eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then @@ -18485,281 +18046,287 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test x$ac_success = xno; then HAVE_CXX11=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 -printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h +$as_echo "#define HAVE_CXX11 1" >>confdefs.h fi + fi -ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes -then : - printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h +for ac_func in memset +do : + ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMSET 1 +_ACEOF fi +done -ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes -then : - printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h +for ac_func in rint +do : + ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RINT 1 +_ACEOF fi +done -ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes -then : - printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h +for ac_func in socket +do : + ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKET 1 +_ACEOF fi +done - - for ac_func in recvmsg +for ac_func in recvmsg do : ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" -if test "x$ac_cv_func_recvmsg" = xyes -then : - printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h +if test "x$ac_cv_func_recvmsg" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RECVMSG 1 +_ACEOF HAVE_RECVMSG=1 -else $as_nop +else HAVE_RECVMSG=0 fi - done -ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes -then : - printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h - -fi -ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes -then : - printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h +for ac_func in sqrt +do : + ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SQRT 1 +_ACEOF fi +done -ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes -then : - printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h +for ac_func in strerror +do : + ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR 1 +_ACEOF fi +done -ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes -then : - printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h + +for ac_header in arpa/inet.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ARPA_INET_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes -then : - printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h +done + +for ac_header in netdb.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETDB_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h +done + +for ac_header in netinet/in.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETINET_IN_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h +done + +for ac_header in sys/file.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_FILE_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h +done -fi +for ac_header in sys/ioctl.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_IOCTL_H 1 +_ACEOF -ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes -then : +fi -printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h +done +for ac_header in sys/socket.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_SOCKET_H 1 +_ACEOF fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -printf %s "checking for stdbool.h that conforms to C99... " >&6; } -if test ${ac_cv_header_stdbool_h+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - - #ifndef __bool_true_false_are_defined - #error "__bool_true_false_are_defined is not defined" - #endif - char a[__bool_true_false_are_defined == 1 ? 1 : -1]; +done - /* Regardless of whether this is C++ or "_Bool" is a - valid type name, "true" and "false" should be usable - in #if expressions and integer constant expressions, - and "bool" should be a valid type name. */ +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - #if !true - #error "'true' is not true" + #include + #ifndef bool + "error: bool is not defined" #endif - #if true != 1 - #error "'true' is not equal to 1" + #ifndef false + "error: false is not defined" #endif - char b[true == 1 ? 1 : -1]; - char c[true]; - #if false - #error "'false' is not false" + "error: false is not 0" #endif - #if false != 0 - #error "'false' is not equal to 0" + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" #endif - char d[false == 0 ? 1 : -1]; - - enum { e = false, f = true, g = false * true, h = true * 256 }; - - char i[(bool) 0.5 == true ? 1 : -1]; - char j[(bool) 0.0 == false ? 1 : -1]; - char k[sizeof (bool) > 0 ? 1 : -1]; - - struct sb { bool s: 1; bool t; } s; - char l[sizeof s.t > 0 ? 1 : -1]; + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - bool m[h]; - char n[sizeof m == h * sizeof m[0] ? 1 : -1]; - char o[-1 - (bool) 0 < 0 ? 1 : -1]; + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See - https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ - bool p = true; - bool *pp = &p; - - /* C 1999 specifies that bool, true, and false are to be - macros, but C++ 2011 and later overrule this. */ - #if __cplusplus < 201103 - #ifndef bool - #error "bool is not defined" - #endif - #ifndef false - #error "false is not defined" - #endif - #ifndef true - #error "true is not defined" - #endif - #endif - - /* If _Bool is available, repeat with it all the tests - above that used bool. */ - #ifdef HAVE__BOOL - struct sB { _Bool s: 1; _Bool t; } t; - - char q[(_Bool) 0.5 == true ? 1 : -1]; - char r[(_Bool) 0.0 == false ? 1 : -1]; - char u[sizeof (_Bool) > 0 ? 1 : -1]; - char v[sizeof t.t > 0 ? 1 : -1]; - - _Bool w[h]; - char x[sizeof m == h * sizeof m[0] ? 1 : -1]; - char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; - _Bool z = true; - _Bool *pz = &p; - #endif + _Bool q = true; + _Bool *pq = &q; int -main (void) +main () { - bool ps = &s; - *pp |= p; - *pp |= ! p; - - #ifdef HAVE__BOOL - _Bool pt = &t; - *pz |= z; - *pz |= ! z; - #endif - - /* Refer to every declared value, so they cannot be - discarded as unused. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k - + !l + !m + !n + !o + !p + !pp + !ps - #ifdef HAVE__BOOL - + !q + !r + !u + !v + !w + !x + !y + !z + !pt - #endif - ); + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes -else $as_nop +else ac_cv_header_stdbool_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -printf %s "checking for GNU libc compatible malloc... " >&6; } -if test ${ac_cv_func_malloc_0_nonnull+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : - case "$host_os" in # (( - # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ - | hpux* | solaris* | cygwin* | mingw* | msys* ) - ac_cv_func_malloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_malloc_0_nonnull=no ;; - esac -else $as_nop +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + +for ac_header in stdlib.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif int -main (void) +main () { -void *p = malloc (0); - int result = !p; - free (p); - return result; +return ! malloc (0); ; return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO" -then : +if ac_fn_cxx_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes -else $as_nop +else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18767,15 +18334,14 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : -printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h -else $as_nop - printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; @@ -18784,7 +18350,7 @@ else $as_nop esac -printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h +$as_echo "#define malloc rpl_malloc" >>confdefs.h fi @@ -18794,12 +18360,11 @@ HAVE_OPENMP=0 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 -printf %s "checking for OpenMP flag of C++ compiler... " >&6; } -if test ${ax_cv_cxx_openmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } +if ${ax_cv_cxx_openmp+:} false; then : + $as_echo_n "(cached) " >&6 +else saveCXXFLAGS=$CXXFLAGS ax_cv_cxx_openmp=unknown # Flags to try: -fopenmp (gcc), -mp (SGI & PGI), @@ -18840,18 +18405,17 @@ main() } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ax_cv_cxx_openmp=$ax_openmp_flag; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done CXXFLAGS=$saveCXXFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 -printf "%s\n" "$ax_cv_cxx_openmp" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +$as_echo "$ax_cv_cxx_openmp" >&6; } if test "x$ax_cv_cxx_openmp" = "xunknown"; then : else @@ -18859,28 +18423,27 @@ else OPENMP_CXXFLAGS=$ax_cv_cxx_openmp fi -printf "%s\n" "#define HAVE_OPENMP 1" >>confdefs.h +$as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi -if test x$OPENMP_CXXFLAGS != x -then : +if test x$OPENMP_CXXFLAGS != x; then : HAVE_OPENMP=1 fi -if test x$HAVE_OPENMP != x1 -then : +if test x$HAVE_OPENMP != x1; then : -else $as_nop +else CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes -then : +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : -printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_PTRDIFF_T 1 +_ACEOF fi @@ -18890,7 +18453,9 @@ case $ac_cv_c_int16_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int16_t $ac_cv_c_int16_t +_ACEOF ;; esac @@ -18899,7 +18464,9 @@ case $ac_cv_c_int32_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int32_t $ac_cv_c_int32_t +_ACEOF ;; esac @@ -18908,7 +18475,9 @@ case $ac_cv_c_int64_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int64_t $ac_cv_c_int64_t +_ACEOF ;; esac @@ -18917,64 +18486,42 @@ case $ac_cv_c_int8_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int8_t $ac_cv_c_int8_t +_ACEOF ;; esac +ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : - ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default -" -if test "x$ac_cv_type_pid_t" = xyes -then : - -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if defined _WIN64 && !defined __CYGWIN__ - LLP64 - #endif - -int -main (void) -{ - - ; - return 0; -} +else +cat >>confdefs.h <<_ACEOF +#define pid_t int _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - fi - ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes -then : +if test "x$ac_cv_type_size_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define size_t unsigned int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF fi ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes -then : +if test "x$ac_cv_type_ssize_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define ssize_t int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define ssize_t int +_ACEOF fi @@ -18984,7 +18531,9 @@ case $ac_cv_c_uint16_t in #( *) -printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint16_t $ac_cv_c_uint16_t +_ACEOF ;; esac @@ -18993,10 +18542,12 @@ case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) -printf "%s\n" "#define _UINT32_T 1" >>confdefs.h +$as_echo "#define _UINT32_T 1" >>confdefs.h -printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint32_t $ac_cv_c_uint32_t +_ACEOF ;; esac @@ -19005,10 +18556,12 @@ case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) -printf "%s\n" "#define _UINT64_T 1" >>confdefs.h +$as_echo "#define _UINT64_T 1" >>confdefs.h -printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint64_t $ac_cv_c_uint64_t +_ACEOF ;; esac @@ -19017,10 +18570,12 @@ case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) -printf "%s\n" "#define _UINT8_T 1" >>confdefs.h +$as_echo "#define _UINT8_T 1" >>confdefs.h -printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint8_t $ac_cv_c_uint8_t +_ACEOF ;; esac @@ -19030,53 +18585,52 @@ printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h # # Check whether --enable-numa was given. -if test ${enable_numa+y} -then : +if test "${enable_numa+set}" = set; then : enableval=$enable_numa; enable_numa=no -else $as_nop +else enable_numa=yes fi HAVE_NUMA=0 -if test x$enable_numa != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } -if test ${ac_cv_lib_numa_numa_node_of_cpu+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test x$enable_numa != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lnuma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -namespace conftest { - extern "C" int numa_node_of_cpu (); -} +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char numa_node_of_cpu (); int -main (void) +main () { -return conftest::numa_node_of_cpu (); +return numa_node_of_cpu (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_numa_numa_node_of_cpu=yes -else $as_nop +else ac_cv_lib_numa_numa_node_of_cpu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : HAVE_NUMA=1 LIBS="$LIBS -lnuma" @@ -19089,53 +18643,52 @@ fi # # Check whether --enable-hwloc was given. -if test ${enable_hwloc+y} -then : +if test "${enable_hwloc+set}" = set; then : enableval=$enable_hwloc; enable_hwloc=no -else $as_nop +else enable_hwloc=yes fi HAVE_HWLOC=0 -if test x$enable_hwloc != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } -if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test x$enable_hwloc != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } +if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lhwloc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -namespace conftest { - extern "C" int hwloc_topology_init (); -} +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char hwloc_topology_init (); int -main (void) +main () { -return conftest::hwloc_topology_init (); +return hwloc_topology_init (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_hwloc_hwloc_topology_init=yes -else $as_nop +else ac_cv_lib_hwloc_hwloc_topology_init=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : HAVE_HWLOC=1 LIBS="$LIBS -lhwloc" @@ -19148,53 +18701,52 @@ fi # # Check whether --enable-vma was given. -if test ${enable_vma+y} -then : +if test "${enable_vma+set}" = set; then : enableval=$enable_vma; enable_vma=yes -else $as_nop +else enable_vma=no fi HAVE_VMA=0 -if test x$enable_vma != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } -if test ${ac_cv_lib_vma_recvfrom_zcopy+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test x$enable_vma != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } +if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lvma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -namespace conftest { - extern "C" int recvfrom_zcopy (); -} +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char recvfrom_zcopy (); int -main (void) +main () { -return conftest::recvfrom_zcopy (); +return recvfrom_zcopy (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_vma_recvfrom_zcopy=yes -else $as_nop +else ac_cv_lib_vma_recvfrom_zcopy=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : HAVE_VMA=1 LIBS="$LIBS -lvma" @@ -19218,10 +18770,9 @@ fi # Check whether --with-cuda_home was given. -if test ${with_cuda_home+y} -then : +if test "${with_cuda_home+set}" = set; then : withval=$with_cuda_home; -else $as_nop +else with_cuda_home=/usr/local/cuda fi @@ -19229,10 +18780,9 @@ fi # Check whether --enable-cuda was given. -if test ${enable_cuda+y} -then : +if test "${enable_cuda+set}" = set; then : enableval=$enable_cuda; enable_cuda=no -else $as_nop +else enable_cuda=yes fi @@ -19245,12 +18795,11 @@ fi # Extract the first word of "nvcc", so it can be a program name with args. set dummy nvcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_NVCC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVCC+:} false; then : + $as_echo_n "(cached) " >&6 +else case $NVCC in [\\/]* | ?:[\\/]*) ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. @@ -19261,15 +18810,11 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19282,22 +18827,21 @@ esac fi NVCC=$ac_cv_path_NVCC if test -n "$NVCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -printf "%s\n" "$NVCC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "nvprune", so it can be a program name with args. set dummy nvprune; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_NVPRUNE+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVPRUNE+:} false; then : + $as_echo_n "(cached) " >&6 +else case $NVPRUNE in [\\/]* | ?:[\\/]*) ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. @@ -19308,15 +18852,11 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19329,22 +18869,21 @@ esac fi NVPRUNE=$ac_cv_path_NVPRUNE if test -n "$NVPRUNE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -printf "%s\n" "$NVPRUNE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "cuobjdump", so it can be a program name with args. set dummy cuobjdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CUOBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUOBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $CUOBJDUMP in [\\/]* | ?:[\\/]*) ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. @@ -19355,15 +18894,11 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19376,19 +18911,19 @@ esac fi CUOBJDUMP=$ac_cv_path_CUOBJDUMP if test -n "$CUOBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -printf "%s\n" "$CUOBJDUMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi if test "$HAVE_CUDA" = "1"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 -printf %s "checking for a working CUDA installation... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +$as_echo_n "checking for a working CUDA installation... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -19402,21 +18937,20 @@ printf %s "checking for a working CUDA installation... " >&6; } #include #include int -main (void) +main () { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" @@ -19430,28 +18964,27 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext #include #include int -main (void) +main () { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +if ac_fn_cxx_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } HAVE_CUDA=0 fi @@ -19463,10 +18996,9 @@ printf "%s\n" "no" >&6; } # Check whether --with-nvcc_flags was given. -if test ${with_nvcc_flags+y} -then : +if test "${with_nvcc_flags+set}" = set; then : withval=$with_nvcc_flags; -else $as_nop +else with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi @@ -19483,17 +19015,16 @@ fi # Check whether --with-gpu_archs was given. -if test ${with_gpu_archs+y} -then : +if test "${with_gpu_archs+set}" = set; then : withval=$with_gpu_archs; -else $as_nop +else with_gpu_archs='auto' fi if test "$HAVE_CUDA" = "1"; then if test "$with_gpu_archs" = "auto"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 -printf %s "checking which CUDA architectures to target... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +$as_echo_n "checking which CUDA architectures to target... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -19502,13 +19033,12 @@ printf %s "checking which CUDA architectures to target... " >&6; } LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' - if test "$cross_compiling" = yes -then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19519,7 +19049,7 @@ else $as_nop #include #include int -main (void) +main () { std::set archs; @@ -19546,10 +19076,7 @@ main (void) arch += minor; if( archs.count(arch) == 0 ) { archs.insert(arch); - if( dev > 0 ) { - fh << " "; - } - fh << arch; + fh << " " << arch; } } fh.close(); @@ -19557,13 +19084,12 @@ main (void) return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO" -then : +if ac_fn_cxx_try_run "$LINENO"; then : GPU_ARCHS=`cat confarchs.out` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 -printf "%s\n" "$GPU_ARCHS" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +$as_echo "$GPU_ARCHS" >&6; } +else as_fn_error $? "failed to find any" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19583,10 +19109,9 @@ fi # Check whether --with-shared_mem was given. -if test ${with_shared_mem+y} -then : +if test "${with_shared_mem+set}" = set; then : withval=$with_shared_mem; -else $as_nop +else with_shared_mem=16384 fi @@ -19599,10 +19124,9 @@ GPU_SHAREDMEM=$with_shared_mem # Check whether --with-alignment was given. -if test ${with_alignment+y} -then : +if test "${with_alignment+set}" = set; then : withval=$with_alignment; -else $as_nop +else with_alignment=4096 fi @@ -19618,23 +19142,21 @@ ALIGNMENT=$with_alignment # Check whether --with-logging_dir was given. -if test ${with_logging_dir+y} -then : +if test "${with_logging_dir+set}" = set; then : withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir -else $as_nop +else HAVE_TMPFS=/tmp fi if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 -printf %s "checking for /dev/shm... " >&6; } -if test ${ac_cv_file__dev_shm+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +$as_echo_n "checking for /dev/shm... " >&6; } +if ${ac_cv_file__dev_shm+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/shm"; then @@ -19643,10 +19165,9 @@ else ac_cv_file__dev_shm=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 -printf "%s\n" "$ac_cv_file__dev_shm" >&6; } -if test "x$ac_cv_file__dev_shm" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +$as_echo "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes; then : HAVE_TMPFS=/dev/shm/bifrost fi @@ -19654,12 +19175,11 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 -printf %s "checking for /Volumes/RAMDisk... " >&6; } -if test ${ac_cv_file__Volumes_RAMDisk+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +$as_echo_n "checking for /Volumes/RAMDisk... " >&6; } +if ${ac_cv_file__Volumes_RAMDisk+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/Volumes/RAMDisk"; then @@ -19668,10 +19188,9 @@ else ac_cv_file__Volumes_RAMDisk=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 -printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } -if test "x$ac_cv_file__Volumes_RAMDisk" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +$as_echo "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes; then : HAVE_TMPFS=/Volumes/RAMDisk/bifrost fi @@ -19679,12 +19198,11 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 -printf %s "checking for /tmp... " >&6; } -if test ${ac_cv_file__tmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +$as_echo_n "checking for /tmp... " >&6; } +if ${ac_cv_file__tmp+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/tmp"; then @@ -19693,16 +19211,15 @@ else ac_cv_file__tmp=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 -printf "%s\n" "$ac_cv_file__tmp" >&6; } -if test "x$ac_cv_file__tmp" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +$as_echo "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes; then : HAVE_TMPFS=/tmp fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 -printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +$as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} HAVE_TMPFS=/tmp/bifrost fi @@ -19713,17 +19230,15 @@ printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for lo # # Check whether --enable-debug was given. -if test ${enable_debug+y} -then : +if test "${enable_debug+set}" = set; then : enableval=$enable_debug; enable_debug=yes -else $as_nop +else enable_debug=no fi HAVE_DEBUG=0 -if test x$enable_debug != xno -then : +if test x$enable_debug != xno; then : HAVE_DEBUG=1 CXXFLAGS="$CXXFLAGS -g" @@ -19731,49 +19246,43 @@ then : fi # Check whether --enable-trace was given. -if test ${enable_trace+y} -then : +if test "${enable_trace+set}" = set; then : enableval=$enable_trace; enable_trace=yes -else $as_nop +else enable_trace=no fi HAVE_TRACE=0 -if test x$enable_trace != xno -then : +if test x$enable_trace != xno; then : HAVE_TRACE=1 fi # Check whether --enable-native_arch was given. -if test ${enable_native_arch+y} -then : +if test "${enable_native_arch+set}" = set; then : enableval=$enable_native_arch; enable_native_arch=no -else $as_nop +else enable_native_arch=yes fi -if test x$enable_native_arch != xyes -then : +if test x$enable_native_arch != xyes; then : -else $as_nop +else CXXFLAGS="$CXXFLAGS -march=native" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" fi # Check whether --enable-cuda_debug was given. -if test ${enable_cuda_debug+y} -then : +if test "${enable_cuda_debug+set}" = set; then : enableval=$enable_cuda_debug; enable_cuda_debug=yes -else $as_nop +else enable_cuda_debug=no fi HAVE_CUDA_DEBUG=0 -if test x$enable_cuda_debug != xno -then : +if test x$enable_cuda_debug != xno; then : HAVE_CUDA_DEBUG=1 NVCCFLAGS="$NVCCFLAGS -G" @@ -19784,17 +19293,15 @@ fi # # Check whether --enable-python was given. -if test ${enable_python+y} -then : +if test "${enable_python+set}" = set; then : enableval=$enable_python; enable_python=no -else $as_nop +else enable_python=yes fi HAVE_PYTHON=0 -if test x$enable_python != xno -then : +if test x$enable_python != xno; then : @@ -19805,39 +19312,34 @@ then : - if test -z "$PYTHON" -then : + if test -z "$PYTHON"; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 -printf %s "checking whether python executable path has been provided... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +$as_echo_n "checking whether python executable path has been provided... " >&6; } # Check whether --with-python was given. -if test ${with_python+y} -then : +if test "${with_python+set}" = set; then : withval=$with_python; - if test "$withval" != yes && test "$withval" != no -then : + if test "$withval" != yes && test "$withval" != no; then : PYTHON="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } -else $as_nop +else PYTHON="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PYTHON+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -19847,15 +19349,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19868,11 +19366,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -19881,18 +19379,17 @@ fi fi -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PYTHON+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -19902,15 +19399,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19923,11 +19416,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -19942,19 +19435,17 @@ fi - if test x${PYTHON} != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 -printf %s "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 -printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + if test x${PYTHON} != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +$as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +$as_echo "$as_me: WARNING: python module will not be built" >&2;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } HAVE_PYTHON=1 fi @@ -19962,8 +19453,7 @@ fi fi # Check whether --with-pybuild_flags was given. -if test ${with_pybuild_flags+y} -then : +if test "${with_pybuild_flags+set}" = set; then : withval=$with_pybuild_flags; fi @@ -19972,8 +19462,7 @@ PYBUILDFLAGS=$with_pybuild_flags # Check whether --with-pyinstall_flags was given. -if test ${with_pyinstall_flags+y} -then : +if test "${with_pyinstall_flags+set}" = set; then : withval=$with_pyinstall_flags; fi @@ -19994,39 +19483,34 @@ PYINSTALLFLAGS=$with_pyinstall_flags - if test -z "$DOCKER" -then : + if test -z "$DOCKER"; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 -printf %s "checking whether docker executable path has been provided... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 +$as_echo_n "checking whether docker executable path has been provided... " >&6; } # Check whether --with-docker was given. -if test ${with_docker+y} -then : +if test "${with_docker+set}" = set; then : withval=$with_docker; - if test "$withval" != yes && test "$withval" != no -then : + if test "$withval" != yes && test "$withval" != no; then : DOCKER="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } -else $as_nop +else DOCKER="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DOCKER+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOCKER+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -20036,15 +19520,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20057,11 +19537,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20070,18 +19550,17 @@ fi fi -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DOCKER+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOCKER+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -20091,15 +19570,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20112,11 +19587,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20131,8 +19606,7 @@ fi -if test x${DOCKER} != xno -then : +if test x${DOCKER} != xno; then : HAVE_DOCKER=1 fi @@ -20175,8 +19649,7 @@ DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" # Check whether --enable-doxygen-doc was given. -if test ${enable_doxygen_doc+y} -then : +if test "${enable_doxygen_doc+set}" = set; then : enableval=$enable_doxygen_doc; case "$enableval" in #( @@ -20194,7 +19667,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_doc=1 @@ -20207,12 +19680,11 @@ if test "$DX_FLAG_doc" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. set dummy ${ac_tool_prefix}doxygen; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DOXYGEN+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. @@ -20222,15 +19694,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20242,11 +19710,11 @@ esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN if test -n "$DX_DOXYGEN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 -printf "%s\n" "$DX_DOXYGEN" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +$as_echo "$DX_DOXYGEN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20255,12 +19723,11 @@ if test -z "$ac_cv_path_DX_DOXYGEN"; then ac_pt_DX_DOXYGEN=$DX_DOXYGEN # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. @@ -20270,15 +19737,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20290,11 +19753,11 @@ esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN if test -n "$ac_pt_DX_DOXYGEN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 -printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +$as_echo "$ac_pt_DX_DOXYGEN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_DOXYGEN" = x; then @@ -20302,8 +19765,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOXYGEN=$ac_pt_DX_DOXYGEN @@ -20313,8 +19776,8 @@ else fi if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -20323,12 +19786,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. set dummy ${ac_tool_prefix}perl; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_PERL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. @@ -20338,15 +19800,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20358,11 +19816,11 @@ esac fi DX_PERL=$ac_cv_path_DX_PERL if test -n "$DX_PERL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 -printf "%s\n" "$DX_PERL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +$as_echo "$DX_PERL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20371,12 +19829,11 @@ if test -z "$ac_cv_path_DX_PERL"; then ac_pt_DX_PERL=$DX_PERL # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_PERL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. @@ -20386,15 +19843,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20406,11 +19859,11 @@ esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL if test -n "$ac_pt_DX_PERL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 -printf "%s\n" "$ac_pt_DX_PERL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +$as_echo "$ac_pt_DX_PERL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_PERL" = x; then @@ -20418,8 +19871,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PERL=$ac_pt_DX_PERL @@ -20429,8 +19882,8 @@ else fi if test "$DX_FLAG_doc$DX_PERL" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -20453,8 +19906,7 @@ fi # Check whether --enable-doxygen-dot was given. -if test ${enable_doxygen_dot+y} -then : +if test "${enable_doxygen_dot+set}" = set; then : enableval=$enable_doxygen_dot; case "$enableval" in #( @@ -20463,7 +19915,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20475,7 +19927,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_dot=0 @@ -20491,12 +19943,11 @@ if test "$DX_FLAG_dot" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. set dummy ${ac_tool_prefix}dot; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DOT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. @@ -20506,15 +19957,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20526,11 +19973,11 @@ esac fi DX_DOT=$ac_cv_path_DX_DOT if test -n "$DX_DOT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 -printf "%s\n" "$DX_DOT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +$as_echo "$DX_DOT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20539,12 +19986,11 @@ if test -z "$ac_cv_path_DX_DOT"; then ac_pt_DX_DOT=$DX_DOT # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DOT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. @@ -20554,15 +20000,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20574,11 +20016,11 @@ esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT if test -n "$ac_pt_DX_DOT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 -printf "%s\n" "$ac_pt_DX_DOT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +$as_echo "$ac_pt_DX_DOT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_DOT" = x; then @@ -20586,8 +20028,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOT=$ac_pt_DX_DOT @@ -20597,8 +20039,8 @@ else fi if test "$DX_FLAG_dot$DX_DOT" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} DX_FLAG_dot=0 fi @@ -20626,8 +20068,7 @@ fi # Check whether --enable-doxygen-man was given. -if test ${enable_doxygen_man+y} -then : +if test "${enable_doxygen_man+set}" = set; then : enableval=$enable_doxygen_man; case "$enableval" in #( @@ -20636,7 +20077,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20648,7 +20089,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_man=1 @@ -20681,8 +20122,7 @@ fi # Check whether --enable-doxygen-rtf was given. -if test ${enable_doxygen_rtf+y} -then : +if test "${enable_doxygen_rtf+set}" = set; then : enableval=$enable_doxygen_rtf; case "$enableval" in #( @@ -20691,7 +20131,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20703,7 +20143,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_rtf=0 @@ -20736,8 +20176,7 @@ fi # Check whether --enable-doxygen-xml was given. -if test ${enable_doxygen_xml+y} -then : +if test "${enable_doxygen_xml+set}" = set; then : enableval=$enable_doxygen_xml; case "$enableval" in #( @@ -20746,7 +20185,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20758,7 +20197,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_xml=0 @@ -20791,8 +20230,7 @@ fi # Check whether --enable-doxygen-chm was given. -if test ${enable_doxygen_chm+y} -then : +if test "${enable_doxygen_chm+set}" = set; then : enableval=$enable_doxygen_chm; case "$enableval" in #( @@ -20801,7 +20239,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20813,7 +20251,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_chm=0 @@ -20829,12 +20267,11 @@ if test "$DX_FLAG_chm" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. set dummy ${ac_tool_prefix}hhc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_HHC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_HHC+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. @@ -20844,15 +20281,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20864,11 +20297,11 @@ esac fi DX_HHC=$ac_cv_path_DX_HHC if test -n "$DX_HHC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 -printf "%s\n" "$DX_HHC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +$as_echo "$DX_HHC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20877,12 +20310,11 @@ if test -z "$ac_cv_path_DX_HHC"; then ac_pt_DX_HHC=$DX_HHC # Extract the first word of "hhc", so it can be a program name with args. set dummy hhc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_HHC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_HHC+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. @@ -20892,15 +20324,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20912,11 +20340,11 @@ esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC if test -n "$ac_pt_DX_HHC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 -printf "%s\n" "$ac_pt_DX_HHC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +$as_echo "$ac_pt_DX_HHC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_HHC" = x; then @@ -20924,8 +20352,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_HHC=$ac_pt_DX_HHC @@ -20935,8 +20363,8 @@ else fi if test "$DX_FLAG_chm$DX_HHC" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 -printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} DX_FLAG_chm=0 fi @@ -20967,8 +20395,7 @@ fi # Check whether --enable-doxygen-chi was given. -if test ${enable_doxygen_chi+y} -then : +if test "${enable_doxygen_chi+set}" = set; then : enableval=$enable_doxygen_chi; case "$enableval" in #( @@ -20977,7 +20404,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20989,7 +20416,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_chi=0 @@ -21022,8 +20449,7 @@ fi # Check whether --enable-doxygen-html was given. -if test ${enable_doxygen_html+y} -then : +if test "${enable_doxygen_html+set}" = set; then : enableval=$enable_doxygen_html; case "$enableval" in #( @@ -21032,10 +20458,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21047,7 +20473,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_html=1 @@ -21083,8 +20509,7 @@ fi # Check whether --enable-doxygen-ps was given. -if test ${enable_doxygen_ps+y} -then : +if test "${enable_doxygen_ps+set}" = set; then : enableval=$enable_doxygen_ps; case "$enableval" in #( @@ -21093,7 +20518,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21105,7 +20530,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_ps=1 @@ -21121,12 +20546,11 @@ if test "$DX_FLAG_ps" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. set dummy ${ac_tool_prefix}latex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_LATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_LATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. @@ -21136,15 +20560,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21156,11 +20576,11 @@ esac fi DX_LATEX=$ac_cv_path_DX_LATEX if test -n "$DX_LATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 -printf "%s\n" "$DX_LATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +$as_echo "$DX_LATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21169,12 +20589,11 @@ if test -z "$ac_cv_path_DX_LATEX"; then ac_pt_DX_LATEX=$DX_LATEX # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_LATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_LATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. @@ -21184,15 +20603,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21204,11 +20619,11 @@ esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX if test -n "$ac_pt_DX_LATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 -printf "%s\n" "$ac_pt_DX_LATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +$as_echo "$ac_pt_DX_LATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_LATEX" = x; then @@ -21216,8 +20631,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_LATEX=$ac_pt_DX_LATEX @@ -21227,8 +20642,8 @@ else fi if test "$DX_FLAG_ps$DX_LATEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21237,12 +20652,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -21252,15 +20666,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21272,11 +20682,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -printf "%s\n" "$DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21285,12 +20695,11 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -21300,15 +20709,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21320,11 +20725,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -21332,8 +20737,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -21343,8 +20748,8 @@ else fi if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21353,12 +20758,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. set dummy ${ac_tool_prefix}dvips; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DVIPS+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DVIPS+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. @@ -21368,15 +20772,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21388,11 +20788,11 @@ esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS if test -n "$DX_DVIPS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 -printf "%s\n" "$DX_DVIPS" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +$as_echo "$DX_DVIPS" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21401,12 +20801,11 @@ if test -z "$ac_cv_path_DX_DVIPS"; then ac_pt_DX_DVIPS=$DX_DVIPS # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DVIPS+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DVIPS+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. @@ -21416,15 +20815,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21436,11 +20831,11 @@ esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS if test -n "$ac_pt_DX_DVIPS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 -printf "%s\n" "$ac_pt_DX_DVIPS" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +$as_echo "$ac_pt_DX_DVIPS" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_DVIPS" = x; then @@ -21448,8 +20843,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DVIPS=$ac_pt_DX_DVIPS @@ -21459,8 +20854,8 @@ else fi if test "$DX_FLAG_ps$DX_DVIPS" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21469,12 +20864,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -21484,15 +20878,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21504,11 +20894,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -printf "%s\n" "$DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21517,12 +20907,11 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -21532,15 +20921,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21552,11 +20937,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -printf "%s\n" "$ac_pt_DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -21564,8 +20949,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -21575,8 +20960,8 @@ else fi if test "$DX_FLAG_ps$DX_EGREP" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21597,8 +20982,7 @@ fi # Check whether --enable-doxygen-pdf was given. -if test ${enable_doxygen_pdf+y} -then : +if test "${enable_doxygen_pdf+set}" = set; then : enableval=$enable_doxygen_pdf; case "$enableval" in #( @@ -21607,7 +20991,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21619,7 +21003,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_pdf=1 @@ -21635,12 +21019,11 @@ if test "$DX_FLAG_pdf" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_PDFLATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_PDFLATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. @@ -21650,15 +21033,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21670,11 +21049,11 @@ esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX if test -n "$DX_PDFLATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 -printf "%s\n" "$DX_PDFLATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +$as_echo "$DX_PDFLATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21683,12 +21062,11 @@ if test -z "$ac_cv_path_DX_PDFLATEX"; then ac_pt_DX_PDFLATEX=$DX_PDFLATEX # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_PDFLATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. @@ -21698,15 +21076,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21718,11 +21092,11 @@ esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX if test -n "$ac_pt_DX_PDFLATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 -printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +$as_echo "$ac_pt_DX_PDFLATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_PDFLATEX" = x; then @@ -21730,8 +21104,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PDFLATEX=$ac_pt_DX_PDFLATEX @@ -21741,8 +21115,8 @@ else fi if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21751,12 +21125,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -21766,15 +21139,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21786,11 +21155,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -printf "%s\n" "$DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21799,12 +21168,11 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -21814,15 +21182,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21834,11 +21198,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -21846,8 +21210,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -21857,8 +21221,8 @@ else fi if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21867,12 +21231,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -21882,15 +21245,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21902,11 +21261,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -printf "%s\n" "$DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21915,12 +21274,11 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -21930,15 +21288,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21950,11 +21304,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -printf "%s\n" "$ac_pt_DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -21962,8 +21316,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -21973,8 +21327,8 @@ else fi if test "$DX_FLAG_pdf$DX_EGREP" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -22020,27 +21374,24 @@ PAPER_SIZE=$DOXYGEN_PAPER_SIZE esac # Rules: -if test $DX_FLAG_html -eq 1 -then : +if test $DX_FLAG_html -eq 1; then : DX_SNIPPET_html="## ------------------------------- ## DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ \$(DX_DOCDIR)/html " -else $as_nop +else DX_SNIPPET_html="" fi -if test $DX_FLAG_chi -eq 1 -then : +if test $DX_FLAG_chi -eq 1; then : DX_SNIPPET_chi=" DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ \$(DX_DOCDIR)/\$(PACKAGE).chi" -else $as_nop +else DX_SNIPPET_chi="" fi -if test $DX_FLAG_chm -eq 1 -then : +if test $DX_FLAG_chm -eq 1; then : DX_SNIPPET_chm="## ------------------------------ ## DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ @@ -22048,44 +21399,40 @@ DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ ${DX_SNIPPET_chi} " -else $as_nop +else DX_SNIPPET_chm="" fi -if test $DX_FLAG_man -eq 1 -then : +if test $DX_FLAG_man -eq 1; then : DX_SNIPPET_man="## ------------------------------ ## DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ \$(DX_DOCDIR)/man " -else $as_nop +else DX_SNIPPET_man="" fi -if test $DX_FLAG_rtf -eq 1 -then : +if test $DX_FLAG_rtf -eq 1; then : DX_SNIPPET_rtf="## ------------------------------ ## DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ \$(DX_DOCDIR)/rtf " -else $as_nop +else DX_SNIPPET_rtf="" fi -if test $DX_FLAG_xml -eq 1 -then : +if test $DX_FLAG_xml -eq 1; then : DX_SNIPPET_xml="## ------------------------------ ## DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ \$(DX_DOCDIR)/xml " -else $as_nop +else DX_SNIPPET_xml="" fi -if test $DX_FLAG_ps -eq 1 -then : +if test $DX_FLAG_ps -eq 1; then : DX_SNIPPET_ps="## ----------------------------- ## DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ @@ -22111,11 +21458,10 @@ doxygen-ps: \$(DX_CLEAN_PS) \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi " -else $as_nop +else DX_SNIPPET_ps="" fi -if test $DX_FLAG_pdf -eq 1 -then : +if test $DX_FLAG_pdf -eq 1; then : DX_SNIPPET_pdf="## ------------------------------ ## DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ @@ -22141,11 +21487,10 @@ doxygen-pdf: \$(DX_CLEAN_PDF) mv refman.pdf ../\$(PACKAGE).pdf " -else $as_nop +else DX_SNIPPET_pdf="" fi -if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 -then : +if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1; then : DX_SNIPPET_latex="## ------------------------------------------------- ## DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) @@ -22156,12 +21501,11 @@ DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ \$(DX_DOCDIR)/latex " -else $as_nop +else DX_SNIPPET_latex="" fi -if test $DX_FLAG_doc -eq 1 -then : +if test $DX_FLAG_doc -eq 1; then : DX_SNIPPET_doc="## --------------------------------- ## ${DX_SNIPPET_html}\ @@ -22202,7 +21546,7 @@ DX_CLEANFILES = \\ \$(DX_CLEAN_PS) \\ \$(DX_CLEAN_PDF) \\ \$(DX_CLEAN_LATEX)" -else $as_nop +else DX_SNIPPET_doc="" fi DX_RULES="${DX_SNIPPET_doc}" @@ -22270,8 +21614,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -22301,15 +21645,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -printf "%s\n" "$as_me: updating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -22323,8 +21667,8 @@ printf "%s\n" "$as_me: updating cache $cache_file" >&6;} fi fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -22377,7 +21721,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -22393,8 +21737,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -22417,16 +21761,14 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -22436,46 +21778,46 @@ esac fi - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi # The user is always right. -if ${PATH_SEPARATOR+false} :; then +if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -22484,6 +21826,13 @@ if ${PATH_SEPARATOR+false} :; then fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -22492,12 +21841,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -22509,10 +21854,30 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -22525,14 +21890,13 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -22559,20 +21923,18 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset - # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' -else $as_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -22584,13 +21946,12 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -22621,7 +21982,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -22643,10 +22004,6 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -22660,12 +22017,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -22707,7 +22058,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -22716,7 +22067,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22779,7 +22130,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -22833,16 +22184,14 @@ Report bugs to the package provider. bifrost home page: ." _ACEOF -ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` -ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config='$ac_cs_config_escaped' +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ bifrost config.status 0.9.0 -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -22881,21 +22230,21 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - printf "%s\n" "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - printf "%s\n" "$ac_cs_config"; exit ;; + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) - printf "%s\n" "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -22923,7 +22272,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -22937,7 +22286,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - printf "%s\n" "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF @@ -23353,8 +22702,8 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files - test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -23582,7 +22931,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -23590,17 +22939,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -printf "%s\n" "$as_me: creating $ac_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`printf "%s\n" "$configure_input" | + ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -23617,7 +22966,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$ac_file" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23641,9 +22990,9 @@ printf "%s\n" X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -23700,8 +23049,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -23744,9 +23093,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -23758,8 +23107,8 @@ which seems to be undefined. Please make sure it is defined" >&2;} ;; - :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -printf "%s\n" "$as_me: executing $ac_file commands" >&6;} + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -24307,7 +23656,6 @@ _LT_EOF esac - ltmain=$ac_aux_dir/ltmain.sh @@ -24510,8 +23858,7 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi - From 6fa74b8fb6e776d77c8fa543ca36e84b66d42d9a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 26 Oct 2021 10:51:40 -0600 Subject: [PATCH 0319/1155] Force nbyte to int for PyPy. --- python/bifrost/ndarray.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 8825eaed3..301cc2e87 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -82,6 +82,7 @@ def _address_as_buffer(address, nbyte, readonly=False): # PyPy3 catch # TODO: How do we set read only? Does it matter? # Should we be using this for everyone? + nbyte = int(nbyte) return (ctypes.c_char*nbyte).from_address(address) def asarray(arr, space=None): From ff0f375db57e515c6f6d4d5e9d31ee4c56d9bf67 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 26 Oct 2021 10:59:40 -0600 Subject: [PATCH 0320/1155] Switch over to using the warnings module for warnings. --- python/bifrost/blocks/serialize.py | 3 ++- python/bifrost/pipeline.py | 5 +++-- python/bifrost/ring2.py | 3 ++- python/bifrost/sigproc.py | 7 ++++--- python/bifrost/sigproc2.py | 5 +++-- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/python/bifrost/blocks/serialize.py b/python/bifrost/blocks/serialize.py index f66cb60bd..2ec935f31 100644 --- a/python/bifrost/blocks/serialize.py +++ b/python/bifrost/blocks/serialize.py @@ -33,10 +33,11 @@ from bifrost.pipeline import SinkBlock, SourceBlock import os +import warnings try: import simplejson as json except ImportError: - print("WARNING: Install simplejson for better performance") + warnings.warn("Install simplejson for better performance", RuntimeWarning) import json import glob from functools import reduce diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 61efafc98..cdcede1ee 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -38,6 +38,7 @@ import Queue as queue import time import signal +import warnings from copy import copy from collections import defaultdict try: @@ -266,7 +267,7 @@ def shutdown(self): join_all(self.threads, timeout=self.shutdown_timeout) for thread in self.threads: if thread.is_alive(): - print("WARNING: Thread %s did not shut down on time and will be killed" % thread.name) + warnings.warn("Thread %s did not shut down on time and will be killed" % thread.name, RuntimeWarning) def shutdown_on_signals(self, signals=None): if signals is None: signals = [signal.SIGHUP, @@ -281,7 +282,7 @@ def _handle_signal_shutdown(self, signum, frame): reversed(sorted(signal.__dict__.items())) if v.startswith('SIG') and not v.startswith('SIG_')) - print("WARNING: Received signal %i %s, shutting down pipeline" % (signum, SIGNAL_NAMES[signum])) + warnings.warn("Received signal %i %s, shutting down pipeline" % (signum, SIGNAL_NAMES[signum]), RuntimeWarning) self.shutdown() def __enter__(self): thread_local.pipeline_stack.append(self) diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index 65b02d2a2..323c04a80 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -38,12 +38,13 @@ import ctypes import string +import warnings import numpy as np try: import simplejson as json except ImportError: - print("WARNING: Install simplejson for better performance") + warnings.warn("Install simplejson for better performance", RuntimeWarning) import json def _slugify(name): diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index 5a6b114e5..b52b0e50e 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -55,6 +55,7 @@ from __future__ import print_function import struct +import warnings import numpy as np from collections import defaultdict import os @@ -178,7 +179,7 @@ def _write_header(hdr, file_object): pass else: #raise KeyError("Unknown sigproc header key: %s"%key) - print("WARNING: Unknown sigproc header key: %s" % key) + warnings.warn("Unknown sigproc header key: '%s'" % key, RuntimeWarning) _header_write_string(file_object, "HEADER_END") def _read_header(file_object): @@ -207,7 +208,7 @@ def _read_header(file_object): header[expecting] = key expecting = None else: - print("WARNING: Unknown header key", key) + warnings.warn("Unknown header key: '%s'" % key, RuntimeWarning) if 'nchans' not in header: header['nchans'] = 1 header['header_size'] = file_object.tell() @@ -239,7 +240,7 @@ def seek_to_data(file_object): header[expecting] = key expecting = None else: - print("WARNING: Unknown header key", key) + warnings.warn("Unknown header key: '%s'" % key, RuntimeWarning) return def pack(data, nbit): diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index a8f8d4323..8bb8761f9 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -56,6 +56,7 @@ from __future__ import print_function, division import struct +import warnings import numpy as np from collections import defaultdict @@ -192,7 +193,7 @@ def write_header(hdr, f): _header_write(f, key, int(val), fmt='=b') else: #raise KeyError("Unknown sigproc header key: %s"%key) - print("WARNING: Unknown sigproc header key: %s" % key) + warnings.warn("Unknown sigproc header key: '%s'" % key, RuntimeWarning) _header_write_string(f, "HEADER_END") def _read_header(f): @@ -219,7 +220,7 @@ def _read_header(f): header[expecting] = key expecting = None else: - print("WARNING: Unknown header key", key) + warnings.warn("Unknown header key: '%s'" % key, RuntimeWarning) if 'nchans' not in header: header['nchans'] = 1 header['header_size'] = f.tell() From 9a875c111a9d339495151740a8d7beb53d6409f1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 26 Oct 2021 17:58:59 -0600 Subject: [PATCH 0321/1155] Fixed bifrost.ndarray under PyPy3. --- python/bifrost/ndarray.py | 12 +++--- python/bifrost/pypy3_compat.c | 71 +++++++++++++++++++++++++++++++++++ python/setup.py | 11 +++++- 3 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 python/bifrost/pypy3_compat.c diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 301cc2e87..396a2678e 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -49,7 +49,11 @@ from bifrost import device from bifrost.DataType import DataType from bifrost.Space import Space -import sys + +try: + from bifrost._pypy3_compat import PyMemoryView_FromMemory +except ImportError: + pass # TODO: The stuff here makes array.py redundant (and outdated) @@ -80,10 +84,8 @@ def _address_as_buffer(address, nbyte, readonly=False): check=False) except AttributeError: # PyPy3 catch - # TODO: How do we set read only? Does it matter? - # Should we be using this for everyone? - nbyte = int(nbyte) - return (ctypes.c_char*nbyte).from_address(address) + int_asbuffer = PyMemoryView_FromMemory + return int_asbuffer(address, nbyte, 0x100 if readonly else 0x200) def asarray(arr, space=None): if isinstance(arr, ndarray) and (space is None or space == arr.bf.space): diff --git a/python/bifrost/pypy3_compat.c b/python/bifrost/pypy3_compat.c new file mode 100644 index 000000000..44ad9302a --- /dev/null +++ b/python/bifrost/pypy3_compat.c @@ -0,0 +1,71 @@ + +/* + * Copyright (c) 2021, The Bifrost Authors. All rights reserved. + * Copyright (c) 2021, The University of New Mexico. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/*! \file pypy3_compat.c + * \brief Compatibility layer for PyPy3 + */ + +#include "Python.h" +#include + +static PyObject* PyMemoryView_FromAddressAndSize(PyObject *self, PyObject *args, PyObject *kwds) { + PyObject *address, *nbyte, *flags, *view; + if(!PyArg_ParseTuple(args, "OOO", &address, &nbyte, &flags)) { + PyErr_Format(PyExc_RuntimeError, "Invalid parameters"); + return NULL; + } + + long addr, size, flgs; + addr = PyLong_AsLong(address); + size = PyLong_AsLong(nbyte); + flgs = PyLong_AsLong(flags); + + char *buf = (char *) addr; + + view = PyMemoryView_FromMemory(buf, size, flgs | PyBUF_READ); + return view; +} + +static PyMethodDef CompatMethods[] = { + {"PyMemoryView_FromMemory", (PyCFunction) PyMemoryView_FromAddressAndSize, METH_VARARGS, NULL}, + {NULL, NULL, 0, NULL} +}; + +static struct PyModuleDef Compat = { + PyModuleDef_HEAD_INIT, "_pypy3_compat", NULL, -1, CompatMethods,}; + +PyMODINIT_FUNC PyInit__pypy3_compat(void) { + PyObject *m; + m = PyModule_Create(&Compat); + if(m == NULL) { + return NULL; + } + return m; +} diff --git a/python/setup.py b/python/setup.py index 9221ed9e7..f10abd72a 100755 --- a/python/setup.py +++ b/python/setup.py @@ -29,7 +29,7 @@ # Python2 compatibility from __future__ import print_function -from setuptools import setup, find_packages +from setuptools import setup, Extension, find_packages import os import sys import glob @@ -54,6 +54,11 @@ print("*************************************************************************") raise +# Build the PyPy3 compatibility module, if needed +modules = [] +if sys.version.find('PyPy') != -1: + modules.append(Extension('_pypy3_compat', ['bifrost/pypy3_compat.c'])) + # Build up a list of scripts to install scripts = glob.glob(os.path.join('..', 'tools', '*.py')) @@ -71,4 +76,6 @@ "pint>=0.7.0", "graphviz>=0.5.0", "matplotlib" - ]) + ], + ext_package='bifrost', + ext_modules = modules) From 41f662221f58b37735c1f257ad6e9c8b4599543f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 27 Oct 2021 16:12:34 -0600 Subject: [PATCH 0322/1155] Niceties. --- Makefile.in | 16 ++++++++++++++++ configure | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 30 ++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) diff --git a/Makefile.in b/Makefile.in index 751a0050d..ce771071e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -34,6 +34,22 @@ install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROS ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) install endif + @echo "Libraries have been installed in:" + @echo " $(INSTALL_LIB_DIR)" + @echo "" + @echo "If you ever happen to want to link against installed libraries" + @echo "in a given directory, LIBDIR, you must either use libtool, and" + @echo "specify the full pathname of the library, or use the '-LLIBDIR'" + @echo "flag during linking and do at least one of the following:" + @echo " - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable" + @echo " during execution" + @echo " - add LIBDIR to the 'LD_RUN_PATH' environment variable" + @echo " during linking" + @echo " - use the '-Wl,-rpath -Wl,LIBDIR' linker flag" + @echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + @echo "" + @echo "See any operating system documentation about shared libraries for" + @echo "more information, such as the ld(1) and ld.so(8) manual pages." .PHONY: install uninstall: rm -f $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO) diff --git a/configure b/configure index b733b5b8d..91cccd7d0 100755 --- a/configure +++ b/configure @@ -23862,3 +23862,53 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi + +# +# User notes +# + +echo "" + +if test x$HAVE_CUDA = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Build with CUDA support for arch. $GPU_ARCHS" >&5 +$as_echo "$as_me: Build with CUDA support for arch. $GPU_ARCHS" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Building without CUDA support" >&5 +$as_echo "$as_me: Building without CUDA support" >&6;} +fi + +if test x$HAVE_NUMA = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Building with NUMA support for memory binding" >&5 +$as_echo "$as_me: Building with NUMA support for memory binding" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Building without NUMA support for memory binding" >&5 +$as_echo "$as_me: Building without NUMA support for memory binding" >&6;} +fi + +if test x$HAVE_HWLOC = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Building with hwloc support for thread binding" >&5 +$as_echo "$as_me: Building with hwloc support for thread binding" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Building without hwloc support for thread binding" >&5 +$as_echo "$as_me: Building without hwloc support for thread binding" >&6;} +fi + +if test x$HAVE_VMA = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Building with libvma packet capture acceleration" >&5 +$as_echo "$as_me: Building with libvma packet capture acceleration" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Building without libvma packet capture acceleration" >&5 +$as_echo "$as_me: Building without libvma packet capture acceleration" >&6;} +fi + +if test x$HAVE_PYTHON = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Building the Python API" >&5 +$as_echo "$as_me: Building the Python API" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Not building the Python API" >&5 +$as_echo "$as_me: Not building the Python API" >&6;} +fi + +echo "" +echo "Bifrost is now ready to be compiled. Please run 'make'" +echo "" diff --git a/configure.ac b/configure.ac index 83c04cd41..bc3800189 100644 --- a/configure.ac +++ b/configure.ac @@ -280,3 +280,33 @@ NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h]) AC_OUTPUT + +# +# User notes +# + +echo "" + +AS_IF([test x$HAVE_CUDA = x1], + [AC_MSG_NOTICE(Building with CUDA support for arch. $GPU_ARCHS)], + [AC_MSG_NOTICE(Building without CUDA support)]) + +AS_IF([test x$HAVE_NUMA = x1], + [AC_MSG_NOTICE(Building with NUMA support for memory binding)], + [AC_MSG_NOTICE(Building without NUMA support for memory binding)]) + +AS_IF([test x$HAVE_HWLOC = x1], + [AC_MSG_NOTICE(Building with hwloc support for thread binding)], + [AC_MSG_NOTICE(Building without hwloc support for thread binding)]) + +AS_IF([test x$HAVE_VMA = x1], + [AC_MSG_NOTICE(Building with libvma packet capture acceleration)], + [AC_MSG_NOTICE(Building without libvma packet capture acceleration)]) + +AS_IF([test x$HAVE_PYTHON = x1], + [AC_MSG_NOTICE(Building the Python API)], + [AC_MSG_NOTICE(Not building the Python API)]) + +echo "" +echo "Bifrost is now ready to be compiled. Please run 'make'" +echo "" From f76af2a9252499d81e93faa42effe6811329f8d0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 28 Oct 2021 10:40:18 -0600 Subject: [PATCH 0323/1155] OSX doesn't have a procfs to look at for active processes. --- src/proclog.cpp | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/proclog.cpp b/src/proclog.cpp index dfd900063..5b4b0aeca 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -43,6 +43,10 @@ #include #include +#if defined __APPLE__ && __APPLE__ +#include +#endif + void make_dir(std::string path, int perms=775) { if( std::system(("mkdir -p "+path+" -m "+std::to_string(perms)).c_str()) ) { throw std::runtime_error("Failed to create path: "+path); @@ -64,9 +68,40 @@ void remove_file(std::string path) { } } bool process_exists(pid_t pid) { +#if defined __APPLE__ && __APPLE__ + + // Based on information from: + // https://developer.apple.com/library/archive/qa/qa2001/qa1123.html + + static const int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 }; + kinfo_proc *proclist = NULL; + int err, found = 0; + size_t len, count; + len = 0; + err = sysctl((int *) name, (sizeof(name) / sizeof(*name)) - 1, + NULL, &len, NULL, 0); + if( err == 0 ) { + proclist = (kinfo_proc*) ::malloc(len); + err = sysctl((int *) name, (sizeof(name) / sizeof(*name)) - 1, + proclist, &len, NULL, 0); + if( err == 0 ) { + count = len / sizeof(kinfo_proc); + for(int i=0; i Date: Thu, 28 Oct 2021 10:41:56 -0600 Subject: [PATCH 0324/1155] OSX get affinity fix. --- src/affinity.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/affinity.cpp b/src/affinity.cpp index 39f143a5f..daf6f064d 100644 --- a/src/affinity.cpp +++ b/src/affinity.cpp @@ -68,7 +68,7 @@ static inline int CPU_COUNT(cpu_set_t *cs) { int count = 0; for(int i=0; i<8*sizeof(cpu_set_t); i++) { - count += CPU_ISSET(i, cs); + count += CPU_ISSET(i, cs) ? 1 : 0; } return count; } @@ -77,15 +77,14 @@ int pthread_getaffinity_np(pthread_t thread, size_t cpu_size, cpu_set_t *cpu_set) { thread_port_t mach_thread; - mach_msg_type_number_t count; - boolean_t get_default; + mach_msg_type_number_t count = THREAD_AFFINITY_POLICY_COUNT; + boolean_t get_default = false; thread_affinity_policy_data_t policy; mach_thread = pthread_mach_thread_np(thread); thread_policy_get(mach_thread, THREAD_AFFINITY_POLICY, (thread_policy_t)&policy, &count, &get_default); - cpu_set->count |= (1<<(policy.affinity_tag)); return 0; } @@ -154,7 +153,7 @@ BFstatus bfAffinityGetCore(int* core) { // Return -1 if more than one core is set // TODO: Should really check if all cores are set, otherwise fail *core = -1; - return BF_STATUS_SUCCESS; + return BF_STATUS_SUCCESS; } else { int ncore = sysconf(_SC_NPROCESSORS_ONLN); From a44d073d4768674536d2052bcf82777f08e6a275 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 28 Oct 2021 10:43:52 -0600 Subject: [PATCH 0325/1155] Formatting cleanup. --- src/proclog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proclog.cpp b/src/proclog.cpp index 5b4b0aeca..8d9922f02 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -154,7 +154,7 @@ class ProcLogMgr { if( pid && !process_exists(pid) ) { try { remove_all(std::string(base_logdir) + "/" + - std::to_string(pid)); + std::to_string(pid)); } catch( std::exception& ) {} } } From 524a50dece6732b2bb454d63752d722fa64897d7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 2 Nov 2021 10:06:37 -0600 Subject: [PATCH 0326/1155] configure summary cleanup. --- configure | 69 ++++++++++++++++++++++++++++++++++++---------------- configure.ac | 35 ++++++++++++++++++-------- 2 files changed, 73 insertions(+), 31 deletions(-) diff --git a/configure b/configure index 91cccd7d0..4b1014575 100755 --- a/configure +++ b/configure @@ -629,7 +629,8 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='LTLIBOBJS +ac_subst_vars='OPTIONS +LTLIBOBJS PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR PACKAGE_VERSION_MAJOR @@ -23870,45 +23871,71 @@ fi echo "" if test x$HAVE_CUDA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Build with CUDA support for arch. $GPU_ARCHS" >&5 -$as_echo "$as_me: Build with CUDA support for arch. $GPU_ARCHS" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: cuda: yes - $GPU_ARCHS" >&5 +$as_echo "$as_me: cuda: yes - $GPU_ARCHS" >&6;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: Building without CUDA support" >&5 -$as_echo "$as_me: Building without CUDA support" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 +$as_echo "$as_me: cuda: no" >&6;} fi if test x$HAVE_NUMA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Building with NUMA support for memory binding" >&5 -$as_echo "$as_me: Building with NUMA support for memory binding" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: numa: yes" >&5 +$as_echo "$as_me: numa: yes" >&6;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: Building without NUMA support for memory binding" >&5 -$as_echo "$as_me: Building without NUMA support for memory binding" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: numa: no" >&5 +$as_echo "$as_me: numa: no" >&6;} fi if test x$HAVE_HWLOC = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Building with hwloc support for thread binding" >&5 -$as_echo "$as_me: Building with hwloc support for thread binding" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc: yes" >&5 +$as_echo "$as_me: hwloc: yes" >&6;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: Building without hwloc support for thread binding" >&5 -$as_echo "$as_me: Building without hwloc support for thread binding" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc: no" >&5 +$as_echo "$as_me: hwloc: no" >&6;} fi if test x$HAVE_VMA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Building with libvma packet capture acceleration" >&5 -$as_echo "$as_me: Building with libvma packet capture acceleration" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: libvma: yes" >&5 +$as_echo "$as_me: libvma: yes" >&6;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: Building without libvma packet capture acceleration" >&5 -$as_echo "$as_me: Building without libvma packet capture acceleration" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: libvma: no" >&5 +$as_echo "$as_me: libvma: no" >&6;} fi if test x$HAVE_PYTHON = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Building the Python API" >&5 -$as_echo "$as_me: Building the Python API" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: python bindings: yes" >&5 +$as_echo "$as_me: python bindings: yes" >&6;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: Not building the Python API" >&5 -$as_echo "$as_me: Not building the Python API" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: python bindings: no" >&5 +$as_echo "$as_me: python bindings: no" >&6;} fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: memory alignment: $ALIGNMENT" >&5 +$as_echo "$as_me: memory alignment: $ALIGNMENT" >&6;} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: logging directory: $HAVE_TMPFS" >&5 +$as_echo "$as_me: logging directory: $HAVE_TMPFS" >&6;} + + +if test x$enable_debug != xno; then : + OPTIONS="$OPTIONS debug" + +fi +if test x$enable_trace != xno; then : + OPTIONS="$OPTIONS trace" + +fi +if test x$enable_cuda_debug != xno; then : + OPTIONS="$OPTIONS cuda_debug" + +fi +if test x$enable_native_arch != xno; then : + OPTIONS="$OPTIONS native" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: options:$OPTIONS" >&5 +$as_echo "$as_me: options:$OPTIONS" >&6;} + echo "" echo "Bifrost is now ready to be compiled. Please run 'make'" echo "" diff --git a/configure.ac b/configure.ac index bc3800189..bb2147efb 100644 --- a/configure.ac +++ b/configure.ac @@ -288,25 +288,40 @@ AC_OUTPUT echo "" AS_IF([test x$HAVE_CUDA = x1], - [AC_MSG_NOTICE(Building with CUDA support for arch. $GPU_ARCHS)], - [AC_MSG_NOTICE(Building without CUDA support)]) + [AC_MSG_NOTICE(cuda: yes - $GPU_ARCHS)], + [AC_MSG_NOTICE(cuda: no)]) AS_IF([test x$HAVE_NUMA = x1], - [AC_MSG_NOTICE(Building with NUMA support for memory binding)], - [AC_MSG_NOTICE(Building without NUMA support for memory binding)]) + [AC_MSG_NOTICE(numa: yes)], + [AC_MSG_NOTICE(numa: no)]) AS_IF([test x$HAVE_HWLOC = x1], - [AC_MSG_NOTICE(Building with hwloc support for thread binding)], - [AC_MSG_NOTICE(Building without hwloc support for thread binding)]) + [AC_MSG_NOTICE(hwloc: yes)], + [AC_MSG_NOTICE(hwloc: no)]) AS_IF([test x$HAVE_VMA = x1], - [AC_MSG_NOTICE(Building with libvma packet capture acceleration)], - [AC_MSG_NOTICE(Building without libvma packet capture acceleration)]) + [AC_MSG_NOTICE(libvma: yes)], + [AC_MSG_NOTICE(libvma: no)]) AS_IF([test x$HAVE_PYTHON = x1], - [AC_MSG_NOTICE(Building the Python API)], - [AC_MSG_NOTICE(Not building the Python API)]) + [AC_MSG_NOTICE(python bindings: yes)], + [AC_MSG_NOTICE(python bindings: no)]) +AC_MSG_NOTICE(memory alignment: $ALIGNMENT) + +AC_MSG_NOTICE(logging directory: $HAVE_TMPFS) + +AC_SUBST([OPTIONS], []) +AS_IF([test x$enable_debug != xno], + [AC_SUBST([OPTIONS], ["$OPTIONS debug"])]) +AS_IF([test x$enable_trace != xno], + [AC_SUBST([OPTIONS], ["$OPTIONS trace"])]) +AS_IF([test x$enable_cuda_debug != xno], + [AC_SUBST([OPTIONS], ["$OPTIONS cuda_debug"])]) +AS_IF([test x$enable_native_arch != xno], + [AC_SUBST([OPTIONS], ["$OPTIONS native"])]) +AC_MSG_NOTICE(options:$OPTIONS) + echo "" echo "Bifrost is now ready to be compiled. Please run 'make'" echo "" From 0fbb5be55ab996e47e5b67c6e29bf0aebce2437c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Nov 2021 11:11:40 -0600 Subject: [PATCH 0327/1155] Validate the CUDA archs. against nvcc. Add in a check for Pascal+ only archs. Zero out the GPU_SHAREDMEM if CUDA isn't requested. --- config/cuda.m4 | 25 ++++++++++++++++++++++++- configure | 36 ++++++++++++++++++++++++++++++++++++ configure.ac | 2 ++ 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 014c16e3e..b4208cd36 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -139,5 +139,28 @@ AC_DEFUN([AX_CHECK_CUDA], else AC_SUBST([GPU_ARCHS], [$with_gpu_archs]) fi - fi + + AC_MSG_CHECKING([for valid CUDA architectures]) + ar_requested=$( echo "$GPU_ARCHS" | wc -w ) + ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) + ar_found=$( echo $ar_valid | wc -w ) + if test "$ar_requested" = $ar_found; then + AC_MSG_RESULT([yes]) + else + AC_MSG_ERROR(only architectures $ar_valid are supported) + fi + + AC_MSG_CHECKING([for Pascal-style CUDA managed memory]) + cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[[1-5]][[0-9]]\b/PRE/g;' ) + if ! echo $cm_invalid | ${GREP} -q PRE; then + AC_SUBST([GPU_PASCAL_MANAGEDMEM], [1]) + AC_MSG_RESULT([yes]) + else + AC_SUBST([GPU_PASCAL_MANAGEDMEM], [0]) + AC_MSG_RESULT([no]) + fi + else + AC_SUBST([GPU_PASCAL_MANAGEDMEM], [0]) + fi ]) diff --git a/configure b/configure index 4b1014575..603b8382f 100755 --- a/configure +++ b/configure @@ -685,6 +685,7 @@ HAVE_DEBUG HAVE_TMPFS ALIGNMENT GPU_SHAREDMEM +GPU_PASCAL_MANAGEDMEM GPU_ARCHS NVCCFLAGS CUOBJDUMP @@ -19105,6 +19106,37 @@ fi GPU_ARCHS=$with_gpu_archs fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 +$as_echo_n "checking for valid CUDA architectures... " >&6; } + ar_requested=$( echo "$GPU_ARCHS" | wc -w ) + ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) + ar_found=$( echo $ar_valid | wc -w ) + if test "$ar_requested" = $ar_found; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + as_fn_error $? "only architectures $ar_valid are supported" "$LINENO" 5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 +$as_echo_n "checking for Pascal-style CUDA managed memory... " >&6; } + cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) + if ! echo $cm_invalid | ${GREP} -q PRE; then + GPU_PASCAL_MANAGEDMEM=1 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + GPU_PASCAL_MANAGEDMEM=0 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + else + GPU_PASCAL_MANAGEDMEM=0 + fi @@ -19118,6 +19150,10 @@ fi GPU_SHAREDMEM=$with_shared_mem +if test x$HAVE_CUDA = x0; then : + GPU_SHAREDMEM=0 + +fi # # Bifrost memory alignment diff --git a/configure.ac b/configure.ac index bb2147efb..a480791ea 100644 --- a/configure.ac +++ b/configure.ac @@ -144,6 +144,8 @@ AC_ARG_WITH([shared_mem], [], [with_shared_mem=16384]) AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) +AS_IF([test x$HAVE_CUDA = x0], + [AC_SUBST([GPU_SHAREDMEM], [0])]) # # Bifrost memory alignment From c3e0f53c5b051453bdbcfdf771d8a762534bd171 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Nov 2021 11:12:20 -0600 Subject: [PATCH 0328/1155] Added in BF_GPU_MANAGEDMEM which is one if we want only Pascal+ archs. --- src/bifrost/config.h.in | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index f2ade0f4e..ef8869c04 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -45,6 +45,7 @@ extern "C" { #define BF_CUDA_ENABLED @HAVE_CUDA@ #define BF_GPU_ARCHS "@GPU_ARCHS@" #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ +#define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ // Features #define BF_OPENMP_ENABLED @HAVE_OPENMP@ From 7560a4d0c93f53015f3586bbfe5baef8de55408c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 10 Nov 2021 14:22:15 -0700 Subject: [PATCH 0329/1155] Updated the CHANGELOG for autoconf work. --- CHANGELOG | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 26660406e..9fd95e9c3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,10 @@ 0.9.1 * Fixed a problem with like_bmon.py crashing when there are a large number of pipelines * Added a CHANGELOG file + * Switched over to an autotools-based build system + * Added a .m4 file to help other autotools-based software find Bifrost + * Added a pkg-config file for Bifrost + * Made the Python API compatible with PEP479 0.9.0 * Added support for Python3 From 90dfc3d32948d1c6628d58f70c2375d8578d2ee5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 10 Nov 2021 14:51:00 -0700 Subject: [PATCH 0330/1155] Initial work on enabling cuda_managed on Pascal+ GPUs. --- python/bifrost/ndarray.py | 4 ++++ src/memory.cpp | 11 ++++++++--- src/utils.hpp | 6 ++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 396a2678e..bc12434da 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -116,6 +116,10 @@ def copy_array(dst, src): src_bf = asarray(src) if (space_accessible(dst_bf.bf.space, ['system']) and space_accessible(src_bf.bf.space, ['system'])): + if (src_bf.bf.space == 'cuda_managed' or + dst_bf.bf.space == 'cuda_managed'): + # TODO: Decide where/when these need to be called + device.stream_synchronize() np.copyto(dst_bf, src_bf) else: _check(_bf.bfArrayCopy(dst_bf.as_BFarray(), diff --git a/src/memory.cpp b/src/memory.cpp index 2b2abb57b..10f68335f 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -182,7 +182,8 @@ BFstatus bfMemcpy(void* dst, case BF_SPACE_CUDA_HOST: // fall-through case BF_SPACE_SYSTEM: ::memcpy(dst, src, count); return BF_STATUS_SUCCESS; case BF_SPACE_CUDA: kind = cudaMemcpyHostToDevice; break; - // TODO: BF_SPACE_CUDA_MANAGED + // Is this the right thing to do? + case BF_SPACE_CUDA_MANAGED: kind = cudaMemcpyDefault; break; default: BF_FAIL("Valid bfMemcpy dst space", BF_STATUS_INVALID_ARGUMENT); } break; @@ -191,12 +192,14 @@ BFstatus bfMemcpy(void* dst, switch( dst_space ) { case BF_SPACE_CUDA_HOST: // fall-through case BF_SPACE_SYSTEM: kind = cudaMemcpyDeviceToHost; break; - case BF_SPACE_CUDA: kind = cudaMemcpyDeviceToDevice; break; - // TODO: BF_SPACE_CUDA_MANAGED + case BF_SPACE_CUDA: kind = cudaMemcpyDeviceToDevice; break; + case BF_SPACE_CUDA_MANAGED: kind = cudaMemcpyDefault; break; default: BF_FAIL("Valid bfMemcpy dst space", BF_STATUS_INVALID_ARGUMENT); } break; } + // Is this the right thing to do? + case BF_SPACE_CUDA_MANAGED: kind = cudaMemcpyDefault; break; default: BF_FAIL("Valid bfMemcpy src space", BF_STATUS_INVALID_ARGUMENT); } BF_TRACE_STREAM(g_cuda_stream); @@ -264,6 +267,8 @@ BFstatus bfMemcpy2D(void* dst, } break; } + // Is this the right thing to do? + case BF_SPACE_CUDA_MANAGED: kind = cudaMemcpyDefault; break; default: BF_FAIL("Valid bfMemcpy2D src space", BF_STATUS_INVALID_ARGUMENT); } BF_TRACE_STREAM(g_cuda_stream); diff --git a/src/utils.hpp b/src/utils.hpp index c79bc2295..db9b0d03b 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -218,6 +218,12 @@ inline BFbool space_accessible_from(BFspace space, BFspace from) { space == BF_SPACE_CUDA_MANAGED); case BF_SPACE_CUDA: return (space == BF_SPACE_CUDA || space == BF_SPACE_CUDA_MANAGED); +#if BF_GPU_MANAGEDMEM + case BF_SPACE_CUDA_MANAGED: return (space == BF_SPACE_SYSTEM || + space == BF_SPACE_CUDA_HOST || + space == BF_SPACE_CUDA_MANAGED || + space == BF_SPACE_CUDA); +#endif // TODO: Need to use something else here? default: throw std::runtime_error("Internal error"); } From d0552ee589a81d06bc22f0de4d45b8761e0fe0ba Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 10 Nov 2021 14:58:35 -0700 Subject: [PATCH 0331/1155] Started working on a test suite for cuda_managed operations. --- test/test_managed.py | 304 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 304 insertions(+) create mode 100644 test/test_managed.py diff --git a/test/test_managed.py b/test/test_managed.py new file mode 100644 index 000000000..a2b4d26e1 --- /dev/null +++ b/test/test_managed.py @@ -0,0 +1,304 @@ + +# Copyright (c) 2021, The Bifrost Authors. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of The Bifrost Authors nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import ctypes +import unittest +import numpy as np +import bifrost as bf + +from bifrost.libbifrost_generated import BF_GPU_MANAGEDMEM + +# +# Map +# + +@unittest.skipUnless(BF_GPU_MANAGEDMEM, "requires GPU managed memory support") +class TestManagedMap(unittest.TestCase): + def setUp(self): + np.random.seed(1234) + def run_simple_test(self, x, funcstr, func): + x_orig = x + x = bf.asarray(x, 'cuda_managed') + y = bf.empty_like(x) + x.flags['WRITEABLE'] = False + x.bf.immutable = True # TODO: Is this actually doing anything? (flags is, just not sure about bf.immutable) + for _ in range(3): + bf.map(funcstr, {'x': x, 'y': y}) + if isinstance(x_orig, bf.ndarray): + x_orig = x + # Note: Using func(x) is dangerous because bf.ndarray does things like + # lazy .conj(), which break when used as if it were np.ndarray. + np.testing.assert_equal(y, func(x_orig)) + def run_simple_test_funcs(self, x): + self.run_simple_test(x, "y = x+1", lambda x: x + 1) + self.run_simple_test(x, "y = x*3", lambda x: x * 3) + # Note: Must use "f" suffix to avoid very slow double-precision math + self.run_simple_test(x, "y = rint(pow(x, 2.f))", lambda x: x**2) + self.run_simple_test(x, "auto tmp = x; y = tmp*tmp", lambda x: x * x) + self.run_simple_test(x, "y = x; y += x", lambda x: x + x) + def test_simple_2D(self): + n = 89 + x = np.random.randint(256, size=(n,n)) + self.run_simple_test_funcs(x) + def test_simple_2D_padded(self): + n = 89 + x = np.random.randint(256, size=(n,n)) + x = bf.asarray(x, space='cuda') + x = x[:,1:] + self.run_simple_test_funcs(x) + +# +# FFT +# + +# Note: Numpy FFTs are always double precision, which is good for this purpose +from numpy.fft import fftn as gold_fftn, ifftn as gold_ifftn +from numpy.fft import rfftn as gold_rfftn, irfftn as gold_irfftn +from bifrost.fft import Fft + +MTOL = 1e-6 # Relative tolerance at the mean magnitude +RTOL = 1e-1 + +def compare(result, gold): + #np.testing.assert_allclose(result, gold, RTOL, ATOL) + # Note: We compare using an absolute tolerance equal to a fraction of the + # mean magnitude. This ignores large relative errors on values with + # magnitudes much smaller than the mean. + absmean = np.abs(gold).mean() + np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) + +@unittest.skipUnless(BF_GPU_MANAGEDMEM, "requires GPU managed memory support") +class TestManagedFFT(unittest.TestCase): + def setUp(self): + np.random.seed(1234) + self.shape1D = (16777216,) + self.shape2D = (2048, 2048) + self.shape3D = (128, 128, 128) + self.shape4D = (32, 32, 32, 32) + # Note: Last dim must be even to avoid output alignment error + self.shape4D_odd = (33, 31, 65, 16) + def run_test_r2c_dtype(self, shape, axes, dtype=np.float32, scale=1., misalign=0): + known_data = np.random.normal(size=shape).astype(np.float32) + known_data = (known_data * scale).astype(dtype) + + # Force misaligned data + padded_shape = shape[:-1] + (shape[-1] + misalign,) + known_data = np.resize(known_data, padded_shape) + idata = bf.ndarray(known_data, space='cuda_managed') + known_data = known_data[..., misalign:] + idata = idata[..., misalign:] + + oshape = list(shape) + oshape[axes[-1]] = shape[axes[-1]] // 2 + 1 + odata = bf.ndarray(shape=oshape, dtype='cf32', space='cuda_managed') + fft = Fft() + fft.init(idata, odata, axes=axes) + fft.execute(idata, odata) + known_result = gold_rfftn(known_data.astype(np.float32) / scale, axes=axes) + compare(odata, known_result) + def run_test_r2c(self, shape, axes, dtype=np.float32): + self.run_test_r2c_dtype(shape, axes, np.float32) + # Note: Misalignment is not currently supported for fp32 + #self.run_test_r2c_dtype(shape, axes, np.float32, misalign=1) + #self.run_test_r2c_dtype(shape, axes, np.float16) # TODO: fp16 support + for misalign in range(4): + self.run_test_r2c_dtype(shape, axes, np.int16, (1 << 15) - 1, misalign=misalign) + for misalign in range(8): + self.run_test_r2c_dtype(shape, axes, np.int8, (1 << 7 ) - 1, misalign=misalign) + def test_r2c_1D(self): + self.run_test_r2c(self.shape1D, [0]) + def test_r2c_2D(self): + self.run_test_r2c(self.shape2D, [0, 1]) + def test_r2c_3D(self): + self.run_test_r2c(self.shape3D, [0, 1, 2]) + +# +# FIR +# + +from scipy.signal import lfilter, lfiltic +from bifrost.fir import Fir + +def compare(result, gold): + #np.testing.assert_allclose(result, gold, RTOL, ATOL) + # Note: We compare using an absolute tolerance equal to a fraction of the + # mean magnitude. This ignores large relative errors on values with + # magnitudes much smaller than the mean. + absmean = np.abs(gold).mean() + np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) + +@unittest.skipUnless(BF_GPU_MANAGEDMEM, "requires GPU managed memory support") +class TestManagedFIR(unittest.TestCase): + def setUp(self): + np.random.seed(1234) + self.shape2D = (10000, 96*2) + self.shape3D = (10000, 48, 4) + self.coeffs = np.array(( 0.0035002, -0.0053712, 0.0090177, -0.013789, 0.0196580, + -0.0264910, 0.0340400, -0.0419570, 0.049807, -0.0571210, + 0.0634200, -0.0682750, 0.0713370, 0.927620, 0.0713370, + -0.0682750, 0.0634200, -0.0571210, 0.049807, -0.0419570, + 0.0340400, -0.0264910, 0.0196580, -0.013789, 0.0090177, + -0.0053712, 0.0035002), dtype=np.float64) + def test_2d_initial(self): + shape = self.shape2D + known_data = np.random.normal(size=shape).astype(np.float32).view(np.complex64) + idata = bf.ndarray(known_data, space='cuda_managed') + odata = bf.empty_like(idata) + coeffs = self.coeffs*1.0 + coeffs.shape += (1,) + coeffs = np.repeat(coeffs, idata.shape[1], axis=1) + coeffs.shape = (coeffs.shape[0],idata.shape[1]) + coeffs = bf.ndarray(coeffs, space='cuda_managed') + + fir = Fir() + fir.init(coeffs, 1) + fir.execute(idata, odata) + + for i in range(known_data.shape[1]): + zf = lfiltic(self.coeffs, 1.0, 0.0) + known_result, zf = lfilter(self.coeffs, 1.0, known_data[:,i], zi=zf) + compare(odata[:,i], known_result) + def test_2d_active(self): + shape = self.shape2D + known_data = np.random.normal(size=shape).astype(np.float32).view(np.complex64) + idata = bf.ndarray(known_data, space='cuda_managed') + odata = bf.empty_like(idata) + coeffs = self.coeffs*1.0 + coeffs.shape += (1,) + coeffs = np.repeat(coeffs, idata.shape[1], axis=1) + coeffs.shape = (coeffs.shape[0],idata.shape[1]) + coeffs = bf.ndarray(coeffs, space='cuda_managed') + + fir = Fir() + fir.init(coeffs, 1) + fir.execute(idata, odata) + fir.execute(idata, odata) + + for i in range(known_data.shape[1]): + zf = lfiltic(self.coeffs, 1.0, 0.0) + known_result, zf = lfilter(self.coeffs, 1.0, known_data[:,i], zi=zf) + known_result, zf = lfilter(self.coeffs, 1.0, known_data[:,i], zi=zf) + compare(odata[:,i], known_result) + +# +# Reduce +# + +def stderr(data, axis): + return np.sum(data, axis=axis) / np.sqrt(data.shape[axis]) + +NP_OPS = { + 'sum': np.sum, + 'mean': np.mean, + 'min': np.min, + 'max': np.max, + 'stderr': stderr +} + +def scrunch(data, factor=2, axis=0, func=np.sum): + if factor is None: + factor = data.shape[axis] + s = data.shape + if s[axis] % factor != 0: + raise ValueError("Scrunch factor does not divide axis size") + s = s[:axis] + (s[axis]//factor, factor) + s[axis:][1:] + axis = axis + 1 if axis >= 0 else axis + return func(data.reshape(s), axis=axis) + +def pwrscrunch(data, factor=2, axis=0, func=np.sum): + if factor is None: + factor = data.shape[axis] + s = data.shape + if s[axis] % factor != 0: + raise ValueError("Scrunch factor does not divide axis size") + s = s[:axis] + (s[axis]//factor, factor) + s[axis:][1:] + axis = axis + 1 if axis >= 0 else axis + return func(np.abs(data.reshape(s))**2, axis=axis) + +@unittest.skipUnless(BF_GPU_MANAGEDMEM, "requires GPU managed memory support") +class TestManagedReduce(unittest.TestCase): + def setUp(self): + np.random.seed(1234) + def run_reduce_test(self, shape, axis, n, op='sum', dtype=np.float32): + a = ((np.random.random(size=shape)*2-1)*127).astype(np.int8).astype(dtype) + if op[:3] == 'pwr': + b_gold = pwrscrunch(a.astype(np.float32), n, axis, NP_OPS[op[3:]]) + else: + b_gold = scrunch(a.astype(np.float32), n, axis, NP_OPS[op]) + a = bf.asarray(a, space='cuda_managed') + b = bf.empty_like(b_gold, space='cuda_managed') + bf.reduce(a, b, op) + np.testing.assert_allclose(b, b_gold) + def test_reduce(self): + self.run_reduce_test((3,6,5), axis=1, n=2, op='sum', dtype=np.float32) + for shape in [(20,20,40), (20,40,60), (40,100,200)]: + for axis in range(3): + for n in [2, 4, 5, 10, None]: + for op in ['sum', 'mean', 'pwrsum', 'pwrmean']: + for dtype in [np.float32, np.int16, np.int8]: + self.run_reduce_test(shape, axis, n, op, dtype) + +# +# Unpack +# + +import bifrost.unpack + +@unittest.skipUnless(BF_GPU_MANAGEDMEM, "requires GPU managed memory support") +class TestManagedUnpack(unittest.TestCase): + def run_unpack_to_ci8_test(self, iarray): + oarray = bf.ndarray(shape=iarray.shape, dtype='ci8', space='cuda_managed') + oarray_known = bf.ndarray([[(0, 1), (2, 3)], + [(4, 5), (6, 7)], + [(-8, -7), (-6, -5)]], + dtype='ci8') + bf.unpack.unpack(iarray.copy(space='cuda_managed'), oarray) + np.testing.assert_equal(oarray, oarray_known) + def test_ci4_to_ci8(self): + iarray = bf.ndarray([[(0x10,),(0x32,)], + [(0x54,),(0x76,)], + [(0x98,),(0xBA,)]], + dtype='ci4') + self.run_unpack_to_ci8_test(iarray) + def test_ci4_to_ci8_byteswap(self): + iarray = bf.ndarray([[(0x01,),(0x23,)], + [(0x45,),(0x67,)], + [(0x89,),(0xAB,)]], + dtype='ci4') + self.run_unpack_to_ci8_test(iarray.byteswap()) + def test_ci4_to_ci8_conjugate(self): + iarray = bf.ndarray([[(0xF0,),(0xD2,)], + [(0xB4,),(0x96,)], + [(0x78,),(0x5A,)]], + dtype='ci4') + self.run_unpack_to_ci8_test(iarray.conj()) + def test_ci4_to_ci8_byteswap_conjugate(self): + iarray = bf.ndarray([[(0x0F,),(0x2D,)], + [(0x4B,),(0x69,)], + [(0x87,),(0xA5,)]], + dtype='ci4') + self.run_unpack_to_ci8_test(iarray.byteswap().conj()) From cb0c7a23f3fb28c6611ed8346b82e7b01113453e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 11 Nov 2021 10:18:11 -0700 Subject: [PATCH 0332/1155] Added support for ci32 data in bifrost.map (#130). --- src/Complex.hpp | 15 ++++++++++++++- src/array_utils.hpp | 4 ++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Complex.hpp b/src/Complex.hpp index 47f218f3c..dcc1b9a88 100644 --- a/src/Complex.hpp +++ b/src/Complex.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -88,6 +88,16 @@ inline __host__ __device__ void quantize(F f, unsigned short* q) { *q = max(min(rint(f), +65535), 0); } +template +inline __host__ __device__ +void quantize(F f, signed int* q) { + *q = max(min(rint(f), +2147483647), -2147483647); +} +template +inline __host__ __device__ +void quantize(F f, unsigned int* q) { + *q = max(min(rint(f), +4294967295), 0); +} template inline __host__ __device__ @@ -111,6 +121,7 @@ template<> struct is_floating_point { enum { value = true }; }; template struct is_storage_type { enum { value = false }; }; template<> struct is_storage_type { enum { value = true }; }; template<> struct is_storage_type { enum { value = true }; }; +template<> struct is_storage_type { enum { value = true }; }; #if defined(__CUDACC_VER_MAJOR__) && __CUDACC_VER_MAJOR__ >= 9 // TODO: Complex breaks because there's no half(int) constructor //template<> struct is_storage_type { enum { value = true }; }; @@ -169,8 +180,10 @@ Complex c) : x((c.real_imag & 0xF0)/4), y(((c.real_imag & 0x0F) << 4)/4) {} inline __host__ __device__ Complex(Complex c) : x(c.x), y(c.y) {} inline __host__ __device__ Complex(Complex c) : x(c.x), y(c.y) {} + inline __host__ __device__ Complex(Complex c) : x(c.x), y(c.y) {} #if defined(__CUDACC_VER_MAJOR__) && __CUDACC_VER_MAJOR__ >= 9 //inline __device__ Complex(Complex c) : x(__half2float(c.x)), y(__half2float(c.y)) {} #endif diff --git a/src/array_utils.hpp b/src/array_utils.hpp index 5c83cb44e..f7d84d4f9 100644 --- a/src/array_utils.hpp +++ b/src/array_utils.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,7 +60,7 @@ inline std::string dtype2ctype_string(BFdtype dtype) { case BF_DTYPE_CI4: return "Complex"; case BF_DTYPE_CI8: return "Complex"; case BF_DTYPE_CI16: return "Complex"; - //case BF_DTYPE_CI32: return "complex"; + case BF_DTYPE_CI32: return "Complex"; //case BF_DTYPE_CI64: return "complex"; case BF_DTYPE_CF32: return "Complex";//complex"; case BF_DTYPE_CF64: return "Complex"; From f7f9e7b2794d02209f99e352d4f90c51f61bd87e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 12 Nov 2021 13:43:37 -0700 Subject: [PATCH 0333/1155] Added a note about import errors under Python. --- Makefile.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile.in b/Makefile.in index ce771071e..bce69d1fb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -33,6 +33,10 @@ endif install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) $(INSTALL_DAT_DIR)/$(BIFROST_NAME) $(INSTALL_LIB_DIR)/pkgconfig ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) install + @echo "If you have trouble importing Bifrost from Python you may need" + @echo "to set LD_LIBRARY_PATH to $(INSTALL_LIB_DIR) or have your" + @echo "system administrator add this directory to '/etc/ld.so.conf'." + @eho "" endif @echo "Libraries have been installed in:" @echo " $(INSTALL_LIB_DIR)" From 9311b59f15ff7262126fc6de83d01490c6135902 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 15 Nov 2021 10:20:57 -0700 Subject: [PATCH 0334/1155] Try GitHub Actions. --- .github/workflow/bifrost.yml | 59 ++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 .github/workflow/bifrost.yml diff --git a/.github/workflow/bifrost.yml b/.github/workflow/bifrost.yml new file mode 100644 index 000000000..2ac8fc962 --- /dev/null +++ b/.github/workflow/bifrost.yml @@ -0,0 +1,59 @@ +name: Bifrost +on: [push, pull_request] +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + python-version: ['2.7', '3.6', '3.8'] + fail-fast: false + steps: + - if: ${{ matrix.os == 'ubuntu-latest' }} + run: sudo apt-get install -y \ + build-essential \ + ca-certificates \ + curl \ + exuberant-ctags \ + gfortran \ + git \ + libopenblas-dev \ + pkg-config \ + software-properties-common + - if: ${{ matrix.os == 'macos-latest' }} + run: brew install \ + curl \ + ctags-exuberant \ + gawk \ + git \ + gnu-sed \ + pkg-config + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - uses: actions/checkout@v2 + - run: python -m pip install \ + setuptools \ + numpy \ + matplotlib \ + contextlib2 \ + simplejson \ + pint \ + graphviz git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ + coveralls \ + codecov + - run: | + ./configure + make -j all + sudo make install + - env: + LD_LIBRARY_PATH: /usr/local/lib:${LD_LIBRARY_PATH} + run: | + python -m pip install scipy + cd test + bash ./travis.sh + - run: | + cd test + codecov + coveralls -v --service=github-actions + From 12d4dcf6e6a0515195995623fa24794fead03ae9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 15 Nov 2021 10:23:05 -0700 Subject: [PATCH 0335/1155] Plural. --- .github/{workflow => workflows}/bifrost.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{workflow => workflows}/bifrost.yml (100%) diff --git a/.github/workflow/bifrost.yml b/.github/workflows/bifrost.yml similarity index 100% rename from .github/workflow/bifrost.yml rename to .github/workflows/bifrost.yml From d7d900b6cbd7fe061a94c11d75bba9d448f8114b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 15 Nov 2021 10:26:40 -0700 Subject: [PATCH 0336/1155] What about this? --- .github/workflows/bifrost.yml | 36 ++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/.github/workflows/bifrost.yml b/.github/workflows/bifrost.yml index 2ac8fc962..7e9419fd6 100644 --- a/.github/workflows/bifrost.yml +++ b/.github/workflows/bifrost.yml @@ -10,24 +10,26 @@ jobs: fail-fast: false steps: - if: ${{ matrix.os == 'ubuntu-latest' }} - run: sudo apt-get install -y \ - build-essential \ - ca-certificates \ - curl \ - exuberant-ctags \ - gfortran \ - git \ - libopenblas-dev \ - pkg-config \ - software-properties-common + run: | + sudo apt-get install -y \ + build-essential \ + ca-certificates \ + curl \ + exuberant-ctags \ + gfortran \ + git \ + libopenblas-dev \ + pkg-config \ + software-properties-common - if: ${{ matrix.os == 'macos-latest' }} - run: brew install \ - curl \ - ctags-exuberant \ - gawk \ - git \ - gnu-sed \ - pkg-config + run: | + brew install \ + curl \ + ctags-exuberant \ + gawk \ + git \ + gnu-sed \ + pkg-config - uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} From 29f4840395780adf86d5faa6d55a7f7fd291c92c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 15 Nov 2021 10:31:25 -0700 Subject: [PATCH 0337/1155] "eho", priceless. --- Makefile.in | 4 ---- python/Makefile.in | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile.in b/Makefile.in index bce69d1fb..ce771071e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -33,10 +33,6 @@ endif install: $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_INC_DIR)/$(BIFROST_NAME) $(INSTALL_DAT_DIR)/$(BIFROST_NAME) $(INSTALL_LIB_DIR)/pkgconfig ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) install - @echo "If you have trouble importing Bifrost from Python you may need" - @echo "to set LD_LIBRARY_PATH to $(INSTALL_LIB_DIR) or have your" - @echo "system administrator add this directory to '/etc/ld.so.conf'." - @eho "" endif @echo "Libraries have been installed in:" @echo " $(INSTALL_LIB_DIR)" diff --git a/python/Makefile.in b/python/Makefile.in index 8728232b4..e295bd7ea 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -58,6 +58,10 @@ ifeq ($(DRY_RUN),0) else @echo "@PYTHON@ -m pip install @PYINSTALLFLAGS@ ." endif + @echo "If you have trouble importing Bifrost from Python you may need" + @echo "to set LD_LIBRARY_PATH to $(INSTALL_LIB_DIR) or have your" + @echo "system administrator add this directory to '/etc/ld.so.conf'." + @echo "" .PHONY: install clean: From 7f3c308f9c2e8eda70e54b5e7eaa60ef0340342a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 15 Nov 2021 11:27:42 -0700 Subject: [PATCH 0338/1155] Use GITHUB_TOKEN. --- .github/workflows/bifrost.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/bifrost.yml b/.github/workflows/bifrost.yml index 7e9419fd6..98824ada4 100644 --- a/.github/workflows/bifrost.yml +++ b/.github/workflows/bifrost.yml @@ -54,7 +54,9 @@ jobs: python -m pip install scipy cd test bash ./travis.sh - - run: | + - env: + GITHUB_TOKEN: ${{ secrets.COVERALLS_TOKEN }} + run: | cd test codecov coveralls -v --service=github-actions From 3c8423be4c61a98f9af7692f54e34c5742d409d7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 15 Nov 2021 12:08:00 -0700 Subject: [PATCH 0339/1155] Drop coveralls. --- .github/workflows/bifrost.yml | 9 ++------- README.md | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/bifrost.yml b/.github/workflows/bifrost.yml index 98824ada4..ef28b9c5e 100644 --- a/.github/workflows/bifrost.yml +++ b/.github/workflows/bifrost.yml @@ -1,4 +1,4 @@ -name: Bifrost +name: "Build and Test" on: [push, pull_request] jobs: build: @@ -42,7 +42,6 @@ jobs: simplejson \ pint \ graphviz git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ - coveralls \ codecov - run: | ./configure @@ -54,10 +53,6 @@ jobs: python -m pip install scipy cd test bash ./travis.sh - - env: - GITHUB_TOKEN: ${{ secrets.COVERALLS_TOKEN }} - run: | + - run: | cd test codecov - coveralls -v --service=github-actions - diff --git a/README.md b/README.md index f419e8220..501a3d00f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ | **`CPU build`** | **`GPU build`** | **`Coverage`** | |-----------------|-----------------|----------------| -|[![Travis](https://travis-ci.com/ledatelescope/bifrost.svg?branch=master)](https://travis-ci.com/ledatelescope/bifrost) | [![Build Status](https://fornax.phys.unm.edu/jenkins/buildStatus/icon?job=Bifrost)](https://fornax.phys.unm.edu/jenkins/job/Bifrost/) | [![Coverage Status](https://coveralls.io/repos/github/ledatelescope/bifrost/badge.svg)](https://coveralls.io/github/ledatelescope/bifrost) | +|[![Travis](https://travis-ci.com/ledatelescope/bifrost.svg?branch=master)](https://travis-ci.com/ledatelescope/bifrost) | [![Build Status](https://fornax.phys.unm.edu/jenkins/buildStatus/icon?job=Bifrost)](https://fornax.phys.unm.edu/jenkins/job/Bifrost/) | [![Coverage Status](https://codecov.io/gh/ledatelescope/bifrost/branch/master/graph/badge.svg?token=f3ge1zWe5P)](https://codecov.io/gh/ledatelescope/bifrost) | A stream processing framework for high-throughput applications. From 8be26c1c5be163fdaaa82369e36e09b3b13c2e11 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 15 Nov 2021 12:11:15 -0700 Subject: [PATCH 0340/1155] Add descriptive names. --- .github/workflows/bifrost.yml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/bifrost.yml b/.github/workflows/bifrost.yml index ef28b9c5e..2f6e5e4a3 100644 --- a/.github/workflows/bifrost.yml +++ b/.github/workflows/bifrost.yml @@ -9,7 +9,8 @@ jobs: python-version: ['2.7', '3.6', '3.8'] fail-fast: false steps: - - if: ${{ matrix.os == 'ubuntu-latest' }} + - name: "Software Install - Ubuntu" + if: ${{ matrix.os == 'ubuntu-latest' }} run: | sudo apt-get install -y \ build-essential \ @@ -21,7 +22,8 @@ jobs: libopenblas-dev \ pkg-config \ software-properties-common - - if: ${{ matrix.os == 'macos-latest' }} + - name: "Software Install - MacOS" + if: ${{ matrix.os == 'macos-latest' }} run: | brew install \ curl \ @@ -34,7 +36,8 @@ jobs: with: python-version: ${{ matrix.python-version }} - uses: actions/checkout@v2 - - run: python -m pip install \ + - name: "Software Install - Python" + run: python -m pip install \ setuptools \ numpy \ matplotlib \ @@ -43,16 +46,19 @@ jobs: pint \ graphviz git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ codecov - - run: | + - name: "Build and Install" + run: | ./configure make -j all sudo make install - - env: + - name: Test + env: LD_LIBRARY_PATH: /usr/local/lib:${LD_LIBRARY_PATH} run: | python -m pip install scipy cd test bash ./travis.sh - - run: | + - name: "Upload to Codecov" + run: | cd test codecov From 6280a59839eb9f3a37cdd40c837100377f725fec Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 15 Nov 2021 12:52:37 -0700 Subject: [PATCH 0341/1155] Rename and rebadge. --- .github/workflows/{bifrost.yml => main.yml} | 0 README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{bifrost.yml => main.yml} (100%) diff --git a/.github/workflows/bifrost.yml b/.github/workflows/main.yml similarity index 100% rename from .github/workflows/bifrost.yml rename to .github/workflows/main.yml diff --git a/README.md b/README.md index f419e8220..9474f227a 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ | **`CPU build`** | **`GPU build`** | **`Coverage`** | |-----------------|-----------------|----------------| -|[![Travis](https://travis-ci.com/ledatelescope/bifrost.svg?branch=master)](https://travis-ci.com/ledatelescope/bifrost) | [![Build Status](https://fornax.phys.unm.edu/jenkins/buildStatus/icon?job=Bifrost)](https://fornax.phys.unm.edu/jenkins/job/Bifrost/) | [![Coverage Status](https://coveralls.io/repos/github/ledatelescope/bifrost/badge.svg)](https://coveralls.io/github/ledatelescope/bifrost) | +|[![GHA](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml/badge.svg)](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml) | [![Build Status](https://fornax.phys.unm.edu/jenkins/buildStatus/icon?job=Bifrost)](https://fornax.phys.unm.edu/jenkins/job/Bifrost/) | [![Coverage Status](https://coveralls.io/repos/github/ledatelescope/bifrost/badge.svg)](https://coveralls.io/github/ledatelescope/bifrost) | A stream processing framework for high-throughput applications. From 523ee33a6fd7c188c940a36ac580b255bb843096 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 16 Nov 2021 09:55:42 -0700 Subject: [PATCH 0342/1155] Added in an explicit stream_synchronize() after each cuda_managed call to make sure the kernels finish before we compare. --- test/test_managed.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/test_managed.py b/test/test_managed.py index a2b4d26e1..7aba0d512 100644 --- a/test/test_managed.py +++ b/test/test_managed.py @@ -31,6 +31,7 @@ import bifrost as bf from bifrost.libbifrost_generated import BF_GPU_MANAGEDMEM +from bifrost.device import stream_synchronize # # Map @@ -48,6 +49,7 @@ def run_simple_test(self, x, funcstr, func): x.bf.immutable = True # TODO: Is this actually doing anything? (flags is, just not sure about bf.immutable) for _ in range(3): bf.map(funcstr, {'x': x, 'y': y}) + stream_synchronize() if isinstance(x_orig, bf.ndarray): x_orig = x # Note: Using func(x) is dangerous because bf.ndarray does things like @@ -118,6 +120,7 @@ def run_test_r2c_dtype(self, shape, axes, dtype=np.float32, scale=1., misalign=0 fft = Fft() fft.init(idata, odata, axes=axes) fft.execute(idata, odata) + stream_synchronize() known_result = gold_rfftn(known_data.astype(np.float32) / scale, axes=axes) compare(odata, known_result) def run_test_r2c(self, shape, axes, dtype=np.float32): @@ -177,6 +180,7 @@ def test_2d_initial(self): fir = Fir() fir.init(coeffs, 1) fir.execute(idata, odata) + stream_synchronize() for i in range(known_data.shape[1]): zf = lfiltic(self.coeffs, 1.0, 0.0) @@ -197,6 +201,7 @@ def test_2d_active(self): fir.init(coeffs, 1) fir.execute(idata, odata) fir.execute(idata, odata) + stream_synchronize() for i in range(known_data.shape[1]): zf = lfiltic(self.coeffs, 1.0, 0.0) @@ -252,6 +257,7 @@ def run_reduce_test(self, shape, axis, n, op='sum', dtype=np.float32): a = bf.asarray(a, space='cuda_managed') b = bf.empty_like(b_gold, space='cuda_managed') bf.reduce(a, b, op) + stream_synchronize() np.testing.assert_allclose(b, b_gold) def test_reduce(self): self.run_reduce_test((3,6,5), axis=1, n=2, op='sum', dtype=np.float32) @@ -277,6 +283,7 @@ def run_unpack_to_ci8_test(self, iarray): [(-8, -7), (-6, -5)]], dtype='ci8') bf.unpack.unpack(iarray.copy(space='cuda_managed'), oarray) + stream_synchronize() np.testing.assert_equal(oarray, oarray_known) def test_ci4_to_ci8(self): iarray = bf.ndarray([[(0x10,),(0x32,)], From c3b263b99f18164c8ee83b3219a86aa2c7805e76 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 16 Nov 2021 09:57:27 -0700 Subject: [PATCH 0343/1155] Actually check the dtypes. --- src/romein.cu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/romein.cu b/src/romein.cu index 5e8ab85ee..68d45575d 100644 --- a/src/romein.cu +++ b/src/romein.cu @@ -367,7 +367,7 @@ public: BF_TRACE(); BF_TRACE_STREAM(_stream); BF_ASSERT_EXCEPTION(kernels->dtype == BF_DTYPE_CF32 \ - || BF_DTYPE_CF64, BF_STATUS_UNSUPPORTED_DTYPE); + || kernels->dtype == BF_DTYPE_CF64, BF_STATUS_UNSUPPORTED_DTYPE); int nkernels = kernels->shape[0]; for(int i=1; indim-4; ++i) { @@ -386,7 +386,7 @@ public: BF_ASSERT_EXCEPTION(_z != NULL, BF_STATUS_INVALID_STATE); BF_ASSERT_EXCEPTION(_kernels != NULL, BF_STATUS_INVALID_STATE); BF_ASSERT_EXCEPTION(out->dtype == BF_DTYPE_CF32 \ - || BF_DTYPE_CF64, BF_STATUS_UNSUPPORTED_DTYPE); + || out->dtype == BF_DTYPE_CF64, BF_STATUS_UNSUPPORTED_DTYPE); BF_CHECK_CUDA_EXCEPTION(cudaGetLastError(), BF_STATUS_INTERNAL_ERROR); From 5a6e6bdf206962dba5becb866465ed94d0007063 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 16 Nov 2021 10:32:34 -0700 Subject: [PATCH 0344/1155] Fixed the ci4 to cf32 conversion. --- src/Complex.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Complex.hpp b/src/Complex.hpp index dcc1b9a88..d9930a786 100644 --- a/src/Complex.hpp +++ b/src/Complex.hpp @@ -180,7 +180,7 @@ Complex c) : x((c.real_imag & 0xF0)/4), y(((c.real_imag & 0x0F) << 4)/4) {} + inline __host__ __device__ Complex(Complex c) : x(((signed char) (c.real_imag & 0xF0))/16), y(((signed char) ((c.real_imag & 0x0F) << 4))/16) {} inline __host__ __device__ Complex(Complex c) : x(c.x), y(c.y) {} inline __host__ __device__ Complex(Complex c) : x(c.x), y(c.y) {} inline __host__ __device__ Complex(Complex c) : x(c.x), y(c.y) {} From dfb73ce8f82cccb4d6fa7e82457e1cebec26e7bb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 16 Nov 2021 10:34:17 -0700 Subject: [PATCH 0345/1155] Added tests for the complex integer types. --- test/test_map.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/test/test_map.py b/test/test_map.py index 9dae19baa..dd20781f2 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -131,7 +131,7 @@ def test_shift(self): a = a.copy('system') b = b.copy('system') np.testing.assert_equal(b, np.fft.fftshift(a)) - def test_complex(self): + def test_complex_float(self): n = 89 real = np.random.randint(-127, 128, size=(n,n)).astype(np.float32) imag = np.random.randint(-127, 128, size=(n,n)).astype(np.float32) @@ -141,6 +141,39 @@ def test_complex(self): self.run_simple_test(x, "y = x*x.conj()", lambda x: x * x.conj()) self.run_simple_test(x, "y = x.mag2()", lambda x: x * x.conj()) self.run_simple_test(x, "y = 3*x", lambda x: 3 * x) + def test_complex_integer(self): + n = 7919 + for in_dtype in ('ci4', 'ci8', 'ci16', 'ci32'): + a_orig = bf.ndarray(shape=(n,), dtype=in_dtype, space='system') + try: + a_orig['re'] = np.random.randint(256, size=n) + a_orig['im'] = np.random.randint(256, size=n) + except ValueError: + # ci4 is different + a_orig['re_im'] = np.random.randint(256, size=n) + for out_dtype in (in_dtype, 'cf32'): + a = a_orig.copy(space='cuda') + b = bf.ndarray(shape=(n,), dtype=out_dtype, space='cuda') + bf.map('b(i) = a(i)', {'a': a, 'b': b}, shape=a.shape, axis_names=('i',)) + a = a.copy(space='system') + try: + a = a['re'] + 1j*a['im'] + except ValueError: + # ci4 is different + a = np.int8(a['re_im'] & 0xF0) + 1j*np.int8((a['re_im'] & 0x0F) << 4) + a /= 16 + b = b.copy(space='system') + try: + b = b['re'] + 1j*b['im'] + except ValueError: + # ci4 is different + b = np.int8(b['re_im'] & 0xF0) + 1j*np.int8((b['re_im'] & 0x0F) << 4) + b /= 16 + except IndexError: + # pass through cf32 + pass + np.testing.assert_equal(a, b) + def test_polarisation_products(self): n = 89 real = np.random.randint(-127, 128, size=(n,2)).astype(np.float32) From 22d091a3dcd9a379e6a9c97d1112af6eae30a888 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 16 Nov 2021 10:37:07 -0700 Subject: [PATCH 0346/1155] Added support for cuda_managed (#111) and ci32 in bf.map (#130). --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 9fd95e9c3..f759a25ac 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,8 @@ * Added a .m4 file to help other autotools-based software find Bifrost * Added a pkg-config file for Bifrost * Made the Python API compatible with PEP479 + * Added support for the cuda_managed space on Pascal and later GPUs + * Added support for ci32 in bf.map 0.9.0 * Added support for Python3 From e19ff209defdf5dc2c97898af494e10232163d12 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 17 Nov 2021 12:06:10 -0700 Subject: [PATCH 0347/1155] Check if -march=native actually works. --- config/native.m4 | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 config/native.m4 diff --git a/config/native.m4 b/config/native.m4 new file mode 100644 index 000000000..9aba13e44 --- /dev/null +++ b/config/native.m4 @@ -0,0 +1,27 @@ +AC_DEFUN([AX_CHECK_NATIVE_ARCH], +[ + AC_PROVIDE([AX_CHECK_NATIVE_ARCH]) + AC_ARG_ENABLE([native_arch], + [AS_HELP_STRING([--disable-native-arch], + [disable native architecture compilation (default=no)])], + [enable_native_arch=no], + [enable_native_arch=yes]) + + if test "$enable_native_arch" = "yes"; then + AC_MSG_CHECKING([if the compiler accepts '-march=native']) + + CXXFLAGS_temp="$CXXFLAGS -march=native" + + ac_compile='$CXX -c $CXXFLAGS_temp conftest.$ac_ext >&5' + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]], + [[ + int i = 5;]])], + [CXXFLAGS="$CXXFLAGS -march=native" + NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" + AC_MSG_RESULT(yes)], + [AC_SUBST([enable_native_arch], [no]) + AC_MSG_RESULT(no)]) + fi +]) From df52af002e2442d767349031c0d13f898e563d03 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 17 Nov 2021 12:07:04 -0700 Subject: [PATCH 0348/1155] Toggle long double aka float128 support off on platforms where it is not supported. --- configure | 28934 ++++++++++++++++++----------------- configure.ac | 16 +- python/bifrost/DataType.py | 15 +- python/bifrost/dtype.py | 7 +- src/array_utils.hpp | 4 + src/bifrost/array.h | 6 +- src/bifrost/config.h.in | 1 + 7 files changed, 14889 insertions(+), 14094 deletions(-) diff --git a/configure b/configure index 603b8382f..fd073f34d 100755 --- a/configure +++ b/configure @@ -1,9 +1,10 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. +# Generated by GNU Autoconf 2.71 for bifrost 0.9.0. # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -14,14 +15,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -31,46 +34,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -94,8 +90,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -107,30 +107,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -152,20 +132,22 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -185,12 +167,15 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -205,30 +190,38 @@ test -x / || exit 1" test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -236,14 +229,21 @@ fi esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -261,18 +261,19 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -299,6 +300,7 @@ as_fn_unset () } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -316,6 +318,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -330,7 +340,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -339,7 +349,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -378,12 +388,13 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -395,18 +406,27 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -418,9 +438,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -447,7 +467,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -491,7 +511,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -505,6 +525,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -518,6 +542,13 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -595,40 +626,36 @@ PACKAGE_URL='https://github.com/ledatelescope/bifrost/' ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= ac_subst_vars='OPTIONS LTLIBOBJS PACKAGE_VERSION_MICRO @@ -680,6 +707,7 @@ PYBUILDFLAGS PYTHON HAVE_PYTHON HAVE_CUDA_DEBUG +enable_native_arch HAVE_TRACE HAVE_DEBUG HAVE_TMPFS @@ -696,6 +724,7 @@ CUDA_HOME HAVE_VMA HAVE_HWLOC HAVE_NUMA +HAVE_FLOAT128 HAVE_OPENMP LIBOBJS HAVE_RECVMSG @@ -708,7 +737,6 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CXXCPP -CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -844,7 +872,6 @@ CXX CXXFLAGS CCC LT_SYS_LIBRARY_PATH -CPP CXXCPP CTAGS PYTHON @@ -918,8 +945,6 @@ do *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -960,9 +985,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -986,9 +1011,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1199,9 +1224,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1215,9 +1240,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1261,9 +1286,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1279,7 +1304,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1343,7 +1368,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1537,7 +1562,6 @@ Some influential environment variables: CXXFLAGS C++ compiler flags LT_SYS_LIBRARY_PATH User-defined run-time library search path. - CPP C preprocessor CXXCPP C++ preprocessor CTAGS Absolute path to ctags executable PYTHON Absolute path to python executable @@ -1565,9 +1589,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1595,7 +1619,8 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1603,7 +1628,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1613,9 +1638,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF bifrost configure 0.9.0 -generated by GNU Autoconf 2.69 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1632,14 +1657,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1647,14 +1672,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1670,14 +1696,14 @@ fi ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1685,14 +1711,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1708,14 +1735,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1723,17 +1750,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1755,120 +1783,44 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1876,16 +1828,9 @@ else #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1903,24 +1848,25 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func @@ -1937,7 +1883,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1945,14 +1891,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1968,14 +1915,14 @@ fi ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1983,17 +1930,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2014,11 +1962,12 @@ fi ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -2026,16 +1975,9 @@ else #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -2053,114 +1995,61 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no +if ac_fn_cxx_try_compile "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_cxx_check_header_mongrel +} # ac_fn_cxx_check_header_compile # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- @@ -2169,17 +2058,18 @@ fi ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof ($2)) return 0; @@ -2187,12 +2077,13 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof (($2))) return 0; @@ -2200,26 +2091,27 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_try_run LINENO # ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -2229,25 +2121,26 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -2265,11 +2158,12 @@ fi ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 -$as_echo_n "checking for int$2_t... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +printf %s "checking for int$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2280,7 +2174,7 @@ else $ac_includes_default enum { N = $2 / 2 - 1 }; int -main () +main (void) { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; @@ -2290,13 +2184,14 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int -main () +main (void) { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; @@ -2307,9 +2202,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( @@ -2317,19 +2213,20 @@ else eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no"; then : +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : -else +else $as_nop break fi done fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t @@ -2341,11 +2238,12 @@ $as_echo "$ac_res" >&6; } ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 -$as_echo_n "checking for uint$2_t... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +printf %s "checking for uint$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2355,7 +2253,7 @@ else /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; @@ -2365,7 +2263,8 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( @@ -2373,28 +2272,49 @@ if ac_fn_cxx_try_compile "$LINENO"; then : eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no"; then : +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : -else +else $as_nop break fi done fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2427,8 +2347,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2463,7 +2387,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2498,11 +2422,13 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2513,8 +2439,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2538,7 +2464,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2546,14 +2472,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2561,15 +2487,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2577,8 +2503,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2592,63 +2518,48 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2658,1157 +2569,903 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; -ac_aux_dir= -for ac_dir in config "$srcdir"/config; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 -fi +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} -: ${CXXFLAGS="-O3 -Wall -pedantic"} +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; -# -# Programs -# +struct incomplete_array +{ + int datasize; + double data[]; +}; -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac +struct named_init { + int number; + const wchar_t *name; + double average; +}; +typedef const char *ccp; +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} -macro_version='2.4.6' -macro_revision='2.4.6' +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + const char *str = ""; + int number = 0; + float fnumber = 0; + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + return *str && number && fnumber; +} +' +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' -ltmain=$ac_aux_dir/ltmain.sh +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" +# Test code for whether the C++ compiler supports C++98 (global declarations) +ac_cxx_conftest_cxx98_globals=' +// Does the compiler advertise C++98 conformance? +#if !defined __cplusplus || __cplusplus < 199711L +# error "Compiler does not advertise C++98 conformance" +#endif -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +// These inclusions are to reject old compilers that +// lack the unsuffixed header files. +#include +#include -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' +// and are *not* freestanding headers in C++98. +extern void assert (int); +namespace std { + extern int strcmp (const char *, const char *); +} -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' +// Namespaces, exceptions, and templates were all added after "C++ 2.0". +using std::exception; +using std::strcmp; -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' +namespace { -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' +void test_exception_syntax() +{ + try { + throw "test"; + } catch (const char *s) { + // Extra parentheses suppress a warning when building autoconf itself, + // due to lint rules shared with more typical C programs. + assert (!(strcmp) (s, "test")); + } +} -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO +template struct test_template +{ + T const val; + explicit test_template(T t) : val(t) {} + template T add(U u) { return static_cast(u) + val; } +}; -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi +} // anonymous namespace +' -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () +# Test code for whether the C++ compiler supports C++98 (body of main) +ac_cxx_conftest_cxx98_main=' + assert (argc); + assert (! argv[0]); { - $ECHO "" + test_exception_syntax (); + test_template tt (2.0); + assert (tt.add (4) == 6.0); + assert (true && !false); } +' -case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac +# Test code for whether the C++ compiler supports C++11 (global declarations) +ac_cxx_conftest_cxx11_globals=' +// Does the compiler advertise C++ 2011 conformance? +#if !defined __cplusplus || __cplusplus < 201103L +# error "Compiler does not advertise C++11 conformance" +#endif +namespace cxx11test +{ + constexpr int get_val() { return 20; } + struct testinit + { + int i; + double d; + }; + class delegate + { + public: + delegate(int n) : n(n) {} + delegate(): delegate(2354) {} + virtual int getval() { return this->n; }; + protected: + int n; + }; + class overridden : public delegate + { + public: + overridden(int n): delegate(n) {} + virtual int getval() override final { return this->n * 2; } + }; + class nocopy + { + public: + nocopy(int i): i(i) {} + nocopy() = default; + nocopy(const nocopy&) = delete; + nocopy & operator=(const nocopy&) = delete; + private: + int i; + }; + + // for testing lambda expressions + template Ret eval(Fn f, Ret v) + { + return f(v); + } + // for testing variadic templates and trailing return types + template auto sum(V first) -> V + { + return first; + } + template auto sum(V first, Args... rest) -> V + { + return first + sum(rest...); + } +} +' +# Test code for whether the C++ compiler supports C++11 (body of main) +ac_cxx_conftest_cxx11_main=' +{ + // Test auto and decltype + auto a1 = 6538; + auto a2 = 48573953.4; + auto a3 = "String literal"; + int total = 0; + for (auto i = a3; *i; ++i) { total += *i; } + decltype(a2) a4 = 34895.034; +} +{ + // Test constexpr + short sa[cxx11test::get_val()] = { 0 }; +} +{ + // Test initializer lists + cxx11test::testinit il = { 4323, 435234.23544 }; +} +{ + // Test range-based for + int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, + 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; + for (auto &x : array) { x += 23; } +} +{ + // Test lambda expressions + using cxx11test::eval; + assert (eval ([](int x) { return x*2; }, 21) == 42); + double d = 2.0; + assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); + assert (d == 5.0); + assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); + assert (d == 5.0); +} +{ + // Test use of variadic templates + using cxx11test::sum; + auto a = sum(1); + auto b = sum(1, 2); + auto c = sum(1.0, 2.0, 3.0); +} +{ + // Test constructor delegation + cxx11test::delegate d1; + cxx11test::delegate d2(); + cxx11test::delegate d3(45); +} +{ + // Test override and final + cxx11test::overridden o1(55464); +} +{ + // Test nullptr + char *c = nullptr; +} +{ + // Test template brackets + test_template<::test_template> v(test_template(12)); +} +{ + // Unicode literals + char const *utf8 = u8"UTF-8 string \u2500"; + char16_t const *utf16 = u"UTF-8 string \u2500"; + char32_t const *utf32 = U"UTF-32 string \u2500"; +} +' +# Test code for whether the C compiler supports C++11 (complete). +ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} +${ac_cxx_conftest_cxx11_globals} +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + ${ac_cxx_conftest_cxx11_main} + return ok; +} +" +# Test code for whether the C compiler supports C++98 (complete). +ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + return ok; +} +" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" + +# Auxiliary files required by this configure script. +ac_aux_files="install-sh config.guess config.sub ltmain.sh" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}/config" + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +as_found=false +for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break fi + ac_first_candidate=false + + as_found=false done - done IFS=$as_save_IFS +if $as_found +then : +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi + + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac fi done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if $ac_cache_corrupted; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +: ${CXXFLAGS="-O3 -Wall -pedantic"} +# +# Programs +# - test -n "$ac_ct_CC" && break -done - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; + +case `pwd` in + *\ * | *\ *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac - CC=$ac_ct_CC - fi -fi -fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +macro_version='2.4.6' +macro_revision='2.4.6' -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ +ltmain=$ac_aux_dir/ltmain.sh - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ -#ifndef __GNUC__ - choke me -#endif + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 +fi -int -main () -{ +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -int -main () -{ +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +printf %s "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () { - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; + $ECHO "" } -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +case $ECHO in + printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +printf "%s\n" "printf" >&6; } ;; + print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +printf "%s\n" "print -r" >&6; } ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +printf "%s\n" "cat" >&6; } ;; +esac -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" @@ -3820,419 +3477,361 @@ Xsed="$SED -e 1s/^X//" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac +IFS=$as_save_IFS - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP fi - fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - ac_cv_path_EGREP=$EGREP + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - fi + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -test -z "$GREP" && GREP=grep + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + test -n "$ac_ct_CC" && break +done - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM -else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" + CC=$ac_ct_CC fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} fi + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4241,42 +3840,43 @@ IFS=$as_save_IFS fi fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - test -n "$DUMPBIN" && break - done fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4285,473 +3885,891 @@ IFS=$as_save_IFS fi fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" + if test "x$ac_ct_CC" = x; then + CC="" else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - DUMPBIN=$ac_ct_DUMPBIN + CC=$ac_ct_CC fi +else + CC="$ac_cv_prog_CC" fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi fi -test -z "$NM" && NM=nm +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion -version; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring=ABCD +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; +else $as_nop + ac_file='' +fi +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; +int +main (void) +{ - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; esac +done +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +int +main (void) +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +if test $ac_compiler_gnu = yes; then + GCC=yes else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + GCC= fi -max_cmd_len=$lt_cv_sys_max_cmd_len +ac_test_CFLAGS=${CFLAGS+y} +ac_save_CFLAGS=$CFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +else $as_nop + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : +else $as_nop + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} +int +main (void) +{ -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi else - lt_unset=false + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC fi +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - lt_cv_ld_reload_flag='-r' + ac_cv_path_GREP=$GREP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test yes != "$GCC"; then - reload_cmds=false - fi - ;; - darwin*) - if test yes = "$GCC"; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + ac_cv_path_EGREP=$EGREP fi - + fi fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +printf %s "checking for fgrep... " >&6; } +if test ${ac_cv_path_FGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in fgrep + do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + ac_cv_path_FGREP=$FGREP fi - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" + fi fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +printf "%s\n" "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" -test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$GREP" && GREP=grep @@ -4760,226 +4778,124 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; -beos*) - lt_cv_deplibs_check_method=pass_all - ;; -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; +# Check whether --with-gnu-ld was given. +if test ${with_gnu_ld+y} +then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else $as_nop + with_gnu_ld=no +fi -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld ;; - pc) - lt_cv_deplibs_check_method=pass_all + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown ;; esac - ;; +elif test yes = "$with_gnu_ld"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } +fi +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +printf "%s\n" "$LD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown @@ -4987,193 +4903,97 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test ${lt_cv_path_NM+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" fi -done + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + : ${lt_cv_path_NM=no} fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +printf "%s\n" "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. else if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5182,42 +5002,47 @@ IFS=$as_save_IFS fi fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +printf "%s\n" "$DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - test -n "$CXX" && break + test -n "$DUMPBIN" && break done fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5226,283 +5051,261 @@ IFS=$as_save_IFS fi fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - test -n "$ac_ct_CXX" && break + test -n "$ac_ct_DUMPBIN" && break done - if test "x$ac_ct_CXX" = x; then - CXX="g++" + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - CXX=$ac_ct_CXX + DUMPBIN=$ac_ct_DUMPBIN fi fi + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN fi fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done +test -z "$NM" && NM=nm -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +printf %s "checking the name lister ($NM) interface... " >&6; } +if test ${lt_cv_nm_interface+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +printf "%s\n" "$lt_cv_nm_interface" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - GXX= + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ +# find the maximum length of command line arguments +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +printf %s "checking the maximum length of command line arguments... " >&6; } +if test ${lt_cv_sys_max_cmd_len+y} +then : + printf %s "(cached) " >&6 +else $as_nop + i=0 + teststring=ABCD - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; -int -main () -{ + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; -int -main () -{ + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +max_cmd_len=$lt_cv_sys_max_cmd_len -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + lt_unset=false fi - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$ac_ct_AR" && break -done - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; esac - AR=$ac_ct_AR - fi -fi -: ${AR=ar} -: ${AR_FLAGS=cru} @@ -5511,60 +5314,114 @@ fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +printf %s "checking how to convert $build file names to $host format... " >&6; } +if test ${lt_cv_to_host_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test 0 -eq "$ac_status"; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test 0 -ne "$ac_status"; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +printf %s "checking how to convert $build file names to toolchain format... " >&6; } +if test ${lt_cv_to_tool_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -if test no = "$lt_cv_ar_at_file"; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +printf %s "checking for $LD option to reload object files... " >&6; } +if test ${lt_cv_ld_reload_flag+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ld_reload_flag='-r' fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + @@ -5573,25 +5430,30 @@ fi if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5600,38 +5462,43 @@ IFS=$as_save_IFS fi fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5640,160 +5507,262 @@ IFS=$as_save_IFS fi fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - if test "x$ac_ct_STRIP" = x; then - STRIP=":" + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - STRIP=$ac_ct_STRIP + OBJDUMP=$ac_ct_OBJDUMP fi else - STRIP="$ac_cv_prog_STRIP" + OBJDUMP="$ac_cv_prog_OBJDUMP" fi -test -z "$STRIP" && STRIP=: +test -z "$OBJDUMP" && OBJDUMP=objdump -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +printf %s "checking how to recognize dependent libraries... " >&6; } +if test ${lt_cv_deplibs_check_method+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi + ;; -test -z "$RANLIB" && RANLIB=: +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; -if test -n "$RANLIB"; then - case $host_os in - bitrig* | openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all ;; esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi + ;; -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + @@ -5814,27 +5783,32 @@ esac -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5843,21 +5817,76 @@ IFS=$as_save_IFS fi fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - test -n "$AWK" && break +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi done + done +IFS=$as_save_IFS +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi +test -z "$DLLTOOL" && DLLTOOL=dlltool @@ -5868,314 +5897,533 @@ done +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +printf %s "checking how to associate runtime and link libraries... " >&6; } +if test ${lt_cv_sharedlib_from_linklib_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_sharedlib_from_linklib_cmd='unknown' +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} -# Allow CC to be a program name with arguments. -compiler=$CC -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test ia64 = "$host_cpu"; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" - # Adjust the below global symbol transforms to fixup imported variables. - lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" - lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" - lt_c_name_lib_hook="\ - -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ - -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. else - # Disable hooks by default. - lt_cv_sys_global_symbol_to_import= - lt_cdecl_hook= - lt_c_name_hook= - lt_c_name_lib_hook= -fi +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ -$lt_cdecl_hook\ -" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ -$lt_c_name_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" -# Transform an extracted symbol line into symbol name with lib prefix and -# symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ -$lt_c_name_lib_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" + test -n "$ac_ct_CXX" && break +done - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function, - # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ -" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ -" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ -" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ -" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" + if test "x$ac_ct_CXX" = x; then + CXX="g++" else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF +fi - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + fi +fi +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 +printf %s "checking whether the compiler supports GNU C++... " >&6; } +if test ${ac_cv_cxx_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#ifdef __cplusplus -extern "C" { +int +main (void) +{ +#ifndef __GNUC__ + choke me #endif -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - cat <<_LT_EOF >> conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -/* The mapping between symbol names and symbols. */ -LT_DLSYM_CONST struct { - const char *name; - void *address; +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+y} +ac_save_CXXFLAGS=$CXXFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +printf %s "checking whether $CXX accepts -g... " >&6; } +if test ${ac_cv_prog_cxx_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; } -lt__PROGRAM__LTX_preloaded_symbols[] = +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_g=yes +else $as_nop + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) { - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; + ; + return 0; } -#endif +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : -#ifdef __cplusplus +else $as_nop + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; } -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS=conftstm.$ac_objext - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest$ac_exeext; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } +if test $ac_test_CXXFLAGS; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 + CXXFLAGS="-g" fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test yes = "$pipe_works"; then - break +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" else - lt_cv_sys_global_symbol_pipe= + CXXFLAGS= fi +fi +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +printf %s "checking for $CXX option to enable C++11 features... " >&6; } +if test ${ac_cv_prog_cxx_11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_11=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx11_program +_ACEOF +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done - +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 +printf %s "checking for $CXX option to enable C++98 features... " >&6; } +if test ${ac_cv_prog_cxx_98+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_98=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx98_program +_ACEOF +for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx98=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx98" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX fi -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= +if test "x$ac_cv_prog_cxx_cxx98" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + test -n "$ac_ct_AR" && break +done + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi +: ${AR=ar} +: ${AR_FLAGS=cru} @@ -6187,11 +6435,59 @@ fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +printf %s "checking for archiver @FILE support... " >&6; } +if test ${lt_cv_ar_at_file+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +printf "%s\n" "$lt_cv_ar_at_file" >&6; } +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi @@ -6199,410 +6495,294 @@ fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } else - with_sysroot=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - -lt_sysroot= -case $with_sysroot in #( - yes) - if test yes = "$GCC"; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else - printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -: ${lt_DD:=$DD} -if test -z "$lt_DD"; then - ac_path_lt_DD_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in dd; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_lt_DD" || continue -if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: -fi - $ac_path_lt_DD_found && break 3 - done - done + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done IFS=$as_save_IFS - if test -z "$ac_cv_path_lt_DD"; then - : - fi -else - ac_cv_path_lt_DD=$lt_DD -fi -rm -f conftest.i conftest2.i conftest.out fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else - printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -lt_cv_truncate_bin= -if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + fi -rm -f conftest.i conftest2.i conftest.out -test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$lt_cv_truncate_bin" >&6; } +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi +test -z "$RANLIB" && RANLIB=: -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in $*""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi -test no = "$enable_libtool_lock" || enable_libtool_lock=yes +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out what ABI is being produced by ac_compile, and set mode - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE=32 - ;; - *ELF-64*) - HPUX_IA64_MODE=64 - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; -mips64*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - emul=elf - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - emul="${emul}32" - ;; - *64-bit*) - emul="${emul}64" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *MSB*) - emul="${emul}btsmip" - ;; - *LSB*) - emul="${emul}ltsmip" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *N32*) - emul="${emul}n32" - ;; - esac - LD="${LD-ld} -m $emul" - fi - rm -rf conftest* - ;; -x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. Note that the listed cases only cover the - # situations where additional linker options are needed (such as when - # doing 32-bit compilation for a host where ld defaults to 64-bit, or - # vice versa); the common cases where no linker options are needed do - # not appear in the list. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in - *x86-64*) - LD="${LD-ld} -m elf32_x86_64" - ;; - *) - LD="${LD-ld} -m elf_i386" - ;; - esac - ;; - powerpc64le-*linux*) - LD="${LD-ld} -m elf32lppclinux" - ;; - powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - powerpcle-*linux*) - LD="${LD-ld} -m elf64lppc" - ;; - powerpc-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test yes != "$lt_cv_cc_needs_belf"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS=$SAVE_CFLAGS - fi - ;; -*-*solaris*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*|x86_64-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD=${LD-ld}_sol2 - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac -need_locks=$enable_libtool_lock -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. + + + + + + + + + + + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6611,1269 +6791,1402 @@ IFS=$as_save_IFS fi fi -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi + test -n "$AWK" && break done - done -IFS=$as_save_IFS -fi -fi -ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test yes != "$lt_cv_path_mainfest_tool"; then - MANIFEST_TOOL=: -fi - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +# Allow CC to be a program name with arguments. +compiler=$CC -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +printf %s "checking command to parse $NM output from $compiler object... " >&6; } +if test ${lt_cv_sys_global_symbol_pipe+y} +then : + printf %s "(cached) " >&6 +else $as_nop -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= fi +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + # Check to see that the pipe works correctly. + pipe_works=no + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif +#ifdef __cplusplus +extern "C" { +#endif +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + cat <<_LT_EOF >> conftest.$ac_ext +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "$LT_MULTI_MODULE"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&5 - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test 0 = "$_lt_result"; then - lt_cv_apple_cc_single_mod=yes +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS else - cat conftest.err >&5 + echo "cannot find nm_test_func in $nlist" >&5 fi - rm -rf libconftest.dylib* - rm -f conftest.* + else + echo "cannot find nm_test_var in $nlist" >&5 fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done -int -main () -{ +fi - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +printf "%s\n" "failed" >&6; } else - lt_cv_ld_exported_symbols_list=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +printf "%s\n" "ok" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&5 - elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) - case ${MACOSX_DEPLOYMENT_TARGET},$host in - 10.[012],*|,*powerpc*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - *) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test yes = "$lt_cv_apple_cc_single_mod"; then - _lt_dar_single_mod='$single_module' - fi - if test yes = "$lt_cv_ld_exported_symbols_list"; then - _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' - fi - if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - done - ac_cv_prog_CPP=$CPP -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then -$as_echo "#define STDC_HEADERS 1" >>confdefs.h -fi -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF -fi -done -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +printf %s "checking for sysroot... " >&6; } +# Check whether --with-sysroot was given. +if test ${with_sysroot+y} +then : + withval=$with_sysroot; +else $as_nop + with_sysroot=no fi -done - - - -func_stripname_cnf () -{ - case $2 in - .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; - *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; - esac -} # func_stripname_cnf +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +printf "%s\n" "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +printf "%s\n" "${lt_sysroot:-no}" >&6; } -# Set options +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +printf %s "checking for a working dd... " >&6; } +if test ${ac_cv_path_lt_DD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in dd + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi - enable_dlopen=no +rm -f conftest.i conftest2.i conftest.out +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +printf "%s\n" "$ac_cv_path_lt_DD" >&6; } - enable_win32_dll=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +printf %s "checking how to truncate binary pipes... " >&6; } +if test ${lt_cv_truncate_bin+y} +then : + printf %s "(cached) " >&6 +else $as_nop + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +printf "%s\n" "$lt_cv_truncate_bin" >&6; } - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - enable_shared=yes -fi +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +# Check whether --enable-libtool-lock was given. +if test ${enable_libtool_lock+y} +then : + enableval=$enable_libtool_lock; +fi +test no = "$enable_libtool_lock" || enable_libtool_lock=yes - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS=$lt_save_ifs - ;; +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; esac -else - enable_static=yes -fi - - - + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +printf %s "checking whether the C compiler needs -belf... " >&6; } +if test ${lt_cv_cc_needs_belf+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_cc_needs_belf=yes +else $as_nop + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for lt_pkg in $withval; do - IFS=$lt_save_ifs - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" fi - done - IFS=$lt_save_ifs + ;; + esac ;; esac -else - pic_mode=default -fi - - - - - + fi + rm -rf conftest* + ;; +esac +need_locks=$enable_libtool_lock +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS=$lt_save_ifs - ;; - esac +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +printf "%s\n" "$MANIFEST_TOOL" >&6; } else - enable_fast_install=yes + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - - - - - - - shared_archive_member_spec= -case $host,$enable_shared in -power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } - -# Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; then : - withval=$with_aix_soname; case $withval in - aix|svr4|both) - ;; - *) - as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 - ;; - esac - lt_cv_with_aix_soname=$with_aix_soname +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else - lt_cv_with_aix_soname=aix + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - with_aix_soname=$lt_cv_with_aix_soname + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$with_aix_soname" >&6; } - if test aix != "$with_aix_soname"; then - # For the AIX way of multilib, we name the shared archive member - # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', - # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. - # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, - # the AIX toolchain works better with OBJECT_MODE set (default 32). - if test 64 = "${OBJECT_MODE-32}"; then - shared_archive_member_spec=shr_64 - else - shared_archive_member_spec=shr - fi +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if test ${lt_cv_path_mainfest_tool+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes fi - ;; -*) - with_aix_soname=aix - ;; -esac - + rm -f conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +printf "%s\n" "$DSYMUTIL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS=$ltmain - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +printf "%s\n" "$NMEDIT" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +printf "%s\n" "$ac_ct_NMEDIT" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +printf "%s\n" "$LIPO" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +printf "%s\n" "$ac_ct_LIPO" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +printf "%s\n" "$OTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +printf "%s\n" "$ac_ct_OTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +printf "%s\n" "$OTOOL64" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +printf "%s\n" "$ac_ct_OTOOL64" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi -test -z "$LN_S" && LN_S="ln -s" @@ -7888,746 +8201,447 @@ test -z "$LN_S" && LN_S="ln -s" -if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +printf %s "checking for -single_module linker flag... " >&6; } +if test ${lt_cv_apple_cc_single_mod+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +printf %s "checking for -exported_symbols_list linker flag... " >&6; } +if test ${lt_cv_ld_exported_symbols_list+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -# Global variables: -ofile=libtool -can_build_shared=yes +int +main (void) +{ -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld=$lt_cv_prog_gnu_ld - -old_CC=$CC -old_CFLAGS=$CFLAGS - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_ld_exported_symbols_list=yes +else $as_nop + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS -func_cc_basename $compiler -cc_basename=$func_cc_basename_result +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +printf %s "checking for -force_load linker flag... " >&6; } +if test ${lt_cv_ld_force_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD=$MAGIC_CMD - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/${ac_tool_prefix}file"; then - lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD=$lt_cv_path_MAGIC_CMD - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +printf "%s\n" "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) + case ${MACOSX_DEPLOYMENT_TARGET},$host in + 10.[012],*|,*powerpc*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} -_LT_EOF - fi ;; - esac - fi - break +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h fi - done - IFS=$lt_save_ifs - MAGIC_CMD=$lt_save_MAGIC_CMD - ;; -esac -fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi +done -MAGIC_CMD=$lt_cv_path_MAGIC_CMD -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD=$MAGIC_CMD - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/file"; then - lt_cv_path_MAGIC_CMD=$ac_dir/"file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD=$lt_cv_path_MAGIC_CMD - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS=$lt_save_ifs - MAGIC_CMD=$lt_save_MAGIC_CMD - ;; -esac -fi +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : -MAGIC_CMD=$lt_cv_path_MAGIC_CMD -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h +fi +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h - else - MAGIC_CMD=: - fi fi - fi - ;; -esac -# Use C for the default configuration in the libtool script -lt_save_CC=$CC -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +func_stripname_cnf () +{ + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; + esac +} # func_stripname_cnf -# Source file extension for C test sources. -ac_ext=c -# Object file extension for compiled C test sources. -objext=o -objext=$objext -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' +# Set options + enable_dlopen=no + enable_win32_dll=no -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} + # Check whether --enable-shared was given. +if test ${enable_shared+y} +then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else $as_nop + enable_shared=yes +fi -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} -# Allow CC to be a program name with arguments. -compiler=$CC -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then -lt_prog_compiler_no_builtin_flag= -if test yes = "$GCC"; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac + # Check whether --enable-static was given. +if test ${enable_static+y} +then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else $as_nop + enable_static=yes +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } -if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi -fi - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= +# Check whether --with-pic was given. +if test ${with_pic+y} +then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else $as_nop + pic_mode=default +fi - if test yes = "$GCC"; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - lt_prog_compiler_pic='-fPIC' - ;; - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static='$wl-static' - ;; - esac - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= + # Check whether --enable-fast-install was given. +if test ${enable_fast_install+y} +then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs ;; + esac +else $as_nop + enable_fast_install=yes +fi + - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +printf %s "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test ${with_aix_soname+y} +then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; *) - lt_prog_compiler_pic='-fPIC' + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac + lt_cv_with_aix_soname=$with_aix_soname +else $as_nop + if test ${lt_cv_with_aix_soname+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_with_aix_soname=aix +fi - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - if test -n "$lt_prog_compiler_pic"; then - lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; + with_aix_soname=$lt_cv_with_aix_soname +fi - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - case $cc_basename in - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +printf "%s\n" "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static='$wl-static' - ;; - esac - ;; - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='$wl-a ${wl}archive' - ;; - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - # old Intel for x86_64, which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - tcc*) - # Fabrice Bellard et al's Tiny C Compiler - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ F* | *Sun*Fortran*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Intel*\ [CF]*Compiler*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - *Portland\ Group*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; - esac - ;; - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi -case $host_os in - # For platforms that do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } -if test yes = "$lt_cv_prog_compiler_pic_works"; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi -fi @@ -8639,1456 +8653,773 @@ fi -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } -if test yes = "$lt_cv_prog_compiler_static_works"; then - : -else - lt_prog_compiler_static= -fi +test -z "$LN_S" && LN_S="ln -s" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi -hard_links=nottested -if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} - need_locks=warn - fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +printf %s "checking for objdir... " >&6; } +if test ${lt_cv_objdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs else - need_locks=no + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs fi +rmdir .libs 2>/dev/null +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +printf "%s\n" "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir +printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ' (' and ')$', so one must not match beginning or - # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', - # as well as any symbol that contains 'd'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test yes != "$GCC"; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd* | bitrig*) - with_gnu_ld=no - ;; - esac - ld_shlibs=yes - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test yes = "$with_gnu_ld"; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES fi + ;; +esac - if test yes = "$lt_use_gnu_ld_interface"; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='$wl' +# Global variables: +ofile=libtool +can_build_shared=yes - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - export_dynamic_flag_spec='$wl--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test ia64 != "$host_cpu"; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 +with_gnu_ld=$lt_cv_prog_gnu_ld -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +printf %s "checking for ${ac_tool_prefix}file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org _LT_EOF + fi ;; + esac fi - ;; + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='$wl--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - shrext_cmds=.dll - archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes=yes - ;; +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +printf %s "checking for file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - export_dynamic_flag_spec='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test linux-dietlibc = "$host_os"; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) +_LT_EOF + fi ;; esac fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test no = "$tmp_diet" - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - nagfor*) # NAGFOR 5.3 - tmp_sharedflag='-Wl,-shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - case $cc_basename in - tcc*) - export_dynamic_flag_spec='-rdynamic' - ;; - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; + else + MAGIC_CMD=: + fi +fi - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 + fi + ;; +esac -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. +# Use C for the default configuration in the libtool script -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. +# Source file extension for C test sources. +ac_ext=c -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; +# Object file extension for compiled C test sources. +objext=o +objext=$objext - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' - if test no = "$ld_shlibs"; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - aix[4-9]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then - aix_use_runtimelinking=yes - break - fi - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # traditional, no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - hardcode_direct=no - hardcode_direct_absolute=no - ;; - esac - if test yes = "$GCC"; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag="$shared_flag "'$wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} - export_dynamic_flag_spec='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} -int -main () -{ +# Allow CC to be a program name with arguments. +compiler=$CC - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=/usr/lib:/lib - fi +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* -fi +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* - aix_libpath=$lt_cv_aix_libpath_ -fi - hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then -int -main () -{ +lt_prog_compiler_no_builtin_flag= - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test ${lt_cv_prog_compiler_rtti_exceptions+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=/usr/lib:/lib - fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : fi - aix_libpath=$lt_cv_aix_libpath_ fi - hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' $wl-bernotok' - allow_undefined_flag=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' - fi + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' fi + lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='' + lt_prog_compiler_pic='-fPIC' ;; m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - enable_shared_with_static_runtimes=yes + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test yes = "$lt_cv_ld_force_load"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag=$_lt_dar_allow_undefined - case $cc_basename in - ifort*|nagfor*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test yes = "$_lt_dar_can_shared"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" - - else - ld_shlibs=no - fi - + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= ;; - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac ;; - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. ;; - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no ;; - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' ;; - hpux9*) - if test yes = "$GCC"; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic fi - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes + ;; - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='$wl-E' + *) + lt_prog_compiler_pic='-fPIC' ;; + esac - hpux10*) - if test yes,no = "$GCC,$with_gnu_ld"; then - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='$wl-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; - hpux11*) - if test yes,no = "$GCC,$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test yes = "$lt_cv_prog_compiler__b"; then - archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='$wl-E' + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) - if test yes = "$GCC"; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (void) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test yes = "$lt_cv_irix_exported_symbol"; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' - fi - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' ;; - linux*) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler - ld_shlibs=yes - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac ;; esac ;; - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' ;; - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - export_dynamic_flag_spec='$wl-E' - else - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - fi - else - ld_shlibs=no - fi + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' ;; - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - shrext_cmds=.dll - archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes=yes - ;; - - osf3*) - if test yes = "$GCC"; then - allow_undefined_flag=' $wl-expect_unresolved $wl\*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test yes = "$GCC"; then - allow_undefined_flag=' $wl-expect_unresolved $wl\*' - archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: + rdos*) + lt_prog_compiler_static='-non_shared' ;; solaris*) - no_undefined_flag=' -z defs' - if test yes = "$GCC"; then - wlarc='$wl' - archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='$wl' - archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. GCC discards it without '$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test yes = "$GCC"; then - whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; + lt_prog_compiler_wl='-Wl,';; esac - link_all_deplibs=yes ;; sunos4*) - if test sequent = "$host_vendor"; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' ;; - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' fi ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='$wl-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='$wl-z,text' - allow_undefined_flag='$wl-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='$wl-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='$wl-Bexport' - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no ;; uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' ;; *) - ld_shlibs=no + lt_prog_compiler_can_build_shared=no ;; esac - - if test sni = "$host_vendor"; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='$wl-Blargedynsym' - ;; - esac - fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test no = "$ld_shlibs" && can_build_shared=no +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac -with_gnu_ld=$with_gnu_ld +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi +fi @@ -10101,108 +9432,46 @@ with_gnu_ld=$with_gnu_ld # -# Do we need to explicitly link libc? +# Check to make sure the static flag actually works. # -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test yes,yes = "$GCC,$enable_shared"; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi @@ -10210,959 +9479,1536 @@ esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } + if test no = "$hard_links"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + ld_shlibs=yes + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. +_LT_EOF + fi + ;; + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi +fi + aix_libpath=$lt_cv_aix_libpath_ +fi + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi +fi + aix_libpath=$lt_cv_aix_libpath_ +fi + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + darwin* | rhapsody*) + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + else + ld_shlibs=no + fi + ;; + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +printf %s "checking if $CC understands -b... " >&6; } +if test ${lt_cv_prog_compiler__b+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if test ${lt_cv_irix_exported_symbol+y} +then : + printf %s "(cached) " >&6 +else $as_nop + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_irix_exported_symbol=yes +else $as_nop + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + *nto* | *qnx*) + ;; + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test yes = "$GCC"; then - case $host_os in - darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; - *) lt_awk_arg='/^libraries:/' ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; - *) lt_sed_strip_eq='s|=/|/|g' ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary... - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - # ...but if some path component already ends with the multilib dir we assume - # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). - case "$lt_multi_os_dir; $lt_search_path_spec " in - "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) - lt_multi_os_dir= - ;; - esac - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" - elif test -n "$lt_multi_os_dir"; then - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS = " "; FS = "/|\n";} { - lt_foo = ""; - lt_count = 0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo = "/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's|/\([A-Za-z]:\)|\1|g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=.so -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - - - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='$libname$release$shared_ext$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test ia64 = "$host_cpu"; then - # AIX 5 supports IA64 - library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line '#! .'. This would cause the generated library to - # depend on '.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then - : + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else - can_build_shared=no + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; - esac - # Using Import Files as archive members, it is possible to support - # filename-based versioning of shared library archives on AIX. While - # this would work for both with and without runtime linking, it will - # prevent static linking of such archives. So we do filename-based - # shared library versioning with .so extension only, which is used - # when both runtime linking and shared linking is enabled. - # Unfortunately, runtime linking may impact performance, so we do - # not want this to be the default eventually. Also, we use the - # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. - # To allow for filename-based versioning support, we need to create - # libNAME.so.V as an archive file, containing: - # *) an Import File, referring to the versioned filename of the - # archive as well as the shared archive member, telling the - # bitwidth (32 or 64) of that shared object, and providing the - # list of exported symbols of that shared object, eventually - # decorated with the 'weak' keyword - # *) the shared object with the F_LOADONLY flag set, to really avoid - # it being seen by the linker. - # At run time we better use the real file rather than another symlink, - # but for link time we create the symlink libNAME.so -> libNAME.so.V - case $with_aix_soname,$aix_use_runtimelinking in - # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - aix,yes) # traditional libtool - dynamic_linker='AIX unversionable lib.so' - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - aix,no) # traditional AIX only - dynamic_linker='AIX lib.a(lib.so.V)' - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - ;; - svr4,*) # full svr4 only - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,yes) # both, prefer svr4 - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # unpreferred sharedlib libNAME.a needs extra handling - postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' - postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no ;; - *,no) # both, prefer aix - dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling - postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' - postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + + *) + ld_shlibs=no ;; esac - shlibpath_var=LIBPATH + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi fi - ;; -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +printf "%s\n" "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no -beos*) - library_names_spec='$libname$shared_ext' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; +with_gnu_ld=$with_gnu_ld -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - library_names_spec='$libname.dll.lib' - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec=$LIB - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - *) - # Assume MSVC wrapper - library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' - soname_spec='$libname$release$major$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - need_version=no - need_lib_prefix=no + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. ;; - freebsd-*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - need_version=yes + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc+y} +then : + printf %s "(cached) " >&6 +else $as_nop + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac + esac + fi ;; +esac -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=no - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - if test 32 = "$HPUX_IA64_MODE"; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - sys_lib_dlsearch_path_spec=/usr/lib/hpux32 - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - sys_lib_dlsearch_path_spec=/usr/lib/hpux64 - fi - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test yes = "$lt_cv_prog_gnu_ld"; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" - sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" - hardcode_into_libs=yes - ;; -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; -linux*android*) - version_type=none # Android doesn't support versioned libraries. - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext' - soname_spec='$libname$release$shared_ext' - finish_cmds= - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec='-L$libdir' - ;; -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir -fi - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; -rdos*) - dynamic_linker=no - ;; -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test no = "$dynamic_linker" && can_build_shared=no -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec -fi -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec -fi -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH @@ -11260,1033 +11106,878 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test yes = "$hardcode_automatic"; then - # We can hardcode non-existent directories. - if test no != "$hardcode_direct" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && - test no != "$hardcode_minus_L"; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } -if test relink = "$hardcode_action" || - test yes = "$inherit_rpath"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi - if test yes != "$enable_dlopen"; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - case $host_os in - beos*) - lt_cv_dlopen=load_add_on - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - mingw* | pw32* | cegcc*) - lt_cv_dlopen=LoadLibrary - lt_cv_dlopen_libs= - ;; - cygwin*) - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - ;; - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - lt_cv_dlopen=dyld - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes -fi - ;; - tpf*) - # Don't try to run any link tests for TPF. We know it's impossible - # because TPF is a cross-compiler, and we know how we open DSOs. - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - lt_cv_dlopen_self=no - ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen=shl_load -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen=dlopen -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld -fi - - -fi - - -fi - - + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown -fi -fi +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH - ;; - esac + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; - if test no = "$lt_cv_dlopen"; then - enable_dlopen=no +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH else - enable_dlopen=yes - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS=$CPPFLAGS - test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS=$LDFLAGS - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS=$LIBS - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test yes = "$cross_compiling"; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisibility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; esac - else : - # compilation failed - lt_cv_dlopen_self=no + shlibpath_var=LIBPATH fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } + ;; - if test yes = "$lt_cv_dlopen_self"; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test yes = "$cross_compiling"; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; -#if HAVE_DLFCN_H -#include -#endif +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; -#include +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes -/* When -fvisibility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - CPPFLAGS=$save_CPPFLAGS - LDFLAGS=$save_LDFLAGS - LIBS=$save_LIBS + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; esac -fi - - - - - - - - - - - + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP"; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' ;; esac -fi - - - - - - - - - - - + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; - # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test no = "$can_build_shared" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. +irix5* | irix6* | nonstopux*) case $host_os in - aix3*) - test yes = "$enable_shared" && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= ;; - - aix[4-9]*) - if test ia64 != "$host_cpu"; then - case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in - yes,aix,yes) ;; # shared object as lib.so file only - yes,svr4,*) ;; # shared object as lib.so archive member only - yes,*) enable_static=no ;; # shared object in lib.a archive as well - esac - fi + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; -CC=$lt_save_CC +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no - if test -n "$CXX" && ( test no != "$CXX" && - ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || - (test g++ != "$CXX"))); then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + # Some binutils ld are patched to set DT_RUNPATH + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext +int +main (void) +{ - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include + ; + return 0; +} _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break +if ac_fn_c_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : + lt_cv_shlibpath_overrides_runpath=yes fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; -else - _lt_caught_CXX_error=yes -fi +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -compiler_needs_object_CXX=no -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_direct_absolute_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -inherit_rpath_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -reload_flag_CXX=$reload_flag -reload_cmds_CXX=$reload_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; -# Source file extension for C++ test sources. -ac_ext=cpp +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test yes != "$_lt_caught_CXX_error"; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" +rdos*) + dynamic_linker=no + ;; - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[]) { return(0); }' +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; - # ltmain only uses $CC for tagged configurations so make sure $CC is set. +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} +*) + dynamic_linker=no + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi -# Allow CC to be a program name with arguments. -compiler=$CC +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi - # save warnings/boilerplate of simple test code - ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - compiler_CXX=$CC - func_cc_basename $compiler -cc_basename=$func_cc_basename_result - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test yes = "$GXX"; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' - else - lt_prog_compiler_no_builtin_flag_CXX= - fi - if test yes = "$GXX"; then - # Set up default GNU C++ configuration -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else - with_gnu_ld=no -fi -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld @@ -12294,2843 +11985,2399 @@ with_gnu_ld=$lt_cv_prog_gnu_ld - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test yes = "$with_gnu_ld"; then - archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='$wl' - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - GXX=no - with_gnu_ld=no - wlarc= - fi - # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - ld_shlibs_CXX=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - aix_use_runtimelinking=no - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - file_list_spec_CXX='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - hardcode_direct_CXX=no - hardcode_direct_absolute_CXX=no - ;; - esac - if test yes = "$GXX"; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag=$shared_flag' $wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi - export_dynamic_flag_spec_CXX='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - always_export_symbols_CXX=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - # The "-G" linker flag allows undefined symbols. - no_undefined_flag_CXX='-bernotok' - # Determine the default libpath from the value encoded in an empty - # executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +printf "%s\n" "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dlopen (); int -main () +main (void) { - +return dlopen (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dl_dlopen=yes +else $as_nop + ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=/usr/lib:/lib - fi - +LIBS=$ac_check_lib_save_LIBS fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else $as_nop + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes - aix_libpath=$lt_cv_aix_libpath__CXX fi - hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + ;; - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes +then : + lt_cv_dlopen=shl_load +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +printf %s "checking for shl_load in -ldld... " >&6; } +if test ${ac_cv_lib_dld_shl_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char shl_load (); int -main () +main (void) { - +return shl_load (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dld_shl_load=yes +else $as_nop + ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=/usr/lib:/lib - fi - +LIBS=$ac_check_lib_save_LIBS fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes +then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else $as_nop + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes +then : + lt_cv_dlopen=dlopen +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - aix_libpath=$lt_cv_aix_libpath__CXX +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main (void) +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dl_dlopen=yes +else $as_nop + ac_cv_lib_dl_dlopen=no fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +printf %s "checking for dlopen in -lsvld... " >&6; } +if test ${ac_cv_lib_svld_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' $wl-bernotok' - allow_undefined_flag_CXX=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - fi - archive_cmds_need_lc_CXX=yes - archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared - # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main (void) +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_svld_dlopen=yes +else $as_nop + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes +then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +printf %s "checking for dld_link in -ldld... " >&6; } +if test ${ac_cv_lib_dld_dld_link+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main (void) +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dld_dld_link=yes +else $as_nop + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes +then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_CXX=' ' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=yes - file_list_spec_CXX='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' - enable_shared_with_static_runtimes_CXX=yes - # Don't use ranlib - old_postinstall_cmds_CXX='chmod 644 $oldlib' - postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - export_dynamic_flag_spec_CXX='$wl--export-all-symbols' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - esac - ;; - darwin* | rhapsody*) +fi - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - if test yes = "$lt_cv_ld_force_load"; then - whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' +fi - else - whole_archive_flag_spec_CXX='' - fi - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX=$_lt_dar_allow_undefined - case $cc_basename in - ifort*|nagfor*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test yes = "$_lt_dar_can_shared"; then - output_verbose_link_cmd=func_echo_all - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" - if test yes != "$lt_cv_apple_cc_single_mod"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" - archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" - fi - else - ld_shlibs_CXX=no - fi +fi - ;; - os2*) - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_minus_L_CXX=yes - allow_undefined_flag_CXX=unsupported - shrext_cmds=.dll - archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes_CXX=yes - ;; +fi - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - ld_shlibs_CXX=no - ;; +fi - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; + ;; + esac - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi - haiku*) - archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - link_all_deplibs_CXX=yes - ;; + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - hpux9*) - hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='$wl-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes = "$GXX"; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" - hpux10*|hpux11*) - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' - hardcode_libdir_separator_CXX=: + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +printf %s "checking whether a program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - export_dynamic_flag_spec_CXX='$wl-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac +#if HAVE_DLFCN_H +#include +#endif - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes = "$GXX"; then - if test no = "$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; +#include - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - export_dynamic_flag_spec_CXX='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test yes = "$GXX"; then - if test no = "$with_gnu_ld"; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - hardcode_libdir_separator_CXX=: - inherit_rpath_CXX=yes - ;; +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [1-5].* | *pgcpp\ [1-5].*) - prelink_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - old_archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object_CXX=yes - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +printf "%s\n" "$lt_cv_dlopen_self" >&6; } - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +printf %s "checking whether a statically linked program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self_static+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; +#if HAVE_DLFCN_H +#include +#endif - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; +#include - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif - *nto* | *qnx*) - ld_shlibs_CXX=yes - ;; +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - hardcode_direct_absolute_CXX=yes - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='$wl-E' - whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - ld_shlibs_CXX=no - fi - ;; +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - hardcode_libdir_separator_CXX=: + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - case $host in - osf3*) - allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' - archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - ;; - *) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ - $RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - ;; - esac - hardcode_libdir_separator_CXX=: +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } + fi - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes,no = "$GXX,$with_gnu_ld"; then - allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' - case $host in - osf3*) - archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - ;; - *) - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - ;; - esac + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - hardcode_libdir_separator_CXX=: + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - output_verbose_link_cmd='func_echo_all' - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test yes,no = "$GXX,$with_gnu_ld"; then - no_undefined_flag_CXX=' $wl-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require '-G' NOT '-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='$wl-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_CXX='$wl-z,text' - allow_undefined_flag_CXX='$wl-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='$wl-Bexport' - runpath_var='LD_RUN_PATH' - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ - '"$old_archive_cmds_CXX" - reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ - '"$reload_cmds_CXX" - ;; - *) - archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac +striplib= +old_striplib= +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +printf %s "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + esac +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } - test no = "$ld_shlibs_CXX" && can_build_shared=no - GCC_CXX=$GXX - LD_CXX=$LD - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - # Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= -cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - for p in `eval "$output_verbose_link_cmd"`; do - case $prev$p in - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test x-L = "$p" || - test x-R = "$p"; then - prev=$p - continue - fi - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test no = "$pre_test_object_deps_done"; then - case $prev in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX=$prev$p - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX=$prev$p - else - postdeps_CXX="${postdeps_CXX} $prev$p" - fi - fi - prev= - ;; - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi + # Report what library types will actually be built + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +printf %s "checking if libtool supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +printf "%s\n" "$can_build_shared" >&6; } - if test no = "$pre_test_object_deps_done"; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX=$p - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX=$p - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +printf %s "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no - *) ;; # Ignore the rest. + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; - esac - done + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +printf "%s\n" "$enable_shared" >&6; } - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +printf %s "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +printf "%s\n" "$enable_static" >&6; } -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; -esac -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - compiler_lib_search_dirs_CXX= -if test -n "${compiler_lib_search_path_CXX}"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +CC=$lt_save_CC + if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +printf %s "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test ${ac_cv_prog_CXXCPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CXX needs to be expanded + for CXXCPP in "$CXX -E" cpp /lib/cpp + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + break +fi + done + ac_cv_prog_CXXCPP=$CXXCPP +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +printf "%s\n" "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +else + _lt_caught_CXX_error=yes +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no +# Source file extension for C++ test sources. +ac_ext=cpp +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + # ltmain only uses $CC for tagged configurations so make sure $CC is set. +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} +# Allow CC to be a program name with arguments. +compiler=$CC + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* - lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - - - # C++ specific cases for pic, static, wl, etc. - if test yes = "$GXX"; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - lt_prog_compiler_pic_CXX='-fPIC' - ;; + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic_CXX='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static_CXX='$wl-static' - ;; - esac - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test ${with_gnu_ld+y} +then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else $as_nop + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } +fi +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +printf "%s\n" "$LD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; aix[4-9]*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='$wl-a ${wl}archive' - if test ia64 != "$host_cpu"; then - lt_prog_compiler_pic_CXX='+Z' + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='$wl-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64, which still supported -KPIC. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-qpic' - lt_prog_compiler_static_CXX='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi + esac -case $host_os in - # For platforms that do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } -lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $RM conftest* + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct_CXX=no + hardcode_direct_absolute_CXX=no + ;; + esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + if test yes = "$GXX"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi -if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac + export_dynamic_flag_spec_CXX='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + no_undefined_flag_CXX='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi - - + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS - + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi -if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then - : -else - lt_prog_compiler_static_CXX= fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - + aix_libpath=$lt_cv_aix_libpath__CXX fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi +fi -hard_links=nottested -if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no + aix_libpath=$lt_cv_aix_libpath__CXX fi + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' $wl-bernotok' + allow_undefined_flag_CXX=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX=$ltdll_cmds - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - ;; - esac - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } -test no = "$ld_shlibs_CXX" && can_build_shared=no - -with_gnu_ld_CXX=$with_gnu_ld - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test yes,yes = "$GCC,$enable_shared"; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='$wl--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc_CXX=no + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else - lt_cv_archive_cmds_need_lc_CXX=yes + ld_shlibs_CXX=no fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } - archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ;; + esac + ;; + darwin* | rhapsody*) + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + if test yes != "$lt_cv_apple_cc_single_mod"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi + else + ld_shlibs_CXX=no + fi + ;; + os2*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_minus_L_CXX=yes + allow_undefined_flag_CXX=unsupported + shrext_cmds=.dll + archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes_CXX=yes + ;; + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + hpux9*) + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='$wl-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=.so -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object_CXX=yes -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname.a' - shlibpath_var=LIBPATH + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='$libname$release$shared_ext$major' - ;; + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test ia64 = "$host_cpu"; then - # AIX 5 supports IA64 - library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line '#! .'. This would cause the generated library to - # depend on '.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # Using Import Files as archive members, it is possible to support - # filename-based versioning of shared library archives on AIX. While - # this would work for both with and without runtime linking, it will - # prevent static linking of such archives. So we do filename-based - # shared library versioning with .so extension only, which is used - # when both runtime linking and shared linking is enabled. - # Unfortunately, runtime linking may impact performance, so we do - # not want this to be the default eventually. Also, we use the - # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. - # To allow for filename-based versioning support, we need to create - # libNAME.so.V as an archive file, containing: - # *) an Import File, referring to the versioned filename of the - # archive as well as the shared archive member, telling the - # bitwidth (32 or 64) of that shared object, and providing the - # list of exported symbols of that shared object, eventually - # decorated with the 'weak' keyword - # *) the shared object with the F_LOADONLY flag set, to really avoid - # it being seen by the linker. - # At run time we better use the real file rather than another symlink, - # but for link time we create the symlink libNAME.so -> libNAME.so.V + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; - case $with_aix_soname,$aix_use_runtimelinking in - # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - aix,yes) # traditional libtool - dynamic_linker='AIX unversionable lib.so' - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - aix,no) # traditional AIX only - dynamic_linker='AIX lib.a(lib.so.V)' - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - ;; - svr4,*) # full svr4 only - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,yes) # both, prefer svr4 - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # unpreferred sharedlib libNAME.a needs extra handling - postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' - postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,no) # both, prefer aix - dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling - postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' - postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' - ;; - esac - shlibpath_var=LIBPATH - fi - ;; + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='$wl-E' + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; -beos*) - library_names_spec='$libname$shared_ext' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + hardcode_libdir_separator_CXX=: - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + hardcode_libdir_separator_CXX=: - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - library_names_spec='$libname.dll.lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec=$LIB - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; - *) - # Assume MSVC wrapper - library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' - soname_spec='$libname$release$major$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=no - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; + output_verbose_link_cmd='func_echo_all' -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - if test 32 = "$HPUX_IA64_MODE"; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - sys_lib_dlsearch_path_spec=/usr/lib/hpux32 - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - sys_lib_dlsearch_path_spec=/usr/lib/hpux64 - fi - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + no_undefined_flag_CXX=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test yes = "$lt_cv_prog_gnu_ld"; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" - sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" - hardcode_into_libs=yes - ;; + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi -linux*android*) - version_type=none # Android doesn't support versioned libraries. - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext' - soname_spec='$libname$release$shared_ext' - finish_cmds= - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes + hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='$wl-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec_CXX='-L$libdir' - ;; + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='$wl-z,text' + allow_undefined_flag_CXX='$wl-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='$wl-Bexport' + runpath_var='LD_RUN_PATH' - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; -int -main () -{ + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; -fi + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } + test no = "$ld_shlibs_CXX" && can_build_shared=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes + GCC_CXX=$GXX + LD_CXX=$LD - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi -rdos*) - dynamic_linker=no - ;; + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX=$prev$p + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX=$prev$p + else + postdeps_CXX="${postdeps_CXX} $prev$p" + fi + fi + prev= + ;; -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; + if test no = "$pre_test_object_deps_done"; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX=$p + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX=$p + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; + *) ;; # Ignore the rest. -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; + done -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS -*) - dynamic_linker=no +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test no = "$dynamic_linker" && can_build_shared=no -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec -fi - -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" - -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - - - - - - @@ -15161,2252 +14408,3272 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + lt_prog_compiler_pic_CXX='-fPIC' + ;; - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test yes = "$hardcode_automatic_CXX"; then + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; - # We can hardcode non-existent directories. - if test no != "$hardcode_direct_CXX" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && - test no != "$hardcode_minus_L_CXX"; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static_CXX='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } - -if test relink = "$hardcode_action_CXX" || - test yes = "$inherit_rpath_CXX"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test yes != "$_lt_caught_CXX_error" - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } +if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi +fi +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } +if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then + : +else + lt_prog_compiler_static_CXX= +fi - ac_config_commands="$ac_config_commands libtool" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext -# Only expand once: + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } + if test no = "$hard_links"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn fi else - CC="$ac_cv_prog_CC" + need_locks=no fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } +test no = "$ld_shlibs_CXX" && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$CC" && break - done + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac fi -done - done -IFS=$as_save_IFS + ;; +esac + + + -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$ac_ct_CC" && break -done - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi -fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$ac_ct_CXX" && break -done - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$AWK" && break -done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - done -IFS=$as_save_IFS -rm -rf conftest.one conftest.two conftest.dir -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac - if test -z "$CTAGS"; then : + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 -$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; -# Check whether --with-ctags was given. -if test "${with_ctags+set}" = set; then : - withval=$with_ctags; - if test "$withval" != yes && test "$withval" != no; then : +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - CTAGS="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; -else +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; - CTAGS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; -fi +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; -fi +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes -else + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec_CXX='-L$libdir' ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : + lt_cv_shlibpath_overrides_runpath=yes fi - - fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir - - - - - -if test x${CTAGS} = x; then : - as_fn_error $? "Required program ctags was not found" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } -if ! ${CTAGS} --version | grep -q Exuberant; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } fi -SO_EXT=$shrext_cmds + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes -# -# System/Compiler Features -# + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -$as_echo_n "checking for inline... " >&6; } -if ${ac_cv_c_inline+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo () {return 0; } -$ac_kw foo_t foo () {return 0; } -#endif + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_c_inline=$ac_kw -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -$as_echo "$ac_cv_c_inline" >&6; } +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; - ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features by default" >&5 -$as_echo_n "checking whether $CXX supports C++14 features by default... " >&6; } -if ${ax_cv_cxx_compile_cxx14+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; -#ifndef __cplusplus +rdos*) + dynamic_linker=no + ;; -#error "This is not a C++ compiler" +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; -#elif __cplusplus < 201103L +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; -#error "This is not a C++11 compiler" +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; -#else +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; -namespace cxx11 -{ +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; - namespace test_static_assert - { +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; +*) + dynamic_linker=no + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no - } +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi - namespace test_final_override - { +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi - struct Base - { - virtual void f() {} - }; +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi - struct Derived : public Base - { - virtual void f() override {} - }; +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - } +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" - namespace test_double_right_angle_brackets - { +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - template < typename T > - struct check {}; - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; - } - namespace test_decltype - { - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - } - namespace test_type_deduction - { - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - template < typename T > - struct is_same - { - static const bool value = true; - }; - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - } - namespace test_noexcept - { - int f() { return 0; } - int g() noexcept { return 0; } - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); - } - namespace test_constexpr - { - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); - } - namespace test_rvalue_references - { - template < int N > - struct answer - { - static constexpr int value = N; - }; - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } - } - namespace test_uniform_initialization - { - struct test - { - static const int zero {}; - static const int one {1}; - }; - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - } - namespace test_lambdas - { - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } - } - namespace test_variadic_templates - { - template - struct sum; - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then - } + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +printf "%s\n" "$hardcode_action_CXX" >&6; } - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi - struct foo {}; - template - using member = typename T::member_type; - template - void func(...) {} - template - void func(member*) {} - void test(); - void test() { func(0); } - } + fi # test -n "$compiler" -} // namespace cxx11 + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" -#endif // __cplusplus >= 201103L +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. -#ifndef __cplusplus -#error "This is not a C++ compiler" -#elif __cplusplus < 201402L -#error "This is not a C++14 compiler" -#else -namespace cxx14 -{ - namespace test_polymorphic_lambdas - { - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } - } - namespace test_binary_literals - { - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); + ac_config_commands="$ac_config_commands libtool" - } - namespace test_generalized_constexpr - { - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); +# Only expand once: - } - namespace test_lambda_init_capture - { +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - } - namespace test_digit_separators - { +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - } + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi - namespace test_return_type_deduction - { +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - } -} // namespace cxx14 +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -#endif // __cplusplus >= 201402L +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ax_cv_cxx_compile_cxx14=yes +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - ax_cv_cxx_compile_cxx14=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx14" >&5 -$as_echo "$ax_cv_cxx_compile_cxx14" >&6; } - if test x$ax_cv_cxx_compile_cxx14 = xyes; then - ac_success=yes +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`$as_echo "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++14 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : - $as_echo_n "(cached) " >&6 +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi -#ifndef __cplusplus +fi -#error "This is not a C++ compiler" -#elif __cplusplus < 201103L +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } -#error "This is not a C++11 compiler" +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion -version; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -#else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -namespace cxx11 +int +main (void) { +#ifndef __GNUC__ + choke me +#endif - namespace test_static_assert - { - - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu - } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu - namespace test_final_override - { +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+y} +ac_save_CFLAGS=$CFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - struct Base - { - virtual void f() {} - }; +int +main (void) +{ - struct Derived : public Base - { - virtual void f() override {} - }; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +else $as_nop + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - } +int +main (void) +{ - namespace test_double_right_angle_brackets - { + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : - template < typename T > - struct check {}; +else $as_nop + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; +int +main (void) +{ - } + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi - namespace test_decltype - { +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi - } +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi +fi - namespace test_type_deduction - { +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - template < typename T > - struct is_same - { - static const bool value = true; - }; +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - } +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - namespace test_noexcept - { - int f() { return 0; } - int g() noexcept { return 0; } + test -n "$ac_ct_CXX" && break +done - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi - } + fi +fi +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done - namespace test_constexpr - { +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 +printf %s "checking whether the compiler supports GNU C++... " >&6; } +if test ${ac_cv_cxx_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } +int +main (void) +{ +#ifndef __GNUC__ + choke me +#endif - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+y} +ac_save_CXXFLAGS=$CXXFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +printf %s "checking whether $CXX accepts -g... " >&6; } +if test ${ac_cv_prog_cxx_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - namespace test_rvalue_references - { +int +main (void) +{ - template < int N > - struct answer - { - static constexpr int value = N; - }; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_g=yes +else $as_nop + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } +int +main (void) +{ - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - } +else $as_nop + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - namespace test_uniform_initialization - { +int +main (void) +{ - struct test - { - static const int zero {}; - static const int one {1}; - }; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } +if test $ac_test_CXXFLAGS; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +printf %s "checking for $CXX option to enable C++11 features... " >&6; } +if test ${ac_cv_prog_cxx_11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_11=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx11_program +_ACEOF +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx11" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 +printf %s "checking for $CXX option to enable C++98 features... " >&6; } +if test ${ac_cv_prog_cxx_98+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_98=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx98_program +_ACEOF +for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx98=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx98" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); +if test "x$ac_cv_prog_cxx_cxx98" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 +fi +fi - } +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_lambdas - { +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } + test -n "$AWK" && break +done - } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac - namespace test_variadic_templates - { + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi - template - struct sum; +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; - template <> - struct sum<> - { - static constexpr auto value = 0; - }; + # Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); +rm -rf conftest.one conftest.two conftest.dir - } +fi + if test ${ac_cv_path_install+y}; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - struct foo {}; +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - template - using member = typename T::member_type; +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - template - void func(...) {} - template - void func(member*) {} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } +fi - void test(); +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval test \${ac_cv_prog_make_${ac_make}_set+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + SET_MAKE= +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi - void test() { func(0); } - } -} // namespace cxx11 -#endif // __cplusplus >= 201103L -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. -#ifndef __cplusplus -#error "This is not a C++ compiler" -#elif __cplusplus < 201402L + if test -z "$CTAGS" +then : -#error "This is not a C++14 compiler" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +printf %s "checking whether ctags executable path has been provided... " >&6; } -#else +# Check whether --with-ctags was given. +if test ${with_ctags+y} +then : + withval=$with_ctags; + if test "$withval" != yes && test "$withval" != no +then : -namespace cxx14 -{ + CTAGS="$withval" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } - namespace test_polymorphic_lambdas - { +else $as_nop - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } + CTAGS="" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : - } + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CTAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - namespace test_binary_literals - { + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); - } - namespace test_generalized_constexpr - { +fi - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } +fi - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); +else $as_nop - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CTAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - namespace test_lambda_init_capture - { + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } - } - namespace test_digit_separators - { +fi - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); - } +fi - namespace test_return_type_deduction - { - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } - } +if test x${CTAGS} = x +then : + as_fn_error $? "Required program ctags was not found" "$LINENO" 5 +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +printf %s "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi -} // namespace cxx14 +SO_EXT=$shrext_cmds -#endif // __cplusplus >= 201402L +# +# System/Compiler Features +# +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +printf %s "checking for inline... " >&6; } +if test ${ac_cv_c_inline+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo (void) {return 0; } +$ac_kw foo_t foo (void) {return 0; } +#endif _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval $cachevar=yes -else - eval $cachevar=no +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_c_inline=$ac_kw fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CXX="$ac_save_CXX" +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + fi -eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +printf "%s\n" "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no - if test x$ax_cxx_compile_cxx14_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX14=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 -$as_echo "$as_me: No compiler with C++14 support was found" >&6;} - else - HAVE_CXX14=1 - -$as_echo "#define HAVE_CXX14 1" >>confdefs.h - fi -if test x$HAVE_CXX14 != x1; then : - ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 -$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } -if ${ax_cv_cxx_compile_cxx11+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 +printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17442,11 +17709,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -17580,145 +17849,314 @@ namespace cxx11 } - namespace test_uniform_initialization + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture { - struct test + int + test() { - static const int zero {}; - static const int one {1}; - }; - - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } } - namespace test_lambdas + namespace test_digit_separators { - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } - - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); } - namespace test_variadic_templates + namespace test_return_type_deduction { - template - struct sum; + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } - template - struct sum + template < typename T1, typename T2 > + struct is_same { - static constexpr auto value = N0 + sum::value; + static constexpr auto value = false; }; - template <> - struct sum<> + template < typename T > + struct is_same { - static constexpr auto value = 0; + static constexpr auto value = true; }; - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } } - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - - struct foo {}; +} // namespace cxx14 - template - using member = typename T::member_type; +#endif // __cplusplus >= 201402L - template - void func(...) {} - template - void func(member*) {} - void test(); +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + eval $cachevar=yes +else $as_nop + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - void test() { func(0); } + if test x$ax_cxx_compile_cxx14_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX14=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} + else + HAVE_CXX14=1 - } +printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h -} // namespace cxx11 + fi -#endif // __cplusplus >= 201103L +if test x$HAVE_CXX14 != x1 +then : + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ax_cv_cxx_compile_cxx11=yes -else - ax_cv_cxx_compile_cxx11=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 -$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } - if test x$ax_cv_cxx_compile_cxx11 = xyes; then - ac_success=yes - fi if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : - $as_echo_n "(cached) " >&6 -else + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17757,11 +18195,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -18010,17 +18450,18 @@ namespace cxx11 _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : eval $cachevar=yes -else +else $as_nop eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then @@ -18048,287 +18489,281 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test x$ac_success = xno; then HAVE_CXX11=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 -$as_echo "#define HAVE_CXX11 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h fi - fi -for ac_func in memset -do : - ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMSET 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes +then : + printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h fi -done -for ac_func in rint -do : - ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_RINT 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes +then : + printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h fi -done -for ac_func in socket -do : - ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SOCKET 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes +then : + printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h fi -done -for ac_func in recvmsg + + for ac_func in recvmsg do : ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" -if test "x$ac_cv_func_recvmsg" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_RECVMSG 1 -_ACEOF +if test "x$ac_cv_func_recvmsg" = xyes +then : + printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h HAVE_RECVMSG=1 -else +else $as_nop HAVE_RECVMSG=0 fi -done -for ac_func in sqrt -do : - ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQRT 1 -_ACEOF +done +ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes +then : + printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h fi -done -for ac_func in strerror -do : - ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRERROR 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes +then : + printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h fi -done - -for ac_header in arpa/inet.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ARPA_INET_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h fi -done - -for ac_header in netdb.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETDB_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes +then : + printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h fi -done - -for ac_header in netinet/in.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETINET_IN_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes +then : + printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h fi -done - -for ac_header in sys/file.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_FILE_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h fi -done +ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h -for ac_header in sys/ioctl.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_IOCTL_H 1 -_ACEOF +fi + +ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h fi -done +ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes +then : -for ac_header in sys/socket.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_SOCKET_H 1 -_ACEOF +printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h -fi -done +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } -if ${ac_cv_header_stdbool_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +printf %s "checking for stdbool.h that conforms to C99... " >&6; } +if test ${ac_cv_header_stdbool_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include - #include - #ifndef bool - "error: bool is not defined" - #endif - #ifndef false - "error: false is not defined" - #endif - #if false - "error: false is not 0" + #ifndef __bool_true_false_are_defined + #error "__bool_true_false_are_defined is not defined" #endif - #ifndef true - "error: true is not defined" + char a[__bool_true_false_are_defined == 1 ? 1 : -1]; + + /* Regardless of whether this is C++ or "_Bool" is a + valid type name, "true" and "false" should be usable + in #if expressions and integer constant expressions, + and "bool" should be a valid type name. */ + + #if !true + #error "'true' is not true" #endif #if true != 1 - "error: true is not 1" + #error "'true' is not equal to 1" #endif - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" + char b[true == 1 ? 1 : -1]; + char c[true]; + + #if false + #error "'false' is not false" #endif + #if false != 0 + #error "'false' is not equal to 0" + #endif + char d[false == 0 ? 1 : -1]; + + enum { e = false, f = true, g = false * true, h = true * 256 }; + + char i[(bool) 0.5 == true ? 1 : -1]; + char j[(bool) 0.0 == false ? 1 : -1]; + char k[sizeof (bool) > 0 ? 1 : -1]; + + struct sb { bool s: 1; bool t; } s; + char l[sizeof s.t > 0 ? 1 : -1]; - struct s { _Bool s: 1; _Bool t; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(_Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (_Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - _Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + bool m[h]; + char n[sizeof m == h * sizeof m[0] ? 1 : -1]; + char o[-1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ - _Bool q = true; - _Bool *pq = &q; + bool p = true; + bool *pp = &p; + + /* C 1999 specifies that bool, true, and false are to be + macros, but C++ 2011 and later overrule this. */ + #if __cplusplus < 201103 + #ifndef bool + #error "bool is not defined" + #endif + #ifndef false + #error "false is not defined" + #endif + #ifndef true + #error "true is not defined" + #endif + #endif + + /* If _Bool is available, repeat with it all the tests + above that used bool. */ + #ifdef HAVE__BOOL + struct sB { _Bool s: 1; _Bool t; } t; + + char q[(_Bool) 0.5 == true ? 1 : -1]; + char r[(_Bool) 0.0 == false ? 1 : -1]; + char u[sizeof (_Bool) > 0 ? 1 : -1]; + char v[sizeof t.t > 0 ? 1 : -1]; + + _Bool w[h]; + char x[sizeof m == h * sizeof m[0] ? 1 : -1]; + char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; + _Bool z = true; + _Bool *pz = &p; + #endif int -main () +main (void) { - bool e = &s; - *pq |= q; - *pq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq); + bool ps = &s; + *pp |= p; + *pp |= ! p; + + #ifdef HAVE__BOOL + _Bool pt = &t; + *pz |= z; + *pz |= ! z; + #endif + + /* Refer to every declared value, so they cannot be + discarded as unused. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + + !l + !m + !n + !o + !p + !pp + !ps + #ifdef HAVE__BOOL + + !q + !r + !u + !v + !w + !x + !y + !z + !pt + #endif + ); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_header_stdbool_h=yes -else +else $as_nop ac_cv_header_stdbool_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -$as_echo "$ac_cv_header_stdbool_h" >&6; } - ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE__BOOL 1 -_ACEOF - - -fi - - -for ac_header in stdlib.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" -if test "x$ac_cv_header_stdlib_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STDLIB_H 1 -_ACEOF - -fi - -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -$as_echo_n "checking for GNU libc compatible malloc... " >&6; } -if ${ac_cv_func_malloc_0_nonnull+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_malloc_0_nonnull=no -else +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +printf %s "checking for GNU libc compatible malloc... " >&6; } +if test ${ac_cv_func_malloc_0_nonnull+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + case "$host_os" in # (( + # Guess yes on platforms where we know the result. + *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ + | hpux* | solaris* | cygwin* | mingw* | msys* ) + ac_cv_func_malloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_malloc_0_nonnull=no ;; + esac +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined STDC_HEADERS || defined HAVE_STDLIB_H -# include -#else -char *malloc (); -#endif +#include int -main () +main (void) { -return ! malloc (0); +void *p = malloc (0); + int result = !p; + free (p); + return result; ; return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : +if ac_fn_cxx_try_run "$LINENO" +then : ac_cv_func_malloc_0_nonnull=yes -else +else $as_nop ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18336,14 +18771,15 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes +then : -$as_echo "#define HAVE_MALLOC 1" >>confdefs.h +printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h -else - $as_echo "#define HAVE_MALLOC 0" >>confdefs.h +else $as_nop + printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; @@ -18352,7 +18788,7 @@ else esac -$as_echo "#define malloc rpl_malloc" >>confdefs.h +printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h fi @@ -18362,11 +18798,12 @@ HAVE_OPENMP=0 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 -$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } -if ${ax_cv_cxx_openmp+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +printf %s "checking for OpenMP flag of C++ compiler... " >&6; } +if test ${ax_cv_cxx_openmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop saveCXXFLAGS=$CXXFLAGS ax_cv_cxx_openmp=unknown # Flags to try: -fopenmp (gcc), -mp (SGI & PGI), @@ -18407,17 +18844,18 @@ main() } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ax_cv_cxx_openmp=$ax_openmp_flag; break fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done CXXFLAGS=$saveCXXFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 -$as_echo "$ax_cv_cxx_openmp" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +printf "%s\n" "$ax_cv_cxx_openmp" >&6; } if test "x$ax_cv_cxx_openmp" = "xunknown"; then : else @@ -18425,27 +18863,28 @@ else OPENMP_CXXFLAGS=$ax_cv_cxx_openmp fi -$as_echo "#define HAVE_OPENMP 1" >>confdefs.h +printf "%s\n" "#define HAVE_OPENMP 1" >>confdefs.h fi -if test x$OPENMP_CXXFLAGS != x; then : +if test x$OPENMP_CXXFLAGS != x +then : HAVE_OPENMP=1 fi -if test x$HAVE_OPENMP != x1; then : +if test x$HAVE_OPENMP != x1 +then : -else +else $as_nop CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_PTRDIFF_T 1 -_ACEOF +printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h fi @@ -18455,9 +18894,7 @@ case $ac_cv_c_int16_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int16_t $ac_cv_c_int16_t -_ACEOF +printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h ;; esac @@ -18466,9 +18903,7 @@ case $ac_cv_c_int32_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int32_t $ac_cv_c_int32_t -_ACEOF +printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h ;; esac @@ -18477,9 +18912,7 @@ case $ac_cv_c_int64_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int64_t $ac_cv_c_int64_t -_ACEOF +printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h ;; esac @@ -18488,42 +18921,64 @@ case $ac_cv_c_int8_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int8_t $ac_cv_c_int8_t -_ACEOF +printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h ;; esac -ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = xyes; then : -else + ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default +" +if test "x$ac_cv_type_pid_t" = xyes +then : + +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if defined _WIN64 && !defined __CYGWIN__ + LLP64 + #endif + +int +main (void) +{ + + ; + return 0; +} -cat >>confdefs.h <<_ACEOF -#define pid_t int _ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_pid_type='int' +else $as_nop + ac_pid_type='__int64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h + fi + ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : +if test "x$ac_cv_type_size_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF +printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes; then : +if test "x$ac_cv_type_ssize_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define ssize_t int -_ACEOF +printf "%s\n" "#define ssize_t int" >>confdefs.h fi @@ -18533,9 +18988,7 @@ case $ac_cv_c_uint16_t in #( *) -cat >>confdefs.h <<_ACEOF -#define uint16_t $ac_cv_c_uint16_t -_ACEOF +printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h ;; esac @@ -18544,12 +18997,10 @@ case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT32_T 1" >>confdefs.h +printf "%s\n" "#define _UINT32_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint32_t $ac_cv_c_uint32_t -_ACEOF +printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h ;; esac @@ -18558,12 +19009,10 @@ case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT64_T 1" >>confdefs.h +printf "%s\n" "#define _UINT64_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint64_t $ac_cv_c_uint64_t -_ACEOF +printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h ;; esac @@ -18572,67 +19021,127 @@ case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT8_T 1" >>confdefs.h +printf "%s\n" "#define _UINT8_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint8_t $ac_cv_c_uint8_t -_ACEOF +printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h ;; esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 +printf %s "checking for long double with more range or precision than double... " >&6; } +if test ${ac_cv_type_long_double_wider+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + long double const a[] = + { + 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON, + LDBL_MIN, LDBL_MAX, LDBL_EPSILON + }; + long double + f (long double x) + { + return ((x + (unsigned long int) 10) * (-1 / x) + a[0] + + (x ? f (x) : 'c')); + } + +int +main (void) +{ +static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) + + (DBL_MANT_DIG < LDBL_MANT_DIG) + - (LDBL_MAX_EXP < DBL_MAX_EXP) + - (LDBL_MANT_DIG < DBL_MANT_DIG))) + && (int) LDBL_EPSILON == 0 + )]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_type_long_double_wider=yes +else $as_nop + ac_cv_type_long_double_wider=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 +printf "%s\n" "$ac_cv_type_long_double_wider" >&6; } + if test $ac_cv_type_long_double_wider = yes; then + +printf "%s\n" "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h + + fi + +HAVE_FLOAT128=0 + +if test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1 +then : + HAVE_FLOAT128=0 + +fi + # # NUMA # # Check whether --enable-numa was given. -if test "${enable_numa+set}" = set; then : +if test ${enable_numa+y} +then : enableval=$enable_numa; enable_numa=no -else +else $as_nop enable_numa=yes fi HAVE_NUMA=0 -if test x$enable_numa != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } -if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_numa != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } +if test ${ac_cv_lib_numa_numa_node_of_cpu+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lnuma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char numa_node_of_cpu (); +namespace conftest { + extern "C" int numa_node_of_cpu (); +} int -main () +main (void) { -return numa_node_of_cpu (); +return conftest::numa_node_of_cpu (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_numa_numa_node_of_cpu=yes -else +else $as_nop ac_cv_lib_numa_numa_node_of_cpu=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes +then : HAVE_NUMA=1 LIBS="$LIBS -lnuma" @@ -18645,52 +19154,53 @@ fi # # Check whether --enable-hwloc was given. -if test "${enable_hwloc+set}" = set; then : +if test ${enable_hwloc+y} +then : enableval=$enable_hwloc; enable_hwloc=no -else +else $as_nop enable_hwloc=yes fi HAVE_HWLOC=0 -if test x$enable_hwloc != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } -if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_hwloc != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } +if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lhwloc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char hwloc_topology_init (); +namespace conftest { + extern "C" int hwloc_topology_init (); +} int -main () +main (void) { -return hwloc_topology_init (); +return conftest::hwloc_topology_init (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_hwloc_hwloc_topology_init=yes -else +else $as_nop ac_cv_lib_hwloc_hwloc_topology_init=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes +then : HAVE_HWLOC=1 LIBS="$LIBS -lhwloc" @@ -18703,52 +19213,53 @@ fi # # Check whether --enable-vma was given. -if test "${enable_vma+set}" = set; then : +if test ${enable_vma+y} +then : enableval=$enable_vma; enable_vma=yes -else +else $as_nop enable_vma=no fi HAVE_VMA=0 -if test x$enable_vma != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } -if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_vma != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } +if test ${ac_cv_lib_vma_recvfrom_zcopy+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lvma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char recvfrom_zcopy (); +namespace conftest { + extern "C" int recvfrom_zcopy (); +} int -main () +main (void) { -return recvfrom_zcopy (); +return conftest::recvfrom_zcopy (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_vma_recvfrom_zcopy=yes -else +else $as_nop ac_cv_lib_vma_recvfrom_zcopy=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes +then : HAVE_VMA=1 LIBS="$LIBS -lvma" @@ -18772,9 +19283,10 @@ fi # Check whether --with-cuda_home was given. -if test "${with_cuda_home+set}" = set; then : +if test ${with_cuda_home+y} +then : withval=$with_cuda_home; -else +else $as_nop with_cuda_home=/usr/local/cuda fi @@ -18782,9 +19294,10 @@ fi # Check whether --enable-cuda was given. -if test "${enable_cuda+set}" = set; then : +if test ${enable_cuda+y} +then : enableval=$enable_cuda; enable_cuda=no -else +else $as_nop enable_cuda=yes fi @@ -18797,11 +19310,12 @@ fi # Extract the first word of "nvcc", so it can be a program name with args. set dummy nvcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVCC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $NVCC in [\\/]* | ?:[\\/]*) ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. @@ -18812,11 +19326,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18829,21 +19347,22 @@ esac fi NVCC=$ac_cv_path_NVCC if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +printf "%s\n" "$NVCC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "nvprune", so it can be a program name with args. set dummy nvprune; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVPRUNE+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVPRUNE+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $NVPRUNE in [\\/]* | ?:[\\/]*) ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. @@ -18854,11 +19373,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18871,21 +19394,22 @@ esac fi NVPRUNE=$ac_cv_path_NVPRUNE if test -n "$NVPRUNE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +printf "%s\n" "$NVPRUNE" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "cuobjdump", so it can be a program name with args. set dummy cuobjdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CUOBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CUOBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CUOBJDUMP in [\\/]* | ?:[\\/]*) ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. @@ -18896,11 +19420,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18913,19 +19441,19 @@ esac fi CUOBJDUMP=$ac_cv_path_CUOBJDUMP if test -n "$CUOBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +printf "%s\n" "$CUOBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi fi if test "$HAVE_CUDA" = "1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 -$as_echo_n "checking for a working CUDA installation... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +printf %s "checking for a working CUDA installation... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -18939,20 +19467,21 @@ $as_echo_n "checking for a working CUDA installation... " >&6; } #include #include int -main () +main (void) { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" @@ -18966,27 +19495,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include #include int -main () +main (void) { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if ac_fn_cxx_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } HAVE_CUDA=0 fi @@ -18998,9 +19528,10 @@ $as_echo "no" >&6; } # Check whether --with-nvcc_flags was given. -if test "${with_nvcc_flags+set}" = set; then : +if test ${with_nvcc_flags+y} +then : withval=$with_nvcc_flags; -else +else $as_nop with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi @@ -19017,16 +19548,17 @@ fi # Check whether --with-gpu_archs was given. -if test "${with_gpu_archs+set}" = set; then : +if test ${with_gpu_archs+y} +then : withval=$with_gpu_archs; -else +else $as_nop with_gpu_archs='auto' fi if test "$HAVE_CUDA" = "1"; then if test "$with_gpu_archs" = "auto"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 -$as_echo_n "checking which CUDA architectures to target... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +printf %s "checking which CUDA architectures to target... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -19035,12 +19567,13 @@ $as_echo_n "checking which CUDA architectures to target... " >&6; } LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' - if test "$cross_compiling" = yes; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19051,7 +19584,7 @@ else #include #include int -main () +main (void) { std::set archs; @@ -19086,12 +19619,13 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : +if ac_fn_cxx_try_run "$LINENO" +then : GPU_ARCHS=`cat confarchs.out` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 -$as_echo "$GPU_ARCHS" >&6; } -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +printf "%s\n" "$GPU_ARCHS" >&6; } +else $as_nop as_fn_error $? "failed to find any" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19107,32 +19641,32 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 -$as_echo_n "checking for valid CUDA architectures... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 +printf %s "checking for valid CUDA architectures... " >&6; } ar_requested=$( echo "$GPU_ARCHS" | wc -w ) ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) if test "$ar_requested" = $ar_found; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else as_fn_error $? "only architectures $ar_valid are supported" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 -$as_echo_n "checking for Pascal-style CUDA managed memory... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 +printf %s "checking for Pascal-style CUDA managed memory... " >&6; } cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) if ! echo $cm_invalid | ${GREP} -q PRE; then GPU_PASCAL_MANAGEDMEM=1 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else GPU_PASCAL_MANAGEDMEM=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi else GPU_PASCAL_MANAGEDMEM=0 @@ -19142,15 +19676,17 @@ $as_echo "no" >&6; } # Check whether --with-shared_mem was given. -if test "${with_shared_mem+set}" = set; then : +if test ${with_shared_mem+y} +then : withval=$with_shared_mem; -else +else $as_nop with_shared_mem=16384 fi GPU_SHAREDMEM=$with_shared_mem -if test x$HAVE_CUDA = x0; then : +if test x$HAVE_CUDA = x0 +then : GPU_SHAREDMEM=0 fi @@ -19161,9 +19697,10 @@ fi # Check whether --with-alignment was given. -if test "${with_alignment+set}" = set; then : +if test ${with_alignment+y} +then : withval=$with_alignment; -else +else $as_nop with_alignment=4096 fi @@ -19179,21 +19716,23 @@ ALIGNMENT=$with_alignment # Check whether --with-logging_dir was given. -if test "${with_logging_dir+set}" = set; then : +if test ${with_logging_dir+y} +then : withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir -else +else $as_nop HAVE_TMPFS=/tmp fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 -$as_echo_n "checking for /dev/shm... " >&6; } -if ${ac_cv_file__dev_shm+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +printf %s "checking for /dev/shm... " >&6; } +if test ${ac_cv_file__dev_shm+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/shm"; then @@ -19202,9 +19741,10 @@ else ac_cv_file__dev_shm=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 -$as_echo "$ac_cv_file__dev_shm" >&6; } -if test "x$ac_cv_file__dev_shm" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +printf "%s\n" "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes +then : HAVE_TMPFS=/dev/shm/bifrost fi @@ -19212,11 +19752,12 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 -$as_echo_n "checking for /Volumes/RAMDisk... " >&6; } -if ${ac_cv_file__Volumes_RAMDisk+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +printf %s "checking for /Volumes/RAMDisk... " >&6; } +if test ${ac_cv_file__Volumes_RAMDisk+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/Volumes/RAMDisk"; then @@ -19225,9 +19766,10 @@ else ac_cv_file__Volumes_RAMDisk=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 -$as_echo "$ac_cv_file__Volumes_RAMDisk" >&6; } -if test "x$ac_cv_file__Volumes_RAMDisk" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes +then : HAVE_TMPFS=/Volumes/RAMDisk/bifrost fi @@ -19235,11 +19777,12 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 -$as_echo_n "checking for /tmp... " >&6; } -if ${ac_cv_file__tmp+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +printf %s "checking for /tmp... " >&6; } +if test ${ac_cv_file__tmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/tmp"; then @@ -19248,15 +19791,16 @@ else ac_cv_file__tmp=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 -$as_echo "$ac_cv_file__tmp" >&6; } -if test "x$ac_cv_file__tmp" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +printf "%s\n" "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes +then : HAVE_TMPFS=/tmp fi - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 -$as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} HAVE_TMPFS=/tmp/bifrost fi @@ -19267,15 +19811,17 @@ $as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging # # Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : +if test ${enable_debug+y} +then : enableval=$enable_debug; enable_debug=yes -else +else $as_nop enable_debug=no fi HAVE_DEBUG=0 -if test x$enable_debug != xno; then : +if test x$enable_debug != xno +then : HAVE_DEBUG=1 CXXFLAGS="$CXXFLAGS -g" @@ -19283,43 +19829,81 @@ if test x$enable_debug != xno; then : fi # Check whether --enable-trace was given. -if test "${enable_trace+set}" = set; then : +if test ${enable_trace+y} +then : enableval=$enable_trace; enable_trace=yes -else +else $as_nop enable_trace=no fi HAVE_TRACE=0 -if test x$enable_trace != xno; then : +if test x$enable_trace != xno +then : HAVE_TRACE=1 fi -# Check whether --enable-native_arch was given. -if test "${enable_native_arch+set}" = set; then : + + + # Check whether --enable-native_arch was given. +if test ${enable_native_arch+y} +then : enableval=$enable_native_arch; enable_native_arch=no -else +else $as_nop enable_native_arch=yes fi -if test x$enable_native_arch != xyes; then : -else + if test "$enable_native_arch" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler accepts '-march=native'" >&5 +printf %s "checking if the compiler accepts '-march=native'... " >&6; } + + CXXFLAGS_temp="$CXXFLAGS -march=native" + + ac_compile='$CXX -c $CXXFLAGS_temp conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + int i = 5; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : CXXFLAGS="$CXXFLAGS -march=native" - NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" + NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + enable_native_arch=no + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # Check whether --enable-cuda_debug was given. -if test "${enable_cuda_debug+set}" = set; then : +if test ${enable_cuda_debug+y} +then : enableval=$enable_cuda_debug; enable_cuda_debug=yes -else +else $as_nop enable_cuda_debug=no fi HAVE_CUDA_DEBUG=0 -if test x$enable_cuda_debug != xno; then : +if test x$enable_cuda_debug != xno +then : HAVE_CUDA_DEBUG=1 NVCCFLAGS="$NVCCFLAGS -G" @@ -19330,15 +19914,17 @@ fi # # Check whether --enable-python was given. -if test "${enable_python+set}" = set; then : +if test ${enable_python+y} +then : enableval=$enable_python; enable_python=no -else +else $as_nop enable_python=yes fi HAVE_PYTHON=0 -if test x$enable_python != xno; then : +if test x$enable_python != xno +then : @@ -19349,34 +19935,39 @@ if test x$enable_python != xno; then : - if test -z "$PYTHON"; then : + if test -z "$PYTHON" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 -$as_echo_n "checking whether python executable path has been provided... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +printf %s "checking whether python executable path has been provided... " >&6; } # Check whether --with-python was given. -if test "${with_python+set}" = set; then : +if test ${with_python+y} +then : withval=$with_python; - if test "$withval" != yes && test "$withval" != no; then : + if test "$withval" != yes && test "$withval" != no +then : PYTHON="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } -else +else $as_nop PYTHON="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -19386,11 +19977,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19403,11 +19998,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19416,17 +20011,18 @@ fi fi -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -19436,11 +20032,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19453,11 +20053,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19472,17 +20072,19 @@ fi - if test x${PYTHON} != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 -$as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 -$as_echo "$as_me: WARNING: python module will not be built" >&2;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + if test x${PYTHON} != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +printf %s "checking whether $PYTHON as ctypesgen... " >&6; } + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } HAVE_PYTHON=1 fi @@ -19490,7 +20092,8 @@ fi fi # Check whether --with-pybuild_flags was given. -if test "${with_pybuild_flags+set}" = set; then : +if test ${with_pybuild_flags+y} +then : withval=$with_pybuild_flags; fi @@ -19499,7 +20102,8 @@ PYBUILDFLAGS=$with_pybuild_flags # Check whether --with-pyinstall_flags was given. -if test "${with_pyinstall_flags+set}" = set; then : +if test ${with_pyinstall_flags+y} +then : withval=$with_pyinstall_flags; fi @@ -19520,34 +20124,39 @@ PYINSTALLFLAGS=$with_pyinstall_flags - if test -z "$DOCKER"; then : + if test -z "$DOCKER" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 -$as_echo_n "checking whether docker executable path has been provided... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 +printf %s "checking whether docker executable path has been provided... " >&6; } # Check whether --with-docker was given. -if test "${with_docker+set}" = set; then : +if test ${with_docker+y} +then : withval=$with_docker; - if test "$withval" != yes && test "$withval" != no; then : + if test "$withval" != yes && test "$withval" != no +then : DOCKER="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } -else +else $as_nop DOCKER="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DOCKER+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DOCKER+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -19557,11 +20166,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19574,11 +20187,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19587,17 +20200,18 @@ fi fi -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DOCKER+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DOCKER+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -19607,11 +20221,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19624,11 +20242,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19643,7 +20261,8 @@ fi -if test x${DOCKER} != xno; then : +if test x${DOCKER} != xno +then : HAVE_DOCKER=1 fi @@ -19686,7 +20305,8 @@ DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" # Check whether --enable-doxygen-doc was given. -if test "${enable_doxygen_doc+set}" = set; then : +if test ${enable_doxygen_doc+y} +then : enableval=$enable_doxygen_doc; case "$enableval" in #( @@ -19704,7 +20324,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_doc=1 @@ -19717,11 +20337,12 @@ if test "$DX_FLAG_doc" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. set dummy ${ac_tool_prefix}doxygen; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DOXYGEN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DOXYGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. @@ -19731,11 +20352,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19747,11 +20372,11 @@ esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN if test -n "$DX_DOXYGEN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 -$as_echo "$DX_DOXYGEN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +printf "%s\n" "$DX_DOXYGEN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19760,11 +20385,12 @@ if test -z "$ac_cv_path_DX_DOXYGEN"; then ac_pt_DX_DOXYGEN=$DX_DOXYGEN # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DOXYGEN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. @@ -19774,11 +20400,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19790,11 +20420,11 @@ esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN if test -n "$ac_pt_DX_DOXYGEN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 -$as_echo "$ac_pt_DX_DOXYGEN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DOXYGEN" = x; then @@ -19802,8 +20432,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOXYGEN=$ac_pt_DX_DOXYGEN @@ -19813,8 +20443,8 @@ else fi if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 -$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -19823,11 +20453,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. set dummy ${ac_tool_prefix}perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_PERL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_PERL+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. @@ -19837,11 +20468,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19853,11 +20488,11 @@ esac fi DX_PERL=$ac_cv_path_DX_PERL if test -n "$DX_PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 -$as_echo "$DX_PERL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +printf "%s\n" "$DX_PERL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19866,11 +20501,12 @@ if test -z "$ac_cv_path_DX_PERL"; then ac_pt_DX_PERL=$DX_PERL # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_PERL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_PERL+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. @@ -19880,11 +20516,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19896,11 +20536,11 @@ esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL if test -n "$ac_pt_DX_PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 -$as_echo "$ac_pt_DX_PERL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +printf "%s\n" "$ac_pt_DX_PERL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_PERL" = x; then @@ -19908,8 +20548,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PERL=$ac_pt_DX_PERL @@ -19919,8 +20559,8 @@ else fi if test "$DX_FLAG_doc$DX_PERL" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 -$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -19943,7 +20583,8 @@ fi # Check whether --enable-doxygen-dot was given. -if test "${enable_doxygen_dot+set}" = set; then : +if test ${enable_doxygen_dot+y} +then : enableval=$enable_doxygen_dot; case "$enableval" in #( @@ -19952,7 +20593,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -19964,7 +20605,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_dot=0 @@ -19980,11 +20621,12 @@ if test "$DX_FLAG_dot" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. set dummy ${ac_tool_prefix}dot; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DOT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DOT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. @@ -19994,11 +20636,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20010,11 +20656,11 @@ esac fi DX_DOT=$ac_cv_path_DX_DOT if test -n "$DX_DOT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 -$as_echo "$DX_DOT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +printf "%s\n" "$DX_DOT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20023,11 +20669,12 @@ if test -z "$ac_cv_path_DX_DOT"; then ac_pt_DX_DOT=$DX_DOT # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DOT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DOT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. @@ -20037,11 +20684,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20053,11 +20704,11 @@ esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT if test -n "$ac_pt_DX_DOT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 -$as_echo "$ac_pt_DX_DOT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +printf "%s\n" "$ac_pt_DX_DOT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DOT" = x; then @@ -20065,8 +20716,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOT=$ac_pt_DX_DOT @@ -20076,8 +20727,8 @@ else fi if test "$DX_FLAG_dot$DX_DOT" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 -$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} DX_FLAG_dot=0 fi @@ -20105,7 +20756,8 @@ fi # Check whether --enable-doxygen-man was given. -if test "${enable_doxygen_man+set}" = set; then : +if test ${enable_doxygen_man+y} +then : enableval=$enable_doxygen_man; case "$enableval" in #( @@ -20114,7 +20766,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20126,7 +20778,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_man=1 @@ -20159,7 +20811,8 @@ fi # Check whether --enable-doxygen-rtf was given. -if test "${enable_doxygen_rtf+set}" = set; then : +if test ${enable_doxygen_rtf+y} +then : enableval=$enable_doxygen_rtf; case "$enableval" in #( @@ -20168,7 +20821,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20180,7 +20833,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_rtf=0 @@ -20213,7 +20866,8 @@ fi # Check whether --enable-doxygen-xml was given. -if test "${enable_doxygen_xml+set}" = set; then : +if test ${enable_doxygen_xml+y} +then : enableval=$enable_doxygen_xml; case "$enableval" in #( @@ -20222,7 +20876,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20234,7 +20888,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_xml=0 @@ -20267,7 +20921,8 @@ fi # Check whether --enable-doxygen-chm was given. -if test "${enable_doxygen_chm+set}" = set; then : +if test ${enable_doxygen_chm+y} +then : enableval=$enable_doxygen_chm; case "$enableval" in #( @@ -20276,7 +20931,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20288,7 +20943,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_chm=0 @@ -20304,11 +20959,12 @@ if test "$DX_FLAG_chm" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. set dummy ${ac_tool_prefix}hhc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_HHC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_HHC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. @@ -20318,11 +20974,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20334,11 +20994,11 @@ esac fi DX_HHC=$ac_cv_path_DX_HHC if test -n "$DX_HHC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 -$as_echo "$DX_HHC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +printf "%s\n" "$DX_HHC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20347,11 +21007,12 @@ if test -z "$ac_cv_path_DX_HHC"; then ac_pt_DX_HHC=$DX_HHC # Extract the first word of "hhc", so it can be a program name with args. set dummy hhc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_HHC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_HHC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. @@ -20361,11 +21022,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20377,11 +21042,11 @@ esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC if test -n "$ac_pt_DX_HHC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 -$as_echo "$ac_pt_DX_HHC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +printf "%s\n" "$ac_pt_DX_HHC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_HHC" = x; then @@ -20389,8 +21054,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_HHC=$ac_pt_DX_HHC @@ -20400,8 +21065,8 @@ else fi if test "$DX_FLAG_chm$DX_HHC" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 -$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} DX_FLAG_chm=0 fi @@ -20432,7 +21097,8 @@ fi # Check whether --enable-doxygen-chi was given. -if test "${enable_doxygen_chi+set}" = set; then : +if test ${enable_doxygen_chi+y} +then : enableval=$enable_doxygen_chi; case "$enableval" in #( @@ -20441,7 +21107,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20453,7 +21119,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_chi=0 @@ -20486,7 +21152,8 @@ fi # Check whether --enable-doxygen-html was given. -if test "${enable_doxygen_html+set}" = set; then : +if test ${enable_doxygen_html+y} +then : enableval=$enable_doxygen_html; case "$enableval" in #( @@ -20495,10 +21162,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20510,7 +21177,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_html=1 @@ -20546,7 +21213,8 @@ fi # Check whether --enable-doxygen-ps was given. -if test "${enable_doxygen_ps+set}" = set; then : +if test ${enable_doxygen_ps+y} +then : enableval=$enable_doxygen_ps; case "$enableval" in #( @@ -20555,7 +21223,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20567,7 +21235,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_ps=1 @@ -20583,11 +21251,12 @@ if test "$DX_FLAG_ps" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. set dummy ${ac_tool_prefix}latex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_LATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_LATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. @@ -20597,11 +21266,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20613,11 +21286,11 @@ esac fi DX_LATEX=$ac_cv_path_DX_LATEX if test -n "$DX_LATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 -$as_echo "$DX_LATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +printf "%s\n" "$DX_LATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20626,11 +21299,12 @@ if test -z "$ac_cv_path_DX_LATEX"; then ac_pt_DX_LATEX=$DX_LATEX # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_LATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_LATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. @@ -20640,11 +21314,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20656,11 +21334,11 @@ esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX if test -n "$ac_pt_DX_LATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 -$as_echo "$ac_pt_DX_LATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +printf "%s\n" "$ac_pt_DX_LATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_LATEX" = x; then @@ -20668,8 +21346,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_LATEX=$ac_pt_DX_LATEX @@ -20679,8 +21357,8 @@ else fi if test "$DX_FLAG_ps$DX_LATEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -20689,11 +21367,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -20703,11 +21382,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20719,11 +21402,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -$as_echo "$DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +printf "%s\n" "$DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20732,11 +21415,12 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -20746,11 +21430,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20762,11 +21450,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -20774,8 +21462,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -20785,8 +21473,8 @@ else fi if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -20795,11 +21483,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. set dummy ${ac_tool_prefix}dvips; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DVIPS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DVIPS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. @@ -20809,11 +21498,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20825,11 +21518,11 @@ esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS if test -n "$DX_DVIPS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 -$as_echo "$DX_DVIPS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +printf "%s\n" "$DX_DVIPS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20838,11 +21531,12 @@ if test -z "$ac_cv_path_DX_DVIPS"; then ac_pt_DX_DVIPS=$DX_DVIPS # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DVIPS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DVIPS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. @@ -20852,11 +21546,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20868,11 +21566,11 @@ esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS if test -n "$ac_pt_DX_DVIPS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 -$as_echo "$ac_pt_DX_DVIPS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +printf "%s\n" "$ac_pt_DX_DVIPS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DVIPS" = x; then @@ -20880,8 +21578,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DVIPS=$ac_pt_DX_DVIPS @@ -20891,8 +21589,8 @@ else fi if test "$DX_FLAG_ps$DX_DVIPS" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -20901,11 +21599,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -20915,11 +21614,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20931,11 +21634,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -$as_echo "$DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +printf "%s\n" "$DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20944,11 +21647,12 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -20958,11 +21662,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20974,11 +21682,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -$as_echo "$ac_pt_DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +printf "%s\n" "$ac_pt_DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -20986,8 +21694,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -20997,8 +21705,8 @@ else fi if test "$DX_FLAG_ps$DX_EGREP" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21019,7 +21727,8 @@ fi # Check whether --enable-doxygen-pdf was given. -if test "${enable_doxygen_pdf+set}" = set; then : +if test ${enable_doxygen_pdf+y} +then : enableval=$enable_doxygen_pdf; case "$enableval" in #( @@ -21028,7 +21737,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21040,7 +21749,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_pdf=1 @@ -21056,11 +21765,12 @@ if test "$DX_FLAG_pdf" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_PDFLATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_PDFLATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. @@ -21070,11 +21780,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21086,11 +21800,11 @@ esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX if test -n "$DX_PDFLATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 -$as_echo "$DX_PDFLATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +printf "%s\n" "$DX_PDFLATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -21099,11 +21813,12 @@ if test -z "$ac_cv_path_DX_PDFLATEX"; then ac_pt_DX_PDFLATEX=$DX_PDFLATEX # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_PDFLATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. @@ -21113,11 +21828,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21129,11 +21848,11 @@ esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX if test -n "$ac_pt_DX_PDFLATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 -$as_echo "$ac_pt_DX_PDFLATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_PDFLATEX" = x; then @@ -21141,8 +21860,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PDFLATEX=$ac_pt_DX_PDFLATEX @@ -21152,8 +21871,8 @@ else fi if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21162,11 +21881,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -21176,11 +21896,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21192,11 +21916,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -$as_echo "$DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +printf "%s\n" "$DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -21205,11 +21929,12 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -21219,11 +21944,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21235,11 +21964,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -21247,8 +21976,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -21258,8 +21987,8 @@ else fi if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21268,11 +21997,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -21282,11 +22012,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21298,11 +22032,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -$as_echo "$DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +printf "%s\n" "$DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -21311,11 +22045,12 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -21325,11 +22060,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21341,11 +22080,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -$as_echo "$ac_pt_DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +printf "%s\n" "$ac_pt_DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -21353,8 +22092,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -21364,8 +22103,8 @@ else fi if test "$DX_FLAG_pdf$DX_EGREP" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21411,66 +22150,85 @@ PAPER_SIZE=$DOXYGEN_PAPER_SIZE esac # Rules: -if test $DX_FLAG_html -eq 1; then : +if test $DX_FLAG_html -eq 1 +then : DX_SNIPPET_html="## ------------------------------- ## +## Rules specific for HTML output. ## +## ------------------------------- ## DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ \$(DX_DOCDIR)/html " -else +else $as_nop DX_SNIPPET_html="" fi -if test $DX_FLAG_chi -eq 1; then : +if test $DX_FLAG_chi -eq 1 +then : DX_SNIPPET_chi=" DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ \$(DX_DOCDIR)/\$(PACKAGE).chi" -else +else $as_nop DX_SNIPPET_chi="" fi -if test $DX_FLAG_chm -eq 1; then : +if test $DX_FLAG_chm -eq 1 +then : DX_SNIPPET_chm="## ------------------------------ ## +## Rules specific for CHM output. ## +## ------------------------------ ## DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ \$(DX_DOCDIR)/chm\ ${DX_SNIPPET_chi} " -else +else $as_nop DX_SNIPPET_chm="" fi -if test $DX_FLAG_man -eq 1; then : +if test $DX_FLAG_man -eq 1 +then : DX_SNIPPET_man="## ------------------------------ ## +## Rules specific for MAN output. ## +## ------------------------------ ## DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ \$(DX_DOCDIR)/man " -else +else $as_nop DX_SNIPPET_man="" fi -if test $DX_FLAG_rtf -eq 1; then : +if test $DX_FLAG_rtf -eq 1 +then : DX_SNIPPET_rtf="## ------------------------------ ## +## Rules specific for RTF output. ## +## ------------------------------ ## DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ \$(DX_DOCDIR)/rtf " -else +else $as_nop DX_SNIPPET_rtf="" fi -if test $DX_FLAG_xml -eq 1; then : +if test $DX_FLAG_xml -eq 1 +then : DX_SNIPPET_xml="## ------------------------------ ## +## Rules specific for XML output. ## +## ------------------------------ ## DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ \$(DX_DOCDIR)/xml " -else +else $as_nop DX_SNIPPET_xml="" fi -if test $DX_FLAG_ps -eq 1; then : +if test $DX_FLAG_ps -eq 1 +then : DX_SNIPPET_ps="## ----------------------------- ## +## Rules specific for PS output. ## +## ----------------------------- ## DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ \$(DX_DOCDIR)/\$(PACKAGE).ps @@ -21495,11 +22253,14 @@ doxygen-ps: \$(DX_CLEAN_PS) \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi " -else +else $as_nop DX_SNIPPET_ps="" fi -if test $DX_FLAG_pdf -eq 1; then : +if test $DX_FLAG_pdf -eq 1 +then : DX_SNIPPET_pdf="## ------------------------------ ## +## Rules specific for PDF output. ## +## ------------------------------ ## DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ \$(DX_DOCDIR)/\$(PACKAGE).pdf @@ -21524,11 +22285,14 @@ doxygen-pdf: \$(DX_CLEAN_PDF) mv refman.pdf ../\$(PACKAGE).pdf " -else +else $as_nop DX_SNIPPET_pdf="" fi -if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1; then : +if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 +then : DX_SNIPPET_latex="## ------------------------------------------------- ## +## Rules specific for LaTeX (shared for PS and PDF). ## +## ------------------------------------------------- ## DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) _DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) @@ -21538,12 +22302,15 @@ DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ \$(DX_DOCDIR)/latex " -else +else $as_nop DX_SNIPPET_latex="" fi -if test $DX_FLAG_doc -eq 1; then : +if test $DX_FLAG_doc -eq 1 +then : DX_SNIPPET_doc="## --------------------------------- ## +## Format-independent Doxygen rules. ## +## --------------------------------- ## ${DX_SNIPPET_html}\ ${DX_SNIPPET_chm}\ @@ -21583,7 +22350,7 @@ DX_CLEANFILES = \\ \$(DX_CLEAN_PS) \\ \$(DX_CLEAN_PDF) \\ \$(DX_CLEAN_LATEX)" -else +else $as_nop DX_SNIPPET_doc="" fi DX_RULES="${DX_SNIPPET_doc}" @@ -21651,8 +22418,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -21682,15 +22449,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -21704,8 +22471,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;} fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -21758,7 +22525,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -21774,8 +22541,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -21798,14 +22565,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -21815,46 +22584,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -21863,13 +22632,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -21878,8 +22640,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -21891,30 +22657,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -21927,13 +22673,14 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -21960,18 +22707,20 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -21983,12 +22732,13 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -22019,7 +22769,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -22041,6 +22791,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -22054,6 +22808,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -22095,7 +22855,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -22104,7 +22864,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22167,7 +22927,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -22221,14 +22981,16 @@ Report bugs to the package provider. bifrost home page: ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ bifrost config.status 0.9.0 -configured by $0, generated by GNU Autoconf 2.69, +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -22267,21 +23029,21 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -22309,7 +23071,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -22323,7 +23085,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -22739,8 +23501,8 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -22968,7 +23730,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -22976,17 +23738,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -23003,7 +23765,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23027,9 +23789,9 @@ $as_echo X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -23086,8 +23848,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -23130,9 +23892,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -23144,8 +23906,8 @@ which seems to be undefined. Please make sure it is defined" >&2;} ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -23693,6 +24455,7 @@ _LT_EOF esac + ltmain=$ac_aux_dir/ltmain.sh @@ -23895,8 +24658,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi @@ -23906,72 +24669,87 @@ fi echo "" -if test x$HAVE_CUDA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: cuda: yes - $GPU_ARCHS" >&5 -$as_echo "$as_me: cuda: yes - $GPU_ARCHS" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 -$as_echo "$as_me: cuda: no" >&6;} +if test x$HAVE_CUDA = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - $GPU_ARCHS" >&5 +printf "%s\n" "$as_me: cuda: yes - $GPU_ARCHS" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 +printf "%s\n" "$as_me: cuda: no" >&6;} fi -if test x$HAVE_NUMA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: numa: yes" >&5 -$as_echo "$as_me: numa: yes" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: numa: no" >&5 -$as_echo "$as_me: numa: no" >&6;} +if test x$HAVE_NUMA = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: numa: yes" >&5 +printf "%s\n" "$as_me: numa: yes" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: numa: no" >&5 +printf "%s\n" "$as_me: numa: no" >&6;} fi -if test x$HAVE_HWLOC = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc: yes" >&5 -$as_echo "$as_me: hwloc: yes" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc: no" >&5 -$as_echo "$as_me: hwloc: no" >&6;} +if test x$HAVE_HWLOC = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc: yes" >&5 +printf "%s\n" "$as_me: hwloc: yes" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc: no" >&5 +printf "%s\n" "$as_me: hwloc: no" >&6;} fi -if test x$HAVE_VMA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: libvma: yes" >&5 -$as_echo "$as_me: libvma: yes" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: libvma: no" >&5 -$as_echo "$as_me: libvma: no" >&6;} +if test x$HAVE_VMA = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libvma: yes" >&5 +printf "%s\n" "$as_me: libvma: yes" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libvma: no" >&5 +printf "%s\n" "$as_me: libvma: no" >&6;} fi -if test x$HAVE_PYTHON = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: python bindings: yes" >&5 -$as_echo "$as_me: python bindings: yes" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: python bindings: no" >&5 -$as_echo "$as_me: python bindings: no" >&6;} +if test x$HAVE_PYTHON = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: python bindings: yes" >&5 +printf "%s\n" "$as_me: python bindings: yes" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: python bindings: no" >&5 +printf "%s\n" "$as_me: python bindings: no" >&6;} fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: memory alignment: $ALIGNMENT" >&5 -$as_echo "$as_me: memory alignment: $ALIGNMENT" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: memory alignment: $ALIGNMENT" >&5 +printf "%s\n" "$as_me: memory alignment: $ALIGNMENT" >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: logging directory: $HAVE_TMPFS" >&5 -$as_echo "$as_me: logging directory: $HAVE_TMPFS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: logging directory: $HAVE_TMPFS" >&5 +printf "%s\n" "$as_me: logging directory: $HAVE_TMPFS" >&6;} -if test x$enable_debug != xno; then : +if test x$enable_debug != xno +then : OPTIONS="$OPTIONS debug" fi -if test x$enable_trace != xno; then : +if test x$enable_trace != xno +then : OPTIONS="$OPTIONS trace" fi -if test x$enable_cuda_debug != xno; then : +if test x$enable_cuda_debug != xno +then : OPTIONS="$OPTIONS cuda_debug" fi -if test x$enable_native_arch != xno; then : +if test x$enable_native_arch != xno +then : OPTIONS="$OPTIONS native" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: options:$OPTIONS" >&5 -$as_echo "$as_me: options:$OPTIONS" >&6;} +if test x$HAVE_FLOAT128 != x0 +then : + OPTIONS="$OPTIONS float128" + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: options:$OPTIONS" >&5 +printf "%s\n" "$as_me: options:$OPTIONS" >&6;} echo "" echo "Bifrost is now ready to be compiled. Please run 'make'" echo "" + diff --git a/configure.ac b/configure.ac index a480791ea..f8789087a 100644 --- a/configure.ac +++ b/configure.ac @@ -78,6 +78,10 @@ AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_UINT8_T +AC_TYPE_LONG_DOUBLE_WIDER +AC_SUBST([HAVE_FLOAT128], [0]) +AS_IF([test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1], + [AC_SUBST([HAVE_FLOAT128], [0])]) # # NUMA @@ -188,15 +192,7 @@ AC_SUBST([HAVE_TRACE], [0]) AS_IF([test x$enable_trace != xno], [AC_SUBST([HAVE_TRACE], [1])]) -AC_ARG_ENABLE([native_arch], - [AS_HELP_STRING([--disable-native-arch], - [disable native architecture compilation (default=no)])], - [enable_native_arch=no], - [enable_native_arch=yes]) -AS_IF([test x$enable_native_arch != xyes], - [], - [CXXFLAGS="$CXXFLAGS -march=native" - NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\""]) +AX_CHECK_NATIVE_ARCH AC_ARG_ENABLE([cuda_debug], [AS_HELP_STRING([--enable-cuda-debug], @@ -322,6 +318,8 @@ AS_IF([test x$enable_cuda_debug != xno], [AC_SUBST([OPTIONS], ["$OPTIONS cuda_debug"])]) AS_IF([test x$enable_native_arch != xno], [AC_SUBST([OPTIONS], ["$OPTIONS native"])]) +AS_IF([test x$HAVE_FLOAT128 != x0], + [AC_SUBST([OPTIONS], ["$OPTIONS float128"])]) AC_MSG_NOTICE(options:$OPTIONS) echo "" diff --git a/python/bifrost/DataType.py b/python/bifrost/DataType.py index c8bf2f2a3..45d0454d8 100644 --- a/python/bifrost/DataType.py +++ b/python/bifrost/DataType.py @@ -47,6 +47,7 @@ string_types = (basestring,) from bifrost.libbifrost import _bf +from bifrost.libbifrost_generated import BF_FLOAT128_ENABLED import numpy as np # Custom dtypes to represent additional complex types @@ -71,14 +72,17 @@ 16: _bf.BF_DTYPE_U16, 32: _bf.BF_DTYPE_U32, 64: _bf.BF_DTYPE_U64}, 'f': {16: _bf.BF_DTYPE_F16, 32: _bf.BF_DTYPE_F32, - 64: _bf.BF_DTYPE_F64, 128: _bf.BF_DTYPE_F128}, + 64: _bf.BF_DTYPE_F64}, 'ci': { 1: _bf.BF_DTYPE_CI1, 2: _bf.BF_DTYPE_CI2, 4: _bf.BF_DTYPE_CI4, 8: _bf.BF_DTYPE_CI8, 16: _bf.BF_DTYPE_CI16, 32: _bf.BF_DTYPE_CI32, 64: _bf.BF_DTYPE_CI64}, 'cf': {16: _bf.BF_DTYPE_CF16, 32: _bf.BF_DTYPE_CF32, - 64: _bf.BF_DTYPE_CF64, 128: _bf.BF_DTYPE_CF128} + 64: _bf.BF_DTYPE_CF64} } +if BF_FLOAT128_ENABLED: + TYPENAME['f'][128] = _bf.BF_DTYPE_F128 + TYPENAME['cf'][128] = _bf.BF_DTYPE_CF128 KINDMAP = { _bf.BF_DTYPE_INT_TYPE: 'i', _bf.BF_DTYPE_UINT_TYPE: 'u', @@ -90,7 +94,7 @@ 'u': { 8: np.uint8, 16: np.uint16, 32: np.uint32, 64: np.uint64}, 'f': {16: np.float16, 32: np.float32, - 64: np.float64, 128: np.float128}, + 64: np.float64}, # HACK: These are just types that match the storage size; # they should not be used for computation. # HACK TESTING to support 'packed' arrays @@ -101,8 +105,11 @@ 64: ci64}, # HACK: cf16 used as WAR for missing np.complex32 'cf': {16: cf16, 32: np.complex64, - 64: np.complex128, 128: np.complex256} + 64: np.complex128} } +if BF_FLOAT128_ENABLED: + NUMPY_TYPEMAP['f'][128] = np.float128 + NUMPY_TYPEMAP['cf'][128] = np.complex256 def is_vector_structure(dtype): if dtype.names is None: diff --git a/python/bifrost/dtype.py b/python/bifrost/dtype.py index 3caf458c3..b6281facd 100644 --- a/python/bifrost/dtype.py +++ b/python/bifrost/dtype.py @@ -45,6 +45,7 @@ from __future__ import absolute_import from bifrost.libbifrost import _bf +from bifrost.libbifrost_generated import BF_FLOAT128_ENABLED import numpy as np def split_name_nbit(dtype_str): @@ -78,14 +79,16 @@ def numpy2bifrost(dtype): elif dtype == np.float16: return _bf.BF_DTYPE_F16 elif dtype == np.float32: return _bf.BF_DTYPE_F32 elif dtype == np.float64: return _bf.BF_DTYPE_F64 - elif dtype == np.float128: return _bf.BF_DTYPE_F128 + elif dtype == np.float128 \ + and BF_FLOAT128_ENABLED: return _bf.BF_DTYPE_F128 elif dtype == ci8: return _bf.BF_DTYPE_CI8 elif dtype == ci16: return _bf.BF_DTYPE_CI16 elif dtype == ci32: return _bf.BF_DTYPE_CI32 elif dtype == cf16: return _bf.BF_DTYPE_CF16 elif dtype == np.complex64: return _bf.BF_DTYPE_CF32 elif dtype == np.complex128: return _bf.BF_DTYPE_CF64 - elif dtype == np.complex256: return _bf.BF_DTYPE_CF128 + elif dtype == np.complex256 \ + and BF_FLOAT128_ENABLED: return _bf.BF_DTYPE_CF128 else: raise ValueError("Unsupported dtype: " + str(dtype)) def name_nbit2numpy(name, nbit): diff --git a/src/array_utils.hpp b/src/array_utils.hpp index f7d84d4f9..0f2e66365 100644 --- a/src/array_utils.hpp +++ b/src/array_utils.hpp @@ -56,7 +56,9 @@ inline std::string dtype2ctype_string(BFdtype dtype) { case BF_DTYPE_U64: return "unsigned long long"; case BF_DTYPE_F32: return "float"; case BF_DTYPE_F64: return "double"; +#if defined BF_FLOAT128_ENABLED && BF_FLOAT128_ENABLED //case BF_DTYPE_F128: return "long double"; // TODO: This doesn't seem to work properly in CUDA +#endif case BF_DTYPE_CI4: return "Complex"; case BF_DTYPE_CI8: return "Complex"; case BF_DTYPE_CI16: return "Complex"; @@ -64,7 +66,9 @@ inline std::string dtype2ctype_string(BFdtype dtype) { //case BF_DTYPE_CI64: return "complex"; case BF_DTYPE_CF32: return "Complex";//complex"; case BF_DTYPE_CF64: return "Complex"; +#if defined BF_FLOAT128_ENABLED && BF_FLOAT128_ENABLED //case BF_DTYPE_CF128: return "complex"; +#endif default: return ""; } } diff --git a/src/bifrost/array.h b/src/bifrost/array.h index 68c06965d..f87ba4a39 100644 --- a/src/bifrost/array.h +++ b/src/bifrost/array.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -74,7 +74,9 @@ typedef enum BFdtype_ { BF_DTYPE_F16 = 16 | BF_DTYPE_FLOAT_TYPE, BF_DTYPE_F32 = 32 | BF_DTYPE_FLOAT_TYPE, BF_DTYPE_F64 = 64 | BF_DTYPE_FLOAT_TYPE, +#if defined BF_FLOAT128_ENABLED && BF_FLOAT128_ENABLED BF_DTYPE_F128 = 128 | BF_DTYPE_FLOAT_TYPE, +#endif BF_DTYPE_CI1 = 1 | BF_DTYPE_INT_TYPE | BF_DTYPE_COMPLEX_BIT, BF_DTYPE_CI2 = 2 | BF_DTYPE_INT_TYPE | BF_DTYPE_COMPLEX_BIT, @@ -87,7 +89,9 @@ typedef enum BFdtype_ { BF_DTYPE_CF16 = 16 | BF_DTYPE_FLOAT_TYPE | BF_DTYPE_COMPLEX_BIT, BF_DTYPE_CF32 = 32 | BF_DTYPE_FLOAT_TYPE | BF_DTYPE_COMPLEX_BIT, BF_DTYPE_CF64 = 64 | BF_DTYPE_FLOAT_TYPE | BF_DTYPE_COMPLEX_BIT, +#if defined BF_FLOAT128_ENABLED && BF_FLOAT128_ENABLED BF_DTYPE_CF128 = 128 | BF_DTYPE_FLOAT_TYPE | BF_DTYPE_COMPLEX_BIT +#endif } BFdtype; /* typedef struct BFdtype_info_ { diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index ef8869c04..9aa7917dd 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -48,6 +48,7 @@ extern "C" { #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ // Features +#define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ #define BF_OPENMP_ENABLED @HAVE_OPENMP@ #define BF_NUMA_ENABLED @HAVE_NUMA@ #define BF_HWLOC_ENABLED @HAVE_HWLOC@ From 365d17c0e3551d62d836e3ddcc235fb64ad2f528 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 18 Nov 2021 09:36:40 -0700 Subject: [PATCH 0349/1155] Updated the documentation for the new build system. --- README.md | 13 +++++++--- ...on-installation-and-execution-problems.rst | 17 +++--------- docs/source/Getting-started-guide.rst | 26 ++++++++++++++----- docs/source/tools-intro.rst | 11 ++++---- 4 files changed, 38 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 1e059c312..90578b296 100644 --- a/README.md +++ b/README.md @@ -104,17 +104,22 @@ $ sudo pip install numpy contextlib2 pint git+https://github.com/olsonse/ctypesg ### Bifrost installation -Edit **user.mk** to suit your system, then run: +To configure Bifrost for you your system and build the library, then run: + $ ./configure $ make -j $ sudo make install -which will install the library and headers into /usr/local/lib and -/usr/local/include respectively. +By default this will install the library and headers into /usr/local/lib and +/usr/local/include respectively. You can use the --prefix option to configure +to change this. You can call the following for a local Python installation: - $ sudo make install PYINSTALLFLAGS="--prefix=$HOME/usr/local" + $ ./configure --with-pyinstall-flags=--user + $ make -j + $ sudo make install HAVE_PYTHON=0 + $ make -C python install ### Docker container diff --git a/docs/source/Common-installation-and-execution-problems.rst b/docs/source/Common-installation-and-execution-problems.rst index f33d16e82..1a998714c 100644 --- a/docs/source/Common-installation-and-execution-problems.rst +++ b/docs/source/Common-installation-and-execution-problems.rst @@ -12,14 +12,6 @@ timeout, and some blocks are not ending themselves. Quit the program (by ctrl-\\), and make sure every block in your pipeline is reading/writing to its rings as it should. -OSError: ..../lib/libbifrost.so: undefined symbol: cudaFreeHost ---------------------------------------------------------------- - -At the make step, nvcc did not link cudaFreeHost into libbifrost.so. You -should make sure that config.mk and user.mk are set up for your system, -and that your nvcc compiler can compile other CUDA programs. If you are -still having trouble, raise an issue. - OSError: Can't find library with name libbifrost.so --------------------------------------------------- @@ -30,15 +22,14 @@ do not have the libbifrost.so file there. To fix this, type ``echo $LD_LIBRARY_PATH`` at your command line. If none of these folders contain the Bifrost -installation (which you specified in config.mk), you have found the -problem. Perform +installation (which you may have specified with configure), you have found +the problem. Perform ``export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my/bifrost/installation``, where ``/my/bifrost/installation`` is the folder where you installed the -Bifrost "lib" (in config.mk, this folder is given as -``INSTALL_LIB_DIR``). This should add Bifrost to the wrapper's search -path. +Bifrost "lib" (this location will also be reported as part of `make install`). +This should add Bifrost to the wrapper's search path. OSError: libcudart.so.x.0: cannot open shared object file: No such file or directory ------------------------------------------------------------------------------------ diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index a4d8bf005..e77ffe84a 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -21,8 +21,7 @@ but higher ones should also work. Python dependencies ~~~~~~~~~~~~~~~~~~~ -*Bifrost is written in Python 2.7. If you would like us to support -Python 3.x, please let us know your interest.* +*Bifrost is compatible with both in Python 2.7. and Python 3.x.* `pip `__ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -79,10 +78,25 @@ with ``git clone https://github.com/ledatelescope/bifrost``. -You will want to edit ``user.mk`` to suit your system. For example, if -you are not working with GPUs, uncomment the line: - -``#NOCUDA = 1 # Disable CUDA support``. +You will want to run `configure` to tailor Bifrost to you system. At the end of +`configure` you will get a summary of how Bifrost will be built: + +``` +... +config.status: creating src/bifrost/config.h +config.status: executing libtool commands + +configure: cuda: yes - 50 52 +configure: numa: yes +configure: hwloc: yes +configure: libvma: no +configure: python bindings: yes +configure: memory alignment: 4096 +configure: logging directory: /dev/shm/bifrost +configure: options: native + +Bifrost is now ready to be compiled. Please run 'make' +``` Now you can call ``make``, and ``make install`` to install Bifrost. diff --git a/docs/source/tools-intro.rst b/docs/source/tools-intro.rst index 86dfc463d..bbeee9460 100644 --- a/docs/source/tools-intro.rst +++ b/docs/source/tools-intro.rst @@ -28,16 +28,16 @@ first be generated using the nvprof command line tool: The generated .nvprof file can then be imported into the Visual Profiler for visualisation and analysis. -To obtain a more detailed profile of pipeline execution, rebuild the bifrost library -with the setting TRACE=1 (either by changing ``user.mk`` or by passing it as an -argument to the ``make`` command). +To obtain a more detailed profile of pipeline execution, reconfigure and rebuild +the bifrost library with "trace" enabled using `./configure --enable-trace`. Pipeline in /dev/shm -------------------- -Details about the currently running bifrost pipeline are available in the ``/dev/shm`` directory. -They are mapped into a directory structure (use the linux ``tree`` utility to view it): +Details about the currently running bifrost pipeline are available in the ``/dev/shm`` +directory on Linux. They are mapped into a directory structure (use the linux ``tree`` +utility to view it): .. code:: @@ -98,4 +98,3 @@ The main performance monitoring tools is ``like_top.py``. This is, as the name s * Reserve is the time spent waiting for output space to become available in the ring (i.e., waiting for downstream blocks). Note: The CPU fraction will probably be 100% on any GPU block because it's currently set to spin (busy loop) while waiting for the GPU. - From b107bfc5f6a35e6aaf8e6cbca5d380d0f358ecdf Mon Sep 17 00:00:00 2001 From: JackH Date: Thu, 18 Nov 2021 21:11:07 +0000 Subject: [PATCH 0350/1155] Implement source blanking. This is actually quite annoying. The call to blank a source doesn't know about the details of the packet structure, and one can't necessarily blank the right parts of the receive buffer when only given nsrc, src, nchan, chan, since these values have been abused. E.g. the output buffer is in Time x Chan x Antpol order, but the Chan dimension can be a multiple of nchan, and nsrc != the number of Antpols in the system. Hack the information out of the packet stream and then write a clurgy blanking function. Barely tested. --- src/formats/snap2.hpp | 60 ++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index ea93244b3..16140be77 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -33,11 +33,6 @@ #include // SSE #include -// TODO: parameterize somewhere. This isn't -// related to the packet formatting -#define PIPELINE_NPOL 704 -#define PIPELINE_NCHAN 32 - // All entries are network (i.e. big) endian struct __attribute__((packed)) snap2_hdr_type { uint64_t seq; // Spectra counter == packet counter @@ -63,13 +58,13 @@ struct __attribute__((packed)) snap2_hdr_type { class SNAP2Decoder : virtual public PacketDecoder { protected: inline bool valid_packet(const PacketDesc* pkt) const { -//#if BF_SNAP2_DEBUG -// cout << "seq: "<< pkt->seq << endl; -// cout << "src: "<< pkt->src << endl; -// cout << "nsrc: "<< pkt->nsrc << endl; -// cout << "nchan: "<< pkt->nchan << endl; -// cout << "chan0: "<< pkt->chan0 << endl; -//#endif +#if BF_SNAP2_DEBUG + cout << "seq: "<< pkt->seq << endl; + cout << "src: "<< pkt->src << endl; + cout << "nsrc: "<< pkt->nsrc << endl; + cout << "nchan: "<< pkt->nchan << endl; + cout << "chan0: "<< pkt->chan0 << endl; +#endif return ( pkt->seq >= 0 && pkt->src >= 0 @@ -125,8 +120,10 @@ class SNAP2Decoder : virtual public PacketDecoder { }; class SNAP2Processor : virtual public PacketProcessor { -protected: - int _pipeline_nchan = PIPELINE_NCHAN; +private: + bool _initialized = false; + int _npol_tot = 0; + int _npol_pkt = 0; public: inline void operator()(const PacketDesc* pkt, uint64_t seq0, @@ -157,6 +154,12 @@ class SNAP2Processor : virtual public PacketProcessor { int words_per_chan_out = pkt->npol_tot >> 5; int pol_offset_out = pkt->pol0 >> 5; int pkt_chan = pkt->chan0; // The first channel in this packet + + if ( !_initialized ) { + _npol_tot = pkt->npol_tot; + _npol_pkt = pkt->npol; + _initialized = true; + } // Copy packet payload one channel at a time. // Packets have payload format nchans x npols x complexity. @@ -186,16 +189,25 @@ class SNAP2Processor : virtual public PacketProcessor { int nsrc, int nchan, int nseq) { - //fprintf(stderr, "TRYING TO BLANK OUT A SOURCE WITH MISSING PACKETS. BUT BLANKING NOT IMPLEMENTED\n"); - //typedef aligned256_type otype; - //fprintf(stderr, "You really better not be here\n"); - //otype* __restrict__ aligned_data = (otype*)data; - //for( int t=0; t Time x chan_block x chan x pol_block x pol_words + // -> Time x + int chan_block_offset_bytes = chan_block * nchan * _npol_tot; + int time_offset_bytes = nchan_blocks * nchan * _npol_tot; + int pol_offset_bytes = pol_block*_npol_pkt; + //fprintf(stderr, "Offset bytes: T*%d + [chan block] %d + c*%d + [pol offset] %d\n", time_offset_bytes, chan_block_offset_bytes, _npol_tot, pol_offset_bytes); + for( int t=0; t Date: Wed, 1 Dec 2021 09:33:47 -0700 Subject: [PATCH 0351/1155] Moved the telemetry notice into python/Makefile. --- python/Makefile.in | 8 ++++++++ python/setup.py | 19 +++---------------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/python/Makefile.in b/python/Makefile.in index e295bd7ea..b68ac2f9a 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -58,6 +58,14 @@ ifeq ($(DRY_RUN),0) else @echo "@PYTHON@ -m pip install @PYINSTALLFLAGS@ ." endif + @echo "*************************************************************************" + @echo "By default Bifrost installs with basic Python telemetry enabled in order" + @echo "order to help inform how the software is used and to help inform future" + @echo "development. You can opt out of telemetry collection using:" + @echo ">>> from bifrost import telemetry" + @echo ">>> telemetry.disable()" + @echo "*************************************************************************" + @echo "" @echo "If you have trouble importing Bifrost from Python you may need" @echo "to set LD_LIBRARY_PATH to $(INSTALL_LIB_DIR) or have your" @echo "system administrator add this directory to '/etc/ld.so.conf'." diff --git a/python/setup.py b/python/setup.py index 8aa2bd3cd..ad82ecb74 100755 --- a/python/setup.py +++ b/python/setup.py @@ -29,7 +29,6 @@ # Python2 compatibility from __future__ import print_function -from distutils.command.install import install from setuptools import setup, Extension, find_packages import os import sys @@ -51,22 +50,11 @@ if 'clean' in sys.argv[1:]: sys.exit(0) print("*************************************************************************") - print("Please run `make` from the root of the source tree to generate version.py") + print("Please run `configure` and `make` from the root of the source tree to ") + print("generate version.py ") print("*************************************************************************") raise -# Override "install" to show the telemetry warning -class bifrost_install(install): - def run(self): - install.run(self) - print("*************************************************************************") - print("By default Bifrost installs with basic Python telemetry enabled in order ") - print("order to help inform how the software is used and to help inform future ") - print("development. You can opt out of telemetry collection using: ") - print(">>> from bifrost import telemetry ") - print(">>> telemetry.disable() ") - print("*************************************************************************") - # Build the PyPy3 compatibility module, if needed modules = [] if sys.version.find('PyPy') != -1: @@ -75,8 +63,7 @@ def run(self): # Build up a list of scripts to install scripts = glob.glob(os.path.join('..', 'tools', '*.py')) -setup(cmdclass={'install': bifrost_install,}, - name='bifrost', +setup(name='bifrost', version=__version__, description='Pipeline processing framework', author='Ben Barsdell', From 29814739b0e9057ae4444a728d23709609892ae8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 1 Dec 2021 18:04:38 -0700 Subject: [PATCH 0352/1155] Use the CodeCov action. --- .github/workflows/main.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2f6e5e4a3..cbfd6eb44 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -45,7 +45,7 @@ jobs: simplejson \ pint \ graphviz git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ - codecov + coverage - name: "Build and Install" run: | ./configure @@ -58,7 +58,11 @@ jobs: python -m pip install scipy cd test bash ./travis.sh - - name: "Upload to Codecov" - run: | - cd test - codecov + coverage xml + - name: "Upload Coverage" + if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == '3.8' }} + uses: codecov/codecov-action@v2 + with: + directory: ./test/ + fail_ci_if_error: false + verbose: true From 1766cbebeb6aea2ef0aaf031ce8d31393704d7e2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 1 Dec 2021 18:15:25 -0700 Subject: [PATCH 0353/1155] Bypass travis.sh. --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cbfd6eb44..4512601ab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -57,7 +57,9 @@ jobs: run: | python -m pip install scipy cd test - bash ./travis.sh + bash ./download_test_data.sh + python -c "from bifrost import telemetry; telemetry.disable()" + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover coverage xml - name: "Upload Coverage" if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == '3.8' }} From 6c425552c33cb7963f2000fbbbb7f33e16676c84 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 1 Dec 2021 18:34:46 -0700 Subject: [PATCH 0354/1155] Removed travis.sh. --- test/travis.sh | 6 ------ 1 file changed, 6 deletions(-) delete mode 100755 test/travis.sh diff --git a/test/travis.sh b/test/travis.sh deleted file mode 100755 index 260ee8efa..000000000 --- a/test/travis.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# This file runs CPU-safe tests for travis-ci -./download_test_data.sh -export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} -python -c "from bifrost import telemetry; telemetry.disable()" -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover From 775abb7b5507548aa904ae44d8923b362621201f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 1 Dec 2021 18:35:08 -0700 Subject: [PATCH 0355/1155] Address numpy deprecation warnings. --- test/test_block.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_block.py b/test/test_block.py index 7e86d9005..9f1201595 100644 --- a/test/test_block.py +++ b/test/test_block.py @@ -122,7 +122,7 @@ def test_non_linear_multi_copy(self): Pipeline(self.blocks).main() with open(logfile, 'r') as fh: log_nums = fh.read(500).split(' ') - test_num = np.float(log_nums[8]) + test_num = float(log_nums[8]) self.assertEqual(test_num, 3) def test_single_block_multi_copy(self): """Test which forces one block to do multiple @@ -151,7 +151,7 @@ def test_32bit_copy(self): Pipeline(self.blocks).main() with open(logfile, 'r') as fh: test_bytes = fh.read(500).split(' ') - self.assertAlmostEqual(np.float(test_bytes[0]), 0.72650784254) + self.assertAlmostEqual(float(test_bytes[0]), 0.72650784254) class TestFoldBlock(unittest.TestCase): """This tests functionality of the FoldBlock.""" def setUp(self): @@ -170,7 +170,7 @@ def dump_ring_and_read(self): Pipeline(self.blocks).main() with open(logfile, 'r') as fh: test_bytes = fh.read().split(' ') - histogram = np.array([np.float(x) for x in test_bytes]) + histogram = np.array([float(x) for x in test_bytes]) return histogram def test_simple_pulsar(self): """Test whether a pulsar histogram From 3d1b2eb7748c924d35d35c0aaeac42cba9a96674 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 1 Dec 2021 18:38:13 -0700 Subject: [PATCH 0356/1155] Date update. --- test/test_block.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_block.py b/test/test_block.py index 9f1201595..d7ab481b4 100644 --- a/test/test_block.py +++ b/test/test_block.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions From a1596cd566bc23f8f67a779b2e79756d21585e9c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 1 Dec 2021 18:39:57 -0700 Subject: [PATCH 0357/1155] tostring -> tobytes. --- test/test_resizing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_resizing.py b/test/test_resizing.py index 40fc31145..731595094 100644 --- a/test/test_resizing.py +++ b/test/test_resizing.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -41,7 +41,7 @@ def __init__(self, filename, gulp_size=None): open(self.filename, "w").close() def load_settings(self, input_header): """Load the header, and set the gulp appropriately""" - header_dict = json.loads(input_header.tostring()) + header_dict = json.loads(input_header.tobytes()) self.shape = header_dict['shape'] size_of_float32 = 4 if self.gulp_size is None: From 99f7b237e5248b43023689ff2b0fde715c2d4058 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 1 Dec 2021 18:49:27 -0700 Subject: [PATCH 0358/1155] Converted to isinstance. --- python/bifrost/header_standard.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/header_standard.py b/python/bifrost/header_standard.py index 29c995698..ba45a5c96 100644 --- a/python/bifrost/header_standard.py +++ b/python/bifrost/header_standard.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -67,7 +67,7 @@ def enforce_header_standard(header_dict): for parameter, standard in STANDARD_HEADER.items(): if parameter not in header_dict: return False - if type(header_dict[parameter]) != standard[0]: + if not isinstance(header_dict[parameter], standard[0]): return False if standard[1] is not None and \ header_dict[parameter] < standard[1]: From 0ecbc642122169e60591a82a438b6385708a09c9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 1 Dec 2021 19:12:34 -0700 Subject: [PATCH 0359/1155] Cleanup. --- .github/workflows/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4512601ab..0994a8318 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -44,7 +44,8 @@ jobs: contextlib2 \ simplejson \ pint \ - graphviz git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ + graphviz \ + git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ coverage - name: "Build and Install" run: | From ce0e5b591a3623b88c40481788d1d4032ef7c95d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 3 Dec 2021 12:42:14 -0700 Subject: [PATCH 0360/1155] Move the map cache directory into the user's HOME. --- src/fileutils.hpp | 9 +++++++- src/map.cpp | 59 ++++++++++++++++++++++++----------------------- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/src/fileutils.hpp b/src/fileutils.hpp index c8c215755..8ba0cf6ef 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -32,8 +32,16 @@ #include // For fstat #include // For getpid #include // For getpid +#include // For getpwuid #include +inline std::string get_home_dir(void) { + const char *homedir; + if ((homedir = getenv("HOME")) == NULL) { + homedir = getpwuid(getuid())->pw_dir; + } + return std::string(homedir); +} inline void make_dir(std::string path, int perms=775) { if( std::system(("mkdir -p "+path+" -m "+std::to_string(perms)).c_str()) ) { throw std::runtime_error("Failed to create path: "+path); @@ -96,4 +104,3 @@ class LockFile { flock(_fd, LOCK_UN); } }; - diff --git a/src/map.cpp b/src/map.cpp index 535664b6c..435994820 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -400,14 +400,13 @@ BFstatus build_map_kernel(int* external_ndim, #if BF_MAPCACHE_ENABLED class DiskCacheMgr { - static constexpr const char* _cachedir = "/dev/shm/bifrost_cache/"; - std::string _vinfofile = std::string(_cachedir)+"map.ver"; - std::string _indexfile; - std::string _cachefile; - std::set _created_dirs; - mutable std::mutex _mutex; - bool _loaded; - std::hash _get_name; + std::string _cachedir; + std::string _indexfile; + std::string _cachefile; + std::set _created_dirs; + mutable std::mutex _mutex; + bool _loaded; + std::hash _get_name; void tag_cache(void) { // NOTE: Must be called from within a LockFile lock @@ -417,9 +416,9 @@ class DiskCacheMgr { std::ofstream info; - if( !file_exists(_vinfofile) ) { + if( !file_exists(_cachedir + "cache.version") ) { try { - info.open(_vinfofile, std::ios::out); + info.open(_cachedir + "cache.version", std::ios::out); info << rt << " " << drv << endl; info.close(); } catch( std::exception ) {} @@ -427,16 +426,16 @@ class DiskCacheMgr { } void validate_cache(void) { - // NOTE: Must be called from within a LockFile lock - bool status = true; - int rt, drv, cached_rt, cached_drv; + // NOTE: Must be called from within a LockFile lock + bool status = true; + int rt, drv, cached_rt, cached_drv; cudaRuntimeGetVersion(&rt); cudaDriverGetVersion(&drv); std::ifstream info; try { // Open - info.open(_vinfofile, std::ios::in); + info.open(_cachedir + "cache.version", std::ios::in); // Read info >> cached_rt >> cached_drv; @@ -454,9 +453,9 @@ class DiskCacheMgr { if( !status ) { //cout << "INVALIDATING DISK CACHE" << endl; try { - remove_file(std::string(_cachedir)+"*.inf"); - remove_file(std::string(_cachedir)+"*.ptx"); - remove_file(_vinfofile); + remove_file(_cachedir + "*.inf"); + remove_file(_cachedir + "*.ptx"); + remove_file(_cachedir + "cache.version"); } catch( std::exception ) {} } } @@ -466,15 +465,15 @@ class DiskCacheMgr { std::string ptx, bool basic_indexing_only) { // Do this with a file lock to avoid interference from other processes - LockFile lock(std::string(_cachedir) + ".lock"); + LockFile lock(_cachedir + ".lock"); this->tag_cache(); // Get the name to save the kernel to std::stringstream basename; basename << std::hex << std::uppercase << _get_name(cache_key); - _indexfile = std::string(_cachedir) + basename.str() + ".inf"; - _cachefile = std::string(_cachedir) + basename.str() + ".ptx"; + _indexfile = _cachedir + basename.str() + ".inf"; + _cachefile = _cachedir + basename.str() + ".ptx"; std::ofstream index, cache; try { @@ -504,7 +503,7 @@ class DiskCacheMgr { void load_from_disk(ObjectCache > *kernel_cache) { // Do this with a file lock to avoid interference from other processes - LockFile lock(std::string(_cachedir) + ".lock"); + LockFile lock(_cachedir + ".lock"); // Validate the cache this->validate_cache(); @@ -520,10 +519,10 @@ class DiskCacheMgr { std::string field; // Find the files - DIR* dir = opendir(_cachedir); + DIR* dir = opendir(_cachedir.c_str()); struct dirent *entry; while( (entry = readdir(dir)) != NULL ) { - _indexfile = std::string(_cachedir) + std::string(entry->d_name); + _indexfile = _cachedir + std::string(entry->d_name); if( _indexfile.size() < 4 ) { continue; } @@ -578,17 +577,18 @@ class DiskCacheMgr { void clear_cache() { // Do this with a file lock to avoid interference from other processes - LockFile lock(std::string(_cachedir) + ".lock"); + LockFile lock(_cachedir + ".lock"); try { - remove_file(std::string(_cachedir)+"*.inf"); - remove_file(std::string(_cachedir)+"*.ptx"); + remove_file(_cachedir + "*.inf"); + remove_file(_cachedir + "*.ptx"); } catch( std::exception ) {} } DiskCacheMgr() - : _loaded(false) { - make_dir(_cachedir); + : _cachedir(get_home_dir()+"/.bifrost/map_cache/"), _loaded(false) { + std::cout << "CACHE: " << _cachedir << std::endl; + make_dir(_cachedir); } public: DiskCacheMgr(DiskCacheMgr& ) = delete; @@ -596,6 +596,7 @@ class DiskCacheMgr { static DiskCacheMgr& get() { static DiskCacheMgr cache; + std::cout << "HOME: " << get_home_dir() << std::endl; return cache; } From 89a3c450b7b46698c4fdb5a62ba717269166dc39 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 3 Dec 2021 12:46:20 -0700 Subject: [PATCH 0361/1155] The cache is not longer in /dev/shm. --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index 5b16bf3b2..6ec05752c 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,6 @@ all: libbifrost python libbifrost: $(MAKE) -C $(SRC_DIR) all - rm -f /dev/shm/bifrost_cache/* .PHONY: libbifrost test: From ab4ece0055409b93ba36696c72dcc36f6b78c077 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 3 Dec 2021 12:49:38 -0700 Subject: [PATCH 0362/1155] Formatting cleanup. --- src/map.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 435994820..73e2442a2 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -638,8 +638,8 @@ BFstatus bfMap(int ndim, int const block_axes[2]) { // Map containing compiled kernels and basic_indexing_only flag thread_local static ObjectCache > - kernel_cache(BF_MAP_KERNEL_CACHE_SIZE); - BF_ASSERT(ndim >= 0, BF_STATUS_INVALID_ARGUMENT); + kernel_cache(BF_MAP_KERNEL_CACHE_SIZE); + BF_ASSERT(ndim >= 0, BF_STATUS_INVALID_ARGUMENT); //BF_ASSERT(!ndim || shape, BF_STATUS_INVALID_POINTER); //BF_ASSERT(!ndim || axis_names, BF_STATUS_INVALID_POINTER); BF_ASSERT(narg >= 0, BF_STATUS_INVALID_ARGUMENT); @@ -725,7 +725,7 @@ BFstatus bfMap(int ndim, basic_indexing_only, &ptx, &kernel_name)); } - CUDAKernel kernel; + CUDAKernel kernel; BF_TRY(kernel.set(kernel_name.c_str(), ptx.c_str())); kernel_cache.insert(cache_key, std::make_pair(kernel, basic_indexing_only)); From 423d2d71149adedf893c0b55c9cac946bcde08fe Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 6 Dec 2021 18:09:07 -0700 Subject: [PATCH 0363/1155] Worked on cupy interoperability with bifrost.ndarray. --- CHANGELOG | 1 + python/bifrost/ndarray.py | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 5bcb4e1a1..76ed3bfec 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,7 @@ * Made the Python API compatible with PEP479 * Added support for the cuda_managed space on Pascal and later GPUs * Added support for ci32 in bf.map + * Added support for converting a bifrost.ndarray to/from a cupy.ndarray 0.9.0 * Added support for Python3 diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 268f854a4..55439443c 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -165,6 +165,16 @@ def __new__(cls, base=None, space=None, shape=None, dtype=None, native is not None): raise ValueError('Invalid combination of arguments when base ' 'is specified') + if 'cupy' in sys.modules: + from cupy import ndarray as cupy_ndarray + if isinstance(base, cupy_ndarray): + return ndarray.__new__(cls, + space='cuda', + buffer=int(base.data), + shape=base.shape, + dtype=base.dtype, + strides=base.strides, + native=np.dtype(base.dtype).isnative) if 'pycuda' in sys.modules: from pycuda.gpuarray import GPUArray as pycuda_GPUArray if isinstance(base, pycuda_GPUArray): @@ -402,6 +412,15 @@ def __setitem__(self, key, val): else: key = slice(key, key + 1) copy_array(self[key], val) + def as_cupy(self, *args, **kwargs): + import cupy as cp + if space_accessible(self.bf.space, ['cuda']): + umem = cp.cuda.UnownedMemory(self.ctypes.data, self.data.nbytes, self) + mptr = cp.cuda.MemoryPointer(umem, 0) + ca = cp.ndarray(self.shape, dtype=self.dtype, memptr=mptr, strides=self.strides) + else: + ca = cp.asarray(np.array(self)) + return ca def as_GPUArray(self, *args, **kwargs): from pycuda.gpuarray import GPUArray as pycuda_GPUArray g = pycuda_GPUArray(shape=self.shape, dtype=self.dtype, *args, **kwargs) From f5fa2fff41c024e6549c50ec326de912863739e1 Mon Sep 17 00:00:00 2001 From: Miles Cranmer Date: Tue, 14 Dec 2021 05:30:48 -0500 Subject: [PATCH 0364/1155] Initialize colab demo --- BifrostDemo.ipynb | 255 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 3 + 2 files changed, 258 insertions(+) create mode 100644 BifrostDemo.ipynb diff --git a/BifrostDemo.ipynb b/BifrostDemo.ipynb new file mode 100644 index 000000000..2f11936e8 --- /dev/null +++ b/BifrostDemo.ipynb @@ -0,0 +1,255 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "BifrostDemo.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "\n", + "## Instructions\n", + "1. Work on a copy of this notebook: _File_ > _Save a copy in Drive_ (you will need a Google account). Alternatively, you can download the notebook using _File_ > _Download .ipynb_, then upload it to [Colab](https://colab.research.google.com/).\n", + "2. Turn on the GPU with Edit->Notebook settings->Hardware accelerator->GPU\n", + "3. Execute the following cell (click on it and press Ctrl+Enter) to install dependencies.\n", + "4. Continue to the next section.\n", + "\n", + "_Notes_:\n", + "* If your Colab Runtime gets reset (e.g., due to inactivity), repeat steps 3, 4.\n", + "* After installation, if you want to activate/deactivate the GPU, you will need to reset the Runtime: _Runtime_ > _Factory reset runtime_ and repeat steps 2-4." + ], + "metadata": { + "id": "tayN_DCBZgmn" + } + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "cellView": "form", + "id": "i_Ec54bF6mVj", + "outputId": "79bec2be-3986-4f80-a450-6e5edcf9a8c4" + }, + "source": [ + "# @title Install C++ deps\n", + "%%shell\n", + "\n", + "sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential" + ], + "execution_count": 18, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "cellView": "form", + "id": "45aDEOKc6JGW", + "outputId": "cd058f85-f376-4915-e9f5-825a9b51ad45" + }, + "source": [ + "# @title Install python deps\n", + "%%shell\n", + "\n", + "pip install -q contextlib2 pint git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[?25l\r\u001b[K |█▋ | 10 kB 35.4 MB/s eta 0:00:01\r\u001b[K |███▏ | 20 kB 32.4 MB/s eta 0:00:01\r\u001b[K |████▊ | 30 kB 19.6 MB/s eta 0:00:01\r\u001b[K |██████▎ | 40 kB 16.2 MB/s eta 0:00:01\r\u001b[K |███████▉ | 51 kB 8.9 MB/s eta 0:00:01\r\u001b[K |█████████▍ | 61 kB 9.2 MB/s eta 0:00:01\r\u001b[K |███████████ | 71 kB 8.8 MB/s eta 0:00:01\r\u001b[K |████████████▌ | 81 kB 9.6 MB/s eta 0:00:01\r\u001b[K |██████████████ | 92 kB 10.1 MB/s eta 0:00:01\r\u001b[K |███████████████▋ | 102 kB 8.4 MB/s eta 0:00:01\r\u001b[K |█████████████████▏ | 112 kB 8.4 MB/s eta 0:00:01\r\u001b[K |██████████████████▊ | 122 kB 8.4 MB/s eta 0:00:01\r\u001b[K |████████████████████▎ | 133 kB 8.4 MB/s eta 0:00:01\r\u001b[K |█████████████████████▉ | 143 kB 8.4 MB/s eta 0:00:01\r\u001b[K |███████████████████████▍ | 153 kB 8.4 MB/s eta 0:00:01\r\u001b[K |█████████████████████████ | 163 kB 8.4 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▋ | 174 kB 8.4 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▏ | 184 kB 8.4 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▊ | 194 kB 8.4 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▎| 204 kB 8.4 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 209 kB 8.4 MB/s \n", + "\u001b[?25h Building wheel for ctypesgen (setup.py) ... \u001b[?25l\u001b[?25hdone\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "WQL4Psci6S92", + "cellView": "form" + }, + "source": [ + "# @title Build and Install Bifrost\n", + "%%shell\n", + "cd \"${HOME}\"\n", + "if [ -d \"${HOME}/bifrost_repo\" ]; then\n", + " echo \"Already cloned.\"\n", + "else\n", + " git clone https://github.com/ledatelescope/bifrost bifrost_repo\n", + "fi\n", + "cd \"${HOME}/bifrost_repo\"\n", + "git pull --all\n", + "\n", + "# Use autoconf version:\n", + "git checkout autoconf\n", + "git checkout 423d2d71149adedf893c0b55c9cac946bcde08fe\n", + "./configure\n", + "\n", + "# Build and install:\n", + "make -j all\n", + "sudo make install\n", + "export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Q8q8ZMix8kF6" + }, + "source": [ + "Now, let's create and test a pipeline:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YZOGJ-HhBAxg" + }, + "source": [ + "import os\n", + "\n", + "# Environment path doesn't propagate, so add it manually:\n", + "if \"/usr/local/lib\" not in os.environ['LD_LIBRARY_PATH']:\n", + " os.environ['LD_LIBRARY_PATH'] += \":/usr/local/lib\"\n", + "\n", + "import bifrost as bf\n", + "import numpy as np" + ], + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Let's first create a simple CUDA kernel within Bifrost.\n", + "\n", + "We will generate 1000 integers, feed them into Bifrost as a CUDA array, perform a kernel operation `x * 3`, then copy them back." + ], + "metadata": { + "id": "i2oRp6B1drwd" + } + }, + { + "cell_type": "code", + "source": [ + "x = np.random.randint(256, size=1000)\n", + "\n", + "x_orig = x\n", + "x = bf.asarray(x, 'cuda')\n", + "y = bf.empty_like(x)\n", + "x.flags['WRITEABLE'] = False\n", + "x.bf.immutable = True # TODO: Is this actually doing anything? (flags is, just not sure about bf.immutable)\n", + "for _ in range(3):\n", + " bf.map(\"y = x * 3\", {'x': x, 'y': y})\n", + "x = x.copy('system')\n", + "y = y.copy('system')\n", + "if isinstance(x_orig, bf.ndarray):\n", + " x_orig = x\n", + "np.testing.assert_equal(y, x_orig * 3)" + ], + "metadata": { + "id": "yxm87l5acwIt" + }, + "execution_count": 20, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Now, let's generate a full pipeline:" + ], + "metadata": { + "id": "_jHnukaHdzUD" + } + }, + { + "cell_type": "code", + "source": [ + "from bifrost.block import Pipeline, NumpyBlock, NumpySourceBlock\n", + "\n", + "def generate_different_arrays():\n", + " \"\"\"Yield four different groups of two arrays\"\"\"\n", + " dtypes = ['float32', 'float64', 'complex64', 'int8']\n", + " shapes = [(4,), (4, 5), (4, 5, 6), (2,) * 8]\n", + " for array_index in range(4):\n", + " yield np.ones(\n", + " shape=shapes[array_index],\n", + " dtype=dtypes[array_index])\n", + " yield 2 * np.ones(\n", + " shape=shapes[array_index],\n", + " dtype=dtypes[array_index])\n", + "\n", + "def switch_types(array):\n", + " \"\"\"Return two copies of the array, one with a different type\"\"\"\n", + " return np.copy(array), np.copy(array).astype(np.complex128)\n", + "\n", + "occurences = 0\n", + "def compare_arrays(array1, array2):\n", + " \"\"\"Make sure that all arrays coming in are equal\"\"\"\n", + " global occurences\n", + " occurences += 1\n", + " np.testing.assert_almost_equal(array1, array2)\n", + "\n", + "blocks = [\n", + " (NumpySourceBlock(generate_different_arrays), {'out_1': 0}),\n", + " (NumpyBlock(switch_types, outputs=2), {'in_1': 0, 'out_1': 1, 'out_2': 2}),\n", + " (NumpyBlock(np.fft.fft), {'in_1': 2, 'out_1': 3}),\n", + " (NumpyBlock(np.fft.ifft), {'in_1': 3, 'out_1': 4}),\n", + " (NumpyBlock(compare_arrays, inputs=2, outputs=0), {'in_1': 1, 'in_2': 4})]\n", + "\n", + "Pipeline(blocks).main()\n", + "\n", + "# The function `compare_arrays` should be hit 8 times:\n", + "assert occurences == 8" + ], + "metadata": { + "id": "E36NHJDzdyi9" + }, + "execution_count": 21, + "outputs": [] + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index adb2b30d9..5b8a9ddbb 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,9 @@ print "All done" ## Installation +**For a quick demo which you can run in-browser without installation, +go to the following [link](https://colab.research.google.com/github/ledatelescope/bifrost/blob/master/BifrostDemo.ipynb).** + ### C Dependencies $ sudo apt-get install exuberant-ctags From c186633324d3bb7b244e9bd48be0ff5e4187870d Mon Sep 17 00:00:00 2001 From: Miles Cranmer Date: Tue, 14 Dec 2021 05:49:30 -0500 Subject: [PATCH 0365/1155] Remove leftover comment --- BifrostDemo.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BifrostDemo.ipynb b/BifrostDemo.ipynb index 2f11936e8..4f0c90ba1 100644 --- a/BifrostDemo.ipynb +++ b/BifrostDemo.ipynb @@ -181,7 +181,7 @@ "x = bf.asarray(x, 'cuda')\n", "y = bf.empty_like(x)\n", "x.flags['WRITEABLE'] = False\n", - "x.bf.immutable = True # TODO: Is this actually doing anything? (flags is, just not sure about bf.immutable)\n", + "x.bf.immutable = True\n", "for _ in range(3):\n", " bf.map(\"y = x * 3\", {'x': x, 'y': y})\n", "x = x.copy('system')\n", @@ -252,4 +252,4 @@ "outputs": [] } ] -} \ No newline at end of file +} From f834fc89d0d7e5f1d65ea6de1f44484eb0d300b7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Dec 2021 20:41:12 -0700 Subject: [PATCH 0366/1155] Add quotation marks. --- config/cuda.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index b4208cd36..1fd0ead64 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -145,7 +145,7 @@ AC_DEFUN([AX_CHECK_CUDA], ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) - if test "$ar_requested" = $ar_found; then + if test "$ar_requested" = "$ar_found"; then AC_MSG_RESULT([yes]) else AC_MSG_ERROR(only architectures $ar_valid are supported) From b0fb7889eba935aaae292cd6d3486574ca644d0a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Dec 2021 20:47:10 -0700 Subject: [PATCH 0367/1155] Rebuild. --- configure | 14744 +++++++++++++++++++++++++--------------------------- 1 file changed, 7031 insertions(+), 7713 deletions(-) diff --git a/configure b/configure index fd073f34d..278bb96e9 100755 --- a/configure +++ b/configure @@ -1,10 +1,9 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for bifrost 0.9.0. +# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, -# Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -15,16 +14,14 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -34,46 +31,46 @@ esac fi - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi # The user is always right. -if ${PATH_SEPARATOR+false} :; then +if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -82,6 +79,13 @@ if ${PATH_SEPARATOR+false} :; then fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -90,12 +94,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -107,10 +107,30 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -132,22 +152,20 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop +else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -167,15 +185,12 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ) -then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : -else \$as_nop +else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 -blah=\$(echo \$(echo blah)) -test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -190,38 +205,30 @@ test -x / || exit 1" test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null -then : + if (eval "$as_required") 2>/dev/null; then : as_have_required=yes -else $as_nop +else as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null -then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -else $as_nop +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir$as_base + as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes - if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null -then : + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi @@ -229,21 +236,14 @@ fi esac as_found=false done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes -fi -fi +fi; } +IFS=$as_save_IFS - if test "x$CONFIG_SHELL" != x -then : + if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -261,19 +261,18 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno -then : - printf "%s\n" "$0: This script requires a shell more modern than all" - printf "%s\n" "$0: the shells that I found on your system." - if test ${ZSH_VERSION+y} ; then - printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" - printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -300,7 +299,6 @@ as_fn_unset () } as_unset=as_fn_unset - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -318,14 +316,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -340,7 +330,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -349,7 +339,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -388,13 +378,12 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' -else $as_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -406,27 +395,18 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -438,9 +418,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -467,7 +447,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -511,7 +491,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -525,10 +505,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -542,13 +518,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -626,36 +595,40 @@ PACKAGE_URL='https://github.com/ledatelescope/bifrost/' ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_STDIO_H -# include +#include +#ifdef HAVE_SYS_TYPES_H +# include #endif -#ifdef HAVE_STDLIB_H +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS # include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif #endif #ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif #ifdef HAVE_UNISTD_H # include #endif" -ac_header_c_list= ac_subst_vars='OPTIONS LTLIBOBJS PACKAGE_VERSION_MICRO @@ -737,6 +710,7 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CXXCPP +CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -872,6 +846,7 @@ CXX CXXFLAGS CCC LT_SYS_LIBRARY_PATH +CPP CXXCPP CTAGS PYTHON @@ -945,6 +920,8 @@ do *) ac_optarg=yes ;; esac + # Accept the important Cygnus configure options, so we can diagnose typos. + case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -985,9 +962,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1011,9 +988,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1224,9 +1201,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1240,9 +1217,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1286,9 +1263,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1304,7 +1281,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1368,7 +1345,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_myself" | +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1562,6 +1539,7 @@ Some influential environment variables: CXXFLAGS C++ compiler flags LT_SYS_LIBRARY_PATH User-defined run-time library search path. + CPP C preprocessor CXXCPP C++ preprocessor CTAGS Absolute path to ctags executable PYTHON Absolute path to python executable @@ -1589,9 +1567,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1619,8 +1597,7 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for configure.gnu first; this name is used for a wrapper for - # Metaconfig's "Configure" on case-insensitive file systems. + # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1628,7 +1605,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1638,9 +1615,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF bifrost configure 0.9.0 -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.69 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1657,14 +1634,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam + rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1672,15 +1649,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext -then : + } && test -s conftest.$ac_objext; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1696,14 +1672,14 @@ fi ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam + rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1711,15 +1687,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext -then : + } && test -s conftest.$ac_objext; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1735,14 +1710,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext + rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1750,18 +1725,17 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1783,44 +1757,120 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1828,9 +1878,16 @@ else $as_nop #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1848,25 +1905,24 @@ choke me #endif int -main (void) +main () { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func @@ -1883,7 +1939,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1891,15 +1947,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1915,14 +1970,14 @@ fi ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext + rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1930,18 +1985,17 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1962,12 +2016,11 @@ fi ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1975,9 +2028,16 @@ else $as_nop #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1995,61 +2055,114 @@ choke me #endif int -main (void) +main () { return $2 (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func -# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_cxx_check_header_compile () +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - eval "$3=yes" -else $as_nop - eval "$3=no" +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_cxx_check_header_compile +} # ac_fn_cxx_check_header_mongrel # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- @@ -2058,18 +2171,17 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof ($2)) return 0; @@ -2077,13 +2189,12 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof (($2))) return 0; @@ -2091,27 +2202,26 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_try_run LINENO # ------------------------ -# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that -# executables *can* be run. +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -2121,26 +2231,25 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -2158,12 +2267,11 @@ fi ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 -printf %s "checking for int$2_t... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +$as_echo_n "checking for int$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2174,7 +2282,7 @@ else $as_nop $ac_includes_default enum { N = $2 / 2 - 1 }; int -main (void) +main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; @@ -2184,14 +2292,13 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int -main (void) +main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; @@ -2202,10 +2309,9 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( @@ -2213,20 +2319,19 @@ else $as_nop eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no" -then : +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : -else $as_nop +else break fi done fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t @@ -2238,12 +2343,11 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 -printf %s "checking for uint$2_t... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +$as_echo_n "checking for uint$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2253,7 +2357,7 @@ else $as_nop /* end confdefs.h. */ $ac_includes_default int -main (void) +main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; @@ -2263,8 +2367,7 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( @@ -2272,49 +2375,28 @@ then : eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no" -then : +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : -else $as_nop +else break fi done fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t -ac_configure_args_raw= -for ac_arg -do - case $ac_arg in - *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_configure_args_raw " '$ac_arg'" -done - -case $ac_configure_args_raw in - *$as_nl*) - ac_safe_unquote= ;; - *) - ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. - ac_unsafe_a="$ac_unsafe_z#~" - ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" - ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; -esac - cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was - $ $0$ac_configure_args_raw + $ $0 $@ _ACEOF exec 5>>config.log @@ -2347,12 +2429,8 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - printf "%s\n" "PATH: $as_dir" + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" done IFS=$as_save_IFS @@ -2387,7 +2465,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2422,13 +2500,11 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? - # Sanitize IFS. - IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - printf "%s\n" "## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2439,8 +2515,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2464,7 +2540,7 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ) echo - printf "%s\n" "## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2472,14 +2548,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - printf "%s\n" "## ------------------- ## + $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2487,15 +2563,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - printf "%s\n" "## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2503,8 +2579,8 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} echo fi test "$ac_signal" != 0 && - printf "%s\n" "$as_me: caught signal $ac_signal" - printf "%s\n" "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2518,48 +2594,63 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -printf "%s\n" "/* confdefs.h */" > confdefs.h +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF -printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF -printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF -printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF -printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF -printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - ac_site_files="$CONFIG_SITE" + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac elif test "x$prefix" != xNONE; then - ac_site_files="$prefix/share/config.site $prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi - -for ac_site_file in $ac_site_files +for ac_site_file in "$ac_site_file1" "$ac_site_file2" do - case $ac_site_file in #( - */*) : - ;; #( - *) : - ac_site_file=./$ac_site_file ;; -esac - if test -f "$ac_site_file" && test -r "$ac_site_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2569,1269 +2660,1581 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -printf "%s\n" "$as_me: loading cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -printf "%s\n" "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Test code for whether the C compiler supports C89 (global declarations) -ac_c_conftest_c89_globals=' -/* Does the compiler advertise C89 conformance? - Do not test the value of __STDC__, because some compilers set it to 0 - while being otherwise adequately conformant. */ -#if !defined __STDC__ -# error "Compiler does not advertise C89 conformance" -#endif +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ -struct buf { int x; }; -struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} +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 -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not \xHH hex character constants. - These do not provoke an error unfortunately, instead are silently treated - as an "x". The following induces an error, until -std is added to get - proper ANSI mode. Curiously \x00 != x always comes out true, for an - array size at least. It is necessary to write \x00 == 0 to get something - that is true only with -std. */ -int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) '\''x'\'' -int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), - int, int);' -# Test code for whether the C compiler supports C89 (body of main). -ac_c_conftest_c89_main=' -ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); -' -# Test code for whether the C compiler supports C99 (global declarations) -ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L -# error "Compiler does not advertise C99 conformance" -#endif +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi -#include -extern int puts (const char *); -extern int printf (const char *, ...); -extern int dprintf (int, const char *, ...); -extern void *malloc (size_t); - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -// dprintf is used instead of fprintf to avoid needing to declare -// FILE and stderr. -#define debug(...) dprintf (2, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - #error "your preprocessor is broken" -#endif -#if BIG_OK -#else - #error "your preprocessor is broken" -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; -struct incomplete_array -{ - int datasize; - double data[]; -}; -struct named_init { - int number; - const wchar_t *name; - double average; -}; -typedef const char *ccp; +: ${CXXFLAGS="-O3 -Wall -pedantic"} -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) - continue; - return 0; -} +# +# Programs +# -// Check varargs and va_copy. -static bool -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac - const char *str = ""; - int number = 0; - float fnumber = 0; - while (*format) - { - switch (*format++) - { - case '\''s'\'': // string - str = va_arg (args_copy, const char *); - break; - case '\''d'\'': // int - number = va_arg (args_copy, int); - break; - case '\''f'\'': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); - return *str && number && fnumber; -} -' +macro_version='2.4.6' +macro_revision='2.4.6' -# Test code for whether the C compiler supports C99 (body of main). -ac_c_conftest_c99_main=' - // Check bool. - _Bool success = false; - success |= (argc != 0); - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[0] = argv[0][0]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' - || dynamic_array[ni.number - 1] != 543); -' -# Test code for whether the C compiler supports C11 (global declarations) -ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L -# error "Compiler does not advertise C11 conformance" -#endif -// Check _Alignas. -char _Alignas (double) aligned_as_double; -char _Alignas (0) no_special_alignment; -extern char aligned_as_int; -char _Alignas (0) _Alignas (int) aligned_as_int; -// Check _Alignof. -enum -{ - int_alignment = _Alignof (int), - int_array_alignment = _Alignof (int[100]), - char_alignment = _Alignof (char) -}; -_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); -// Check _Noreturn. -int _Noreturn does_not_return (void) { for (;;) continue; } -// Check _Static_assert. -struct test_static_assert -{ - int x; - _Static_assert (sizeof (int) <= sizeof (long int), - "_Static_assert does not work in struct"); - long int y; -}; -// Check UTF-8 literals. -#define u8 syntax error! -char const utf8_literal[] = u8"happens to be ASCII" "another string"; -// Check duplicate typedefs. -typedef long *long_ptr; -typedef long int *long_ptr; -typedef long_ptr long_ptr; -// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. -struct anonymous -{ - union { - struct { int i; int j; }; - struct { int k; long int l; } w; - }; - int m; -} v1; -' -# Test code for whether the C compiler supports C11 (body of main). -ac_c_conftest_c11_main=' - _Static_assert ((offsetof (struct anonymous, i) - == offsetof (struct anonymous, w.k)), - "Anonymous union alignment botch"); - v1.i = 2; - v1.w.k = 5; - ok |= v1.i != 5; -' -# Test code for whether the C compiler supports C11 (complete). -ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} -${ac_c_conftest_c11_globals} -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - ${ac_c_conftest_c11_main} - return ok; -} -" -# Test code for whether the C compiler supports C99 (complete). -ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} +ltmain=$ac_aux_dir/ltmain.sh -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - return ok; -} -" +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -# Test code for whether the C compiler supports C89 (complete). -ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - return ok; -} -" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -# Test code for whether the C++ compiler supports C++98 (global declarations) -ac_cxx_conftest_cxx98_globals=' -// Does the compiler advertise C++98 conformance? -#if !defined __cplusplus || __cplusplus < 199711L -# error "Compiler does not advertise C++98 conformance" -#endif -// These inclusions are to reject old compilers that -// lack the unsuffixed header files. -#include -#include +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi -// and are *not* freestanding headers in C++98. -extern void assert (int); -namespace std { - extern int strcmp (const char *, const char *); -} +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -// Namespaces, exceptions, and templates were all added after "C++ 2.0". -using std::exception; -using std::strcmp; -namespace { +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -void test_exception_syntax() -{ - try { - throw "test"; - } catch (const char *s) { - // Extra parentheses suppress a warning when building autoconf itself, - // due to lint rules shared with more typical C programs. - assert (!(strcmp) (s, "test")); - } -} +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' -template struct test_template -{ - T const val; - explicit test_template(T t) : val(t) {} - template T add(U u) { return static_cast(u) + val; } -}; +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' -} // anonymous namespace -' +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi -# Test code for whether the C++ compiler supports C++98 (body of main) -ac_cxx_conftest_cxx98_main=' - assert (argc); - assert (! argv[0]); +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () { - test_exception_syntax (); - test_template tt (2.0); - assert (tt.add (4) == 6.0); - assert (true && !false); + $ECHO "" } -' -# Test code for whether the C++ compiler supports C++11 (global declarations) -ac_cxx_conftest_cxx11_globals=' -// Does the compiler advertise C++ 2011 conformance? -#if !defined __cplusplus || __cplusplus < 201103L -# error "Compiler does not advertise C++11 conformance" -#endif +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac -namespace cxx11test -{ - constexpr int get_val() { return 20; } - struct testinit - { - int i; - double d; - }; - class delegate - { - public: - delegate(int n) : n(n) {} - delegate(): delegate(2354) {} - virtual int getval() { return this->n; }; - protected: - int n; - }; - class overridden : public delegate - { - public: - overridden(int n): delegate(n) {} - virtual int getval() override final { return this->n * 2; } - }; - class nocopy - { - public: - nocopy(int i): i(i) {} - nocopy() = default; - nocopy(const nocopy&) = delete; - nocopy & operator=(const nocopy&) = delete; - private: - int i; - }; - - // for testing lambda expressions - template Ret eval(Fn f, Ret v) - { - return f(v); - } - // for testing variadic templates and trailing return types - template auto sum(V first) -> V - { - return first; - } - template auto sum(V first, Args... rest) -> V - { - return first + sum(rest...); - } -} -' -# Test code for whether the C++ compiler supports C++11 (body of main) -ac_cxx_conftest_cxx11_main=' -{ - // Test auto and decltype - auto a1 = 6538; - auto a2 = 48573953.4; - auto a3 = "String literal"; - int total = 0; - for (auto i = a3; *i; ++i) { total += *i; } - decltype(a2) a4 = 34895.034; -} -{ - // Test constexpr - short sa[cxx11test::get_val()] = { 0 }; -} -{ - // Test initializer lists - cxx11test::testinit il = { 4323, 435234.23544 }; -} -{ - // Test range-based for - int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, - 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; - for (auto &x : array) { x += 23; } -} -{ - // Test lambda expressions - using cxx11test::eval; - assert (eval ([](int x) { return x*2; }, 21) == 42); - double d = 2.0; - assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); - assert (d == 5.0); - assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); - assert (d == 5.0); -} -{ - // Test use of variadic templates - using cxx11test::sum; - auto a = sum(1); - auto b = sum(1, 2); - auto c = sum(1.0, 2.0, 3.0); -} -{ - // Test constructor delegation - cxx11test::delegate d1; - cxx11test::delegate d2(); - cxx11test::delegate d3(45); -} -{ - // Test override and final - cxx11test::overridden o1(55464); -} -{ - // Test nullptr - char *c = nullptr; -} -{ - // Test template brackets - test_template<::test_template> v(test_template(12)); -} -{ - // Unicode literals - char const *utf8 = u8"UTF-8 string \u2500"; - char16_t const *utf16 = u"UTF-8 string \u2500"; - char32_t const *utf32 = U"UTF-32 string \u2500"; -} -' -# Test code for whether the C compiler supports C++11 (complete). -ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} -${ac_cxx_conftest_cxx11_globals} -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_cxx_conftest_cxx98_main} - ${ac_cxx_conftest_cxx11_main} - return ok; -} -" -# Test code for whether the C compiler supports C++98 (complete). -ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_cxx_conftest_cxx98_main} - return ok; -} -" -as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" -as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" -as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" -as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" -as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" -as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" -as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" -as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" -as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" - -# Auxiliary files required by this configure script. -ac_aux_files="install-sh config.guess config.sub ltmain.sh" - -# Locations in which to look for auxiliary files. -ac_aux_dir_candidates="${srcdir}/config" - -# Search for a directory containing all of the required auxiliary files, -# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. -# If we don't find one directory that contains all the files we need, -# we report the set of missing files from the *first* directory in -# $ac_aux_dir_candidates and give up. -ac_missing_aux_files="" -ac_first_candidate=: -printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in $ac_aux_dir_candidates +for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - as_found=: + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 - ac_aux_dir_found=yes - ac_install_sh= - for ac_aux in $ac_aux_files - do - # As a special case, if "install-sh" is required, that requirement - # can be satisfied by any of "install-sh", "install.sh", or "shtool", - # and $ac_install_sh is set appropriately for whichever one is found. - if test x"$ac_aux" = x"install-sh" - then - if test -f "${as_dir}install-sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 - ac_install_sh="${as_dir}install-sh -c" - elif test -f "${as_dir}install.sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 - ac_install_sh="${as_dir}install.sh -c" - elif test -f "${as_dir}shtool"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 - ac_install_sh="${as_dir}shtool install -c" - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} install-sh" - else - break - fi - fi - else - if test -f "${as_dir}${ac_aux}"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" - else - break - fi - fi - fi - done - if test "$ac_aux_dir_found" = yes; then - ac_aux_dir="$as_dir" - break - fi - ac_first_candidate=false +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - as_found=false + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi done + done IFS=$as_save_IFS -if $as_found -then : -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi - - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -if test -f "${ac_aux_dir}config.guess"; then - ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi -if test -f "${ac_aux_dir}config.sub"; then - ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -if test -f "$ac_aux_dir/configure"; then - ac_configure="$SHELL ${ac_aux_dir}configure" + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" fi -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi done -if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' - and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## + done +IFS=$as_save_IFS -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -: ${CXXFLAGS="-O3 -Wall -pedantic"} + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -# -# Programs -# +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + test -n "$ac_ct_CC" && break +done -case `pwd` in - *\ * | *\ *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac + CC=$ac_ct_CC + fi +fi +fi -macro_version='2.4.6' -macro_revision='2.4.6' - - - - - - - - - - - - +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -ltmain=$ac_aux_dir/ltmain.sh +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - # Make sure we can run config.sub. -$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -printf %s "checking build system type... " >&6; } -if test ${ac_cv_build+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -printf "%s\n" "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -printf %s "checking host system type... " >&6; } -if test ${ac_cv_host+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 + ac_file='' fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -printf "%s\n" "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -printf %s "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () { - $ECHO "" -} +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; -case $ECHO in - printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -printf "%s\n" "printf" >&6; } ;; - print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -printf "%s\n" "print -r" >&6; } ;; - *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -printf "%s\n" "cat" >&6; } ;; + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done - done -IFS=$as_save_IFS +rm -f conftest.$ac_ext +CC=$ac_save_CC fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_SED=$SED fi - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_GREP=$GREP fi - fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_EGREP=$EGREP fi - - test -n "$CC" && break - done + fi fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + ac_cv_path_FGREP=$FGREP fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" - test -n "$ac_ct_CC" && break -done - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3840,43 +4243,42 @@ IFS=$as_save_IFS fi fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$DUMPBIN" && break + done fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3885,666 +4287,259 @@ IFS=$as_save_IFS fi fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ac_ct_CC" = x; then - CC="" + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - CC=$ac_ct_CC + DUMPBIN=$ac_ct_DUMPBIN fi -else - CC="$ac_cv_prog_CC" fi + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi fi +test -z "$NM" && NM=nm -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } -# Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion -version; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main (void) -{ - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -printf %s "checking whether the C compiler works... " >&6; } -ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; -else $as_nop - ac_file='' -fi -if test -z "$ac_file" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -printf %s "checking for C compiler default output file name... " >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -printf "%s\n" "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -printf %s "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -printf "%s\n" "$ac_cv_exeext" >&6; } + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -printf %s "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -printf "%s\n" "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -printf %s "checking for suffix of object files... " >&6; } -if test ${ac_cv_objext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -printf "%s\n" "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test $ac_compiler_gnu = yes; then - GCC=yes +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } else - GCC= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } fi -ac_test_CFLAGS=${CFLAGS+y} -ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +max_cmd_len=$lt_cv_sys_max_cmd_len -int -main (void) -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main (void) -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main (void) -{ +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC + lt_unset=false fi -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 -fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -printf %s "checking for a sed that does not truncate output... " >&6; } -if test ${ac_cv_path_SED+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in sed gsed - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; esac - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -printf "%s\n" "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - @@ -4553,230 +4548,109 @@ Xsed="$SED -e 1s/^X//" - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -printf %s "checking for grep that handles long lines and -e... " >&6; } -if test ${ac_cv_path_GREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in grep ggrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_cv_path_GREP=$GREP -fi + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -printf "%s\n" "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -printf %s "checking for egrep... " >&6; } -if test ${ac_cv_path_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in egrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -printf "%s\n" "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -printf %s "checking for fgrep... " >&6; } -if test ${ac_cv_path_FGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in fgrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_cv_path_FGREP=$FGREP -fi + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac - fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -printf "%s\n" "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac @@ -4786,263 +4660,66 @@ test -z "$GREP" && GREP=grep +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -# Check whether --with-gnu-ld was given. -if test ${with_gnu_ld+y} -then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop - with_gnu_ld=no fi - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -printf %s "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -printf %s "checking for GNU ld... " >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -printf %s "checking for non-GNU ld... " >&6; } -fi -if test ${lt_cv_path_LD+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -printf "%s\n" "$LD" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -printf %s "checking if the linker ($LD) is GNU ld... " >&6; } -if test ${lt_cv_prog_gnu_ld+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test ${lt_cv_path_NM+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM -else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} -fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -printf "%s\n" "$lt_cv_path_NM" >&6; } -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DUMPBIN+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -printf "%s\n" "$DUMPBIN" >&6; } +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DUMPBIN+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5051,375 +4728,273 @@ IFS=$as_save_IFS fi fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -printf "%s\n" "$ac_ct_DUMPBIN" >&6; } +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - DUMPBIN=$ac_ct_DUMPBIN + OBJDUMP=$ac_ct_OBJDUMP fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi +test -z "$OBJDUMP" && OBJDUMP=objdump - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi -fi -test -z "$NM" && NM=nm -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -printf %s "checking the name lister ($NM) interface... " >&6; } -if test ${lt_cv_nm_interface+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -printf "%s\n" "$lt_cv_nm_interface" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -printf %s "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -printf "%s\n" "no, using $LN_S" >&6; } -fi + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. -# find the maximum length of command line arguments -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -printf %s "checking the maximum length of command line arguments... " >&6; } -if test ${lt_cv_sys_max_cmd_len+y} -then : - printf %s "(cached) " >&6 -else $as_nop - i=0 - teststring=ABCD +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; +beos*) + lt_cv_deplibs_check_method=pass_all + ;; - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac + ;; -fi +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; -if test -n "$lt_cv_sys_max_cmd_len"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 -printf "%s\n" "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -printf %s "checking how to convert $build file names to $host format... " >&6; } -if test ${lt_cv_to_host_file_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi ;; -esac - + esac fi -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -printf %s "checking how to convert $build file names to toolchain format... " >&6; } -if test ${lt_cv_to_tool_file_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -fi -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -printf %s "checking for $LD option to reload object files... " >&6; } -if test ${lt_cv_ld_reload_flag+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_reload_flag='-r' -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test yes != "$GCC"; then - reload_cmds=false - fi - ;; - darwin*) - if test yes = "$GCC"; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac @@ -5430,30 +5005,25 @@ esac if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5462,43 +5032,38 @@ IFS=$as_save_IFS fi fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -printf "%s\n" "$OBJDUMP" >&6; } +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5507,31 +5072,31 @@ IFS=$as_save_IFS fi fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -printf "%s\n" "$ac_ct_OBJDUMP" >&6; } +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - OBJDUMP=$ac_ct_OBJDUMP + DLLTOOL=$ac_ct_DLLTOOL fi else - OBJDUMP="$ac_cv_prog_OBJDUMP" + DLLTOOL="$ac_cv_prog_DLLTOOL" fi -test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$DLLTOOL" && DLLTOOL=dlltool @@ -5541,400 +5106,38 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -printf %s "checking how to recognize dependent libraries... " >&6; } -if test ${lt_cv_deplibs_check_method+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' -beos*) - lt_cv_deplibs_check_method=pass_all +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; +esac -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -os2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DLLTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -printf "%s\n" "$DLLTOOL" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DLLTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -printf "%s\n" "$ac_ct_DLLTOOL" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -printf %s "checking how to associate runtime and link libraries... " >&6; } -if test ${lt_cv_sharedlib_from_linklib_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO @@ -5952,16 +5155,15 @@ if test -z "$CXX"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else @@ -5969,15 +5171,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5988,11 +5186,11 @@ fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6001,16 +5199,15 @@ fi fi if test -z "$CXX"; then ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else @@ -6018,15 +5215,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6037,11 +5230,11 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -printf "%s\n" "$ac_ct_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6053,8 +5246,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -6064,7 +5257,7 @@ fi fi fi # Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do @@ -6074,7 +5267,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -6084,21 +5277,20 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 -printf %s "checking whether the compiler supports GNU C++... " >&6; } -if test ${ac_cv_cxx_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { #ifndef __GNUC__ choke me @@ -6108,33 +5300,29 @@ main (void) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes -else $as_nop +else ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi -ac_test_CXXFLAGS=${CXXFLAGS+y} +ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -printf %s "checking whether $CXX accepts -g... " >&6; } -if test ${ac_cv_prog_cxx_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no @@ -6143,60 +5331,57 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes -else $as_nop +else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } -if test $ac_test_CXXFLAGS; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then @@ -6211,100 +5396,6 @@ else CXXFLAGS= fi fi -ac_prog_cxx_stdcxx=no -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 -printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_11=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx11_program -_ACEOF -for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx11" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi - -if test "x$ac_cv_prog_cxx_cxx11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx11" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 - ac_prog_cxx_stdcxx=cxx11 -fi -fi -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 -printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_98+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_98=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx98_program -_ACEOF -for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx98=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx98" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi - -if test "x$ac_cv_prog_cxx_cxx98" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx98" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx98" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 - ac_prog_cxx_stdcxx=cxx98 -fi -fi - ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -6317,12 +5408,11 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -6330,15 +5420,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6349,11 +5435,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -printf "%s\n" "$AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6366,12 +5452,11 @@ if test -z "$AR"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -6379,15 +5464,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6398,11 +5479,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -printf "%s\n" "$ac_ct_AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6414,8 +5495,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -6435,32 +5516,30 @@ fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -printf %s "checking for archiver @FILE support... " >&6; } -if test ${lt_cv_ar_at_file+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. @@ -6468,7 +5547,7 @@ then : { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ @@ -6477,11 +5556,11 @@ then : rm -f conftest.* libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -printf "%s\n" "$lt_cv_ar_at_file" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= @@ -6498,12 +5577,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_STRIP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -6511,15 +5589,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6530,11 +5604,11 @@ fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -printf "%s\n" "$STRIP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6543,12 +5617,11 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_STRIP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else @@ -6556,15 +5629,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6575,11 +5644,11 @@ fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -printf "%s\n" "$ac_ct_STRIP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -6587,8 +5656,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -6607,12 +5676,11 @@ test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -6620,15 +5688,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6639,11 +5703,11 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -printf "%s\n" "$RANLIB" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6652,12 +5716,11 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -6665,15 +5728,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6684,11 +5743,11 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -printf "%s\n" "$ac_ct_RANLIB" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -6696,8 +5755,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -6761,12 +5820,11 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AWK+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -6774,15 +5832,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6793,11 +5847,11 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -printf "%s\n" "$AWK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6833,12 +5887,11 @@ compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -printf %s "checking command to parse $NM output from $compiler object... " >&6; } -if test ${lt_cv_sys_global_symbol_pipe+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -6990,14 +6043,14 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then @@ -7066,7 +6119,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi @@ -7101,11 +6154,11 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -printf "%s\n" "failed" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -printf "%s\n" "ok" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } fi # Response file support. @@ -7151,14 +6204,13 @@ fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -printf %s "checking for sysroot... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. -if test ${with_sysroot+y} -then : +if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; -else $as_nop +else with_sysroot=no fi @@ -7176,25 +6228,24 @@ case $with_sysroot in #( no|'') ;; #( *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -printf "%s\n" "$with_sysroot" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -printf "%s\n" "${lt_sysroot:-no}" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -printf %s "checking for a working dd... " >&6; } -if test ${ac_cv_path_lt_DD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} @@ -7205,15 +6256,10 @@ if test -z "$lt_DD"; then for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in dd - do + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ @@ -7233,16 +6279,15 @@ fi rm -f conftest.i conftest2.i conftest.out fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -printf "%s\n" "$ac_cv_path_lt_DD" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -printf %s "checking how to truncate binary pipes... " >&6; } -if test ${lt_cv_truncate_bin+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= @@ -7253,8 +6298,8 @@ fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -printf "%s\n" "$lt_cv_truncate_bin" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } @@ -7278,8 +6323,7 @@ func_cc_basename () # Check whether --enable-libtool-lock was given. -if test ${enable_libtool_lock+y} -then : +if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi @@ -7295,7 +6339,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) @@ -7315,7 +6359,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in @@ -7353,7 +6397,7 @@ mips64*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in @@ -7394,7 +6438,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) @@ -7457,12 +6501,11 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -printf %s "checking whether the C compiler needs -belf... " >&6; } -if test ${lt_cv_cc_needs_belf+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7473,20 +6516,19 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes -else $as_nop +else lt_cv_cc_needs_belf=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7495,8 +6537,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS @@ -7509,7 +6551,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) @@ -7546,12 +6588,11 @@ need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_MANIFEST_TOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else @@ -7559,15 +6600,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7578,11 +6615,11 @@ fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -printf "%s\n" "$MANIFEST_TOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7591,12 +6628,11 @@ if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else @@ -7604,15 +6640,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7623,11 +6655,11 @@ fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then @@ -7635,8 +6667,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL @@ -7646,12 +6678,11 @@ else fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if test ${lt_cv_path_mainfest_tool+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out @@ -7661,8 +6692,8 @@ else $as_nop fi rm -f conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -7677,12 +6708,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DSYMUTIL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else @@ -7690,15 +6720,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7709,11 +6735,11 @@ fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -printf "%s\n" "$DSYMUTIL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7722,12 +6748,11 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else @@ -7735,15 +6760,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7754,11 +6775,11 @@ fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then @@ -7766,8 +6787,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL @@ -7779,12 +6800,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_NMEDIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else @@ -7792,15 +6812,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7811,11 +6827,11 @@ fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -printf "%s\n" "$NMEDIT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7824,12 +6840,11 @@ if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_NMEDIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else @@ -7837,15 +6852,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7856,11 +6867,11 @@ fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -printf "%s\n" "$ac_ct_NMEDIT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then @@ -7868,8 +6879,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT @@ -7881,12 +6892,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_LIPO+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else @@ -7894,15 +6904,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7913,11 +6919,11 @@ fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -printf "%s\n" "$LIPO" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7926,12 +6932,11 @@ if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_LIPO+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else @@ -7939,15 +6944,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7958,11 +6959,11 @@ fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -printf "%s\n" "$ac_ct_LIPO" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then @@ -7970,8 +6971,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO @@ -7983,12 +6984,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else @@ -7996,15 +6996,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8015,11 +7011,11 @@ fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -printf "%s\n" "$OTOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8028,12 +7024,11 @@ if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else @@ -8041,15 +7036,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8060,11 +7051,11 @@ fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -printf "%s\n" "$ac_ct_OTOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then @@ -8072,8 +7063,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL @@ -8085,12 +7076,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OTOOL64+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else @@ -8098,15 +7088,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8117,11 +7103,11 @@ fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -printf "%s\n" "$OTOOL64" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8130,12 +7116,11 @@ if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OTOOL64+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else @@ -8143,15 +7128,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8162,11 +7143,11 @@ fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -printf "%s\n" "$ac_ct_OTOOL64" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then @@ -8174,8 +7155,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 @@ -8210,12 +7191,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -printf %s "checking for -single_module linker flag... " >&6; } -if test ${lt_cv_apple_cc_single_mod+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override @@ -8244,15 +7224,14 @@ else $as_nop rm -f conftest.* fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -printf %s "checking for -exported_symbols_list linker flag... " >&6; } -if test ${lt_cv_ld_exported_symbols_list+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym @@ -8261,33 +7240,31 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes -else $as_nop +else lt_cv_ld_exported_symbols_list=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -printf %s "checking for -force_load linker flag... " >&6; } -if test ${lt_cv_ld_force_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} @@ -8315,8 +7292,8 @@ _LT_EOF rm -rf conftest.dSYM fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -printf "%s\n" "$lt_cv_ld_force_load" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; @@ -8382,43 +7359,286 @@ func_munge_path_list () esac } -ac_header= ac_cache= -for ac_item in $ac_header_c_list +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes do - if test $ac_cache; then - ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" - if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then - printf "%s\n" "#define $ac_item 1" >> confdefs.h - fi - ac_header= ac_cache= - elif test $ac_header; then - ac_cache=$ac_item - else - ac_header=$ac_item - fi + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : +else + ac_cv_header_stdc=no +fi +rm -f conftest* +fi +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then +$as_echo "#define STDC_HEADERS 1" >>confdefs.h -if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes -then : +fi -printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = xyes -then : - printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF fi +done + func_stripname_cnf () @@ -8444,8 +7664,7 @@ func_stripname_cnf () # Check whether --enable-shared was given. -if test ${enable_shared+y} -then : +if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; @@ -8463,7 +7682,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_shared=yes fi @@ -8476,8 +7695,7 @@ fi # Check whether --enable-static was given. -if test ${enable_static+y} -then : +if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; @@ -8495,7 +7713,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_static=yes fi @@ -8509,8 +7727,7 @@ fi # Check whether --with-pic was given. -if test ${with_pic+y} -then : +if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; @@ -8527,7 +7744,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else pic_mode=default fi @@ -8539,8 +7756,7 @@ fi # Check whether --enable-fast-install was given. -if test ${enable_fast_install+y} -then : +if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; @@ -8558,7 +7774,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_fast_install=yes fi @@ -8572,12 +7788,11 @@ fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -printf %s "checking which variant of shared library versioning to provide... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. -if test ${with_aix_soname+y} -then : +if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; @@ -8586,19 +7801,18 @@ then : ;; esac lt_cv_with_aix_soname=$with_aix_soname -else $as_nop - if test ${lt_cv_with_aix_soname+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -printf "%s\n" "$with_aix_soname" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', @@ -8680,12 +7894,11 @@ if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -printf %s "checking for objdir... " >&6; } -if test ${lt_cv_objdir+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then @@ -8696,15 +7909,17 @@ else fi rmdir .libs 2>/dev/null fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -printf "%s\n" "$lt_cv_objdir" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir -printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF @@ -8750,12 +7965,11 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -printf %s "checking for ${ac_tool_prefix}file... " >&6; } -if test ${lt_cv_path_MAGIC_CMD+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8804,11 +8018,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -printf "%s\n" "$MAGIC_CMD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8817,12 +8031,11 @@ fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -printf %s "checking for file... " >&6; } -if test ${lt_cv_path_MAGIC_CMD+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8871,11 +8084,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -printf "%s\n" "$MAGIC_CMD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8960,12 +8173,11 @@ if test yes = "$GCC"; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test ${lt_cv_prog_compiler_rtti_exceptions+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -8996,8 +8208,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -9354,28 +8566,26 @@ case $host_os in ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -printf %s "checking for $compiler option to produce PIC... " >&6; } -if test ${lt_cv_prog_compiler_pic+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test ${lt_cv_prog_compiler_pic_works+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -9406,8 +8616,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in @@ -9435,12 +8645,11 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test ${lt_cv_prog_compiler_static_works+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -9464,8 +8673,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : @@ -9479,12 +8688,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -9527,20 +8735,19 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -9583,8 +8790,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } @@ -9592,19 +8799,19 @@ printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -printf %s "checking if we can lock with hard links... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -printf "%s\n" "$hard_links" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test no = "$hard_links"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -9616,8 +8823,8 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -10172,23 +9379,21 @@ _LT_EOF if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath_+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10203,7 +9408,7 @@ then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -10227,23 +9432,21 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath_+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10258,7 +9461,7 @@ then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -10509,12 +9712,11 @@ fi # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -printf %s "checking if $CC understands -b... " >&6; } -if test ${lt_cv_prog_compiler__b+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" @@ -10538,8 +9740,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' @@ -10579,30 +9781,28 @@ fi # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if test ${lt_cv_irix_exported_symbol+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes -else $as_nop +else lt_cv_irix_exported_symbol=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi @@ -10882,8 +10082,8 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -printf "%s\n" "$ld_shlibs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -10919,19 +10119,18 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -printf %s "checking whether -lc should be explicitly linked in... " >&6; } -if test ${lt_cv_archive_cmds_need_lc+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -10949,7 +10148,7 @@ else $as_nop if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no @@ -10963,8 +10162,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac @@ -11123,8 +10322,8 @@ esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -printf %s "checking dynamic linker characteristics... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in @@ -11685,10 +10884,9 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if test ${lt_cv_shlibpath_overrides_runpath+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -11698,21 +10896,19 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null -then : +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -11944,8 +11140,8 @@ uts4*) dynamic_linker=no ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -printf "%s\n" "$dynamic_linker" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -12066,8 +11262,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -printf %s "checking how to hardcode library paths into programs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -12091,8 +11287,8 @@ else # directories. hardcode_action=unsupported fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -printf "%s\n" "$hardcode_action" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then @@ -12136,12 +11332,11 @@ else darwin*) # if libdl is installed we need to link against it - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12150,31 +11345,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop +else lt_cv_dlopen=dyld lt_cv_dlopen_libs= @@ -12194,16 +11390,14 @@ fi *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes -then : +if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -printf %s "checking for shl_load in -ldld... " >&6; } -if test ${ac_cv_lib_dld_shl_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12212,42 +11406,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char shl_load (); int -main (void) +main () { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes -else $as_nop +else ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else $as_nop +else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes -then : +if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12256,37 +11449,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -printf %s "checking for dlopen in -lsvld... " >&6; } -if test ${ac_cv_lib_svld_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12295,37 +11488,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes -else $as_nop +else ac_cv_lib_svld_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -printf %s "checking for dld_link in -ldld... " >&6; } -if test ${ac_cv_lib_dld_dld_link+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12334,29 +11527,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dld_link (); int -main (void) +main () { return dld_link (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes -else $as_nop +else ac_cv_lib_dld_dld_link=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -12395,12 +11589,11 @@ fi save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -printf %s "checking whether a program can dlopen itself... " >&6; } -if test ${lt_cv_dlopen_self+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else @@ -12479,7 +11672,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -12497,17 +11690,16 @@ rm -fr conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -printf "%s\n" "$lt_cv_dlopen_self" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -printf %s "checking whether a statically linked program can dlopen itself... " >&6; } -if test ${lt_cv_dlopen_self_static+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else @@ -12586,7 +11778,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -12604,8 +11796,8 @@ rm -fr conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS @@ -12643,13 +11835,13 @@ fi striplib= old_striplib= -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -printf %s "checking whether stripping libraries is possible... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in @@ -12657,16 +11849,16 @@ else if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi ;; *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac fi @@ -12683,13 +11875,13 @@ fi # Report what library types will actually be built - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -printf %s "checking if libtool supports shared libraries... " >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -printf "%s\n" "$can_build_shared" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -printf %s "checking whether to build shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -12713,15 +11905,15 @@ printf %s "checking whether to build shared libraries... " >&6; } fi ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -printf "%s\n" "$enable_shared" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -printf %s "checking whether to build static libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -printf "%s\n" "$enable_static" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } @@ -12743,32 +11935,36 @@ ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -printf %s "checking how to run the C++ preprocessor... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then - if test ${ac_cv_prog_CXXCPP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CXX needs to be expanded - for CXXCPP in "$CXX -E" cpp /lib/cpp + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef __STDC__ +# include +#else +# include +#endif Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : -else $as_nop +else # Broken: fails on valid input. continue fi @@ -12780,11 +11976,10 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue -else $as_nop +else # Passes both tests. ac_preproc_ok=: break @@ -12794,8 +11989,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : +if $ac_preproc_ok; then : break fi @@ -12807,24 +12001,29 @@ fi else ac_cv_prog_CXXCPP=$CXXCPP fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -printf "%s\n" "$CXXCPP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef __STDC__ +# include +#else +# include +#endif Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : -else $as_nop +else # Broken: fails on valid input. continue fi @@ -12836,11 +12035,10 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO" -then : +if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue -else $as_nop +else # Passes both tests. ac_preproc_ok=: break @@ -12850,12 +12048,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : +if $ac_preproc_ok; then : -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -12991,18 +12188,17 @@ cc_basename=$func_cc_basename_result # Check whether --with-gnu-ld was given. -if test ${with_gnu_ld+y} -then : +if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop +else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -printf %s "checking for ld used by $CC... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -13031,16 +12227,15 @@ printf %s "checking for ld used by $CC... " >&6; } ;; esac elif test yes = "$with_gnu_ld"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -printf %s "checking for GNU ld... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -printf %s "checking for non-GNU ld... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } fi -if test ${lt_cv_path_LD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -13069,19 +12264,18 @@ fi LD=$lt_cv_path_LD if test -n "$LD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -printf "%s\n" "$LD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -printf %s "checking if the linker ($LD) is GNU ld... " >&6; } -if test ${lt_cv_prog_gnu_ld+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -13147,8 +12341,8 @@ with_gnu_ld=$lt_cv_prog_gnu_ld fi # PORTME: fill in a description of your system's C++ link characteristics - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) @@ -13286,23 +12480,21 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath__CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -13317,7 +12509,7 @@ then : lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -13342,23 +12534,21 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath__CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -13373,7 +12563,7 @@ then : lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -14224,8 +13414,8 @@ fi ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -printf "%s\n" "$ld_shlibs_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX @@ -14263,7 +13453,7 @@ esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. @@ -14744,28 +13934,26 @@ case $host_os in ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -printf %s "checking for $compiler option to produce PIC... " >&6; } -if test ${lt_cv_prog_compiler_pic_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if test ${lt_cv_prog_compiler_pic_works_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -14796,8 +13984,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in @@ -14819,12 +14007,11 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test ${lt_cv_prog_compiler_static_works_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -14848,8 +14035,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : @@ -14860,12 +14047,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -14908,17 +14094,16 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -14961,8 +14146,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } @@ -14970,19 +14155,19 @@ printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -printf %s "checking if we can lock with hard links... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -printf "%s\n" "$hard_links" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test no = "$hard_links"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -14991,8 +14176,8 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' @@ -15031,8 +14216,8 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -printf "%s\n" "$ld_shlibs_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld @@ -15059,19 +14244,18 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -printf %s "checking whether -lc should be explicitly linked in... " >&6; } -if test ${lt_cv_archive_cmds_need_lc_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -15089,7 +14273,7 @@ else $as_nop if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no @@ -15103,8 +14287,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac @@ -15173,8 +14357,8 @@ esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -printf %s "checking dynamic linker characteristics... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' @@ -15640,2040 +14824,2591 @@ linux*android*) shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec_CXX='-L$libdir' - ;; +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac - # Some binutils ld are patched to set DT_RUNPATH - if test ${lt_cv_shlibpath_overrides_runpath+y} -then : - printf %s "(cached) " >&6 -else $as_nop - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + done +IFS=$as_save_IFS -int -main (void) -{ +rm -rf conftest.one conftest.two conftest.dir - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null -then : - lt_cv_shlibpath_overrides_runpath=yes fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } -fi +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; -rdos*) - dynamic_linker=no - ;; -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' + if test -z "$CTAGS"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +$as_echo_n "checking whether ctags executable path has been provided... " >&6; } + +# Check whether --with-ctags was given. +if test "${with_ctags+set}" = set; then : + withval=$with_ctags; + if test "$withval" != yes && test "$withval" != no; then : + + CTAGS="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } + +else + + CTAGS="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CTAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -*) - dynamic_linker=no ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -printf "%s\n" "$dynamic_linker" >&6; } -test no = "$dynamic_linker" && can_build_shared=no +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +$as_echo "$CTAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec + fi -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec + + + + + +if test x${CTAGS} = x; then : + as_fn_error $? "Required program ctags was not found" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec +SO_EXT=$shrext_cmds -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH +# +# System/Compiler Features +# + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++14 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx14+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + } + namespace test_final_override + { + struct Base + { + virtual void f() {} + }; + struct Derived : public Base + { + virtual void f() override {} + }; + } + namespace test_double_right_angle_brackets + { + template < typename T > + struct check {}; + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + } + namespace test_decltype + { + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + } + namespace test_type_deduction + { + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + template < typename T > + struct is_same + { + static const bool value = true; + }; + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + } + namespace test_noexcept + { + int f() { return 0; } + int g() noexcept { return 0; } + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + } + namespace test_constexpr + { + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + } + namespace test_rvalue_references + { + template < int N > + struct answer + { + static constexpr int value = N; + }; + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + } + namespace test_uniform_initialization + { + struct test + { + static const int zero {}; + static const int one {1}; + }; + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + } + namespace test_lambdas + { + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -printf %s "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test yes = "$hardcode_automatic_CXX"; then + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } - # We can hardcode non-existent directories. - if test no != "$hardcode_direct_CXX" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && - test no != "$hardcode_minus_L_CXX"; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -printf "%s\n" "$hardcode_action_CXX" >&6; } + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } -if test relink = "$hardcode_action_CXX" || - test yes = "$inherit_rpath_CXX"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi + } + namespace test_variadic_templates + { + template + struct sum; + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + } - fi # test -n "$compiler" + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test yes != "$_lt_caught_CXX_error" + struct foo {}; -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template + using member = typename T::member_type; + template + void func(...) {} + template + void func(member*) {} + void test(); + void test() { func(0); } + } +} // namespace cxx11 +#endif // __cplusplus >= 201103L +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. +#ifndef __cplusplus +#error "This is not a C++ compiler" +#elif __cplusplus < 201402L - ac_config_commands="$ac_config_commands libtool" +#error "This is not a C++14 compiler" +#else +namespace cxx14 +{ + namespace test_polymorphic_lambdas + { -# Only expand once: + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + namespace test_binary_literals + { -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + } -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + namespace test_generalized_constexpr + { -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_lambda_init_capture + { + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_digit_separators + { + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_return_type_deduction + { + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } - test -n "$ac_ct_CC" && break -done + } - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi +} // namespace cxx14 -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +#endif // __cplusplus >= 201402L -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx14=yes else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - + ax_cv_cxx_compile_cxx14=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx14" >&5 +$as_echo "$ax_cv_cxx_compile_cxx14" >&6; } + if test x$ax_cv_cxx_compile_cxx14 = xyes; then + ac_success=yes fi -else - CC="$ac_cv_prog_CC" -fi -fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++14 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -# Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion -version; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif +#ifndef __cplusplus - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu +#error "This is not a C++ compiler" -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu +#elif __cplusplus < 201103L -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+y} -ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +#error "This is not a C++11 compiler" -int -main (void) +#else + +namespace cxx11 { - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_static_assert + { -int -main (void) -{ + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : + } -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_final_override + { -int -main (void) -{ + struct Base + { + virtual void f() {} + }; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi + struct Derived : public Base + { + virtual void f() override {} + }; -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi + } -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 -fi -fi + namespace test_decltype + { -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_type_deduction + { + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + template < typename T > + struct is_same + { + static const bool value = true; + }; -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -printf "%s\n" "$ac_ct_CXX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + } - test -n "$ac_ct_CXX" && break -done + namespace test_noexcept + { - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi + int f() { return 0; } + int g() noexcept { return 0; } - fi -fi -# Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 -printf %s "checking whether the compiler supports GNU C++... " >&6; } -if test ${ac_cv_cxx_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + } -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif + namespace test_constexpr + { - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+y} -ac_save_CXXFLAGS=$CXXFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -printf %s "checking whether $CXX accepts -g... " >&6; } -if test ${ac_cv_prog_cxx_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); -int -main (void) -{ + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_g=yes -else $as_nop - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_rvalue_references + { -int -main (void) -{ + template < int N > + struct answer + { + static constexpr int value = N; + }; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } -else $as_nop - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } -int -main (void) -{ + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } -if test $ac_test_CXXFLAGS; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_prog_cxx_stdcxx=no -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 -printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_11=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx11_program -_ACEOF -for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx11" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi - -if test "x$ac_cv_prog_cxx_cxx11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx11" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 - ac_prog_cxx_stdcxx=cxx11 -fi -fi -if test x$ac_prog_cxx_stdcxx = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 -printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_98+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_98=no -ac_save_CXX=$CXX -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_cxx_conftest_cxx98_program -_ACEOF -for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA -do - CXX="$ac_save_CXX $ac_arg" - if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_prog_cxx_cxx98=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cxx_cxx98" != "xno" && break -done -rm -f conftest.$ac_ext -CXX=$ac_save_CXX -fi + namespace test_uniform_initialization + { -if test "x$ac_cv_prog_cxx_cxx98" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx98" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx98" -fi - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 - ac_prog_cxx_stdcxx=cxx98 -fi -fi + struct test + { + static const int zero {}; + static const int one {1}; + }; -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AWK+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -printf "%s\n" "$AWK" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_lambdas + { + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } - test -n "$AWK" && break -done + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -printf %s "checking for a sed that does not truncate output... " >&6; } -if test ${ac_cv_path_SED+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in sed gsed - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi + } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -printf "%s\n" "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed + namespace test_variadic_templates + { + template + struct sum; - # Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -printf %s "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test ${ac_cv_path_install+y} -then : - printf %s "(cached) " >&6 -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - # Account for fact that we put trailing slashes in our PATH walk. -case $as_dir in #(( - ./ | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; - done -IFS=$as_save_IFS + template <> + struct sum<> + { + static constexpr auto value = 0; + }; -rm -rf conftest.one conftest.two conftest.dir + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); -fi - if test ${ac_cv_path_install+y}; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -printf "%s\n" "$INSTALL" >&6; } + } -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + struct foo {}; -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + template + using member = typename T::member_type; + template + void func(...) {} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -printf %s "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -printf "%s\n" "no, using $LN_S" >&6; } -fi + template + void func(member*) {} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval test \${ac_cv_prog_make_${ac_make}_set+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - SET_MAKE= -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi + void test(); + void test() { func(0); } + } +} // namespace cxx11 +#endif // __cplusplus >= 201103L +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. +#ifndef __cplusplus +#error "This is not a C++ compiler" - if test -z "$CTAGS" -then : +#elif __cplusplus < 201402L - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 -printf %s "checking whether ctags executable path has been provided... " >&6; } +#error "This is not a C++14 compiler" -# Check whether --with-ctags was given. -if test ${with_ctags+y} -then : - withval=$with_ctags; - if test "$withval" != yes && test "$withval" != no -then : +#else - CTAGS="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } +namespace cxx14 +{ -else $as_nop + namespace test_polymorphic_lambdas + { - CTAGS="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CTAGS+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } - ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_binary_literals + { + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + } -fi + namespace test_generalized_constexpr + { -fi + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } -else $as_nop + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CTAGS+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + } - ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + namespace test_lambda_init_capture + { + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + } -fi + namespace test_digit_separators + { + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); -fi + } + namespace test_return_type_deduction + { + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } -if test x${CTAGS} = x -then : - as_fn_error $? "Required program ctags was not found" "$LINENO" 5 -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -printf %s "checking whether ${CTAGS} is exuberant... " >&6; } -if ! ${CTAGS} --version | grep -q Exuberant -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi + } -SO_EXT=$shrext_cmds +} // namespace cxx14 +#endif // __cplusplus >= 201402L -# -# System/Compiler Features -# -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -printf %s "checking for inline... " >&6; } -if test ${ac_cv_c_inline+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo (void) {return 0; } -$ac_kw foo_t foo (void) {return 0; } -#endif _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_c_inline=$ac_kw +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -printf "%s\n" "$ac_cv_c_inline" >&6; } - -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac - - ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no + if test x$ax_cxx_compile_cxx14_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX14=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 +$as_echo "$as_me: No compiler with C++14 support was found" >&6;} + else + HAVE_CXX14=1 + +$as_echo "#define HAVE_CXX14 1" >>confdefs.h + fi - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 -printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +if test x$HAVE_CXX14 != x1; then : + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17709,13 +17444,11 @@ namespace cxx11 struct Base { - virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { - virtual ~Derived() override {} virtual void f() override {} }; @@ -17963,200 +17696,31 @@ namespace cxx11 - -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201402L - -#error "This is not a C++14 compiler" - -#else - -namespace cxx14 -{ - - namespace test_polymorphic_lambdas - { - - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } - - } - - namespace test_binary_literals - { - - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); - - } - - namespace test_generalized_constexpr - { - - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); - - } - - namespace test_lambda_init_capture - { - - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } - - } - - namespace test_digit_separators - { - - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); - - } - - namespace test_return_type_deduction - { - - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } - - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; - - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; - - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } - - } - -} // namespace cxx14 - -#endif // __cplusplus >= 201402L - - - _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - eval $cachevar=yes -else $as_nop - eval $cachevar=no +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - if test x$ax_cxx_compile_cxx14_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX14=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} - else - HAVE_CXX14=1 - -printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes fi -if test x$HAVE_CXX14 != x1 -then : - ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - - - - if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else $as_nop + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18195,13 +17759,11 @@ namespace cxx11 struct Base { - virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { - virtual ~Derived() override {} virtual void f() override {} }; @@ -18450,18 +18012,17 @@ namespace cxx11 _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : eval $cachevar=yes -else $as_nop +else eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then @@ -18489,281 +18050,287 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test x$ac_success = xno; then HAVE_CXX11=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 -printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h +$as_echo "#define HAVE_CXX11 1" >>confdefs.h fi + fi -ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes -then : - printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h +for ac_func in memset +do : + ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMSET 1 +_ACEOF fi +done -ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes -then : - printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h +for ac_func in rint +do : + ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RINT 1 +_ACEOF fi +done -ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes -then : - printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h +for ac_func in socket +do : + ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKET 1 +_ACEOF fi +done - - for ac_func in recvmsg +for ac_func in recvmsg do : ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" -if test "x$ac_cv_func_recvmsg" = xyes -then : - printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h +if test "x$ac_cv_func_recvmsg" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RECVMSG 1 +_ACEOF HAVE_RECVMSG=1 -else $as_nop +else HAVE_RECVMSG=0 fi - done -ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes -then : - printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h - -fi -ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes -then : - printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h +for ac_func in sqrt +do : + ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SQRT 1 +_ACEOF fi +done -ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes -then : - printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h +for ac_func in strerror +do : + ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR 1 +_ACEOF fi +done + -ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes -then : - printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h +for ac_header in arpa/inet.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ARPA_INET_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes -then : - printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h +done + +for ac_header in netdb.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETDB_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h +done + +for ac_header in netinet/in.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETINET_IN_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h +done + +for ac_header in sys/file.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_FILE_H 1 +_ACEOF fi -ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h +done -fi +for ac_header in sys/ioctl.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_IOCTL_H 1 +_ACEOF -ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes -then : +fi -printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h +done +for ac_header in sys/socket.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_SOCKET_H 1 +_ACEOF fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -printf %s "checking for stdbool.h that conforms to C99... " >&6; } -if test ${ac_cv_header_stdbool_h+y} -then : - printf %s "(cached) " >&6 -else $as_nop +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include - - #ifndef __bool_true_false_are_defined - #error "__bool_true_false_are_defined is not defined" - #endif - char a[__bool_true_false_are_defined == 1 ? 1 : -1]; - /* Regardless of whether this is C++ or "_Bool" is a - valid type name, "true" and "false" should be usable - in #if expressions and integer constant expressions, - and "bool" should be a valid type name. */ - - #if !true - #error "'true' is not true" + #include + #ifndef bool + "error: bool is not defined" #endif - #if true != 1 - #error "'true' is not equal to 1" + #ifndef false + "error: false is not defined" #endif - char b[true == 1 ? 1 : -1]; - char c[true]; - #if false - #error "'false' is not false" + "error: false is not 0" #endif - #if false != 0 - #error "'false' is not equal to 0" + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" #endif - char d[false == 0 ? 1 : -1]; - - enum { e = false, f = true, g = false * true, h = true * 256 }; - - char i[(bool) 0.5 == true ? 1 : -1]; - char j[(bool) 0.0 == false ? 1 : -1]; - char k[sizeof (bool) > 0 ? 1 : -1]; - - struct sb { bool s: 1; bool t; } s; - char l[sizeof s.t > 0 ? 1 : -1]; + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - bool m[h]; - char n[sizeof m == h * sizeof m[0] ? 1 : -1]; - char o[-1 - (bool) 0 < 0 ? 1 : -1]; + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See - https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ - bool p = true; - bool *pp = &p; - - /* C 1999 specifies that bool, true, and false are to be - macros, but C++ 2011 and later overrule this. */ - #if __cplusplus < 201103 - #ifndef bool - #error "bool is not defined" - #endif - #ifndef false - #error "false is not defined" - #endif - #ifndef true - #error "true is not defined" - #endif - #endif - - /* If _Bool is available, repeat with it all the tests - above that used bool. */ - #ifdef HAVE__BOOL - struct sB { _Bool s: 1; _Bool t; } t; - - char q[(_Bool) 0.5 == true ? 1 : -1]; - char r[(_Bool) 0.0 == false ? 1 : -1]; - char u[sizeof (_Bool) > 0 ? 1 : -1]; - char v[sizeof t.t > 0 ? 1 : -1]; - - _Bool w[h]; - char x[sizeof m == h * sizeof m[0] ? 1 : -1]; - char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; - _Bool z = true; - _Bool *pz = &p; - #endif + _Bool q = true; + _Bool *pq = &q; int -main (void) +main () { - bool ps = &s; - *pp |= p; - *pp |= ! p; - - #ifdef HAVE__BOOL - _Bool pt = &t; - *pz |= z; - *pz |= ! z; - #endif - - /* Refer to every declared value, so they cannot be - discarded as unused. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k - + !l + !m + !n + !o + !p + !pp + !ps - #ifdef HAVE__BOOL - + !q + !r + !u + !v + !w + !x + !y + !z + !pt - #endif - ); + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes -else $as_nop +else ac_cv_header_stdbool_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -printf %s "checking for GNU libc compatible malloc... " >&6; } -if test ${ac_cv_func_malloc_0_nonnull+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : - case "$host_os" in # (( - # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ - | hpux* | solaris* | cygwin* | mingw* | msys* ) - ac_cv_func_malloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_malloc_0_nonnull=no ;; - esac -else $as_nop +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + +for ac_header in stdlib.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif int -main (void) +main () { -void *p = malloc (0); - int result = !p; - free (p); - return result; +return ! malloc (0); ; return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO" -then : +if ac_fn_cxx_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes -else $as_nop +else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18771,15 +18338,14 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : -printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h -else $as_nop - printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; @@ -18788,7 +18354,7 @@ else $as_nop esac -printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h +$as_echo "#define malloc rpl_malloc" >>confdefs.h fi @@ -18798,12 +18364,11 @@ HAVE_OPENMP=0 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 -printf %s "checking for OpenMP flag of C++ compiler... " >&6; } -if test ${ax_cv_cxx_openmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } +if ${ax_cv_cxx_openmp+:} false; then : + $as_echo_n "(cached) " >&6 +else saveCXXFLAGS=$CXXFLAGS ax_cv_cxx_openmp=unknown # Flags to try: -fopenmp (gcc), -mp (SGI & PGI), @@ -18844,18 +18409,17 @@ main() } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ax_cv_cxx_openmp=$ax_openmp_flag; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done CXXFLAGS=$saveCXXFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 -printf "%s\n" "$ax_cv_cxx_openmp" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +$as_echo "$ax_cv_cxx_openmp" >&6; } if test "x$ax_cv_cxx_openmp" = "xunknown"; then : else @@ -18863,28 +18427,27 @@ else OPENMP_CXXFLAGS=$ax_cv_cxx_openmp fi -printf "%s\n" "#define HAVE_OPENMP 1" >>confdefs.h +$as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi -if test x$OPENMP_CXXFLAGS != x -then : +if test x$OPENMP_CXXFLAGS != x; then : HAVE_OPENMP=1 fi -if test x$HAVE_OPENMP != x1 -then : +if test x$HAVE_OPENMP != x1; then : -else $as_nop +else CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes -then : +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : -printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_PTRDIFF_T 1 +_ACEOF fi @@ -18894,7 +18457,9 @@ case $ac_cv_c_int16_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int16_t $ac_cv_c_int16_t +_ACEOF ;; esac @@ -18903,7 +18468,9 @@ case $ac_cv_c_int32_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int32_t $ac_cv_c_int32_t +_ACEOF ;; esac @@ -18912,7 +18479,9 @@ case $ac_cv_c_int64_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int64_t $ac_cv_c_int64_t +_ACEOF ;; esac @@ -18921,64 +18490,42 @@ case $ac_cv_c_int8_t in #( no|yes) ;; #( *) -printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define int8_t $ac_cv_c_int8_t +_ACEOF ;; esac +ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : - ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default -" -if test "x$ac_cv_type_pid_t" = xyes -then : - -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if defined _WIN64 && !defined __CYGWIN__ - LLP64 - #endif - -int -main (void) -{ - - ; - return 0; -} +else +cat >>confdefs.h <<_ACEOF +#define pid_t int _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - fi - ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes -then : +if test "x$ac_cv_type_size_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define size_t unsigned int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF fi ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes -then : +if test "x$ac_cv_type_ssize_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define ssize_t int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define ssize_t int +_ACEOF fi @@ -18988,7 +18535,9 @@ case $ac_cv_c_uint16_t in #( *) -printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint16_t $ac_cv_c_uint16_t +_ACEOF ;; esac @@ -18997,10 +18546,12 @@ case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) -printf "%s\n" "#define _UINT32_T 1" >>confdefs.h +$as_echo "#define _UINT32_T 1" >>confdefs.h -printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint32_t $ac_cv_c_uint32_t +_ACEOF ;; esac @@ -19009,10 +18560,12 @@ case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) -printf "%s\n" "#define _UINT64_T 1" >>confdefs.h +$as_echo "#define _UINT64_T 1" >>confdefs.h -printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint64_t $ac_cv_c_uint64_t +_ACEOF ;; esac @@ -19021,20 +18574,21 @@ case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) -printf "%s\n" "#define _UINT8_T 1" >>confdefs.h +$as_echo "#define _UINT8_T 1" >>confdefs.h -printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define uint8_t $ac_cv_c_uint8_t +_ACEOF ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 -printf %s "checking for long double with more range or precision than double... " >&6; } -if test ${ac_cv_type_long_double_wider+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 +$as_echo_n "checking for long double with more range or precision than double... " >&6; } +if ${ac_cv_type_long_double_wider+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19051,7 +18605,7 @@ else $as_nop } int -main (void) +main () { static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) + (DBL_MANT_DIG < LDBL_MANT_DIG) @@ -19066,26 +18620,24 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_type_long_double_wider=yes -else $as_nop +else ac_cv_type_long_double_wider=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 -printf "%s\n" "$ac_cv_type_long_double_wider" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 +$as_echo "$ac_cv_type_long_double_wider" >&6; } if test $ac_cv_type_long_double_wider = yes; then -printf "%s\n" "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h +$as_echo "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h fi HAVE_FLOAT128=0 -if test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1 -then : +if test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1; then : HAVE_FLOAT128=0 fi @@ -19095,53 +18647,52 @@ fi # # Check whether --enable-numa was given. -if test ${enable_numa+y} -then : +if test "${enable_numa+set}" = set; then : enableval=$enable_numa; enable_numa=no -else $as_nop +else enable_numa=yes fi HAVE_NUMA=0 -if test x$enable_numa != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } -if test ${ac_cv_lib_numa_numa_node_of_cpu+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test x$enable_numa != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lnuma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -namespace conftest { - extern "C" int numa_node_of_cpu (); -} +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char numa_node_of_cpu (); int -main (void) +main () { -return conftest::numa_node_of_cpu (); +return numa_node_of_cpu (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_numa_numa_node_of_cpu=yes -else $as_nop +else ac_cv_lib_numa_numa_node_of_cpu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : HAVE_NUMA=1 LIBS="$LIBS -lnuma" @@ -19154,53 +18705,52 @@ fi # # Check whether --enable-hwloc was given. -if test ${enable_hwloc+y} -then : +if test "${enable_hwloc+set}" = set; then : enableval=$enable_hwloc; enable_hwloc=no -else $as_nop +else enable_hwloc=yes fi HAVE_HWLOC=0 -if test x$enable_hwloc != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } -if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test x$enable_hwloc != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } +if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lhwloc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -namespace conftest { - extern "C" int hwloc_topology_init (); -} +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char hwloc_topology_init (); int -main (void) +main () { -return conftest::hwloc_topology_init (); +return hwloc_topology_init (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_hwloc_hwloc_topology_init=yes -else $as_nop +else ac_cv_lib_hwloc_hwloc_topology_init=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : HAVE_HWLOC=1 LIBS="$LIBS -lhwloc" @@ -19213,53 +18763,52 @@ fi # # Check whether --enable-vma was given. -if test ${enable_vma+y} -then : +if test "${enable_vma+set}" = set; then : enableval=$enable_vma; enable_vma=yes -else $as_nop +else enable_vma=no fi HAVE_VMA=0 -if test x$enable_vma != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } -if test ${ac_cv_lib_vma_recvfrom_zcopy+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test x$enable_vma != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } +if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lvma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -namespace conftest { - extern "C" int recvfrom_zcopy (); -} +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char recvfrom_zcopy (); int -main (void) +main () { -return conftest::recvfrom_zcopy (); +return recvfrom_zcopy (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : +if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_vma_recvfrom_zcopy=yes -else $as_nop +else ac_cv_lib_vma_recvfrom_zcopy=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : HAVE_VMA=1 LIBS="$LIBS -lvma" @@ -19283,10 +18832,9 @@ fi # Check whether --with-cuda_home was given. -if test ${with_cuda_home+y} -then : +if test "${with_cuda_home+set}" = set; then : withval=$with_cuda_home; -else $as_nop +else with_cuda_home=/usr/local/cuda fi @@ -19294,10 +18842,9 @@ fi # Check whether --enable-cuda was given. -if test ${enable_cuda+y} -then : +if test "${enable_cuda+set}" = set; then : enableval=$enable_cuda; enable_cuda=no -else $as_nop +else enable_cuda=yes fi @@ -19310,12 +18857,11 @@ fi # Extract the first word of "nvcc", so it can be a program name with args. set dummy nvcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_NVCC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVCC+:} false; then : + $as_echo_n "(cached) " >&6 +else case $NVCC in [\\/]* | ?:[\\/]*) ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. @@ -19326,15 +18872,11 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19347,22 +18889,21 @@ esac fi NVCC=$ac_cv_path_NVCC if test -n "$NVCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -printf "%s\n" "$NVCC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +$as_echo "$NVCC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "nvprune", so it can be a program name with args. set dummy nvprune; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_NVPRUNE+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NVPRUNE+:} false; then : + $as_echo_n "(cached) " >&6 +else case $NVPRUNE in [\\/]* | ?:[\\/]*) ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. @@ -19373,15 +18914,11 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19394,22 +18931,21 @@ esac fi NVPRUNE=$ac_cv_path_NVPRUNE if test -n "$NVPRUNE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -printf "%s\n" "$NVPRUNE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +$as_echo "$NVPRUNE" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "cuobjdump", so it can be a program name with args. set dummy cuobjdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CUOBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUOBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $CUOBJDUMP in [\\/]* | ?:[\\/]*) ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. @@ -19420,15 +18956,11 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19441,19 +18973,19 @@ esac fi CUOBJDUMP=$ac_cv_path_CUOBJDUMP if test -n "$CUOBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -printf "%s\n" "$CUOBJDUMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +$as_echo "$CUOBJDUMP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi if test "$HAVE_CUDA" = "1"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 -printf %s "checking for a working CUDA installation... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +$as_echo_n "checking for a working CUDA installation... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -19467,21 +18999,20 @@ printf %s "checking for a working CUDA installation... " >&6; } #include #include int -main (void) +main () { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : -else $as_nop +else HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" @@ -19495,28 +19026,27 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext #include #include int -main (void) +main () { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +if ac_fn_cxx_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } HAVE_CUDA=0 fi @@ -19528,10 +19058,9 @@ printf "%s\n" "no" >&6; } # Check whether --with-nvcc_flags was given. -if test ${with_nvcc_flags+y} -then : +if test "${with_nvcc_flags+set}" = set; then : withval=$with_nvcc_flags; -else $as_nop +else with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi @@ -19548,17 +19077,16 @@ fi # Check whether --with-gpu_archs was given. -if test ${with_gpu_archs+y} -then : +if test "${with_gpu_archs+set}" = set; then : withval=$with_gpu_archs; -else $as_nop +else with_gpu_archs='auto' fi if test "$HAVE_CUDA" = "1"; then if test "$with_gpu_archs" = "auto"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 -printf %s "checking which CUDA architectures to target... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +$as_echo_n "checking which CUDA architectures to target... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -19567,13 +19095,12 @@ printf %s "checking which CUDA architectures to target... " >&6; } LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' - if test "$cross_compiling" = yes -then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19584,7 +19111,7 @@ else $as_nop #include #include int -main (void) +main () { std::set archs; @@ -19619,13 +19146,12 @@ main (void) return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO" -then : +if ac_fn_cxx_try_run "$LINENO"; then : GPU_ARCHS=`cat confarchs.out` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 -printf "%s\n" "$GPU_ARCHS" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +$as_echo "$GPU_ARCHS" >&6; } +else as_fn_error $? "failed to find any" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19641,32 +19167,32 @@ fi fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 -printf %s "checking for valid CUDA architectures... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 +$as_echo_n "checking for valid CUDA architectures... " >&6; } ar_requested=$( echo "$GPU_ARCHS" | wc -w ) ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) - if test "$ar_requested" = $ar_found; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + if test "$ar_requested" = "$ar_found"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else as_fn_error $? "only architectures $ar_valid are supported" "$LINENO" 5 fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 -printf %s "checking for Pascal-style CUDA managed memory... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 +$as_echo_n "checking for Pascal-style CUDA managed memory... " >&6; } cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) if ! echo $cm_invalid | ${GREP} -q PRE; then GPU_PASCAL_MANAGEDMEM=1 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else GPU_PASCAL_MANAGEDMEM=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi else GPU_PASCAL_MANAGEDMEM=0 @@ -19676,17 +19202,15 @@ printf "%s\n" "no" >&6; } # Check whether --with-shared_mem was given. -if test ${with_shared_mem+y} -then : +if test "${with_shared_mem+set}" = set; then : withval=$with_shared_mem; -else $as_nop +else with_shared_mem=16384 fi GPU_SHAREDMEM=$with_shared_mem -if test x$HAVE_CUDA = x0 -then : +if test x$HAVE_CUDA = x0; then : GPU_SHAREDMEM=0 fi @@ -19697,10 +19221,9 @@ fi # Check whether --with-alignment was given. -if test ${with_alignment+y} -then : +if test "${with_alignment+set}" = set; then : withval=$with_alignment; -else $as_nop +else with_alignment=4096 fi @@ -19716,23 +19239,21 @@ ALIGNMENT=$with_alignment # Check whether --with-logging_dir was given. -if test ${with_logging_dir+y} -then : +if test "${with_logging_dir+set}" = set; then : withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir -else $as_nop +else HAVE_TMPFS=/tmp fi if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 -printf %s "checking for /dev/shm... " >&6; } -if test ${ac_cv_file__dev_shm+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +$as_echo_n "checking for /dev/shm... " >&6; } +if ${ac_cv_file__dev_shm+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/shm"; then @@ -19741,10 +19262,9 @@ else ac_cv_file__dev_shm=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 -printf "%s\n" "$ac_cv_file__dev_shm" >&6; } -if test "x$ac_cv_file__dev_shm" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +$as_echo "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes; then : HAVE_TMPFS=/dev/shm/bifrost fi @@ -19752,12 +19272,11 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 -printf %s "checking for /Volumes/RAMDisk... " >&6; } -if test ${ac_cv_file__Volumes_RAMDisk+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +$as_echo_n "checking for /Volumes/RAMDisk... " >&6; } +if ${ac_cv_file__Volumes_RAMDisk+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/Volumes/RAMDisk"; then @@ -19766,10 +19285,9 @@ else ac_cv_file__Volumes_RAMDisk=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 -printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } -if test "x$ac_cv_file__Volumes_RAMDisk" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +$as_echo "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes; then : HAVE_TMPFS=/Volumes/RAMDisk/bifrost fi @@ -19777,12 +19295,11 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 -printf %s "checking for /tmp... " >&6; } -if test ${ac_cv_file__tmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +$as_echo_n "checking for /tmp... " >&6; } +if ${ac_cv_file__tmp+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/tmp"; then @@ -19791,16 +19308,15 @@ else ac_cv_file__tmp=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 -printf "%s\n" "$ac_cv_file__tmp" >&6; } -if test "x$ac_cv_file__tmp" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +$as_echo "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes; then : HAVE_TMPFS=/tmp fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 -printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +$as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} HAVE_TMPFS=/tmp/bifrost fi @@ -19811,17 +19327,15 @@ printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for lo # # Check whether --enable-debug was given. -if test ${enable_debug+y} -then : +if test "${enable_debug+set}" = set; then : enableval=$enable_debug; enable_debug=yes -else $as_nop +else enable_debug=no fi HAVE_DEBUG=0 -if test x$enable_debug != xno -then : +if test x$enable_debug != xno; then : HAVE_DEBUG=1 CXXFLAGS="$CXXFLAGS -g" @@ -19829,17 +19343,15 @@ then : fi # Check whether --enable-trace was given. -if test ${enable_trace+y} -then : +if test "${enable_trace+set}" = set; then : enableval=$enable_trace; enable_trace=yes -else $as_nop +else enable_trace=no fi HAVE_TRACE=0 -if test x$enable_trace != xno -then : +if test x$enable_trace != xno; then : HAVE_TRACE=1 fi @@ -19847,17 +19359,16 @@ fi # Check whether --enable-native_arch was given. -if test ${enable_native_arch+y} -then : +if test "${enable_native_arch+set}" = set; then : enableval=$enable_native_arch; enable_native_arch=no -else $as_nop +else enable_native_arch=yes fi if test "$enable_native_arch" = "yes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler accepts '-march=native'" >&5 -printf %s "checking if the compiler accepts '-march=native'... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler accepts '-march=native'" >&5 +$as_echo_n "checking if the compiler accepts '-march=native'... " >&6; } CXXFLAGS_temp="$CXXFLAGS -march=native" @@ -19868,7 +19379,7 @@ printf %s "checking if the compiler accepts '-march=native'... " >&6; } int -main (void) +main () { int i = 5; @@ -19876,34 +19387,31 @@ main (void) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +if ac_fn_cxx_try_compile "$LINENO"; then : CXXFLAGS="$CXXFLAGS -march=native" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else enable_native_arch=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi # Check whether --enable-cuda_debug was given. -if test ${enable_cuda_debug+y} -then : +if test "${enable_cuda_debug+set}" = set; then : enableval=$enable_cuda_debug; enable_cuda_debug=yes -else $as_nop +else enable_cuda_debug=no fi HAVE_CUDA_DEBUG=0 -if test x$enable_cuda_debug != xno -then : +if test x$enable_cuda_debug != xno; then : HAVE_CUDA_DEBUG=1 NVCCFLAGS="$NVCCFLAGS -G" @@ -19914,17 +19422,15 @@ fi # # Check whether --enable-python was given. -if test ${enable_python+y} -then : +if test "${enable_python+set}" = set; then : enableval=$enable_python; enable_python=no -else $as_nop +else enable_python=yes fi HAVE_PYTHON=0 -if test x$enable_python != xno -then : +if test x$enable_python != xno; then : @@ -19935,39 +19441,34 @@ then : - if test -z "$PYTHON" -then : + if test -z "$PYTHON"; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 -printf %s "checking whether python executable path has been provided... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +$as_echo_n "checking whether python executable path has been provided... " >&6; } # Check whether --with-python was given. -if test ${with_python+y} -then : +if test "${with_python+set}" = set; then : withval=$with_python; - if test "$withval" != yes && test "$withval" != no -then : + if test "$withval" != yes && test "$withval" != no; then : PYTHON="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } -else $as_nop +else PYTHON="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PYTHON+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -19977,15 +19478,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19998,11 +19495,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20011,18 +19508,17 @@ fi fi -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PYTHON+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -20032,15 +19528,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20053,11 +19545,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20072,19 +19564,17 @@ fi - if test x${PYTHON} != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 -printf %s "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 -printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + if test x${PYTHON} != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +$as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +$as_echo "$as_me: WARNING: python module will not be built" >&2;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } HAVE_PYTHON=1 fi @@ -20092,8 +19582,7 @@ fi fi # Check whether --with-pybuild_flags was given. -if test ${with_pybuild_flags+y} -then : +if test "${with_pybuild_flags+set}" = set; then : withval=$with_pybuild_flags; fi @@ -20102,8 +19591,7 @@ PYBUILDFLAGS=$with_pybuild_flags # Check whether --with-pyinstall_flags was given. -if test ${with_pyinstall_flags+y} -then : +if test "${with_pyinstall_flags+set}" = set; then : withval=$with_pyinstall_flags; fi @@ -20124,39 +19612,34 @@ PYINSTALLFLAGS=$with_pyinstall_flags - if test -z "$DOCKER" -then : + if test -z "$DOCKER"; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 -printf %s "checking whether docker executable path has been provided... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 +$as_echo_n "checking whether docker executable path has been provided... " >&6; } # Check whether --with-docker was given. -if test ${with_docker+y} -then : +if test "${with_docker+set}" = set; then : withval=$with_docker; - if test "$withval" != yes && test "$withval" != no -then : + if test "$withval" != yes && test "$withval" != no; then : DOCKER="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } -else $as_nop +else DOCKER="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DOCKER+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOCKER+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -20166,15 +19649,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20187,11 +19666,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20200,18 +19679,17 @@ fi fi -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DOCKER+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOCKER+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -20221,15 +19699,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20242,11 +19716,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +$as_echo "$DOCKER" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20261,8 +19735,7 @@ fi -if test x${DOCKER} != xno -then : +if test x${DOCKER} != xno; then : HAVE_DOCKER=1 fi @@ -20305,8 +19778,7 @@ DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" # Check whether --enable-doxygen-doc was given. -if test ${enable_doxygen_doc+y} -then : +if test "${enable_doxygen_doc+set}" = set; then : enableval=$enable_doxygen_doc; case "$enableval" in #( @@ -20324,7 +19796,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_doc=1 @@ -20337,12 +19809,11 @@ if test "$DX_FLAG_doc" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. set dummy ${ac_tool_prefix}doxygen; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DOXYGEN+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. @@ -20352,15 +19823,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20372,11 +19839,11 @@ esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN if test -n "$DX_DOXYGEN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 -printf "%s\n" "$DX_DOXYGEN" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +$as_echo "$DX_DOXYGEN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20385,12 +19852,11 @@ if test -z "$ac_cv_path_DX_DOXYGEN"; then ac_pt_DX_DOXYGEN=$DX_DOXYGEN # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. @@ -20400,15 +19866,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20420,11 +19882,11 @@ esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN if test -n "$ac_pt_DX_DOXYGEN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 -printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +$as_echo "$ac_pt_DX_DOXYGEN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_DOXYGEN" = x; then @@ -20432,8 +19894,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOXYGEN=$ac_pt_DX_DOXYGEN @@ -20443,8 +19905,8 @@ else fi if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -20453,12 +19915,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. set dummy ${ac_tool_prefix}perl; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_PERL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. @@ -20468,15 +19929,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20488,11 +19945,11 @@ esac fi DX_PERL=$ac_cv_path_DX_PERL if test -n "$DX_PERL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 -printf "%s\n" "$DX_PERL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +$as_echo "$DX_PERL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20501,12 +19958,11 @@ if test -z "$ac_cv_path_DX_PERL"; then ac_pt_DX_PERL=$DX_PERL # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_PERL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. @@ -20516,15 +19972,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20536,11 +19988,11 @@ esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL if test -n "$ac_pt_DX_PERL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 -printf "%s\n" "$ac_pt_DX_PERL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +$as_echo "$ac_pt_DX_PERL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_PERL" = x; then @@ -20548,8 +20000,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PERL=$ac_pt_DX_PERL @@ -20559,8 +20011,8 @@ else fi if test "$DX_FLAG_doc$DX_PERL" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -20583,8 +20035,7 @@ fi # Check whether --enable-doxygen-dot was given. -if test ${enable_doxygen_dot+y} -then : +if test "${enable_doxygen_dot+set}" = set; then : enableval=$enable_doxygen_dot; case "$enableval" in #( @@ -20593,7 +20044,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20605,7 +20056,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_dot=0 @@ -20621,12 +20072,11 @@ if test "$DX_FLAG_dot" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. set dummy ${ac_tool_prefix}dot; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DOT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. @@ -20636,15 +20086,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20656,11 +20102,11 @@ esac fi DX_DOT=$ac_cv_path_DX_DOT if test -n "$DX_DOT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 -printf "%s\n" "$DX_DOT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +$as_echo "$DX_DOT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20669,12 +20115,11 @@ if test -z "$ac_cv_path_DX_DOT"; then ac_pt_DX_DOT=$DX_DOT # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DOT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. @@ -20684,15 +20129,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20704,11 +20145,11 @@ esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT if test -n "$ac_pt_DX_DOT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 -printf "%s\n" "$ac_pt_DX_DOT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +$as_echo "$ac_pt_DX_DOT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_DOT" = x; then @@ -20716,8 +20157,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOT=$ac_pt_DX_DOT @@ -20727,8 +20168,8 @@ else fi if test "$DX_FLAG_dot$DX_DOT" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} DX_FLAG_dot=0 fi @@ -20756,8 +20197,7 @@ fi # Check whether --enable-doxygen-man was given. -if test ${enable_doxygen_man+y} -then : +if test "${enable_doxygen_man+set}" = set; then : enableval=$enable_doxygen_man; case "$enableval" in #( @@ -20766,7 +20206,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20778,7 +20218,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_man=1 @@ -20811,8 +20251,7 @@ fi # Check whether --enable-doxygen-rtf was given. -if test ${enable_doxygen_rtf+y} -then : +if test "${enable_doxygen_rtf+set}" = set; then : enableval=$enable_doxygen_rtf; case "$enableval" in #( @@ -20821,7 +20260,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20833,7 +20272,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_rtf=0 @@ -20866,8 +20305,7 @@ fi # Check whether --enable-doxygen-xml was given. -if test ${enable_doxygen_xml+y} -then : +if test "${enable_doxygen_xml+set}" = set; then : enableval=$enable_doxygen_xml; case "$enableval" in #( @@ -20876,7 +20314,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20888,7 +20326,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_xml=0 @@ -20921,8 +20359,7 @@ fi # Check whether --enable-doxygen-chm was given. -if test ${enable_doxygen_chm+y} -then : +if test "${enable_doxygen_chm+set}" = set; then : enableval=$enable_doxygen_chm; case "$enableval" in #( @@ -20931,7 +20368,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20943,7 +20380,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_chm=0 @@ -20959,12 +20396,11 @@ if test "$DX_FLAG_chm" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. set dummy ${ac_tool_prefix}hhc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_HHC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_HHC+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. @@ -20974,15 +20410,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20994,11 +20426,11 @@ esac fi DX_HHC=$ac_cv_path_DX_HHC if test -n "$DX_HHC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 -printf "%s\n" "$DX_HHC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +$as_echo "$DX_HHC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21007,12 +20439,11 @@ if test -z "$ac_cv_path_DX_HHC"; then ac_pt_DX_HHC=$DX_HHC # Extract the first word of "hhc", so it can be a program name with args. set dummy hhc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_HHC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_HHC+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. @@ -21022,15 +20453,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21042,11 +20469,11 @@ esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC if test -n "$ac_pt_DX_HHC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 -printf "%s\n" "$ac_pt_DX_HHC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +$as_echo "$ac_pt_DX_HHC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_HHC" = x; then @@ -21054,8 +20481,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_HHC=$ac_pt_DX_HHC @@ -21065,8 +20492,8 @@ else fi if test "$DX_FLAG_chm$DX_HHC" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 -printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} DX_FLAG_chm=0 fi @@ -21097,8 +20524,7 @@ fi # Check whether --enable-doxygen-chi was given. -if test ${enable_doxygen_chi+y} -then : +if test "${enable_doxygen_chi+set}" = set; then : enableval=$enable_doxygen_chi; case "$enableval" in #( @@ -21107,7 +20533,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21119,7 +20545,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_chi=0 @@ -21152,8 +20578,7 @@ fi # Check whether --enable-doxygen-html was given. -if test ${enable_doxygen_html+y} -then : +if test "${enable_doxygen_html+set}" = set; then : enableval=$enable_doxygen_html; case "$enableval" in #( @@ -21162,10 +20587,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21177,7 +20602,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_html=1 @@ -21213,8 +20638,7 @@ fi # Check whether --enable-doxygen-ps was given. -if test ${enable_doxygen_ps+y} -then : +if test "${enable_doxygen_ps+set}" = set; then : enableval=$enable_doxygen_ps; case "$enableval" in #( @@ -21223,7 +20647,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21235,7 +20659,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_ps=1 @@ -21251,12 +20675,11 @@ if test "$DX_FLAG_ps" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. set dummy ${ac_tool_prefix}latex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_LATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_LATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. @@ -21266,15 +20689,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21286,11 +20705,11 @@ esac fi DX_LATEX=$ac_cv_path_DX_LATEX if test -n "$DX_LATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 -printf "%s\n" "$DX_LATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +$as_echo "$DX_LATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21299,12 +20718,11 @@ if test -z "$ac_cv_path_DX_LATEX"; then ac_pt_DX_LATEX=$DX_LATEX # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_LATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_LATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. @@ -21314,15 +20732,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21334,11 +20748,11 @@ esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX if test -n "$ac_pt_DX_LATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 -printf "%s\n" "$ac_pt_DX_LATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +$as_echo "$ac_pt_DX_LATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_LATEX" = x; then @@ -21346,8 +20760,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_LATEX=$ac_pt_DX_LATEX @@ -21357,8 +20771,8 @@ else fi if test "$DX_FLAG_ps$DX_LATEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21367,12 +20781,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -21382,15 +20795,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21402,11 +20811,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -printf "%s\n" "$DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21415,12 +20824,11 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -21430,15 +20838,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21450,11 +20854,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -21462,8 +20866,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -21473,8 +20877,8 @@ else fi if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21483,12 +20887,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. set dummy ${ac_tool_prefix}dvips; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DVIPS+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_DVIPS+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. @@ -21498,15 +20901,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21518,11 +20917,11 @@ esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS if test -n "$DX_DVIPS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 -printf "%s\n" "$DX_DVIPS" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +$as_echo "$DX_DVIPS" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21531,12 +20930,11 @@ if test -z "$ac_cv_path_DX_DVIPS"; then ac_pt_DX_DVIPS=$DX_DVIPS # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DVIPS+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_DVIPS+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. @@ -21546,15 +20944,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21566,11 +20960,11 @@ esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS if test -n "$ac_pt_DX_DVIPS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 -printf "%s\n" "$ac_pt_DX_DVIPS" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +$as_echo "$ac_pt_DX_DVIPS" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_DVIPS" = x; then @@ -21578,8 +20972,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DVIPS=$ac_pt_DX_DVIPS @@ -21589,8 +20983,8 @@ else fi if test "$DX_FLAG_ps$DX_DVIPS" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21599,12 +20993,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -21614,15 +21007,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21634,11 +21023,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -printf "%s\n" "$DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21647,12 +21036,11 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -21662,15 +21050,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21682,11 +21066,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -printf "%s\n" "$ac_pt_DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -21694,8 +21078,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -21705,8 +21089,8 @@ else fi if test "$DX_FLAG_ps$DX_EGREP" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21727,8 +21111,7 @@ fi # Check whether --enable-doxygen-pdf was given. -if test ${enable_doxygen_pdf+y} -then : +if test "${enable_doxygen_pdf+set}" = set; then : enableval=$enable_doxygen_pdf; case "$enableval" in #( @@ -21737,7 +21120,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21749,7 +21132,7 @@ n|N|no|No|NO) ;; esac -else $as_nop +else DX_FLAG_pdf=1 @@ -21765,12 +21148,11 @@ if test "$DX_FLAG_pdf" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_PDFLATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_PDFLATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. @@ -21780,15 +21162,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21800,11 +21178,11 @@ esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX if test -n "$DX_PDFLATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 -printf "%s\n" "$DX_PDFLATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +$as_echo "$DX_PDFLATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21813,12 +21191,11 @@ if test -z "$ac_cv_path_DX_PDFLATEX"; then ac_pt_DX_PDFLATEX=$DX_PDFLATEX # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_PDFLATEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. @@ -21828,15 +21205,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21848,11 +21221,11 @@ esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX if test -n "$ac_pt_DX_PDFLATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 -printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +$as_echo "$ac_pt_DX_PDFLATEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_PDFLATEX" = x; then @@ -21860,8 +21233,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PDFLATEX=$ac_pt_DX_PDFLATEX @@ -21871,8 +21244,8 @@ else fi if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21881,12 +21254,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -21896,15 +21268,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21916,11 +21284,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -printf "%s\n" "$DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -21929,12 +21297,11 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -21944,15 +21311,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21964,11 +21327,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -21976,8 +21339,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -21987,8 +21350,8 @@ else fi if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21997,12 +21360,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -22012,15 +21374,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -22032,11 +21390,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -printf "%s\n" "$DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -22045,12 +21403,11 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -22060,15 +21417,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -22080,11 +21433,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -printf "%s\n" "$ac_pt_DX_EGREP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -22092,8 +21445,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -22103,8 +21456,8 @@ else fi if test "$DX_FLAG_pdf$DX_EGREP" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -22150,85 +21503,66 @@ PAPER_SIZE=$DOXYGEN_PAPER_SIZE esac # Rules: -if test $DX_FLAG_html -eq 1 -then : +if test $DX_FLAG_html -eq 1; then : DX_SNIPPET_html="## ------------------------------- ## -## Rules specific for HTML output. ## -## ------------------------------- ## DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ \$(DX_DOCDIR)/html " -else $as_nop +else DX_SNIPPET_html="" fi -if test $DX_FLAG_chi -eq 1 -then : +if test $DX_FLAG_chi -eq 1; then : DX_SNIPPET_chi=" DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ \$(DX_DOCDIR)/\$(PACKAGE).chi" -else $as_nop +else DX_SNIPPET_chi="" fi -if test $DX_FLAG_chm -eq 1 -then : +if test $DX_FLAG_chm -eq 1; then : DX_SNIPPET_chm="## ------------------------------ ## -## Rules specific for CHM output. ## -## ------------------------------ ## DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ \$(DX_DOCDIR)/chm\ ${DX_SNIPPET_chi} " -else $as_nop +else DX_SNIPPET_chm="" fi -if test $DX_FLAG_man -eq 1 -then : +if test $DX_FLAG_man -eq 1; then : DX_SNIPPET_man="## ------------------------------ ## -## Rules specific for MAN output. ## -## ------------------------------ ## DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ \$(DX_DOCDIR)/man " -else $as_nop +else DX_SNIPPET_man="" fi -if test $DX_FLAG_rtf -eq 1 -then : +if test $DX_FLAG_rtf -eq 1; then : DX_SNIPPET_rtf="## ------------------------------ ## -## Rules specific for RTF output. ## -## ------------------------------ ## DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ \$(DX_DOCDIR)/rtf " -else $as_nop +else DX_SNIPPET_rtf="" fi -if test $DX_FLAG_xml -eq 1 -then : +if test $DX_FLAG_xml -eq 1; then : DX_SNIPPET_xml="## ------------------------------ ## -## Rules specific for XML output. ## -## ------------------------------ ## DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ \$(DX_DOCDIR)/xml " -else $as_nop +else DX_SNIPPET_xml="" fi -if test $DX_FLAG_ps -eq 1 -then : +if test $DX_FLAG_ps -eq 1; then : DX_SNIPPET_ps="## ----------------------------- ## -## Rules specific for PS output. ## -## ----------------------------- ## DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ \$(DX_DOCDIR)/\$(PACKAGE).ps @@ -22253,14 +21587,11 @@ doxygen-ps: \$(DX_CLEAN_PS) \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi " -else $as_nop +else DX_SNIPPET_ps="" fi -if test $DX_FLAG_pdf -eq 1 -then : +if test $DX_FLAG_pdf -eq 1; then : DX_SNIPPET_pdf="## ------------------------------ ## -## Rules specific for PDF output. ## -## ------------------------------ ## DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ \$(DX_DOCDIR)/\$(PACKAGE).pdf @@ -22285,14 +21616,11 @@ doxygen-pdf: \$(DX_CLEAN_PDF) mv refman.pdf ../\$(PACKAGE).pdf " -else $as_nop +else DX_SNIPPET_pdf="" fi -if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 -then : +if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1; then : DX_SNIPPET_latex="## ------------------------------------------------- ## -## Rules specific for LaTeX (shared for PS and PDF). ## -## ------------------------------------------------- ## DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) _DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) @@ -22302,15 +21630,12 @@ DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ \$(DX_DOCDIR)/latex " -else $as_nop +else DX_SNIPPET_latex="" fi -if test $DX_FLAG_doc -eq 1 -then : +if test $DX_FLAG_doc -eq 1; then : DX_SNIPPET_doc="## --------------------------------- ## -## Format-independent Doxygen rules. ## -## --------------------------------- ## ${DX_SNIPPET_html}\ ${DX_SNIPPET_chm}\ @@ -22350,7 +21675,7 @@ DX_CLEANFILES = \\ \$(DX_CLEAN_PS) \\ \$(DX_CLEAN_PDF) \\ \$(DX_CLEAN_LATEX)" -else $as_nop +else DX_SNIPPET_doc="" fi DX_RULES="${DX_SNIPPET_doc}" @@ -22418,8 +21743,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -22449,15 +21774,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -printf "%s\n" "$as_me: updating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -22471,8 +21796,8 @@ printf "%s\n" "$as_me: updating cache $cache_file" >&6;} fi fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -22525,7 +21850,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -22541,8 +21866,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -22565,16 +21890,14 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -22584,46 +21907,46 @@ esac fi - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi # The user is always right. -if ${PATH_SEPARATOR+false} :; then +if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -22632,6 +21955,13 @@ if ${PATH_SEPARATOR+false} :; then fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -22640,12 +21970,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -22657,10 +21983,30 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -22673,14 +22019,13 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -22707,20 +22052,18 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset - # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' -else $as_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -22732,13 +22075,12 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -22769,7 +22111,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -22791,10 +22133,6 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -22808,12 +22146,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -22855,7 +22187,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -22864,7 +22196,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22927,7 +22259,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -22981,16 +22313,14 @@ Report bugs to the package provider. bifrost home page: ." _ACEOF -ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` -ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config='$ac_cs_config_escaped' +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ bifrost config.status 0.9.0 -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -23029,21 +22359,21 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - printf "%s\n" "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - printf "%s\n" "$ac_cs_config"; exit ;; + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) - printf "%s\n" "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -23071,7 +22401,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -23085,7 +22415,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - printf "%s\n" "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF @@ -23501,8 +22831,8 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files - test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -23730,7 +23060,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -23738,17 +23068,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -printf "%s\n" "$as_me: creating $ac_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`printf "%s\n" "$configure_input" | + ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -23765,7 +23095,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$ac_file" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23789,9 +23119,9 @@ printf "%s\n" X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -23848,8 +23178,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -23892,9 +23222,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -23906,8 +23236,8 @@ which seems to be undefined. Please make sure it is defined" >&2;} ;; - :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -printf "%s\n" "$as_me: executing $ac_file commands" >&6;} + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -24455,7 +23785,6 @@ _LT_EOF esac - ltmain=$ac_aux_dir/ltmain.sh @@ -24658,8 +23987,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi @@ -24669,87 +23998,76 @@ fi echo "" -if test x$HAVE_CUDA = x1 -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - $GPU_ARCHS" >&5 -printf "%s\n" "$as_me: cuda: yes - $GPU_ARCHS" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 -printf "%s\n" "$as_me: cuda: no" >&6;} +if test x$HAVE_CUDA = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: cuda: yes - $GPU_ARCHS" >&5 +$as_echo "$as_me: cuda: yes - $GPU_ARCHS" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 +$as_echo "$as_me: cuda: no" >&6;} fi -if test x$HAVE_NUMA = x1 -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: numa: yes" >&5 -printf "%s\n" "$as_me: numa: yes" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: numa: no" >&5 -printf "%s\n" "$as_me: numa: no" >&6;} +if test x$HAVE_NUMA = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: numa: yes" >&5 +$as_echo "$as_me: numa: yes" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: numa: no" >&5 +$as_echo "$as_me: numa: no" >&6;} fi -if test x$HAVE_HWLOC = x1 -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc: yes" >&5 -printf "%s\n" "$as_me: hwloc: yes" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc: no" >&5 -printf "%s\n" "$as_me: hwloc: no" >&6;} +if test x$HAVE_HWLOC = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc: yes" >&5 +$as_echo "$as_me: hwloc: yes" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc: no" >&5 +$as_echo "$as_me: hwloc: no" >&6;} fi -if test x$HAVE_VMA = x1 -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libvma: yes" >&5 -printf "%s\n" "$as_me: libvma: yes" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libvma: no" >&5 -printf "%s\n" "$as_me: libvma: no" >&6;} +if test x$HAVE_VMA = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: libvma: yes" >&5 +$as_echo "$as_me: libvma: yes" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: libvma: no" >&5 +$as_echo "$as_me: libvma: no" >&6;} fi -if test x$HAVE_PYTHON = x1 -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: python bindings: yes" >&5 -printf "%s\n" "$as_me: python bindings: yes" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: python bindings: no" >&5 -printf "%s\n" "$as_me: python bindings: no" >&6;} +if test x$HAVE_PYTHON = x1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: python bindings: yes" >&5 +$as_echo "$as_me: python bindings: yes" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: python bindings: no" >&5 +$as_echo "$as_me: python bindings: no" >&6;} fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: memory alignment: $ALIGNMENT" >&5 -printf "%s\n" "$as_me: memory alignment: $ALIGNMENT" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: memory alignment: $ALIGNMENT" >&5 +$as_echo "$as_me: memory alignment: $ALIGNMENT" >&6;} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: logging directory: $HAVE_TMPFS" >&5 -printf "%s\n" "$as_me: logging directory: $HAVE_TMPFS" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: logging directory: $HAVE_TMPFS" >&5 +$as_echo "$as_me: logging directory: $HAVE_TMPFS" >&6;} -if test x$enable_debug != xno -then : +if test x$enable_debug != xno; then : OPTIONS="$OPTIONS debug" fi -if test x$enable_trace != xno -then : +if test x$enable_trace != xno; then : OPTIONS="$OPTIONS trace" fi -if test x$enable_cuda_debug != xno -then : +if test x$enable_cuda_debug != xno; then : OPTIONS="$OPTIONS cuda_debug" fi -if test x$enable_native_arch != xno -then : +if test x$enable_native_arch != xno; then : OPTIONS="$OPTIONS native" fi -if test x$HAVE_FLOAT128 != x0 -then : +if test x$HAVE_FLOAT128 != x0; then : OPTIONS="$OPTIONS float128" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: options:$OPTIONS" >&5 -printf "%s\n" "$as_me: options:$OPTIONS" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: options:$OPTIONS" >&5 +$as_echo "$as_me: options:$OPTIONS" >&6;} echo "" echo "Bifrost is now ready to be compiled. Please run 'make'" echo "" - From 1b3d09fbd01f40a35785fa537921d8187c024ce0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Dec 2021 20:55:45 -0700 Subject: [PATCH 0368/1155] Also try --list-gpu-arch. --- config/cuda.m4 | 3 +++ configure | 3 +++ 2 files changed, 6 insertions(+) diff --git a/config/cuda.m4 b/config/cuda.m4 index 1fd0ead64..dc7a602d6 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -143,6 +143,9 @@ AC_DEFUN([AX_CHECK_CUDA], AC_MSG_CHECKING([for valid CUDA architectures]) ar_requested=$( echo "$GPU_ARCHS" | wc -w ) ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) + if test x$ar_supported = x; then + ar_supported=$( ${NVCC} --list-gpu-arch | ${GREP} -Po "compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) + fi ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) if test "$ar_requested" = "$ar_found"; then diff --git a/configure b/configure index 278bb96e9..a50dfaedd 100755 --- a/configure +++ b/configure @@ -19171,6 +19171,9 @@ fi $as_echo_n "checking for valid CUDA architectures... " >&6; } ar_requested=$( echo "$GPU_ARCHS" | wc -w ) ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) + if test x$ar_supported = x; then + ar_supported=$( ${NVCC} --list-gpu-arch | ${GREP} -Po "compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) + fi ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) if test "$ar_requested" = "$ar_found"; then From c2b1025aec0c3aec301f6e2b13d1b9f80ed7f5ec Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Dec 2021 20:59:39 -0700 Subject: [PATCH 0369/1155] What about this? --- config/cuda.m4 | 2 +- configure | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index dc7a602d6..dfa7471ac 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -143,7 +143,7 @@ AC_DEFUN([AX_CHECK_CUDA], AC_MSG_CHECKING([for valid CUDA architectures]) ar_requested=$( echo "$GPU_ARCHS" | wc -w ) ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) - if test x$ar_supported = x; then + if test "$ar_supported" = ""; then ar_supported=$( ${NVCC} --list-gpu-arch | ${GREP} -Po "compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) fi ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) diff --git a/configure b/configure index a50dfaedd..ab5fca742 100755 --- a/configure +++ b/configure @@ -19171,7 +19171,7 @@ fi $as_echo_n "checking for valid CUDA architectures... " >&6; } ar_requested=$( echo "$GPU_ARCHS" | wc -w ) ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) - if test x$ar_supported = x; then + if test "$ar_supported" = ""; then ar_supported=$( ${NVCC} --list-gpu-arch | ${GREP} -Po "compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) fi ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) From e45ac5db05c754495801a5f5dcfb9e7dd26be511 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Dec 2021 21:14:51 -0700 Subject: [PATCH 0370/1155] It was a missing tick mark. --- config/cuda.m4 | 5 +---- configure | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index dfa7471ac..5a6780ba7 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -142,10 +142,7 @@ AC_DEFUN([AX_CHECK_CUDA], AC_MSG_CHECKING([for valid CUDA architectures]) ar_requested=$( echo "$GPU_ARCHS" | wc -w ) - ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) - if test "$ar_supported" = ""; then - ar_supported=$( ${NVCC} --list-gpu-arch | ${GREP} -Po "compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) - fi + ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) if test "$ar_requested" = "$ar_found"; then diff --git a/configure b/configure index ab5fca742..a0a3e90ca 100755 --- a/configure +++ b/configure @@ -19170,10 +19170,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 $as_echo_n "checking for valid CUDA architectures... " >&6; } ar_requested=$( echo "$GPU_ARCHS" | wc -w ) - ar_supported=$( ${NVCC} -h | ${GREP} -Po "compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) - if test "$ar_supported" = ""; then - ar_supported=$( ${NVCC} --list-gpu-arch | ${GREP} -Po "compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) - fi + ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) if test "$ar_requested" = "$ar_found"; then From d846ec99ba8a52279942682ed29e0be20076445c Mon Sep 17 00:00:00 2001 From: Miles Cranmer Date: Wed, 15 Dec 2021 05:36:08 -0500 Subject: [PATCH 0371/1155] Specify arch for some of the colab GPUs --- BifrostDemo.ipynb | 152 ++++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 78 deletions(-) diff --git a/BifrostDemo.ipynb b/BifrostDemo.ipynb index 4f0c90ba1..7aecd0218 100644 --- a/BifrostDemo.ipynb +++ b/BifrostDemo.ipynb @@ -1,24 +1,10 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "name": "BifrostDemo.ipynb", - "provenance": [], - "collapsed_sections": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - }, - "accelerator": "GPU" - }, "cells": [ { "cell_type": "markdown", + "metadata": { + "id": "tayN_DCBZgmn" + }, "source": [ "\n", "## Instructions\n", @@ -30,85 +16,80 @@ "_Notes_:\n", "* If your Colab Runtime gets reset (e.g., due to inactivity), repeat steps 3, 4.\n", "* After installation, if you want to activate/deactivate the GPU, you will need to reset the Runtime: _Runtime_ > _Factory reset runtime_ and repeat steps 2-4." - ], - "metadata": { - "id": "tayN_DCBZgmn" - } + ] }, { "cell_type": "code", + "execution_count": 18, "metadata": { + "cellView": "form", "colab": { "base_uri": "https://localhost:8080/" }, - "cellView": "form", "id": "i_Ec54bF6mVj", "outputId": "79bec2be-3986-4f80-a450-6e5edcf9a8c4" }, - "source": [ - "# @title Install C++ deps\n", - "%%shell\n", - "\n", - "sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential" - ], - "execution_count": 18, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": [ - "" - ] + "text/plain": [] }, + "execution_count": 18, "metadata": {}, - "execution_count": 18 + "output_type": "execute_result" } + ], + "source": [ + "# @title Install C++ deps\n", + "%%shell\n", + "\n", + "sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential" ] }, { "cell_type": "code", + "execution_count": 2, "metadata": { + "cellView": "form", "colab": { "base_uri": "https://localhost:8080/" }, - "cellView": "form", "id": "45aDEOKc6JGW", "outputId": "cd058f85-f376-4915-e9f5-825a9b51ad45" }, - "source": [ - "# @title Install python deps\n", - "%%shell\n", - "\n", - "pip install -q contextlib2 pint git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f" - ], - "execution_count": 2, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "\u001b[?25l\r\u001b[K |█▋ | 10 kB 35.4 MB/s eta 0:00:01\r\u001b[K |███▏ | 20 kB 32.4 MB/s eta 0:00:01\r\u001b[K |████▊ | 30 kB 19.6 MB/s eta 0:00:01\r\u001b[K |██████▎ | 40 kB 16.2 MB/s eta 0:00:01\r\u001b[K |███████▉ | 51 kB 8.9 MB/s eta 0:00:01\r\u001b[K |█████████▍ | 61 kB 9.2 MB/s eta 0:00:01\r\u001b[K |███████████ | 71 kB 8.8 MB/s eta 0:00:01\r\u001b[K |████████████▌ | 81 kB 9.6 MB/s eta 0:00:01\r\u001b[K |██████████████ | 92 kB 10.1 MB/s eta 0:00:01\r\u001b[K |███████████████▋ | 102 kB 8.4 MB/s eta 0:00:01\r\u001b[K |█████████████████▏ | 112 kB 8.4 MB/s eta 0:00:01\r\u001b[K |██████████████████▊ | 122 kB 8.4 MB/s eta 0:00:01\r\u001b[K |████████████████████▎ | 133 kB 8.4 MB/s eta 0:00:01\r\u001b[K |█████████████████████▉ | 143 kB 8.4 MB/s eta 0:00:01\r\u001b[K |███████████████████████▍ | 153 kB 8.4 MB/s eta 0:00:01\r\u001b[K |█████████████████████████ | 163 kB 8.4 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▋ | 174 kB 8.4 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▏ | 184 kB 8.4 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▊ | 194 kB 8.4 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▎| 204 kB 8.4 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 209 kB 8.4 MB/s \n", "\u001b[?25h Building wheel for ctypesgen (setup.py) ... \u001b[?25l\u001b[?25hdone\n" ] }, { - "output_type": "execute_result", "data": { - "text/plain": [ - "" - ] + "text/plain": [] }, + "execution_count": 2, "metadata": {}, - "execution_count": 2 + "output_type": "execute_result" } + ], + "source": [ + "# @title Install python deps\n", + "%%shell\n", + "\n", + "pip install -q contextlib2 pint simplejson git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "WQL4Psci6S92", - "cellView": "form" + "cellView": "form", + "id": "WQL4Psci6S92" }, + "outputs": [], "source": [ "# @title Build and Install Bifrost\n", "%%shell\n", @@ -124,15 +105,13 @@ "# Use autoconf version:\n", "git checkout autoconf\n", "git checkout 423d2d71149adedf893c0b55c9cac946bcde08fe\n", - "./configure\n", + "./configure --with-gpu-archs=37\n", "\n", "# Build and install:\n", "make -j all\n", "sudo make install\n", "export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -145,9 +124,11 @@ }, { "cell_type": "code", + "execution_count": 11, "metadata": { "id": "YZOGJ-HhBAxg" }, + "outputs": [], "source": [ "import os\n", "\n", @@ -157,23 +138,26 @@ "\n", "import bifrost as bf\n", "import numpy as np" - ], - "execution_count": 11, - "outputs": [] + ] }, { "cell_type": "markdown", + "metadata": { + "id": "i2oRp6B1drwd" + }, "source": [ "Let's first create a simple CUDA kernel within Bifrost.\n", "\n", "We will generate 1000 integers, feed them into Bifrost as a CUDA array, perform a kernel operation `x * 3`, then copy them back." - ], - "metadata": { - "id": "i2oRp6B1drwd" - } + ] }, { "cell_type": "code", + "execution_count": 20, + "metadata": { + "id": "yxm87l5acwIt" + }, + "outputs": [], "source": [ "x = np.random.randint(256, size=1000)\n", "\n", @@ -189,24 +173,24 @@ "if isinstance(x_orig, bf.ndarray):\n", " x_orig = x\n", "np.testing.assert_equal(y, x_orig * 3)" - ], - "metadata": { - "id": "yxm87l5acwIt" - }, - "execution_count": 20, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "Now, let's generate a full pipeline:" - ], "metadata": { "id": "_jHnukaHdzUD" - } + }, + "source": [ + "Now, let's generate a full pipeline:" + ] }, { "cell_type": "code", + "execution_count": 21, + "metadata": { + "id": "E36NHJDzdyi9" + }, + "outputs": [], "source": [ "from bifrost.block import Pipeline, NumpyBlock, NumpySourceBlock\n", "\n", @@ -244,12 +228,24 @@ "\n", "# The function `compare_arrays` should be hit 8 times:\n", "assert occurences == 8" - ], - "metadata": { - "id": "E36NHJDzdyi9" - }, - "execution_count": 21, - "outputs": [] + ] } - ] + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [], + "name": "BifrostDemo.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 } From c3450e4ebd2746cbc9e701d0f2bfbb06adfb4f0a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Dec 2021 09:27:32 -0700 Subject: [PATCH 0372/1155] Filter auto-determined CUDA archs. --- config/cuda.m4 | 3 + configure | 28734 ++++++++++++++++++++++++----------------------- 2 files changed, 14713 insertions(+), 14024 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 5a6780ba7..0c771ccae 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -130,6 +130,9 @@ AC_DEFUN([AX_CHECK_CUDA], } fh.close();]])], [AC_SUBST([GPU_ARCHS], [`cat confarchs.out`]) + ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) + AC_SUBST([GPU_ARCHS], [$ar_valid]) AC_MSG_RESULT([$GPU_ARCHS])], [AC_MSG_ERROR(failed to find any)]) diff --git a/configure b/configure index a0a3e90ca..e6d737611 100755 --- a/configure +++ b/configure @@ -1,9 +1,10 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for bifrost 0.9.0. +# Generated by GNU Autoconf 2.71 for bifrost 0.9.0. # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -14,14 +15,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -31,46 +34,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -94,8 +90,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -107,30 +107,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -152,20 +132,22 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -185,12 +167,15 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -205,30 +190,38 @@ test -x / || exit 1" test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -236,14 +229,21 @@ fi esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -261,18 +261,19 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -299,6 +300,7 @@ as_fn_unset () } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -316,6 +318,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -330,7 +340,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -339,7 +349,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -378,12 +388,13 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -395,18 +406,27 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -418,9 +438,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -447,7 +467,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -491,7 +511,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -505,6 +525,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -518,6 +542,13 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -595,40 +626,36 @@ PACKAGE_URL='https://github.com/ledatelescope/bifrost/' ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= ac_subst_vars='OPTIONS LTLIBOBJS PACKAGE_VERSION_MICRO @@ -710,7 +737,6 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CXXCPP -CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -846,7 +872,6 @@ CXX CXXFLAGS CCC LT_SYS_LIBRARY_PATH -CPP CXXCPP CTAGS PYTHON @@ -920,8 +945,6 @@ do *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -962,9 +985,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -988,9 +1011,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1201,9 +1224,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1217,9 +1240,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1263,9 +1286,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1281,7 +1304,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1345,7 +1368,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1539,7 +1562,6 @@ Some influential environment variables: CXXFLAGS C++ compiler flags LT_SYS_LIBRARY_PATH User-defined run-time library search path. - CPP C preprocessor CXXCPP C++ preprocessor CTAGS Absolute path to ctags executable PYTHON Absolute path to python executable @@ -1567,9 +1589,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1597,7 +1619,8 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1605,7 +1628,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1615,9 +1638,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF bifrost configure 0.9.0 -generated by GNU Autoconf 2.69 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1634,14 +1657,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1649,14 +1672,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1672,14 +1696,14 @@ fi ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1687,14 +1711,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1710,14 +1735,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1725,17 +1750,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1757,120 +1783,44 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1878,16 +1828,9 @@ else #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1905,24 +1848,25 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func @@ -1939,7 +1883,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1947,14 +1891,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1970,14 +1915,14 @@ fi ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1985,17 +1930,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2016,11 +1962,12 @@ fi ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -2028,16 +1975,9 @@ else #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -2055,114 +1995,61 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no +if ac_fn_cxx_try_compile "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_cxx_check_header_mongrel +} # ac_fn_cxx_check_header_compile # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- @@ -2171,17 +2058,18 @@ fi ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof ($2)) return 0; @@ -2189,12 +2077,13 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof (($2))) return 0; @@ -2202,26 +2091,27 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_try_run LINENO # ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -2231,25 +2121,26 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -2267,11 +2158,12 @@ fi ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 -$as_echo_n "checking for int$2_t... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +printf %s "checking for int$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2282,7 +2174,7 @@ else $ac_includes_default enum { N = $2 / 2 - 1 }; int -main () +main (void) { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; @@ -2292,13 +2184,14 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int -main () +main (void) { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; @@ -2309,9 +2202,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( @@ -2319,19 +2213,20 @@ else eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no"; then : +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : -else +else $as_nop break fi done fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t @@ -2343,11 +2238,12 @@ $as_echo "$ac_res" >&6; } ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 -$as_echo_n "checking for uint$2_t... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +printf %s "checking for uint$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. @@ -2357,7 +2253,7 @@ else /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; @@ -2367,7 +2263,8 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( @@ -2375,28 +2272,49 @@ if ac_fn_cxx_try_compile "$LINENO"; then : eval "$3=\$ac_type" ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if eval test \"x\$"$3"\" = x"no"; then : +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : -else +else $as_nop break fi done fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2429,8 +2347,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2465,7 +2387,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2500,11 +2422,13 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2515,8 +2439,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2540,7 +2464,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2548,14 +2472,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2563,15 +2487,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2579,8 +2503,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2594,63 +2518,48 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2660,1157 +2569,904 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; -ac_aux_dir= -for ac_dir in config "$srcdir"/config; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 -fi +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} -: ${CXXFLAGS="-O3 -Wall -pedantic"} +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; -# -# Programs -# +struct incomplete_array +{ + int datasize; + double data[]; +}; -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac +struct named_init { + int number; + const wchar_t *name; + double average; +}; +typedef const char *ccp; +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} -macro_version='2.4.6' -macro_revision='2.4.6' +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + const char *str = ""; + int number = 0; + float fnumber = 0; + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + return *str && number && fnumber; +} +' +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' -ltmain=$ac_aux_dir/ltmain.sh +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" +# Test code for whether the C++ compiler supports C++98 (global declarations) +ac_cxx_conftest_cxx98_globals=' +// Does the compiler advertise C++98 conformance? +#if !defined __cplusplus || __cplusplus < 199711L +# error "Compiler does not advertise C++98 conformance" +#endif -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +// These inclusions are to reject old compilers that +// lack the unsuffixed header files. +#include +#include -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' +// and are *not* freestanding headers in C++98. +extern void assert (int); +namespace std { + extern int strcmp (const char *, const char *); +} -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' +// Namespaces, exceptions, and templates were all added after "C++ 2.0". +using std::exception; +using std::strcmp; -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' +namespace { -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' +void test_exception_syntax() +{ + try { + throw "test"; + } catch (const char *s) { + // Extra parentheses suppress a warning when building autoconf itself, + // due to lint rules shared with more typical C programs. + assert (!(strcmp) (s, "test")); + } +} -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO +template struct test_template +{ + T const val; + explicit test_template(T t) : val(t) {} + template T add(U u) { return static_cast(u) + val; } +}; -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi +} // anonymous namespace +' -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () +# Test code for whether the C++ compiler supports C++98 (body of main) +ac_cxx_conftest_cxx98_main=' + assert (argc); + assert (! argv[0]); { - $ECHO "" + test_exception_syntax (); + test_template tt (2.0); + assert (tt.add (4) == 6.0); + assert (true && !false); } +' -case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac +# Test code for whether the C++ compiler supports C++11 (global declarations) +ac_cxx_conftest_cxx11_globals=' +// Does the compiler advertise C++ 2011 conformance? +#if !defined __cplusplus || __cplusplus < 201103L +# error "Compiler does not advertise C++11 conformance" +#endif +namespace cxx11test +{ + constexpr int get_val() { return 20; } + struct testinit + { + int i; + double d; + }; + class delegate + { + public: + delegate(int n) : n(n) {} + delegate(): delegate(2354) {} + virtual int getval() { return this->n; }; + protected: + int n; + }; + class overridden : public delegate + { + public: + overridden(int n): delegate(n) {} + virtual int getval() override final { return this->n * 2; } + }; + class nocopy + { + public: + nocopy(int i): i(i) {} + nocopy() = default; + nocopy(const nocopy&) = delete; + nocopy & operator=(const nocopy&) = delete; + private: + int i; + }; + + // for testing lambda expressions + template Ret eval(Fn f, Ret v) + { + return f(v); + } + // for testing variadic templates and trailing return types + template auto sum(V first) -> V + { + return first; + } + template auto sum(V first, Args... rest) -> V + { + return first + sum(rest...); + } +} +' +# Test code for whether the C++ compiler supports C++11 (body of main) +ac_cxx_conftest_cxx11_main=' +{ + // Test auto and decltype + auto a1 = 6538; + auto a2 = 48573953.4; + auto a3 = "String literal"; + int total = 0; + for (auto i = a3; *i; ++i) { total += *i; } + decltype(a2) a4 = 34895.034; +} +{ + // Test constexpr + short sa[cxx11test::get_val()] = { 0 }; +} +{ + // Test initializer lists + cxx11test::testinit il = { 4323, 435234.23544 }; +} +{ + // Test range-based for + int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, + 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; + for (auto &x : array) { x += 23; } +} +{ + // Test lambda expressions + using cxx11test::eval; + assert (eval ([](int x) { return x*2; }, 21) == 42); + double d = 2.0; + assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); + assert (d == 5.0); + assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); + assert (d == 5.0); +} +{ + // Test use of variadic templates + using cxx11test::sum; + auto a = sum(1); + auto b = sum(1, 2); + auto c = sum(1.0, 2.0, 3.0); +} +{ + // Test constructor delegation + cxx11test::delegate d1; + cxx11test::delegate d2(); + cxx11test::delegate d3(45); +} +{ + // Test override and final + cxx11test::overridden o1(55464); +} +{ + // Test nullptr + char *c = nullptr; +} +{ + // Test template brackets + test_template<::test_template> v(test_template(12)); +} +{ + // Unicode literals + char const *utf8 = u8"UTF-8 string \u2500"; + char16_t const *utf16 = u"UTF-8 string \u2500"; + char32_t const *utf32 = U"UTF-32 string \u2500"; +} +' +# Test code for whether the C compiler supports C++11 (complete). +ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} +${ac_cxx_conftest_cxx11_globals} +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + ${ac_cxx_conftest_cxx11_main} + return ok; +} +" +# Test code for whether the C compiler supports C++98 (complete). +ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + return ok; +} +" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" + +# Auxiliary files required by this configure script. +ac_aux_files="install-sh config.guess config.sub ltmain.sh" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}/config" + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +as_found=false +for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break fi + ac_first_candidate=false + + as_found=false done - done IFS=$as_save_IFS +if $as_found +then : +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi + + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac fi done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if $ac_cache_corrupted; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +: ${CXXFLAGS="-O3 -Wall -pedantic"} +# +# Programs +# - test -n "$ac_ct_CC" && break -done - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; + +case `pwd` in + *\ * | *\ *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac - CC=$ac_ct_CC - fi -fi -fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +macro_version='2.4.6' +macro_revision='2.4.6' -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ +ltmain=$ac_aux_dir/ltmain.sh - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ -#ifndef __GNUC__ - choke me -#endif + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 +fi -int -main () -{ +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -int -main () -{ +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +printf %s "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () { - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; + $ECHO "" } -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +case $ECHO in + printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +printf "%s\n" "printf" >&6; } ;; + print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +printf "%s\n" "print -r" >&6; } ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +printf "%s\n" "cat" >&6; } ;; +esac + -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" @@ -3822,419 +3478,360 @@ Xsed="$SED -e 1s/^X//" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac +IFS=$as_save_IFS - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP fi - fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - ac_cv_path_EGREP=$EGREP + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - fi + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -test -z "$GREP" && GREP=grep + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + test -n "$ac_ct_CC" && break +done - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM -else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" + CC=$ac_ct_CC fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} fi + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4243,42 +3840,43 @@ IFS=$as_save_IFS fi fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - test -n "$DUMPBIN" && break - done fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4287,473 +3885,891 @@ IFS=$as_save_IFS fi fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" + if test "x$ac_ct_CC" = x; then + CC="" else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - DUMPBIN=$ac_ct_DUMPBIN + CC=$ac_ct_CC fi +else + CC="$ac_cv_prog_CC" fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi fi -test -z "$NM" && NM=nm +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion -version; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring=ABCD +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; +else $as_nop + ac_file='' +fi +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; +int +main (void) +{ - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; esac +done +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +int +main (void) +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +if test $ac_compiler_gnu = yes; then + GCC=yes else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + GCC= fi -max_cmd_len=$lt_cv_sys_max_cmd_len +ac_test_CFLAGS=${CFLAGS+y} +ac_save_CFLAGS=$CFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +else $as_nop + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : +else $as_nop + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} +int +main (void) +{ -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi else - lt_unset=false + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC fi +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - lt_cv_ld_reload_flag='-r' + ac_cv_path_GREP=$GREP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test yes != "$GCC"; then - reload_cmds=false - fi - ;; - darwin*) - if test yes = "$GCC"; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + ac_cv_path_EGREP=$EGREP fi - + fi fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +printf %s "checking for fgrep... " >&6; } +if test ${ac_cv_path_FGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in fgrep + do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break done -IFS=$as_save_IFS + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + ac_cv_path_FGREP=$FGREP fi - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" + fi fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +printf "%s\n" "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" -test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$GREP" && GREP=grep @@ -4762,226 +4778,123 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; -beos*) - lt_cv_deplibs_check_method=pass_all - ;; -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; +# Check whether --with-gnu-ld was given. +if test ${with_gnu_ld+y} +then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else $as_nop + with_gnu_ld=no +fi -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld ;; - pc) - lt_cv_deplibs_check_method=pass_all + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown ;; esac - ;; +elif test yes = "$with_gnu_ld"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } +fi +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +printf "%s\n" "$LD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown @@ -4990,192 +4903,97 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test ${lt_cv_path_NM+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" fi -done + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + : ${lt_cv_path_NM=no} fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +printf "%s\n" "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. else if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5184,42 +5002,47 @@ IFS=$as_save_IFS fi fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +printf "%s\n" "$DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - test -n "$CXX" && break + test -n "$DUMPBIN" && break done fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5228,283 +5051,261 @@ IFS=$as_save_IFS fi fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - test -n "$ac_ct_CXX" && break + test -n "$ac_ct_DUMPBIN" && break done - if test "x$ac_ct_CXX" = x; then - CXX="g++" + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - CXX=$ac_ct_CXX + DUMPBIN=$ac_ct_DUMPBIN fi fi + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN fi fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done +test -z "$NM" && NM=nm + -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +printf %s "checking the name lister ($NM) interface... " >&6; } +if test ${lt_cv_nm_interface+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +printf "%s\n" "$lt_cv_nm_interface" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - GXX= + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ +# find the maximum length of command line arguments +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +printf %s "checking the maximum length of command line arguments... " >&6; } +if test ${lt_cv_sys_max_cmd_len+y} +then : + printf %s "(cached) " >&6 +else $as_nop + i=0 + teststring=ABCD - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; -int -main () -{ + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; -int -main () -{ + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +max_cmd_len=$lt_cv_sys_max_cmd_len -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + lt_unset=false fi - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$ac_ct_AR" && break -done - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; esac - AR=$ac_ct_AR - fi -fi -: ${AR=ar} -: ${AR_FLAGS=cru} @@ -5513,60 +5314,114 @@ fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +printf %s "checking how to convert $build file names to $host format... " >&6; } +if test ${lt_cv_to_host_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test 0 -eq "$ac_status"; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test 0 -ne "$ac_status"; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +printf %s "checking how to convert $build file names to toolchain format... " >&6; } +if test ${lt_cv_to_tool_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -if test no = "$lt_cv_ar_at_file"; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +printf %s "checking for $LD option to reload object files... " >&6; } +if test ${lt_cv_ld_reload_flag+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ld_reload_flag='-r' fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + @@ -5575,25 +5430,30 @@ fi if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5602,38 +5462,43 @@ IFS=$as_save_IFS fi fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5642,160 +5507,261 @@ IFS=$as_save_IFS fi fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - if test "x$ac_ct_STRIP" = x; then - STRIP=":" + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - STRIP=$ac_ct_STRIP + OBJDUMP=$ac_ct_OBJDUMP fi else - STRIP="$ac_cv_prog_STRIP" + OBJDUMP="$ac_cv_prog_OBJDUMP" fi -test -z "$STRIP" && STRIP=: +test -z "$OBJDUMP" && OBJDUMP=objdump -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +printf %s "checking how to recognize dependent libraries... " >&6; } +if test ${lt_cv_deplibs_check_method+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi + ;; -test -z "$RANLIB" && RANLIB=: +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; -if test -n "$RANLIB"; then - case $host_os in - bitrig* | openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all ;; esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi + ;; -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown @@ -5816,27 +5782,33 @@ esac -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5845,21 +5817,76 @@ IFS=$as_save_IFS fi fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - test -n "$AWK" && break +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi done + done +IFS=$as_save_IFS +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi +test -z "$DLLTOOL" && DLLTOOL=dlltool @@ -5870,314 +5897,533 @@ done +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +printf %s "checking how to associate runtime and link libraries... " >&6; } +if test ${lt_cv_sharedlib_from_linklib_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_sharedlib_from_linklib_cmd='unknown' +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} -# Allow CC to be a program name with arguments. -compiler=$CC -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test ia64 = "$host_cpu"; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" - # Adjust the below global symbol transforms to fixup imported variables. - lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" - lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" - lt_c_name_lib_hook="\ - -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ - -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - # Disable hooks by default. - lt_cv_sys_global_symbol_to_import= - lt_cdecl_hook= - lt_c_name_hook= - lt_c_name_lib_hook= + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ -$lt_cdecl_hook\ -" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ -$lt_c_name_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" -# Transform an extracted symbol line into symbol name with lib prefix and -# symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ -$lt_c_name_lib_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" + test -n "$ac_ct_CXX" && break +done - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function, - # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ -" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ -" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ -" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ -" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" + if test "x$ac_ct_CXX" = x; then + CXX="g++" else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF +fi - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + fi +fi +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 +printf %s "checking whether the compiler supports GNU C++... " >&6; } +if test ${ac_cv_cxx_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#ifdef __cplusplus -extern "C" { +int +main (void) +{ +#ifndef __GNUC__ + choke me #endif -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - cat <<_LT_EOF >> conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -/* The mapping between symbol names and symbols. */ -LT_DLSYM_CONST struct { - const char *name; - void *address; +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+y} +ac_save_CXXFLAGS=$CXXFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +printf %s "checking whether $CXX accepts -g... " >&6; } +if test ${ac_cv_prog_cxx_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; } -lt__PROGRAM__LTX_preloaded_symbols[] = +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_g=yes +else $as_nop + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) { - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; + ; + return 0; } -#endif +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : -#ifdef __cplusplus +else $as_nop + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; } -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS=conftstm.$ac_objext - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest$ac_exeext; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } +if test $ac_test_CXXFLAGS; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 + CXXFLAGS="-g" fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test yes = "$pipe_works"; then - break +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" else - lt_cv_sys_global_symbol_pipe= + CXXFLAGS= fi +fi +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +printf %s "checking for $CXX option to enable C++11 features... " >&6; } +if test ${ac_cv_prog_cxx_11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_11=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx11_program +_ACEOF +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done - +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 +printf %s "checking for $CXX option to enable C++98 features... " >&6; } +if test ${ac_cv_prog_cxx_98+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_98=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx98_program +_ACEOF +for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx98=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx98" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX fi -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= +if test "x$ac_cv_prog_cxx_cxx98" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + test -n "$ac_ct_AR" && break +done + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi +: ${AR=ar} +: ${AR_FLAGS=cru} @@ -6189,11 +6435,59 @@ fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +printf %s "checking for archiver @FILE support... " >&6; } +if test ${lt_cv_ar_at_file+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +printf "%s\n" "$lt_cv_ar_at_file" >&6; } +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi @@ -6201,410 +6495,294 @@ fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } else - with_sysroot=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -lt_sysroot= -case $with_sysroot in #( - yes) - if test yes = "$GCC"; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else - printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -: ${lt_DD:=$DD} -if test -z "$lt_DD"; then - ac_path_lt_DD_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in dd; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_lt_DD" || continue -if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: -fi - $ac_path_lt_DD_found && break 3 - done - done + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done IFS=$as_save_IFS - if test -z "$ac_cv_path_lt_DD"; then - : - fi -else - ac_cv_path_lt_DD=$lt_DD -fi -rm -f conftest.i conftest2.i conftest.out fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else - printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -lt_cv_truncate_bin= -if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + fi -rm -f conftest.i conftest2.i conftest.out -test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$lt_cv_truncate_bin" >&6; } +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi +test -z "$RANLIB" && RANLIB=: -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in $*""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi -test no = "$enable_libtool_lock" || enable_libtool_lock=yes +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out what ABI is being produced by ac_compile, and set mode - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE=32 - ;; - *ELF-64*) - HPUX_IA64_MODE=64 - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; -mips64*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - emul=elf - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - emul="${emul}32" - ;; - *64-bit*) - emul="${emul}64" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *MSB*) - emul="${emul}btsmip" - ;; - *LSB*) - emul="${emul}ltsmip" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *N32*) - emul="${emul}n32" - ;; - esac - LD="${LD-ld} -m $emul" - fi - rm -rf conftest* - ;; -x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. Note that the listed cases only cover the - # situations where additional linker options are needed (such as when - # doing 32-bit compilation for a host where ld defaults to 64-bit, or - # vice versa); the common cases where no linker options are needed do - # not appear in the list. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in - *x86-64*) - LD="${LD-ld} -m elf32_x86_64" - ;; - *) - LD="${LD-ld} -m elf_i386" - ;; - esac - ;; - powerpc64le-*linux*) - LD="${LD-ld} -m elf32lppclinux" - ;; - powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - powerpcle-*linux*) - LD="${LD-ld} -m elf64lppc" - ;; - powerpc-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test yes != "$lt_cv_cc_needs_belf"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS=$SAVE_CFLAGS - fi - ;; -*-*solaris*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*|x86_64-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD=${LD-ld}_sol2 - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac -need_locks=$enable_libtool_lock -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. + + + + + + + + + + + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6613,1269 +6791,1402 @@ IFS=$as_save_IFS fi fi -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi + test -n "$AWK" && break done - done -IFS=$as_save_IFS -fi -fi -ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test yes != "$lt_cv_path_mainfest_tool"; then - MANIFEST_TOOL=: -fi - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +# Allow CC to be a program name with arguments. +compiler=$CC -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +printf %s "checking command to parse $NM output from $compiler object... " >&6; } +if test ${lt_cv_sys_global_symbol_pipe+y} +then : + printf %s "(cached) " >&6 +else $as_nop -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= fi +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + # Check to see that the pipe works correctly. + pipe_works=no + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif +#ifdef __cplusplus +extern "C" { +#endif +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + cat <<_LT_EOF >> conftest.$ac_ext +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "$LT_MULTI_MODULE"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&5 - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test 0 = "$_lt_result"; then - lt_cv_apple_cc_single_mod=yes +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS else - cat conftest.err >&5 + echo "cannot find nm_test_func in $nlist" >&5 fi - rm -rf libconftest.dylib* - rm -f conftest.* + else + echo "cannot find nm_test_var in $nlist" >&5 fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done -int -main () -{ +fi - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +printf "%s\n" "failed" >&6; } else - lt_cv_ld_exported_symbols_list=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +printf "%s\n" "ok" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&5 - elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) - case ${MACOSX_DEPLOYMENT_TARGET},$host in - 10.[012],*|,*powerpc*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - *) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test yes = "$lt_cv_apple_cc_single_mod"; then - _lt_dar_single_mod='$single_module' - fi - if test yes = "$lt_cv_ld_exported_symbols_list"; then - _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' - fi - if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - done - ac_cv_prog_CPP=$CPP -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then -$as_echo "#define STDC_HEADERS 1" >>confdefs.h -fi -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF -fi -done -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +printf %s "checking for sysroot... " >&6; } +# Check whether --with-sysroot was given. +if test ${with_sysroot+y} +then : + withval=$with_sysroot; +else $as_nop + with_sysroot=no fi -done - - - -func_stripname_cnf () -{ - case $2 in - .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; - *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; - esac -} # func_stripname_cnf +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +printf "%s\n" "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +printf "%s\n" "${lt_sysroot:-no}" >&6; } -# Set options +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +printf %s "checking for a working dd... " >&6; } +if test ${ac_cv_path_lt_DD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in dd + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi - enable_dlopen=no +rm -f conftest.i conftest2.i conftest.out +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +printf "%s\n" "$ac_cv_path_lt_DD" >&6; } - enable_win32_dll=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +printf %s "checking how to truncate binary pipes... " >&6; } +if test ${lt_cv_truncate_bin+y} +then : + printf %s "(cached) " >&6 +else $as_nop + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +printf "%s\n" "$lt_cv_truncate_bin" >&6; } - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - enable_shared=yes -fi +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +# Check whether --enable-libtool-lock was given. +if test ${enable_libtool_lock+y} +then : + enableval=$enable_libtool_lock; +fi +test no = "$enable_libtool_lock" || enable_libtool_lock=yes - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS=$lt_save_ifs - ;; +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; esac -else - enable_static=yes -fi - - - + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +printf %s "checking whether the C compiler needs -belf... " >&6; } +if test ${lt_cv_cc_needs_belf+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_cc_needs_belf=yes +else $as_nop + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for lt_pkg in $withval; do - IFS=$lt_save_ifs - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" fi - done - IFS=$lt_save_ifs + ;; + esac ;; esac -else - pic_mode=default -fi - - - - - + fi + rm -rf conftest* + ;; +esac +need_locks=$enable_libtool_lock +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS=$lt_save_ifs - ;; - esac +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +printf "%s\n" "$MANIFEST_TOOL" >&6; } else - enable_fast_install=yes + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - - - - - - - shared_archive_member_spec= -case $host,$enable_shared in -power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } - -# Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; then : - withval=$with_aix_soname; case $withval in - aix|svr4|both) - ;; - *) - as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 - ;; - esac - lt_cv_with_aix_soname=$with_aix_soname +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else - lt_cv_with_aix_soname=aix + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - with_aix_soname=$lt_cv_with_aix_soname + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$with_aix_soname" >&6; } - if test aix != "$with_aix_soname"; then - # For the AIX way of multilib, we name the shared archive member - # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', - # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. - # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, - # the AIX toolchain works better with OBJECT_MODE set (default 32). - if test 64 = "${OBJECT_MODE-32}"; then - shared_archive_member_spec=shr_64 - else - shared_archive_member_spec=shr - fi +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if test ${lt_cv_path_mainfest_tool+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes fi - ;; -*) - with_aix_soname=aix - ;; -esac + rm -f conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +printf "%s\n" "$DSYMUTIL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS=$ltmain - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +printf "%s\n" "$NMEDIT" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +printf "%s\n" "$ac_ct_NMEDIT" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +printf "%s\n" "$LIPO" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +printf "%s\n" "$ac_ct_LIPO" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +printf "%s\n" "$OTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +printf "%s\n" "$ac_ct_OTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +printf "%s\n" "$OTOOL64" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +printf "%s\n" "$ac_ct_OTOOL64" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi -test -z "$LN_S" && LN_S="ln -s" @@ -7890,746 +8201,447 @@ test -z "$LN_S" && LN_S="ln -s" -if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +printf %s "checking for -single_module linker flag... " >&6; } +if test ${lt_cv_apple_cc_single_mod+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +printf %s "checking for -exported_symbols_list linker flag... " >&6; } +if test ${lt_cv_ld_exported_symbols_list+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -# Global variables: -ofile=libtool -can_build_shared=yes +int +main (void) +{ -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld=$lt_cv_prog_gnu_ld - -old_CC=$CC -old_CFLAGS=$CFLAGS - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_ld_exported_symbols_list=yes +else $as_nop + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS -func_cc_basename $compiler -cc_basename=$func_cc_basename_result +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +printf %s "checking for -force_load linker flag... " >&6; } +if test ${lt_cv_ld_force_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD=$MAGIC_CMD - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/${ac_tool_prefix}file"; then - lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD=$lt_cv_path_MAGIC_CMD - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +printf "%s\n" "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) + case ${MACOSX_DEPLOYMENT_TARGET},$host in + 10.[012],*|,*powerpc*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} -_LT_EOF - fi ;; - esac - fi - break +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h fi - done - IFS=$lt_save_ifs - MAGIC_CMD=$lt_save_MAGIC_CMD - ;; -esac -fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi +done -MAGIC_CMD=$lt_cv_path_MAGIC_CMD -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD=$MAGIC_CMD - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/file"; then - lt_cv_path_MAGIC_CMD=$ac_dir/"file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD=$lt_cv_path_MAGIC_CMD - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS=$lt_save_ifs - MAGIC_CMD=$lt_save_MAGIC_CMD - ;; -esac -fi +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : -MAGIC_CMD=$lt_cv_path_MAGIC_CMD -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h +fi +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h - else - MAGIC_CMD=: - fi fi - fi - ;; -esac -# Use C for the default configuration in the libtool script -lt_save_CC=$CC -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +func_stripname_cnf () +{ + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; + esac +} # func_stripname_cnf -# Source file extension for C test sources. -ac_ext=c -# Object file extension for compiled C test sources. -objext=o -objext=$objext -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' +# Set options + enable_dlopen=no + enable_win32_dll=no -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} + # Check whether --enable-shared was given. +if test ${enable_shared+y} +then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else $as_nop + enable_shared=yes +fi -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} -# Allow CC to be a program name with arguments. -compiler=$CC -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then -lt_prog_compiler_no_builtin_flag= -if test yes = "$GCC"; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac + # Check whether --enable-static was given. +if test ${enable_static+y} +then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else $as_nop + enable_static=yes +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } -if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi -fi - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= +# Check whether --with-pic was given. +if test ${with_pic+y} +then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else $as_nop + pic_mode=default +fi - if test yes = "$GCC"; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - lt_prog_compiler_pic='-fPIC' - ;; - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static='$wl-static' - ;; - esac - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= + # Check whether --enable-fast-install was given. +if test ${enable_fast_install+y} +then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs ;; + esac +else $as_nop + enable_fast_install=yes +fi - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +printf %s "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test ${with_aix_soname+y} +then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; *) - lt_prog_compiler_pic='-fPIC' + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac + lt_cv_with_aix_soname=$with_aix_soname +else $as_nop + if test ${lt_cv_with_aix_soname+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_with_aix_soname=aix +fi - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - if test -n "$lt_prog_compiler_pic"; then - lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; + with_aix_soname=$lt_cv_with_aix_soname +fi - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - case $cc_basename in - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +printf "%s\n" "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static='$wl-static' - ;; - esac - ;; - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='$wl-a ${wl}archive' - ;; - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - # old Intel for x86_64, which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - tcc*) - # Fabrice Bellard et al's Tiny C Compiler - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ F* | *Sun*Fortran*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Intel*\ [CF]*Compiler*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - *Portland\ Group*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; - esac - ;; - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi -case $host_os in - # For platforms that do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } -if test yes = "$lt_cv_prog_compiler_pic_works"; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi -fi @@ -8641,1456 +8653,773 @@ fi -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } -if test yes = "$lt_cv_prog_compiler_static_works"; then - : -else - lt_prog_compiler_static= -fi +test -z "$LN_S" && LN_S="ln -s" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi -hard_links=nottested -if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} - need_locks=warn - fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +printf %s "checking for objdir... " >&6; } +if test ${lt_cv_objdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs else - need_locks=no + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs fi +rmdir .libs 2>/dev/null +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +printf "%s\n" "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir +printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ' (' and ')$', so one must not match beginning or - # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', - # as well as any symbol that contains 'd'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test yes != "$GCC"; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd* | bitrig*) - with_gnu_ld=no - ;; - esac - ld_shlibs=yes - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test yes = "$with_gnu_ld"; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES fi + ;; +esac - if test yes = "$lt_use_gnu_ld_interface"; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='$wl' +# Global variables: +ofile=libtool +can_build_shared=yes - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - export_dynamic_flag_spec='$wl--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test ia64 != "$host_cpu"; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 +with_gnu_ld=$lt_cv_prog_gnu_ld -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +printf %s "checking for ${ac_tool_prefix}file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org _LT_EOF + fi ;; + esac fi - ;; + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='$wl--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - shrext_cmds=.dll - archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes=yes - ;; +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +printf %s "checking for file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - export_dynamic_flag_spec='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test linux-dietlibc = "$host_os"; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) +_LT_EOF + fi ;; esac fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test no = "$tmp_diet" - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - nagfor*) # NAGFOR 5.3 - tmp_sharedflag='-Wl,-shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - case $cc_basename in - tcc*) - export_dynamic_flag_spec='-rdynamic' - ;; - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; + else + MAGIC_CMD=: + fi +fi - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 + fi + ;; +esac -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. +# Use C for the default configuration in the libtool script -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. +# Source file extension for C test sources. +ac_ext=c -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; +# Object file extension for compiled C test sources. +objext=o +objext=$objext - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' - if test no = "$ld_shlibs"; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - aix[4-9]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then - aix_use_runtimelinking=yes - break - fi - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # traditional, no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - hardcode_direct=no - hardcode_direct_absolute=no - ;; - esac - if test yes = "$GCC"; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag="$shared_flag "'$wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} - export_dynamic_flag_spec='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} -int -main () -{ +# Allow CC to be a program name with arguments. +compiler=$CC - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=/usr/lib:/lib - fi +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* -fi +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* - aix_libpath=$lt_cv_aix_libpath_ -fi - hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then -int -main () -{ +lt_prog_compiler_no_builtin_flag= - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test ${lt_cv_prog_compiler_rtti_exceptions+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=/usr/lib:/lib - fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : fi - aix_libpath=$lt_cv_aix_libpath_ fi - hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' $wl-bernotok' - allow_undefined_flag=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' - fi + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' fi + lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='' + lt_prog_compiler_pic='-fPIC' ;; m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. ;; - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - enable_shared_with_static_runtimes=yes + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test yes = "$lt_cv_ld_force_load"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag=$_lt_dar_allow_undefined - case $cc_basename in - ifort*|nagfor*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test yes = "$_lt_dar_can_shared"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" - - else - ld_shlibs=no - fi - + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= ;; - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac ;; - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. ;; - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no ;; - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' ;; - hpux9*) - if test yes = "$GCC"; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic fi - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes + ;; - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='$wl-E' + *) + lt_prog_compiler_pic='-fPIC' ;; + esac - hpux10*) - if test yes,no = "$GCC,$with_gnu_ld"; then - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='$wl-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; - hpux11*) - if test yes,no = "$GCC,$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test yes = "$lt_cv_prog_compiler__b"; then - archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='$wl-E' + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) - if test yes = "$GCC"; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (void) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test yes = "$lt_cv_irix_exported_symbol"; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' - fi - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' ;; - linux*) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler - ld_shlibs=yes - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac ;; esac ;; - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' ;; - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - export_dynamic_flag_spec='$wl-E' - else - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - fi - else - ld_shlibs=no - fi + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' ;; - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - shrext_cmds=.dll - archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes=yes - ;; - - osf3*) - if test yes = "$GCC"; then - allow_undefined_flag=' $wl-expect_unresolved $wl\*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test yes = "$GCC"; then - allow_undefined_flag=' $wl-expect_unresolved $wl\*' - archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: + rdos*) + lt_prog_compiler_static='-non_shared' ;; solaris*) - no_undefined_flag=' -z defs' - if test yes = "$GCC"; then - wlarc='$wl' - archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='$wl' - archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. GCC discards it without '$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test yes = "$GCC"; then - whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; + lt_prog_compiler_wl='-Wl,';; esac - link_all_deplibs=yes ;; sunos4*) - if test sequent = "$host_vendor"; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' ;; - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' fi ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='$wl-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='$wl-z,text' - allow_undefined_flag='$wl-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='$wl-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='$wl-Bexport' - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no ;; uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' ;; *) - ld_shlibs=no + lt_prog_compiler_can_build_shared=no ;; esac - - if test sni = "$host_vendor"; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='$wl-Blargedynsym' - ;; - esac - fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test no = "$ld_shlibs" && can_build_shared=no +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac -with_gnu_ld=$with_gnu_ld +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi +fi @@ -10103,109 +9432,46 @@ with_gnu_ld=$with_gnu_ld # -# Do we need to explicitly link libc? +# Check to make sure the static flag actually works. # -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test yes,yes = "$GCC,$enable_shared"; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi @@ -10213,958 +9479,1536 @@ esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } + if test no = "$hard_links"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + ld_shlibs=yes + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. +_LT_EOF + fi + ;; + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi +fi + aix_libpath=$lt_cv_aix_libpath_ +fi + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi +fi + aix_libpath=$lt_cv_aix_libpath_ +fi + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + darwin* | rhapsody*) + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + else + ld_shlibs=no + fi + ;; + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +printf %s "checking if $CC understands -b... " >&6; } +if test ${lt_cv_prog_compiler__b+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if test ${lt_cv_irix_exported_symbol+y} +then : + printf %s "(cached) " >&6 +else $as_nop + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_irix_exported_symbol=yes +else $as_nop + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + *nto* | *qnx*) + ;; + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test yes = "$GCC"; then - case $host_os in - darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; - *) lt_awk_arg='/^libraries:/' ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; - *) lt_sed_strip_eq='s|=/|/|g' ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary... - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - # ...but if some path component already ends with the multilib dir we assume - # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). - case "$lt_multi_os_dir; $lt_search_path_spec " in - "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) - lt_multi_os_dir= - ;; - esac - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" - elif test -n "$lt_multi_os_dir"; then - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS = " "; FS = "/|\n";} { - lt_foo = ""; - lt_count = 0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo = "/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's|/\([A-Za-z]:\)|\1|g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=.so -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - - - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='$libname$release$shared_ext$major' - ;; + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test ia64 = "$host_cpu"; then - # AIX 5 supports IA64 - library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line '#! .'. This would cause the generated library to - # depend on '.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then - : + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else - can_build_shared=no + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; - esac - # Using Import Files as archive members, it is possible to support - # filename-based versioning of shared library archives on AIX. While - # this would work for both with and without runtime linking, it will - # prevent static linking of such archives. So we do filename-based - # shared library versioning with .so extension only, which is used - # when both runtime linking and shared linking is enabled. - # Unfortunately, runtime linking may impact performance, so we do - # not want this to be the default eventually. Also, we use the - # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. - # To allow for filename-based versioning support, we need to create - # libNAME.so.V as an archive file, containing: - # *) an Import File, referring to the versioned filename of the - # archive as well as the shared archive member, telling the - # bitwidth (32 or 64) of that shared object, and providing the - # list of exported symbols of that shared object, eventually - # decorated with the 'weak' keyword - # *) the shared object with the F_LOADONLY flag set, to really avoid - # it being seen by the linker. - # At run time we better use the real file rather than another symlink, - # but for link time we create the symlink libNAME.so -> libNAME.so.V - case $with_aix_soname,$aix_use_runtimelinking in - # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - aix,yes) # traditional libtool - dynamic_linker='AIX unversionable lib.so' - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - aix,no) # traditional AIX only - dynamic_linker='AIX lib.a(lib.so.V)' - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - ;; - svr4,*) # full svr4 only - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,yes) # both, prefer svr4 - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # unpreferred sharedlib libNAME.a needs extra handling - postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' - postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no ;; - *,no) # both, prefer aix - dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling - postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' - postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + + *) + ld_shlibs=no ;; esac - shlibpath_var=LIBPATH + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi fi - ;; -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +printf "%s\n" "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no -beos*) - library_names_spec='$libname$shared_ext' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; +with_gnu_ld=$with_gnu_ld -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - library_names_spec='$libname.dll.lib' - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec=$LIB - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - *) - # Assume MSVC wrapper - library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' - soname_spec='$libname$release$major$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - need_version=no - need_lib_prefix=no + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. ;; - freebsd-*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - need_version=yes + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc+y} +then : + printf %s "(cached) " >&6 +else $as_nop + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac + esac + fi ;; +esac -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=no - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - if test 32 = "$HPUX_IA64_MODE"; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - sys_lib_dlsearch_path_spec=/usr/lib/hpux32 - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - sys_lib_dlsearch_path_spec=/usr/lib/hpux64 - fi - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test yes = "$lt_cv_prog_gnu_ld"; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" - sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" - hardcode_into_libs=yes - ;; -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; -linux*android*) - version_type=none # Android doesn't support versioned libraries. - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext' - soname_spec='$libname$release$shared_ext' - finish_cmds= - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec='-L$libdir' - ;; -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir -fi - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; -rdos*) - dynamic_linker=no - ;; -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test no = "$dynamic_linker" && can_build_shared=no -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec -fi -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec -fi -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH @@ -11262,1033 +11106,878 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test yes = "$hardcode_automatic"; then - # We can hardcode non-existent directories. - if test no != "$hardcode_direct" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && - test no != "$hardcode_minus_L"; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } -if test relink = "$hardcode_action" || - test yes = "$inherit_rpath"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi - if test yes != "$enable_dlopen"; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - case $host_os in - beos*) - lt_cv_dlopen=load_add_on - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - mingw* | pw32* | cegcc*) - lt_cv_dlopen=LoadLibrary - lt_cv_dlopen_libs= - ;; - cygwin*) - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - ;; - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - lt_cv_dlopen=dyld - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes -fi - ;; - tpf*) - # Don't try to run any link tests for TPF. We know it's impossible - # because TPF is a cross-compiler, and we know how we open DSOs. - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - lt_cv_dlopen_self=no - ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen=shl_load -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen=dlopen -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld -fi - - -fi - - -fi - - + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown -fi -fi +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH - ;; - esac + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; - if test no = "$lt_cv_dlopen"; then - enable_dlopen=no +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH else - enable_dlopen=yes - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS=$CPPFLAGS - test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS=$LDFLAGS - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS=$LIBS - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test yes = "$cross_compiling"; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisibility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; esac - else : - # compilation failed - lt_cv_dlopen_self=no + shlibpath_var=LIBPATH fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } + ;; - if test yes = "$lt_cv_dlopen_self"; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test yes = "$cross_compiling"; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; -#if HAVE_DLFCN_H -#include -#endif +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; -#include +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes -/* When -fvisibility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - CPPFLAGS=$save_CPPFLAGS - LDFLAGS=$save_LDFLAGS - LIBS=$save_LIBS + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' ;; - esac - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; esac -fi - - - - - - - - - - - + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP"; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' ;; esac -fi - - - - - - - - - - - + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; - # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test no = "$can_build_shared" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. +irix5* | irix6* | nonstopux*) case $host_os in - aix3*) - test yes = "$enable_shared" && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= ;; - - aix[4-9]*) - if test ia64 != "$host_cpu"; then - case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in - yes,aix,yes) ;; # shared object as lib.so file only - yes,svr4,*) ;; # shared object as lib.so archive member only - yes,*) enable_static=no ;; # shared object in lib.a archive as well - esac - fi + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; -CC=$lt_save_CC +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no - if test -n "$CXX" && ( test no != "$CXX" && - ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || - (test g++ != "$CXX"))); then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + # Some binutils ld are patched to set DT_RUNPATH + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext +int +main (void) +{ - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include + ; + return 0; +} _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break +if ac_fn_c_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : + lt_cv_shlibpath_overrides_runpath=yes fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; -else - _lt_caught_CXX_error=yes -fi +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -compiler_needs_object_CXX=no -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_direct_absolute_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -inherit_rpath_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -reload_flag_CXX=$reload_flag -reload_cmds_CXX=$reload_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; -# Source file extension for C++ test sources. -ac_ext=cpp +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test yes != "$_lt_caught_CXX_error"; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" +rdos*) + dynamic_linker=no + ;; - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[]) { return(0); }' +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; - # ltmain only uses $CC for tagged configurations so make sure $CC is set. +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} +*) + dynamic_linker=no + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi -# Allow CC to be a program name with arguments. -compiler=$CC +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi - # save warnings/boilerplate of simple test code - ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - compiler_CXX=$CC - func_cc_basename $compiler -cc_basename=$func_cc_basename_result - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test yes = "$GXX"; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' - else - lt_prog_compiler_no_builtin_flag_CXX= - fi - if test yes = "$GXX"; then - # Set up default GNU C++ configuration -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else - with_gnu_ld=no -fi -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld @@ -12296,5119 +11985,5695 @@ with_gnu_ld=$lt_cv_prog_gnu_ld - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test yes = "$with_gnu_ld"; then - archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='$wl' - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - GXX=no - with_gnu_ld=no - wlarc= - fi - # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - ld_shlibs_CXX=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - aix_use_runtimelinking=no - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - file_list_spec_CXX='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - hardcode_direct_CXX=no - hardcode_direct_absolute_CXX=no - ;; - esac - if test yes = "$GXX"; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag=$shared_flag' $wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi - export_dynamic_flag_spec_CXX='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - always_export_symbols_CXX=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - # The "-G" linker flag allows undefined symbols. - no_undefined_flag_CXX='-bernotok' - # Determine the default libpath from the value encoded in an empty - # executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +printf "%s\n" "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dlopen (); int -main () +main (void) { - +return dlopen (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dl_dlopen=yes +else $as_nop + ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=/usr/lib:/lib - fi - +LIBS=$ac_check_lib_save_LIBS fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else $as_nop + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes - aix_libpath=$lt_cv_aix_libpath__CXX fi - hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + ;; - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes +then : + lt_cv_dlopen=shl_load +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +printf %s "checking for shl_load in -ldld... " >&6; } +if test ${ac_cv_lib_dld_shl_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char shl_load (); int -main () +main (void) { - +return shl_load (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dld_shl_load=yes +else $as_nop + ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=/usr/lib:/lib - fi - +LIBS=$ac_check_lib_save_LIBS fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes +then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else $as_nop + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes +then : + lt_cv_dlopen=dlopen +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - aix_libpath=$lt_cv_aix_libpath__CXX +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main (void) +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dl_dlopen=yes +else $as_nop + ac_cv_lib_dl_dlopen=no fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +printf %s "checking for dlopen in -lsvld... " >&6; } +if test ${ac_cv_lib_svld_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' $wl-bernotok' - allow_undefined_flag_CXX=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - fi - archive_cmds_need_lc_CXX=yes - archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared - # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main (void) +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_svld_dlopen=yes +else $as_nop + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes +then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +printf %s "checking for dld_link in -ldld... " >&6; } +if test ${ac_cv_lib_dld_dld_link+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main (void) +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dld_dld_link=yes +else $as_nop + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes +then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_CXX=' ' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=yes - file_list_spec_CXX='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' - enable_shared_with_static_runtimes_CXX=yes - # Don't use ranlib - old_postinstall_cmds_CXX='chmod 644 $oldlib' - postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - export_dynamic_flag_spec_CXX='$wl--export-all-symbols' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - esac - ;; - darwin* | rhapsody*) +fi - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - if test yes = "$lt_cv_ld_force_load"; then - whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' +fi - else - whole_archive_flag_spec_CXX='' - fi - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX=$_lt_dar_allow_undefined - case $cc_basename in - ifort*|nagfor*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test yes = "$_lt_dar_can_shared"; then - output_verbose_link_cmd=func_echo_all - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" - if test yes != "$lt_cv_apple_cc_single_mod"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" - archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" - fi - else - ld_shlibs_CXX=no - fi +fi - ;; - os2*) - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_minus_L_CXX=yes - allow_undefined_flag_CXX=unsupported - shrext_cmds=.dll - archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes_CXX=yes - ;; +fi - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - ld_shlibs_CXX=no - ;; +fi - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; + ;; + esac - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi - haiku*) - archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - link_all_deplibs_CXX=yes - ;; + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - hpux9*) - hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='$wl-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes = "$GXX"; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" - hpux10*|hpux11*) - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' - hardcode_libdir_separator_CXX=: + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +printf %s "checking whether a program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - export_dynamic_flag_spec_CXX='$wl-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac +#if HAVE_DLFCN_H +#include +#endif - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes = "$GXX"; then - if test no = "$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; +#include - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - export_dynamic_flag_spec_CXX='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test yes = "$GXX"; then - if test no = "$with_gnu_ld"; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - hardcode_libdir_separator_CXX=: - inherit_rpath_CXX=yes - ;; +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [1-5].* | *pgcpp\ [1-5].*) - prelink_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - old_archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object_CXX=yes - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +printf "%s\n" "$lt_cv_dlopen_self" >&6; } - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +printf %s "checking whether a statically linked program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self_static+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; +#if HAVE_DLFCN_H +#include +#endif - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; +#include - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif - *nto* | *qnx*) - ld_shlibs_CXX=yes - ;; +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - hardcode_direct_absolute_CXX=yes - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='$wl-E' - whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - ld_shlibs_CXX=no - fi - ;; +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - hardcode_libdir_separator_CXX=: + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - case $host in - osf3*) - allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' - archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - ;; - *) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ - $RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - ;; - esac - hardcode_libdir_separator_CXX=: +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } + fi - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes,no = "$GXX,$with_gnu_ld"; then - allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' - case $host in - osf3*) - archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - ;; - *) - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - ;; - esac + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - hardcode_libdir_separator_CXX=: + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - output_verbose_link_cmd='func_echo_all' - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test yes,no = "$GXX,$with_gnu_ld"; then - no_undefined_flag_CXX=' $wl-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require '-G' NOT '-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='$wl-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_CXX='$wl-z,text' - allow_undefined_flag_CXX='$wl-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='$wl-Bexport' - runpath_var='LD_RUN_PATH' - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ - '"$old_archive_cmds_CXX" - reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ - '"$reload_cmds_CXX" - ;; - *) - archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac +striplib= +old_striplib= +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +printf %s "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + esac +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } - test no = "$ld_shlibs_CXX" && can_build_shared=no - GCC_CXX=$GXX - LD_CXX=$LD - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - # Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= -cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - for p in `eval "$output_verbose_link_cmd"`; do - case $prev$p in - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test x-L = "$p" || - test x-R = "$p"; then - prev=$p - continue - fi - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test no = "$pre_test_object_deps_done"; then - case $prev in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX=$prev$p - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX=$prev$p - else - postdeps_CXX="${postdeps_CXX} $prev$p" - fi - fi - prev= - ;; - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi + # Report what library types will actually be built + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +printf %s "checking if libtool supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +printf "%s\n" "$can_build_shared" >&6; } - if test no = "$pre_test_object_deps_done"; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX=$p - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX=$p - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +printf %s "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no - *) ;; # Ignore the rest. + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; - esac - done + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +printf "%s\n" "$enable_shared" >&6; } - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +printf %s "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +printf "%s\n" "$enable_static" >&6; } -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; -esac -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - compiler_lib_search_dirs_CXX= -if test -n "${compiler_lib_search_path_CXX}"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +CC=$lt_save_CC + if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +printf %s "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test ${ac_cv_prog_CXXCPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CXX needs to be expanded + for CXXCPP in "$CXX -E" cpp /lib/cpp + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + break +fi + done + ac_cv_prog_CXXCPP=$CXXCPP +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +printf "%s\n" "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +else + _lt_caught_CXX_error=yes +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no +# Source file extension for C++ test sources. +ac_ext=cpp +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + # ltmain only uses $CC for tagged configurations so make sure $CC is set. +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} +# Allow CC to be a program name with arguments. +compiler=$CC + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* - lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - - - # C++ specific cases for pic, static, wl, etc. - if test yes = "$GXX"; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - lt_prog_compiler_pic_CXX='-fPIC' - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic_CXX='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static_CXX='$wl-static' - ;; - esac - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test ${with_gnu_ld+y} +then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else $as_nop + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } +fi +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -case $host_os in - # For platforms that do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } -lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $RM conftest* - + fi + done + IFS=$lt_save_ifs +else + lt_cv_path_LD=$LD # Let the user override the test with a path. +fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } -if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac +LD=$lt_cv_path_LD +if test -n "$LD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } -if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then - : -else - lt_prog_compiler_static_CXX= -fi + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + else + GXX=no + with_gnu_ld=no + wlarc= + fi + # PORTME: fill in a description of your system's C++ link characteristics + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct_CXX=no + hardcode_direct_absolute_CXX=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + export_dynamic_flag_spec_CXX='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + no_undefined_flag_CXX='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : -hard_links=nottested -if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} - need_locks=warn + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi -else - need_locks=no fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi +fi + aix_libpath=$lt_cv_aix_libpath__CXX +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX=$ltdll_cmds - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - ;; - esac - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } -test no = "$ld_shlibs_CXX" && can_build_shared=no - -with_gnu_ld_CXX=$with_gnu_ld + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi +fi -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes + aix_libpath=$lt_cv_aix_libpath__CXX +fi - if test yes,yes = "$GCC,$enable_shared"; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' $wl-bernotok' + allow_undefined_flag_CXX=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc_CXX=no - else - lt_cv_archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else - cat conftest.err 1>&5 + ld_shlibs_CXX=no fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } - archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='$wl--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + if test yes != "$lt_cv_apple_cc_single_mod"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi + else + ld_shlibs_CXX=no + fi + ;; + os2*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_minus_L_CXX=yes + allow_undefined_flag_CXX=unsupported + shrext_cmds=.dll + archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes_CXX=yes + ;; + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + hpux9*) + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='$wl-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object_CXX=yes + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='$wl-E' + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + hardcode_libdir_separator_CXX=: + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + hardcode_libdir_separator_CXX=: -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=.so -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname.a' - shlibpath_var=LIBPATH + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='$libname$release$shared_ext$major' - ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test ia64 = "$host_cpu"; then - # AIX 5 supports IA64 - library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line '#! .'. This would cause the generated library to - # depend on '.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # Using Import Files as archive members, it is possible to support - # filename-based versioning of shared library archives on AIX. While - # this would work for both with and without runtime linking, it will - # prevent static linking of such archives. So we do filename-based - # shared library versioning with .so extension only, which is used - # when both runtime linking and shared linking is enabled. - # Unfortunately, runtime linking may impact performance, so we do - # not want this to be the default eventually. Also, we use the - # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. - # To allow for filename-based versioning support, we need to create - # libNAME.so.V as an archive file, containing: - # *) an Import File, referring to the versioned filename of the - # archive as well as the shared archive member, telling the - # bitwidth (32 or 64) of that shared object, and providing the - # list of exported symbols of that shared object, eventually - # decorated with the 'weak' keyword - # *) the shared object with the F_LOADONLY flag set, to really avoid - # it being seen by the linker. - # At run time we better use the real file rather than another symlink, - # but for link time we create the symlink libNAME.so -> libNAME.so.V + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - case $with_aix_soname,$aix_use_runtimelinking in - # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - aix,yes) # traditional libtool - dynamic_linker='AIX unversionable lib.so' - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - aix,no) # traditional AIX only - dynamic_linker='AIX lib.a(lib.so.V)' - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - ;; - svr4,*) # full svr4 only - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,yes) # both, prefer svr4 - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # unpreferred sharedlib libNAME.a needs extra handling - postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' - postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,no) # both, prefer aix - dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling - postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' - postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' - ;; - esac - shlibpath_var=LIBPATH - fi - ;; + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; + output_verbose_link_cmd='func_echo_all' -beos*) - library_names_spec='$libname$shared_ext' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + no_undefined_flag_CXX=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='$wl-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - library_names_spec='$libname.dll.lib' + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='$wl-z,text' + allow_undefined_flag_CXX='$wl-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='$wl-Bexport' + runpath_var='LD_RUN_PATH' - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec=$LIB - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; esac - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } + test no = "$ld_shlibs_CXX" && can_build_shared=no + + GCC_CXX=$GXX + LD_CXX=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= - *) - # Assume MSVC wrapper - library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' - soname_spec='$libname$release$major$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=no - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - if test 32 = "$HPUX_IA64_MODE"; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - sys_lib_dlsearch_path_spec=/usr/lib/hpux32 - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - sys_lib_dlsearch_path_spec=/usr/lib/hpux64 - fi - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX=$prev$p + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX=$prev$p + else + postdeps_CXX="${postdeps_CXX} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX=$p + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX=$p + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test yes = "$lt_cv_prog_gnu_ld"; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" - sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" - hardcode_into_libs=yes - ;; + done -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= ;; +esac -linux*android*) - version_type=none # Android doesn't support versioned libraries. - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext' - soname_spec='$libname$release$shared_ext' - finish_cmds= - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec_CXX='-L$libdir' - ;; -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir -fi - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; -rdos*) - dynamic_linker=no - ;; -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + lt_prog_compiler_pic_CXX='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. ;; - siemens) - need_lib_prefix=no + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static_CXX='$wl-static' + ;; + esac ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + aix[4-9]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no ;; esac fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test no = "$dynamic_linker" && can_build_shared=no -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec -fi +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" - -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test yes = "$hardcode_automatic_CXX"; then - # We can hardcode non-existent directories. - if test no != "$hardcode_direct_CXX" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && - test no != "$hardcode_minus_L_CXX"; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS -if test relink = "$hardcode_action_CXX" || - test yes = "$inherit_rpath_CXX"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } +if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then + : +else + lt_prog_compiler_static_CXX= +fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test yes != "$_lt_caught_CXX_error" - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } + if test no = "$hard_links"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } +test no = "$ld_shlibs_CXX" && can_build_shared=no - ac_config_commands="$ac_config_commands libtool" +with_gnu_ld_CXX=$with_gnu_ld -# Only expand once: -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac fi -done - done -IFS=$as_save_IFS + ;; +esac + + + + + + + + + + + + + + + + + + + + + -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$ac_ct_CC" && break -done - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi -fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown - test -n "$ac_ct_CXX" && break -done - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V -int -main () -{ -#ifndef __GNUC__ - choke me -#endif + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; -int -main () -{ +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no -int -main () -{ + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; -int -main () -{ + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - test -n "$AWK" && break -done + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac fi -else - ac_cv_path_SED=$SED -fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; -esac + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; - done -IFS=$as_save_IFS +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; -rm -rf conftest.one conftest.two conftest.dir +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi + # Some binutils ld are patched to set DT_RUNPATH + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' +int +main (void) +{ + + ; + return 0; +} _ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make +if ac_fn_cxx_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : + lt_cv_shlibpath_overrides_runpath=yes fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir +fi + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes - - - - - - - - if test -z "$CTAGS"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 -$as_echo_n "checking whether ctags executable path has been provided... " >&6; } - -# Check whether --with-ctags was given. -if test "${with_ctags+set}" = set; then : - withval=$with_ctags; - if test "$withval" != yes && test "$withval" != no; then : - - CTAGS="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } - -else - - CTAGS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : - - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi -done - done -IFS=$as_save_IFS + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - -fi - -fi - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CTAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' fi -done - done -IFS=$as_save_IFS - + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -$as_echo "$CTAGS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; -fi +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; -fi +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; +rdos*) + dynamic_linker=no + ;; +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; -if test x${CTAGS} = x; then : - as_fn_error $? "Required program ctags was not found" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -$as_echo_n "checking whether ${CTAGS} is exuberant... " >&6; } -if ! ${CTAGS} --version | grep -q Exuberant; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; -SO_EXT=$shrext_cmds +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; -# -# System/Compiler Features -# +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -$as_echo_n "checking for inline... " >&6; } -if ${ac_cv_c_inline+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo () {return 0; } -$ac_kw foo_t foo () {return 0; } -#endif +*) + dynamic_linker=no + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_c_inline=$ac_kw +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -$as_echo "$ac_cv_c_inline" >&6; } - -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac - - ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features by default" >&5 -$as_echo_n "checking whether $CXX supports C++14 features by default... " >&6; } -if ${ax_cv_cxx_compile_cxx14+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201103L - -#error "This is not a C++11 compiler" - -#else - -namespace cxx11 -{ - namespace test_static_assert - { - - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi - } +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - namespace test_final_override - { +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" - struct Base - { - virtual void f() {} - }; +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - struct Derived : public Base - { - virtual void f() override {} - }; - } - namespace test_double_right_angle_brackets - { - template < typename T > - struct check {}; - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; - } - namespace test_decltype - { - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - } - namespace test_type_deduction - { - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - template < typename T > - struct is_same - { - static const bool value = true; - }; - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - } - namespace test_noexcept - { - int f() { return 0; } - int g() noexcept { return 0; } - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); - } - namespace test_constexpr - { - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); - } - namespace test_rvalue_references - { - template < int N > - struct answer - { - static constexpr int value = N; - }; - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } - } - namespace test_uniform_initialization - { - struct test - { - static const int zero {}; - static const int one {1}; - }; - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - } - namespace test_lambdas - { - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } - } - namespace test_variadic_templates - { - template - struct sum; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +printf "%s\n" "$hardcode_action_CXX" >&6; } - template <> - struct sum<> - { - static constexpr auto value = 0; - }; +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - } - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - struct foo {}; - template - using member = typename T::member_type; - template - void func(...) {} - template - void func(member*) {} + fi # test -n "$compiler" - void test(); + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" - void test() { func(0); } +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } -} // namespace cxx11 -#endif // __cplusplus >= 201103L -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. -#ifndef __cplusplus -#error "This is not a C++ compiler" -#elif __cplusplus < 201402L -#error "This is not a C++14 compiler" -#else -namespace cxx14 -{ - namespace test_polymorphic_lambdas - { - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } + ac_config_commands="$ac_config_commands libtool" - } - namespace test_binary_literals - { - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); - } +# Only expand once: - namespace test_generalized_constexpr - { - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - } - namespace test_lambda_init_capture - { +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - } + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi - namespace test_digit_separators - { +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - } - namespace test_return_type_deduction - { + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - } -} // namespace cxx14 + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -#endif // __cplusplus >= 201402L +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + test -n "$ac_ct_CC" && break +done -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ax_cv_cxx_compile_cxx14=yes -else - ax_cv_cxx_compile_cxx14=no + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx14" >&5 -$as_echo "$ax_cv_cxx_compile_cxx14" >&6; } - if test x$ax_cv_cxx_compile_cxx14 = xyes; then - ac_success=yes +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`$as_echo "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++14 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : - $as_echo_n "(cached) " >&6 +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi -#ifndef __cplusplus +fi -#error "This is not a C++ compiler" -#elif __cplusplus < 201103L +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } -#error "This is not a C++11 compiler" +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion -version; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -#else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -namespace cxx11 +int +main (void) { +#ifndef __GNUC__ + choke me +#endif - namespace test_static_assert - { - - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; - - } + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu - namespace test_final_override - { +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu - struct Base - { - virtual void f() {} - }; +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+y} +ac_save_CFLAGS=$CFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - struct Derived : public Base - { - virtual void f() override {} - }; +int +main (void) +{ - } + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +else $as_nop + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - namespace test_double_right_angle_brackets - { +int +main (void) +{ - template < typename T > - struct check {}; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; +else $as_nop + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - } +int +main (void) +{ - namespace test_decltype - { + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi - } +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi - namespace test_type_deduction - { +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi +fi - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template < typename T > - struct is_same - { - static const bool value = true; - }; +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - } + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - namespace test_noexcept - { +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - int f() { return 0; } - int g() noexcept { return 0; } - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); + test -n "$ac_ct_CXX" && break +done - } + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi - namespace test_constexpr - { + fi +fi +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 +printf %s "checking whether the compiler supports GNU C++... " >&6; } +if test ${ac_cv_cxx_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } +int +main (void) +{ +#ifndef __GNUC__ + choke me +#endif - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_rvalue_references - { +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+y} +ac_save_CXXFLAGS=$CXXFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +printf %s "checking whether $CXX accepts -g... " >&6; } +if test ${ac_cv_prog_cxx_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template < int N > - struct answer - { - static constexpr int value = N; - }; +int +main (void) +{ - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_g=yes +else $as_nop + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } +int +main (void) +{ - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_uniform_initialization - { +else $as_nop + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - struct test - { - static const int zero {}; - static const int one {1}; - }; +int +main (void) +{ - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } +if test $ac_test_CXXFLAGS; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +printf %s "checking for $CXX option to enable C++11 features... " >&6; } +if test ${ac_cv_prog_cxx_11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_11=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx11_program +_ACEOF +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx11" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 +printf %s "checking for $CXX option to enable C++98 features... " >&6; } +if test ${ac_cv_prog_cxx_98+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_98=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx98_program +_ACEOF +for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx98=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx98" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi - } +if test "x$ac_cv_prog_cxx_cxx98" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 +fi +fi - namespace test_lambdas - { +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } - } + test -n "$AWK" && break +done - namespace test_variadic_templates - { +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac - template - struct sum; + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + # Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac - } + done +IFS=$as_save_IFS - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { +rm -rf conftest.one conftest.two conftest.dir - struct foo {}; +fi + if test ${ac_cv_path_install+y}; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } - template - using member = typename T::member_type; +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - template - void func(...) {} +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - template - void func(member*) {} +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - void test(); - void test() { func(0); } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } +fi - } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval test \${ac_cv_prog_make_${ac_make}_set+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + SET_MAKE= +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi -} // namespace cxx11 -#endif // __cplusplus >= 201103L -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. -#ifndef __cplusplus -#error "This is not a C++ compiler" -#elif __cplusplus < 201402L -#error "This is not a C++14 compiler" -#else + if test -z "$CTAGS" +then : -namespace cxx14 -{ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +printf %s "checking whether ctags executable path has been provided... " >&6; } - namespace test_polymorphic_lambdas - { +# Check whether --with-ctags was given. +if test ${with_ctags+y} +then : + withval=$with_ctags; + if test "$withval" != yes && test "$withval" != no +then : - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } + CTAGS="$withval" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } - } +else $as_nop - namespace test_binary_literals - { + CTAGS="" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CTAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - } + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - namespace test_generalized_constexpr - { - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); +fi - } +fi - namespace test_lambda_init_capture - { +else $as_nop - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CTAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - } + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - namespace test_digit_separators - { - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); - } +fi - namespace test_return_type_deduction - { - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } +fi - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } - } -} // namespace cxx14 -#endif // __cplusplus >= 201402L +if test x${CTAGS} = x +then : + as_fn_error $? "Required program ctags was not found" "$LINENO" 5 +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 +printf %s "checking whether ${CTAGS} is exuberant... " >&6; } +if ! ${CTAGS} --version | grep -q Exuberant +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi + +SO_EXT=$shrext_cmds + +# +# System/Compiler Features +# +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +printf %s "checking for inline... " >&6; } +if test ${ac_cv_c_inline+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo (void) {return 0; } +$ac_kw foo_t foo (void) {return 0; } +#endif _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval $cachevar=yes -else - eval $cachevar=no +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_c_inline=$ac_kw fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CXX="$ac_save_CXX" +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + fi -eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +printf "%s\n" "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no - if test x$ax_cxx_compile_cxx14_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX14=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 -$as_echo "$as_me: No compiler with C++14 support was found" >&6;} - else - HAVE_CXX14=1 - -$as_echo "#define HAVE_CXX14 1" >>confdefs.h - fi -if test x$HAVE_CXX14 != x1; then : - ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 -$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } -if ${ax_cv_cxx_compile_cxx11+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 +printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17444,11 +17709,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -17696,31 +17963,200 @@ namespace cxx11 + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture + { + + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + + } + + namespace test_digit_separators + { + + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L + + + _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ax_cv_cxx_compile_cxx11=yes -else - ax_cv_cxx_compile_cxx11=no +if ac_fn_cxx_try_compile "$LINENO" +then : + eval $cachevar=yes +else $as_nop + eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 -$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } - if test x$ax_cv_cxx_compile_cxx11 = xyes; then - ac_success=yes +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx14_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX14=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} + else + HAVE_CXX14=1 + +printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h + fi +if test x$HAVE_CXX14 != x1 +then : + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + + + + if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : - $as_echo_n "(cached) " >&6 -else + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17759,11 +18195,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -18012,17 +18450,18 @@ namespace cxx11 _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : eval $cachevar=yes -else +else $as_nop eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then @@ -18050,287 +18489,281 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test x$ac_success = xno; then HAVE_CXX11=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 -$as_echo "#define HAVE_CXX11 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h fi - fi -for ac_func in memset -do : - ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMSET 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes +then : + printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h fi -done -for ac_func in rint -do : - ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_RINT 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes +then : + printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h fi -done -for ac_func in socket -do : - ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SOCKET 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes +then : + printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h fi -done -for ac_func in recvmsg + + for ac_func in recvmsg do : ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" -if test "x$ac_cv_func_recvmsg" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_RECVMSG 1 -_ACEOF +if test "x$ac_cv_func_recvmsg" = xyes +then : + printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h HAVE_RECVMSG=1 -else +else $as_nop HAVE_RECVMSG=0 fi -done -for ac_func in sqrt -do : - ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQRT 1 -_ACEOF +done +ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes +then : + printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h fi -done -for ac_func in strerror -do : - ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRERROR 1 -_ACEOF +ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes +then : + printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h fi -done - -for ac_header in arpa/inet.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ARPA_INET_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h fi -done - -for ac_header in netdb.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETDB_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes +then : + printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h fi -done - -for ac_header in netinet/in.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NETINET_IN_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes +then : + printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h fi -done - -for ac_header in sys/file.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_FILE_H 1 -_ACEOF +ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h fi -done +ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h -for ac_header in sys/ioctl.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_IOCTL_H 1 -_ACEOF +fi + +ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h fi -done +ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes +then : -for ac_header in sys/socket.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_SOCKET_H 1 -_ACEOF +printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h -fi -done +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } -if ${ac_cv_header_stdbool_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +printf %s "checking for stdbool.h that conforms to C99... " >&6; } +if test ${ac_cv_header_stdbool_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include - #include - #ifndef bool - "error: bool is not defined" - #endif - #ifndef false - "error: false is not defined" - #endif - #if false - "error: false is not 0" + #ifndef __bool_true_false_are_defined + #error "__bool_true_false_are_defined is not defined" #endif - #ifndef true - "error: true is not defined" + char a[__bool_true_false_are_defined == 1 ? 1 : -1]; + + /* Regardless of whether this is C++ or "_Bool" is a + valid type name, "true" and "false" should be usable + in #if expressions and integer constant expressions, + and "bool" should be a valid type name. */ + + #if !true + #error "'true' is not true" #endif #if true != 1 - "error: true is not 1" + #error "'true' is not equal to 1" #endif - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" + char b[true == 1 ? 1 : -1]; + char c[true]; + + #if false + #error "'false' is not false" + #endif + #if false != 0 + #error "'false' is not equal to 0" #endif + char d[false == 0 ? 1 : -1]; + + enum { e = false, f = true, g = false * true, h = true * 256 }; + + char i[(bool) 0.5 == true ? 1 : -1]; + char j[(bool) 0.0 == false ? 1 : -1]; + char k[sizeof (bool) > 0 ? 1 : -1]; + + struct sb { bool s: 1; bool t; } s; + char l[sizeof s.t > 0 ? 1 : -1]; - struct s { _Bool s: 1; _Bool t; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(_Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (_Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - _Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + bool m[h]; + char n[sizeof m == h * sizeof m[0] ? 1 : -1]; + char o[-1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ - _Bool q = true; - _Bool *pq = &q; + bool p = true; + bool *pp = &p; + + /* C 1999 specifies that bool, true, and false are to be + macros, but C++ 2011 and later overrule this. */ + #if __cplusplus < 201103 + #ifndef bool + #error "bool is not defined" + #endif + #ifndef false + #error "false is not defined" + #endif + #ifndef true + #error "true is not defined" + #endif + #endif + + /* If _Bool is available, repeat with it all the tests + above that used bool. */ + #ifdef HAVE__BOOL + struct sB { _Bool s: 1; _Bool t; } t; + + char q[(_Bool) 0.5 == true ? 1 : -1]; + char r[(_Bool) 0.0 == false ? 1 : -1]; + char u[sizeof (_Bool) > 0 ? 1 : -1]; + char v[sizeof t.t > 0 ? 1 : -1]; + + _Bool w[h]; + char x[sizeof m == h * sizeof m[0] ? 1 : -1]; + char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; + _Bool z = true; + _Bool *pz = &p; + #endif int -main () +main (void) { - bool e = &s; - *pq |= q; - *pq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq); + bool ps = &s; + *pp |= p; + *pp |= ! p; + + #ifdef HAVE__BOOL + _Bool pt = &t; + *pz |= z; + *pz |= ! z; + #endif + + /* Refer to every declared value, so they cannot be + discarded as unused. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + + !l + !m + !n + !o + !p + !pp + !ps + #ifdef HAVE__BOOL + + !q + !r + !u + !v + !w + !x + !y + !z + !pt + #endif + ); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_header_stdbool_h=yes -else +else $as_nop ac_cv_header_stdbool_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -$as_echo "$ac_cv_header_stdbool_h" >&6; } - ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE__BOOL 1 -_ACEOF - - -fi - - -for ac_header in stdlib.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" -if test "x$ac_cv_header_stdlib_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STDLIB_H 1 -_ACEOF - -fi - -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -$as_echo_n "checking for GNU libc compatible malloc... " >&6; } -if ${ac_cv_func_malloc_0_nonnull+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_malloc_0_nonnull=no -else +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +printf %s "checking for GNU libc compatible malloc... " >&6; } +if test ${ac_cv_func_malloc_0_nonnull+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + case "$host_os" in # (( + # Guess yes on platforms where we know the result. + *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ + | hpux* | solaris* | cygwin* | mingw* | msys* ) + ac_cv_func_malloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_malloc_0_nonnull=no ;; + esac +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined STDC_HEADERS || defined HAVE_STDLIB_H -# include -#else -char *malloc (); -#endif +#include int -main () +main (void) { -return ! malloc (0); +void *p = malloc (0); + int result = !p; + free (p); + return result; ; return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : +if ac_fn_cxx_try_run "$LINENO" +then : ac_cv_func_malloc_0_nonnull=yes -else +else $as_nop ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18338,14 +18771,15 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes +then : -$as_echo "#define HAVE_MALLOC 1" >>confdefs.h +printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h -else - $as_echo "#define HAVE_MALLOC 0" >>confdefs.h +else $as_nop + printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; @@ -18354,7 +18788,7 @@ else esac -$as_echo "#define malloc rpl_malloc" >>confdefs.h +printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h fi @@ -18364,11 +18798,12 @@ HAVE_OPENMP=0 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 -$as_echo_n "checking for OpenMP flag of C++ compiler... " >&6; } -if ${ax_cv_cxx_openmp+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +printf %s "checking for OpenMP flag of C++ compiler... " >&6; } +if test ${ax_cv_cxx_openmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop saveCXXFLAGS=$CXXFLAGS ax_cv_cxx_openmp=unknown # Flags to try: -fopenmp (gcc), -mp (SGI & PGI), @@ -18409,17 +18844,18 @@ main() } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ax_cv_cxx_openmp=$ax_openmp_flag; break fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done CXXFLAGS=$saveCXXFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 -$as_echo "$ax_cv_cxx_openmp" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +printf "%s\n" "$ax_cv_cxx_openmp" >&6; } if test "x$ax_cv_cxx_openmp" = "xunknown"; then : else @@ -18427,27 +18863,28 @@ else OPENMP_CXXFLAGS=$ax_cv_cxx_openmp fi -$as_echo "#define HAVE_OPENMP 1" >>confdefs.h +printf "%s\n" "#define HAVE_OPENMP 1" >>confdefs.h fi -if test x$OPENMP_CXXFLAGS != x; then : +if test x$OPENMP_CXXFLAGS != x +then : HAVE_OPENMP=1 fi -if test x$HAVE_OPENMP != x1; then : +if test x$HAVE_OPENMP != x1 +then : -else +else $as_nop CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_PTRDIFF_T 1 -_ACEOF +printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h fi @@ -18457,9 +18894,7 @@ case $ac_cv_c_int16_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int16_t $ac_cv_c_int16_t -_ACEOF +printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h ;; esac @@ -18468,9 +18903,7 @@ case $ac_cv_c_int32_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int32_t $ac_cv_c_int32_t -_ACEOF +printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h ;; esac @@ -18479,9 +18912,7 @@ case $ac_cv_c_int64_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int64_t $ac_cv_c_int64_t -_ACEOF +printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h ;; esac @@ -18490,42 +18921,64 @@ case $ac_cv_c_int8_t in #( no|yes) ;; #( *) -cat >>confdefs.h <<_ACEOF -#define int8_t $ac_cv_c_int8_t -_ACEOF +printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h ;; esac -ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = xyes; then : -else + ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default +" +if test "x$ac_cv_type_pid_t" = xyes +then : + +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if defined _WIN64 && !defined __CYGWIN__ + LLP64 + #endif + +int +main (void) +{ + + ; + return 0; +} -cat >>confdefs.h <<_ACEOF -#define pid_t int _ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_pid_type='int' +else $as_nop + ac_pid_type='__int64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h + fi + ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : +if test "x$ac_cv_type_size_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF +printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes; then : +if test "x$ac_cv_type_ssize_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define ssize_t int -_ACEOF +printf "%s\n" "#define ssize_t int" >>confdefs.h fi @@ -18535,9 +18988,7 @@ case $ac_cv_c_uint16_t in #( *) -cat >>confdefs.h <<_ACEOF -#define uint16_t $ac_cv_c_uint16_t -_ACEOF +printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h ;; esac @@ -18546,12 +18997,10 @@ case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT32_T 1" >>confdefs.h +printf "%s\n" "#define _UINT32_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint32_t $ac_cv_c_uint32_t -_ACEOF +printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h ;; esac @@ -18560,12 +19009,10 @@ case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT64_T 1" >>confdefs.h +printf "%s\n" "#define _UINT64_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint64_t $ac_cv_c_uint64_t -_ACEOF +printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h ;; esac @@ -18574,21 +19021,20 @@ case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) -$as_echo "#define _UINT8_T 1" >>confdefs.h +printf "%s\n" "#define _UINT8_T 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define uint8_t $ac_cv_c_uint8_t -_ACEOF +printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 -$as_echo_n "checking for long double with more range or precision than double... " >&6; } -if ${ac_cv_type_long_double_wider+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 +printf %s "checking for long double with more range or precision than double... " >&6; } +if test ${ac_cv_type_long_double_wider+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18605,7 +19051,7 @@ else } int -main () +main (void) { static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) + (DBL_MANT_DIG < LDBL_MANT_DIG) @@ -18620,24 +19066,26 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_type_long_double_wider=yes -else +else $as_nop ac_cv_type_long_double_wider=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 -$as_echo "$ac_cv_type_long_double_wider" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 +printf "%s\n" "$ac_cv_type_long_double_wider" >&6; } if test $ac_cv_type_long_double_wider = yes; then -$as_echo "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h +printf "%s\n" "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h fi HAVE_FLOAT128=0 -if test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1; then : +if test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1 +then : HAVE_FLOAT128=0 fi @@ -18647,52 +19095,53 @@ fi # # Check whether --enable-numa was given. -if test "${enable_numa+set}" = set; then : +if test ${enable_numa+y} +then : enableval=$enable_numa; enable_numa=no -else +else $as_nop enable_numa=yes fi HAVE_NUMA=0 -if test x$enable_numa != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -$as_echo_n "checking for numa_node_of_cpu in -lnuma... " >&6; } -if ${ac_cv_lib_numa_numa_node_of_cpu+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_numa != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } +if test ${ac_cv_lib_numa_numa_node_of_cpu+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lnuma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char numa_node_of_cpu (); +namespace conftest { + extern "C" int numa_node_of_cpu (); +} int -main () +main (void) { -return numa_node_of_cpu (); +return conftest::numa_node_of_cpu (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_numa_numa_node_of_cpu=yes -else +else $as_nop ac_cv_lib_numa_numa_node_of_cpu=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -$as_echo "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes +then : HAVE_NUMA=1 LIBS="$LIBS -lnuma" @@ -18705,52 +19154,53 @@ fi # # Check whether --enable-hwloc was given. -if test "${enable_hwloc+set}" = set; then : +if test ${enable_hwloc+y} +then : enableval=$enable_hwloc; enable_hwloc=no -else +else $as_nop enable_hwloc=yes fi HAVE_HWLOC=0 -if test x$enable_hwloc != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -$as_echo_n "checking for hwloc_topology_init in -lhwloc... " >&6; } -if ${ac_cv_lib_hwloc_hwloc_topology_init+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_hwloc != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } +if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lhwloc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char hwloc_topology_init (); +namespace conftest { + extern "C" int hwloc_topology_init (); +} int -main () +main (void) { -return hwloc_topology_init (); +return conftest::hwloc_topology_init (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_hwloc_hwloc_topology_init=yes -else +else $as_nop ac_cv_lib_hwloc_hwloc_topology_init=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -$as_echo "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes +then : HAVE_HWLOC=1 LIBS="$LIBS -lhwloc" @@ -18763,52 +19213,53 @@ fi # # Check whether --enable-vma was given. -if test "${enable_vma+set}" = set; then : +if test ${enable_vma+y} +then : enableval=$enable_vma; enable_vma=yes -else +else $as_nop enable_vma=no fi HAVE_VMA=0 -if test x$enable_vma != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -$as_echo_n "checking for recvfrom_zcopy in -lvma... " >&6; } -if ${ac_cv_lib_vma_recvfrom_zcopy+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test x$enable_vma != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } +if test ${ac_cv_lib_vma_recvfrom_zcopy+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lvma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char recvfrom_zcopy (); +namespace conftest { + extern "C" int recvfrom_zcopy (); +} int -main () +main (void) { -return recvfrom_zcopy (); +return conftest::recvfrom_zcopy (); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : ac_cv_lib_vma_recvfrom_zcopy=yes -else +else $as_nop ac_cv_lib_vma_recvfrom_zcopy=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -$as_echo "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes +then : HAVE_VMA=1 LIBS="$LIBS -lvma" @@ -18832,9 +19283,10 @@ fi # Check whether --with-cuda_home was given. -if test "${with_cuda_home+set}" = set; then : +if test ${with_cuda_home+y} +then : withval=$with_cuda_home; -else +else $as_nop with_cuda_home=/usr/local/cuda fi @@ -18842,9 +19294,10 @@ fi # Check whether --enable-cuda was given. -if test "${enable_cuda+set}" = set; then : +if test ${enable_cuda+y} +then : enableval=$enable_cuda; enable_cuda=no -else +else $as_nop enable_cuda=yes fi @@ -18857,11 +19310,12 @@ fi # Extract the first word of "nvcc", so it can be a program name with args. set dummy nvcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVCC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVCC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $NVCC in [\\/]* | ?:[\\/]*) ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. @@ -18872,11 +19326,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18889,21 +19347,22 @@ esac fi NVCC=$ac_cv_path_NVCC if test -n "$NVCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -$as_echo "$NVCC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +printf "%s\n" "$NVCC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "nvprune", so it can be a program name with args. set dummy nvprune; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NVPRUNE+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVPRUNE+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $NVPRUNE in [\\/]* | ?:[\\/]*) ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. @@ -18914,11 +19373,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18931,21 +19394,22 @@ esac fi NVPRUNE=$ac_cv_path_NVPRUNE if test -n "$NVPRUNE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -$as_echo "$NVPRUNE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +printf "%s\n" "$NVPRUNE" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "cuobjdump", so it can be a program name with args. set dummy cuobjdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CUOBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CUOBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CUOBJDUMP in [\\/]* | ?:[\\/]*) ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. @@ -18956,11 +19420,15 @@ as_dummy="$CUDA_HOME/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18973,19 +19441,19 @@ esac fi CUOBJDUMP=$ac_cv_path_CUOBJDUMP if test -n "$CUOBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -$as_echo "$CUOBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +printf "%s\n" "$CUOBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi fi if test "$HAVE_CUDA" = "1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 -$as_echo_n "checking for a working CUDA installation... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +printf %s "checking for a working CUDA installation... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -18999,20 +19467,21 @@ $as_echo_n "checking for a working CUDA installation... " >&6; } #include #include int -main () +main (void) { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" @@ -19026,27 +19495,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include #include int -main () +main (void) { cudaMalloc(0, 0); ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if ac_fn_cxx_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } HAVE_CUDA=0 fi @@ -19058,9 +19528,10 @@ $as_echo "no" >&6; } # Check whether --with-nvcc_flags was given. -if test "${with_nvcc_flags+set}" = set; then : +if test ${with_nvcc_flags+y} +then : withval=$with_nvcc_flags; -else +else $as_nop with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi @@ -19077,16 +19548,17 @@ fi # Check whether --with-gpu_archs was given. -if test "${with_gpu_archs+set}" = set; then : +if test ${with_gpu_archs+y} +then : withval=$with_gpu_archs; -else +else $as_nop with_gpu_archs='auto' fi if test "$HAVE_CUDA" = "1"; then if test "$with_gpu_archs" = "auto"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 -$as_echo_n "checking which CUDA architectures to target... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +printf %s "checking which CUDA architectures to target... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -19095,12 +19567,13 @@ $as_echo_n "checking which CUDA architectures to target... " >&6; } LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' - if test "$cross_compiling" = yes; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19111,7 +19584,7 @@ else #include #include int -main () +main (void) { std::set archs; @@ -19146,12 +19619,17 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : +if ac_fn_cxx_try_run "$LINENO" +then : GPU_ARCHS=`cat confarchs.out` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 -$as_echo "$GPU_ARCHS" >&6; } -else + ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) + GPU_ARCHS=$ar_valid + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +printf "%s\n" "$GPU_ARCHS" >&6; } +else $as_nop as_fn_error $? "failed to find any" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19167,32 +19645,32 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 -$as_echo_n "checking for valid CUDA architectures... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 +printf %s "checking for valid CUDA architectures... " >&6; } ar_requested=$( echo "$GPU_ARCHS" | wc -w ) ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) if test "$ar_requested" = "$ar_found"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else as_fn_error $? "only architectures $ar_valid are supported" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 -$as_echo_n "checking for Pascal-style CUDA managed memory... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 +printf %s "checking for Pascal-style CUDA managed memory... " >&6; } cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) if ! echo $cm_invalid | ${GREP} -q PRE; then GPU_PASCAL_MANAGEDMEM=1 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else GPU_PASCAL_MANAGEDMEM=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi else GPU_PASCAL_MANAGEDMEM=0 @@ -19202,15 +19680,17 @@ $as_echo "no" >&6; } # Check whether --with-shared_mem was given. -if test "${with_shared_mem+set}" = set; then : +if test ${with_shared_mem+y} +then : withval=$with_shared_mem; -else +else $as_nop with_shared_mem=16384 fi GPU_SHAREDMEM=$with_shared_mem -if test x$HAVE_CUDA = x0; then : +if test x$HAVE_CUDA = x0 +then : GPU_SHAREDMEM=0 fi @@ -19221,9 +19701,10 @@ fi # Check whether --with-alignment was given. -if test "${with_alignment+set}" = set; then : +if test ${with_alignment+y} +then : withval=$with_alignment; -else +else $as_nop with_alignment=4096 fi @@ -19239,21 +19720,23 @@ ALIGNMENT=$with_alignment # Check whether --with-logging_dir was given. -if test "${with_logging_dir+set}" = set; then : +if test ${with_logging_dir+y} +then : withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir -else +else $as_nop HAVE_TMPFS=/tmp fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 -$as_echo_n "checking for /dev/shm... " >&6; } -if ${ac_cv_file__dev_shm+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +printf %s "checking for /dev/shm... " >&6; } +if test ${ac_cv_file__dev_shm+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/shm"; then @@ -19262,9 +19745,10 @@ else ac_cv_file__dev_shm=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 -$as_echo "$ac_cv_file__dev_shm" >&6; } -if test "x$ac_cv_file__dev_shm" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +printf "%s\n" "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes +then : HAVE_TMPFS=/dev/shm/bifrost fi @@ -19272,11 +19756,12 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 -$as_echo_n "checking for /Volumes/RAMDisk... " >&6; } -if ${ac_cv_file__Volumes_RAMDisk+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +printf %s "checking for /Volumes/RAMDisk... " >&6; } +if test ${ac_cv_file__Volumes_RAMDisk+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/Volumes/RAMDisk"; then @@ -19285,9 +19770,10 @@ else ac_cv_file__Volumes_RAMDisk=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 -$as_echo "$ac_cv_file__Volumes_RAMDisk" >&6; } -if test "x$ac_cv_file__Volumes_RAMDisk" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes +then : HAVE_TMPFS=/Volumes/RAMDisk/bifrost fi @@ -19295,11 +19781,12 @@ fi fi if test "$HAVE_TMPFS" = "/tmp"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 -$as_echo_n "checking for /tmp... " >&6; } -if ${ac_cv_file__tmp+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +printf %s "checking for /tmp... " >&6; } +if test ${ac_cv_file__tmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/tmp"; then @@ -19308,15 +19795,16 @@ else ac_cv_file__tmp=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 -$as_echo "$ac_cv_file__tmp" >&6; } -if test "x$ac_cv_file__tmp" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +printf "%s\n" "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes +then : HAVE_TMPFS=/tmp fi - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 -$as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} HAVE_TMPFS=/tmp/bifrost fi @@ -19327,15 +19815,17 @@ $as_echo "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging # # Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : +if test ${enable_debug+y} +then : enableval=$enable_debug; enable_debug=yes -else +else $as_nop enable_debug=no fi HAVE_DEBUG=0 -if test x$enable_debug != xno; then : +if test x$enable_debug != xno +then : HAVE_DEBUG=1 CXXFLAGS="$CXXFLAGS -g" @@ -19343,15 +19833,17 @@ if test x$enable_debug != xno; then : fi # Check whether --enable-trace was given. -if test "${enable_trace+set}" = set; then : +if test ${enable_trace+y} +then : enableval=$enable_trace; enable_trace=yes -else +else $as_nop enable_trace=no fi HAVE_TRACE=0 -if test x$enable_trace != xno; then : +if test x$enable_trace != xno +then : HAVE_TRACE=1 fi @@ -19359,16 +19851,17 @@ fi # Check whether --enable-native_arch was given. -if test "${enable_native_arch+set}" = set; then : +if test ${enable_native_arch+y} +then : enableval=$enable_native_arch; enable_native_arch=no -else +else $as_nop enable_native_arch=yes fi if test "$enable_native_arch" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler accepts '-march=native'" >&5 -$as_echo_n "checking if the compiler accepts '-march=native'... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler accepts '-march=native'" >&5 +printf %s "checking if the compiler accepts '-march=native'... " >&6; } CXXFLAGS_temp="$CXXFLAGS -march=native" @@ -19379,7 +19872,7 @@ $as_echo_n "checking if the compiler accepts '-march=native'... " >&6; } int -main () +main (void) { int i = 5; @@ -19387,31 +19880,34 @@ main () return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : CXXFLAGS="$CXXFLAGS -march=native" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop enable_native_arch=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi # Check whether --enable-cuda_debug was given. -if test "${enable_cuda_debug+set}" = set; then : +if test ${enable_cuda_debug+y} +then : enableval=$enable_cuda_debug; enable_cuda_debug=yes -else +else $as_nop enable_cuda_debug=no fi HAVE_CUDA_DEBUG=0 -if test x$enable_cuda_debug != xno; then : +if test x$enable_cuda_debug != xno +then : HAVE_CUDA_DEBUG=1 NVCCFLAGS="$NVCCFLAGS -G" @@ -19422,15 +19918,17 @@ fi # # Check whether --enable-python was given. -if test "${enable_python+set}" = set; then : +if test ${enable_python+y} +then : enableval=$enable_python; enable_python=no -else +else $as_nop enable_python=yes fi HAVE_PYTHON=0 -if test x$enable_python != xno; then : +if test x$enable_python != xno +then : @@ -19441,34 +19939,39 @@ if test x$enable_python != xno; then : - if test -z "$PYTHON"; then : + if test -z "$PYTHON" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 -$as_echo_n "checking whether python executable path has been provided... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +printf %s "checking whether python executable path has been provided... " >&6; } # Check whether --with-python was given. -if test "${with_python+set}" = set; then : +if test ${with_python+y} +then : withval=$with_python; - if test "$withval" != yes && test "$withval" != no; then : + if test "$withval" != yes && test "$withval" != no +then : PYTHON="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } -else +else $as_nop PYTHON="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -19478,11 +19981,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19495,11 +20002,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19508,17 +20015,18 @@ fi fi -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. @@ -19528,11 +20036,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19545,11 +20057,11 @@ esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19564,17 +20076,19 @@ fi - if test x${PYTHON} != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 -$as_echo_n "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 -$as_echo "$as_me: WARNING: python module will not be built" >&2;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + if test x${PYTHON} != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +printf %s "checking whether $PYTHON as ctypesgen... " >&6; } + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } HAVE_PYTHON=1 fi @@ -19582,7 +20096,8 @@ fi fi # Check whether --with-pybuild_flags was given. -if test "${with_pybuild_flags+set}" = set; then : +if test ${with_pybuild_flags+y} +then : withval=$with_pybuild_flags; fi @@ -19591,7 +20106,8 @@ PYBUILDFLAGS=$with_pybuild_flags # Check whether --with-pyinstall_flags was given. -if test "${with_pyinstall_flags+set}" = set; then : +if test ${with_pyinstall_flags+y} +then : withval=$with_pyinstall_flags; fi @@ -19612,34 +20128,39 @@ PYINSTALLFLAGS=$with_pyinstall_flags - if test -z "$DOCKER"; then : + if test -z "$DOCKER" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 -$as_echo_n "checking whether docker executable path has been provided... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 +printf %s "checking whether docker executable path has been provided... " >&6; } # Check whether --with-docker was given. -if test "${with_docker+set}" = set; then : +if test ${with_docker+y} +then : withval=$with_docker; - if test "$withval" != yes && test "$withval" != no; then : + if test "$withval" != yes && test "$withval" != no +then : DOCKER="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } -else +else $as_nop DOCKER="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test "$withval" != no; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DOCKER+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DOCKER+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -19649,11 +20170,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19666,11 +20191,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19679,17 +20204,18 @@ fi fi -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # Extract the first word of "docker", so it can be a program name with args. set dummy docker; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DOCKER+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DOCKER+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. @@ -19699,11 +20225,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19716,11 +20246,11 @@ esac fi DOCKER=$ac_cv_path_DOCKER if test -n "$DOCKER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -$as_echo "$DOCKER" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19735,7 +20265,8 @@ fi -if test x${DOCKER} != xno; then : +if test x${DOCKER} != xno +then : HAVE_DOCKER=1 fi @@ -19778,7 +20309,8 @@ DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" # Check whether --enable-doxygen-doc was given. -if test "${enable_doxygen_doc+set}" = set; then : +if test ${enable_doxygen_doc+y} +then : enableval=$enable_doxygen_doc; case "$enableval" in #( @@ -19796,7 +20328,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_doc=1 @@ -19809,11 +20341,12 @@ if test "$DX_FLAG_doc" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. set dummy ${ac_tool_prefix}doxygen; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DOXYGEN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DOXYGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. @@ -19823,11 +20356,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19839,11 +20376,11 @@ esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN if test -n "$DX_DOXYGEN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 -$as_echo "$DX_DOXYGEN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +printf "%s\n" "$DX_DOXYGEN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19852,11 +20389,12 @@ if test -z "$ac_cv_path_DX_DOXYGEN"; then ac_pt_DX_DOXYGEN=$DX_DOXYGEN # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DOXYGEN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. @@ -19866,11 +20404,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19882,11 +20424,11 @@ esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN if test -n "$ac_pt_DX_DOXYGEN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 -$as_echo "$ac_pt_DX_DOXYGEN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DOXYGEN" = x; then @@ -19894,8 +20436,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOXYGEN=$ac_pt_DX_DOXYGEN @@ -19905,8 +20447,8 @@ else fi if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 -$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -19915,11 +20457,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. set dummy ${ac_tool_prefix}perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_PERL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_PERL+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. @@ -19929,11 +20472,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19945,11 +20492,11 @@ esac fi DX_PERL=$ac_cv_path_DX_PERL if test -n "$DX_PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 -$as_echo "$DX_PERL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +printf "%s\n" "$DX_PERL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19958,11 +20505,12 @@ if test -z "$ac_cv_path_DX_PERL"; then ac_pt_DX_PERL=$DX_PERL # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_PERL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_PERL+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. @@ -19972,11 +20520,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19988,11 +20540,11 @@ esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL if test -n "$ac_pt_DX_PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 -$as_echo "$ac_pt_DX_PERL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +printf "%s\n" "$ac_pt_DX_PERL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_PERL" = x; then @@ -20000,8 +20552,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PERL=$ac_pt_DX_PERL @@ -20011,8 +20563,8 @@ else fi if test "$DX_FLAG_doc$DX_PERL" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 -$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} DX_FLAG_doc=0 fi @@ -20035,7 +20587,8 @@ fi # Check whether --enable-doxygen-dot was given. -if test "${enable_doxygen_dot+set}" = set; then : +if test ${enable_doxygen_dot+y} +then : enableval=$enable_doxygen_dot; case "$enableval" in #( @@ -20044,7 +20597,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 +|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20056,7 +20609,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_dot=0 @@ -20072,11 +20625,12 @@ if test "$DX_FLAG_dot" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. set dummy ${ac_tool_prefix}dot; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DOT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DOT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. @@ -20086,11 +20640,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20102,11 +20660,11 @@ esac fi DX_DOT=$ac_cv_path_DX_DOT if test -n "$DX_DOT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 -$as_echo "$DX_DOT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +printf "%s\n" "$DX_DOT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20115,11 +20673,12 @@ if test -z "$ac_cv_path_DX_DOT"; then ac_pt_DX_DOT=$DX_DOT # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DOT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DOT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. @@ -20129,11 +20688,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20145,11 +20708,11 @@ esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT if test -n "$ac_pt_DX_DOT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 -$as_echo "$ac_pt_DX_DOT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +printf "%s\n" "$ac_pt_DX_DOT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DOT" = x; then @@ -20157,8 +20720,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOT=$ac_pt_DX_DOT @@ -20168,8 +20731,8 @@ else fi if test "$DX_FLAG_dot$DX_DOT" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 -$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} DX_FLAG_dot=0 fi @@ -20197,7 +20760,8 @@ fi # Check whether --enable-doxygen-man was given. -if test "${enable_doxygen_man+set}" = set; then : +if test ${enable_doxygen_man+y} +then : enableval=$enable_doxygen_man; case "$enableval" in #( @@ -20206,7 +20770,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 +|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20218,7 +20782,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_man=1 @@ -20251,7 +20815,8 @@ fi # Check whether --enable-doxygen-rtf was given. -if test "${enable_doxygen_rtf+set}" = set; then : +if test ${enable_doxygen_rtf+y} +then : enableval=$enable_doxygen_rtf; case "$enableval" in #( @@ -20260,7 +20825,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 +|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20272,7 +20837,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_rtf=0 @@ -20305,7 +20870,8 @@ fi # Check whether --enable-doxygen-xml was given. -if test "${enable_doxygen_xml+set}" = set; then : +if test ${enable_doxygen_xml+y} +then : enableval=$enable_doxygen_xml; case "$enableval" in #( @@ -20314,7 +20880,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 +|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20326,7 +20892,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_xml=0 @@ -20359,7 +20925,8 @@ fi # Check whether --enable-doxygen-chm was given. -if test "${enable_doxygen_chm+set}" = set; then : +if test ${enable_doxygen_chm+y} +then : enableval=$enable_doxygen_chm; case "$enableval" in #( @@ -20368,7 +20935,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 +|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20380,7 +20947,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_chm=0 @@ -20396,11 +20963,12 @@ if test "$DX_FLAG_chm" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. set dummy ${ac_tool_prefix}hhc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_HHC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_HHC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. @@ -20410,11 +20978,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20426,11 +20998,11 @@ esac fi DX_HHC=$ac_cv_path_DX_HHC if test -n "$DX_HHC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 -$as_echo "$DX_HHC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +printf "%s\n" "$DX_HHC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20439,11 +21011,12 @@ if test -z "$ac_cv_path_DX_HHC"; then ac_pt_DX_HHC=$DX_HHC # Extract the first word of "hhc", so it can be a program name with args. set dummy hhc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_HHC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_HHC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. @@ -20453,11 +21026,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20469,11 +21046,11 @@ esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC if test -n "$ac_pt_DX_HHC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 -$as_echo "$ac_pt_DX_HHC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +printf "%s\n" "$ac_pt_DX_HHC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_HHC" = x; then @@ -20481,8 +21058,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_HHC=$ac_pt_DX_HHC @@ -20492,8 +21069,8 @@ else fi if test "$DX_FLAG_chm$DX_HHC" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 -$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} DX_FLAG_chm=0 fi @@ -20524,7 +21101,8 @@ fi # Check whether --enable-doxygen-chi was given. -if test "${enable_doxygen_chi+set}" = set; then : +if test ${enable_doxygen_chi+y} +then : enableval=$enable_doxygen_chi; case "$enableval" in #( @@ -20533,7 +21111,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 +|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20545,7 +21123,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_chi=0 @@ -20578,7 +21156,8 @@ fi # Check whether --enable-doxygen-html was given. -if test "${enable_doxygen_html+set}" = set; then : +if test ${enable_doxygen_html+y} +then : enableval=$enable_doxygen_html; case "$enableval" in #( @@ -20587,10 +21166,10 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 +|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20602,7 +21181,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_html=1 @@ -20638,7 +21217,8 @@ fi # Check whether --enable-doxygen-ps was given. -if test "${enable_doxygen_ps+set}" = set; then : +if test ${enable_doxygen_ps+y} +then : enableval=$enable_doxygen_ps; case "$enableval" in #( @@ -20647,7 +21227,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 +|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -20659,7 +21239,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_ps=1 @@ -20675,11 +21255,12 @@ if test "$DX_FLAG_ps" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. set dummy ${ac_tool_prefix}latex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_LATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_LATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. @@ -20689,11 +21270,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20705,11 +21290,11 @@ esac fi DX_LATEX=$ac_cv_path_DX_LATEX if test -n "$DX_LATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 -$as_echo "$DX_LATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +printf "%s\n" "$DX_LATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20718,11 +21303,12 @@ if test -z "$ac_cv_path_DX_LATEX"; then ac_pt_DX_LATEX=$DX_LATEX # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_LATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_LATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. @@ -20732,11 +21318,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20748,11 +21338,11 @@ esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX if test -n "$ac_pt_DX_LATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 -$as_echo "$ac_pt_DX_LATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +printf "%s\n" "$ac_pt_DX_LATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_LATEX" = x; then @@ -20760,8 +21350,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_LATEX=$ac_pt_DX_LATEX @@ -20771,8 +21361,8 @@ else fi if test "$DX_FLAG_ps$DX_LATEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -20781,11 +21371,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -20795,11 +21386,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20811,11 +21406,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -$as_echo "$DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +printf "%s\n" "$DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20824,11 +21419,12 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -20838,11 +21434,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20854,11 +21454,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -20866,8 +21466,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -20877,8 +21477,8 @@ else fi if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -20887,11 +21487,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. set dummy ${ac_tool_prefix}dvips; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_DVIPS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DVIPS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. @@ -20901,11 +21502,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20917,11 +21522,11 @@ esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS if test -n "$DX_DVIPS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 -$as_echo "$DX_DVIPS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +printf "%s\n" "$DX_DVIPS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20930,11 +21535,12 @@ if test -z "$ac_cv_path_DX_DVIPS"; then ac_pt_DX_DVIPS=$DX_DVIPS # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_DVIPS+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DVIPS+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. @@ -20944,11 +21550,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20960,11 +21570,11 @@ esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS if test -n "$ac_pt_DX_DVIPS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 -$as_echo "$ac_pt_DX_DVIPS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +printf "%s\n" "$ac_pt_DX_DVIPS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_DVIPS" = x; then @@ -20972,8 +21582,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DVIPS=$ac_pt_DX_DVIPS @@ -20983,8 +21593,8 @@ else fi if test "$DX_FLAG_ps$DX_DVIPS" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -20993,11 +21603,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -21007,11 +21618,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21023,11 +21638,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -$as_echo "$DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +printf "%s\n" "$DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -21036,11 +21651,12 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -21050,11 +21666,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21066,11 +21686,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -$as_echo "$ac_pt_DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +printf "%s\n" "$ac_pt_DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -21078,8 +21698,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -21089,8 +21709,8 @@ else fi if test "$DX_FLAG_ps$DX_EGREP" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 -$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} DX_FLAG_ps=0 fi @@ -21111,7 +21731,8 @@ fi # Check whether --enable-doxygen-pdf was given. -if test "${enable_doxygen_pdf+set}" = set; then : +if test ${enable_doxygen_pdf+y} +then : enableval=$enable_doxygen_pdf; case "$enableval" in #( @@ -21120,7 +21741,7 @@ y|Y|yes|Yes|YES) test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 +|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 ;; #( n|N|no|No|NO) @@ -21132,7 +21753,7 @@ n|N|no|No|NO) ;; esac -else +else $as_nop DX_FLAG_pdf=1 @@ -21148,11 +21769,12 @@ if test "$DX_FLAG_pdf" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_PDFLATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_PDFLATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. @@ -21162,11 +21784,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21178,11 +21804,11 @@ esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX if test -n "$DX_PDFLATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 -$as_echo "$DX_PDFLATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +printf "%s\n" "$DX_PDFLATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -21191,11 +21817,12 @@ if test -z "$ac_cv_path_DX_PDFLATEX"; then ac_pt_DX_PDFLATEX=$DX_PDFLATEX # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_PDFLATEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. @@ -21205,11 +21832,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21221,11 +21852,11 @@ esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX if test -n "$ac_pt_DX_PDFLATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 -$as_echo "$ac_pt_DX_PDFLATEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_PDFLATEX" = x; then @@ -21233,8 +21864,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PDFLATEX=$ac_pt_DX_PDFLATEX @@ -21244,8 +21875,8 @@ else fi if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21254,11 +21885,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. @@ -21268,11 +21900,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21284,11 +21920,11 @@ esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -$as_echo "$DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +printf "%s\n" "$DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -21297,11 +21933,12 @@ if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. @@ -21311,11 +21948,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21327,11 +21968,11 @@ esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then @@ -21339,8 +21980,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX @@ -21350,8 +21991,8 @@ else fi if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21360,11 +22001,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. @@ -21374,11 +22016,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21390,11 +22036,11 @@ esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -$as_echo "$DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +printf "%s\n" "$DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -21403,11 +22049,12 @@ if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. @@ -21417,11 +22064,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -21433,11 +22084,11 @@ esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -$as_echo "$ac_pt_DX_EGREP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +printf "%s\n" "$ac_pt_DX_EGREP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then @@ -21445,8 +22096,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP @@ -21456,8 +22107,8 @@ else fi if test "$DX_FLAG_pdf$DX_EGREP" = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 -$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} DX_FLAG_pdf=0 fi @@ -21503,66 +22154,85 @@ PAPER_SIZE=$DOXYGEN_PAPER_SIZE esac # Rules: -if test $DX_FLAG_html -eq 1; then : +if test $DX_FLAG_html -eq 1 +then : DX_SNIPPET_html="## ------------------------------- ## +## Rules specific for HTML output. ## +## ------------------------------- ## DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ \$(DX_DOCDIR)/html " -else +else $as_nop DX_SNIPPET_html="" fi -if test $DX_FLAG_chi -eq 1; then : +if test $DX_FLAG_chi -eq 1 +then : DX_SNIPPET_chi=" DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ \$(DX_DOCDIR)/\$(PACKAGE).chi" -else +else $as_nop DX_SNIPPET_chi="" fi -if test $DX_FLAG_chm -eq 1; then : +if test $DX_FLAG_chm -eq 1 +then : DX_SNIPPET_chm="## ------------------------------ ## +## Rules specific for CHM output. ## +## ------------------------------ ## DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ \$(DX_DOCDIR)/chm\ ${DX_SNIPPET_chi} " -else +else $as_nop DX_SNIPPET_chm="" fi -if test $DX_FLAG_man -eq 1; then : +if test $DX_FLAG_man -eq 1 +then : DX_SNIPPET_man="## ------------------------------ ## +## Rules specific for MAN output. ## +## ------------------------------ ## DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ \$(DX_DOCDIR)/man " -else +else $as_nop DX_SNIPPET_man="" fi -if test $DX_FLAG_rtf -eq 1; then : +if test $DX_FLAG_rtf -eq 1 +then : DX_SNIPPET_rtf="## ------------------------------ ## +## Rules specific for RTF output. ## +## ------------------------------ ## DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ \$(DX_DOCDIR)/rtf " -else +else $as_nop DX_SNIPPET_rtf="" fi -if test $DX_FLAG_xml -eq 1; then : +if test $DX_FLAG_xml -eq 1 +then : DX_SNIPPET_xml="## ------------------------------ ## +## Rules specific for XML output. ## +## ------------------------------ ## DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ \$(DX_DOCDIR)/xml " -else +else $as_nop DX_SNIPPET_xml="" fi -if test $DX_FLAG_ps -eq 1; then : +if test $DX_FLAG_ps -eq 1 +then : DX_SNIPPET_ps="## ----------------------------- ## +## Rules specific for PS output. ## +## ----------------------------- ## DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ \$(DX_DOCDIR)/\$(PACKAGE).ps @@ -21587,11 +22257,14 @@ doxygen-ps: \$(DX_CLEAN_PS) \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi " -else +else $as_nop DX_SNIPPET_ps="" fi -if test $DX_FLAG_pdf -eq 1; then : +if test $DX_FLAG_pdf -eq 1 +then : DX_SNIPPET_pdf="## ------------------------------ ## +## Rules specific for PDF output. ## +## ------------------------------ ## DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ \$(DX_DOCDIR)/\$(PACKAGE).pdf @@ -21616,11 +22289,14 @@ doxygen-pdf: \$(DX_CLEAN_PDF) mv refman.pdf ../\$(PACKAGE).pdf " -else +else $as_nop DX_SNIPPET_pdf="" fi -if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1; then : +if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 +then : DX_SNIPPET_latex="## ------------------------------------------------- ## +## Rules specific for LaTeX (shared for PS and PDF). ## +## ------------------------------------------------- ## DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) _DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) @@ -21630,12 +22306,15 @@ DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ \$(DX_DOCDIR)/latex " -else +else $as_nop DX_SNIPPET_latex="" fi -if test $DX_FLAG_doc -eq 1; then : +if test $DX_FLAG_doc -eq 1 +then : DX_SNIPPET_doc="## --------------------------------- ## +## Format-independent Doxygen rules. ## +## --------------------------------- ## ${DX_SNIPPET_html}\ ${DX_SNIPPET_chm}\ @@ -21675,7 +22354,7 @@ DX_CLEANFILES = \\ \$(DX_CLEAN_PS) \\ \$(DX_CLEAN_PDF) \\ \$(DX_CLEAN_LATEX)" -else +else $as_nop DX_SNIPPET_doc="" fi DX_RULES="${DX_SNIPPET_doc}" @@ -21743,8 +22422,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -21774,15 +22453,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -21796,8 +22475,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;} fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -21850,7 +22529,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -21866,8 +22545,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -21890,14 +22569,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -21907,46 +22588,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -21955,13 +22636,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -21970,8 +22644,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -21983,30 +22661,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -22019,13 +22677,14 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -22052,18 +22711,20 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -22075,12 +22736,13 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -22111,7 +22773,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -22133,6 +22795,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -22146,6 +22812,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -22187,7 +22859,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -22196,7 +22868,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22259,7 +22931,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by bifrost $as_me 0.9.0, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -22313,14 +22985,16 @@ Report bugs to the package provider. bifrost home page: ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ bifrost config.status 0.9.0 -configured by $0, generated by GNU Autoconf 2.69, +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -22359,21 +23033,21 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -22401,7 +23075,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -22415,7 +23089,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -22831,8 +23505,8 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -23060,7 +23734,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -23068,17 +23742,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -23095,7 +23769,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23119,9 +23793,9 @@ $as_echo X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -23178,8 +23852,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -23222,9 +23896,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -23236,8 +23910,8 @@ which seems to be undefined. Please make sure it is defined" >&2;} ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -23785,6 +24459,7 @@ _LT_EOF esac + ltmain=$ac_aux_dir/ltmain.sh @@ -23987,8 +24662,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi @@ -23998,76 +24673,87 @@ fi echo "" -if test x$HAVE_CUDA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: cuda: yes - $GPU_ARCHS" >&5 -$as_echo "$as_me: cuda: yes - $GPU_ARCHS" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 -$as_echo "$as_me: cuda: no" >&6;} +if test x$HAVE_CUDA = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - $GPU_ARCHS" >&5 +printf "%s\n" "$as_me: cuda: yes - $GPU_ARCHS" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 +printf "%s\n" "$as_me: cuda: no" >&6;} fi -if test x$HAVE_NUMA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: numa: yes" >&5 -$as_echo "$as_me: numa: yes" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: numa: no" >&5 -$as_echo "$as_me: numa: no" >&6;} +if test x$HAVE_NUMA = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: numa: yes" >&5 +printf "%s\n" "$as_me: numa: yes" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: numa: no" >&5 +printf "%s\n" "$as_me: numa: no" >&6;} fi -if test x$HAVE_HWLOC = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc: yes" >&5 -$as_echo "$as_me: hwloc: yes" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc: no" >&5 -$as_echo "$as_me: hwloc: no" >&6;} +if test x$HAVE_HWLOC = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc: yes" >&5 +printf "%s\n" "$as_me: hwloc: yes" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc: no" >&5 +printf "%s\n" "$as_me: hwloc: no" >&6;} fi -if test x$HAVE_VMA = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: libvma: yes" >&5 -$as_echo "$as_me: libvma: yes" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: libvma: no" >&5 -$as_echo "$as_me: libvma: no" >&6;} +if test x$HAVE_VMA = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libvma: yes" >&5 +printf "%s\n" "$as_me: libvma: yes" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libvma: no" >&5 +printf "%s\n" "$as_me: libvma: no" >&6;} fi -if test x$HAVE_PYTHON = x1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: python bindings: yes" >&5 -$as_echo "$as_me: python bindings: yes" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: python bindings: no" >&5 -$as_echo "$as_me: python bindings: no" >&6;} +if test x$HAVE_PYTHON = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: python bindings: yes" >&5 +printf "%s\n" "$as_me: python bindings: yes" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: python bindings: no" >&5 +printf "%s\n" "$as_me: python bindings: no" >&6;} fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: memory alignment: $ALIGNMENT" >&5 -$as_echo "$as_me: memory alignment: $ALIGNMENT" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: memory alignment: $ALIGNMENT" >&5 +printf "%s\n" "$as_me: memory alignment: $ALIGNMENT" >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: logging directory: $HAVE_TMPFS" >&5 -$as_echo "$as_me: logging directory: $HAVE_TMPFS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: logging directory: $HAVE_TMPFS" >&5 +printf "%s\n" "$as_me: logging directory: $HAVE_TMPFS" >&6;} -if test x$enable_debug != xno; then : +if test x$enable_debug != xno +then : OPTIONS="$OPTIONS debug" fi -if test x$enable_trace != xno; then : +if test x$enable_trace != xno +then : OPTIONS="$OPTIONS trace" fi -if test x$enable_cuda_debug != xno; then : +if test x$enable_cuda_debug != xno +then : OPTIONS="$OPTIONS cuda_debug" fi -if test x$enable_native_arch != xno; then : +if test x$enable_native_arch != xno +then : OPTIONS="$OPTIONS native" fi -if test x$HAVE_FLOAT128 != x0; then : +if test x$HAVE_FLOAT128 != x0 +then : OPTIONS="$OPTIONS float128" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: options:$OPTIONS" >&5 -$as_echo "$as_me: options:$OPTIONS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: options:$OPTIONS" >&5 +printf "%s\n" "$as_me: options:$OPTIONS" >&6;} echo "" echo "Bifrost is now ready to be compiled. Please run 'make'" echo "" + From d0c540bff7ea50ed36e0e84e16b0c314fa64b213 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 17 Dec 2021 16:19:17 -0700 Subject: [PATCH 0373/1155] Try c3450e4 out. --- BifrostDemo.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BifrostDemo.ipynb b/BifrostDemo.ipynb index 7aecd0218..5cc0e74c0 100644 --- a/BifrostDemo.ipynb +++ b/BifrostDemo.ipynb @@ -104,8 +104,8 @@ "\n", "# Use autoconf version:\n", "git checkout autoconf\n", - "git checkout 423d2d71149adedf893c0b55c9cac946bcde08fe\n", - "./configure --with-gpu-archs=37\n", + "git checkout c3450e4ebd2746cbc9e701d0f2bfbb06adfb4f0a\n", + "./configure\n", "\n", "# Build and install:\n", "make -j all\n", From daaaebb539387775092cb13c46d9a015c5431ca8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 17 Dec 2021 17:35:10 -0700 Subject: [PATCH 0374/1155] This seems wrong. --- src/Makefile.in | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index a94ac3fbb..90bdfd123 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -14,6 +14,8 @@ DOXYGEN ?= @DX_DOXYGEN@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ +HAVE_CXX14 ?= @HAVE_CXX14@ + HAVE_RECVMSG ?= @HAVE_RECVMSG@ HAVE_CUDA ?= @HAVE_CUDA@ @@ -87,8 +89,13 @@ NVCC_GENCODE ?= $(foreach arch, $(GPU_ARCHS_VALID), \ -gencode arch=compute_$(GPU_ARCH_LATEST),\"code=compute_$(GPU_ARCH_LATEST)\" endif -CXXFLAGS += -std=c++11 -NVCCFLAGS += -std=c++11 $(NVCC_GENCODE) +ifeq ($(HAVE_CXX14),1) + CXXFLAGS += -std=c++14 + NVCCFLAGS += -std=c++14 $(NVCC_GENCODE) +else + CXXFLAGS += -std=c++11 + NVCCFLAGS += -std=c++11 -Xcompiler "-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT" $(NVCC_GENCODE) +endif #NVCCFLAGS += -Xcudafe "--diag_suppress=unrecognized_gcc_pragma" #NVCCFLAGS += --expt-relaxed-constexpr From 599f3c1edf81143dfd689f21defefd769fb3faf9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 17 Dec 2021 18:23:24 -0700 Subject: [PATCH 0375/1155] Move the C++14 toggling into configure. --- configure | 13 +++++++++++++ configure.ac | 10 ++++++++++ src/Makefile.in | 8 +------- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/configure b/configure index e6d737611..037565fd0 100755 --- a/configure +++ b/configure @@ -22385,6 +22385,19 @@ PACKAGE_VERSION_MINOR=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $2}'` PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $3}'` +# +# C++14/C++11 toggling +# + +if test x$HAVE_CXX14 = x1 +then : + CXXFLAGS="-std=c++14 $CXXFLAGS" + NVCCFLAGS="-std=c++14 $NVCCFLAGS" +else $as_nop + CXXFLAGS="-std=c++11 $CXXFLAGS" + NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS" +fi + # # Linking flags # diff --git a/configure.ac b/configure.ac index f8789087a..511cddd12 100644 --- a/configure.ac +++ b/configure.ac @@ -268,6 +268,16 @@ AC_SUBST([PACKAGE_VERSION_MAJOR], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print AC_SUBST([PACKAGE_VERSION_MINOR], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $2}'`]) AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $3}'`]) +# +# C++14/C++11 toggling +# + +AS_IF([test x$HAVE_CXX14 = x1], + [CXXFLAGS="-std=c++14 $CXXFLAGS" + NVCCFLAGS="-std=c++14 $NVCCFLAGS"], + [CXXFLAGS="-std=c++11 $CXXFLAGS" + NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS"]) + # # Linking flags # diff --git a/src/Makefile.in b/src/Makefile.in index 90bdfd123..a53ca6596 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -89,13 +89,7 @@ NVCC_GENCODE ?= $(foreach arch, $(GPU_ARCHS_VALID), \ -gencode arch=compute_$(GPU_ARCH_LATEST),\"code=compute_$(GPU_ARCH_LATEST)\" endif -ifeq ($(HAVE_CXX14),1) - CXXFLAGS += -std=c++14 - NVCCFLAGS += -std=c++14 $(NVCC_GENCODE) -else - CXXFLAGS += -std=c++11 - NVCCFLAGS += -std=c++11 -Xcompiler "-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT" $(NVCC_GENCODE) -endif +NVCCFLAGS += $(NVCC_GENCODE) #NVCCFLAGS += -Xcudafe "--diag_suppress=unrecognized_gcc_pragma" #NVCCFLAGS += --expt-relaxed-constexpr From bb01d95a58a41807cb2257d072d0dc63639d508f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 17 Dec 2021 18:33:22 -0700 Subject: [PATCH 0376/1155] Better telmetry message. --- python/Makefile.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/Makefile.in b/python/Makefile.in index b68ac2f9a..6a4cd1a51 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -60,8 +60,8 @@ else endif @echo "*************************************************************************" @echo "By default Bifrost installs with basic Python telemetry enabled in order" - @echo "order to help inform how the software is used and to help inform future" - @echo "development. You can opt out of telemetry collection using:" + @echo "to help inform how the software is used for future development. You can" + @echo "opt out of telemetry collection using:" @echo ">>> from bifrost import telemetry" @echo ">>> telemetry.disable()" @echo "*************************************************************************" From 316871d9602c782a709812026e9026158da9c5db Mon Sep 17 00:00:00 2001 From: Jack Date: Sun, 9 Jan 2022 20:02:18 +0000 Subject: [PATCH 0377/1155] Revert "Implement source blanking." This reverts commit b107bfc5f6a35e6aaf8e6cbca5d380d0f358ecdf. Don't do this for now to make things faster --- src/formats/snap2.hpp | 60 +++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 36 deletions(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index 16140be77..ea93244b3 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -33,6 +33,11 @@ #include // SSE #include +// TODO: parameterize somewhere. This isn't +// related to the packet formatting +#define PIPELINE_NPOL 704 +#define PIPELINE_NCHAN 32 + // All entries are network (i.e. big) endian struct __attribute__((packed)) snap2_hdr_type { uint64_t seq; // Spectra counter == packet counter @@ -58,13 +63,13 @@ struct __attribute__((packed)) snap2_hdr_type { class SNAP2Decoder : virtual public PacketDecoder { protected: inline bool valid_packet(const PacketDesc* pkt) const { -#if BF_SNAP2_DEBUG - cout << "seq: "<< pkt->seq << endl; - cout << "src: "<< pkt->src << endl; - cout << "nsrc: "<< pkt->nsrc << endl; - cout << "nchan: "<< pkt->nchan << endl; - cout << "chan0: "<< pkt->chan0 << endl; -#endif +//#if BF_SNAP2_DEBUG +// cout << "seq: "<< pkt->seq << endl; +// cout << "src: "<< pkt->src << endl; +// cout << "nsrc: "<< pkt->nsrc << endl; +// cout << "nchan: "<< pkt->nchan << endl; +// cout << "chan0: "<< pkt->chan0 << endl; +//#endif return ( pkt->seq >= 0 && pkt->src >= 0 @@ -120,10 +125,8 @@ class SNAP2Decoder : virtual public PacketDecoder { }; class SNAP2Processor : virtual public PacketProcessor { -private: - bool _initialized = false; - int _npol_tot = 0; - int _npol_pkt = 0; +protected: + int _pipeline_nchan = PIPELINE_NCHAN; public: inline void operator()(const PacketDesc* pkt, uint64_t seq0, @@ -154,12 +157,6 @@ class SNAP2Processor : virtual public PacketProcessor { int words_per_chan_out = pkt->npol_tot >> 5; int pol_offset_out = pkt->pol0 >> 5; int pkt_chan = pkt->chan0; // The first channel in this packet - - if ( !_initialized ) { - _npol_tot = pkt->npol_tot; - _npol_pkt = pkt->npol; - _initialized = true; - } // Copy packet payload one channel at a time. // Packets have payload format nchans x npols x complexity. @@ -189,25 +186,16 @@ class SNAP2Processor : virtual public PacketProcessor { int nsrc, int nchan, int nseq) { - //fprintf(stderr, "Zeroing out source %d of %d (%d chans) (%d nseq)\n", src, nsrc, nchan, nseq); - int npol_blocks = _npol_tot / _npol_pkt; - int nchan_blocks = nsrc / npol_blocks; - int chan_block = src / npol_blocks; - int pol_block = src % npol_blocks; - //fprintf(stderr, "Channel block: %d. Zeroing %d bytes\n", chan_block, _npol_pkt); - // Output buffer is Time x Chan x Pol - // -> Time x chan_block x chan x pol_block x pol_words - // -> Time x - int chan_block_offset_bytes = chan_block * nchan * _npol_tot; - int time_offset_bytes = nchan_blocks * nchan * _npol_tot; - int pol_offset_bytes = pol_block*_npol_pkt; - //fprintf(stderr, "Offset bytes: T*%d + [chan block] %d + c*%d + [pol offset] %d\n", time_offset_bytes, chan_block_offset_bytes, _npol_tot, pol_offset_bytes); - for( int t=0; t Date: Fri, 21 Jan 2022 16:47:58 +0000 Subject: [PATCH 0378/1155] Add option to transpose xgpu output --- src/bf_xgpu.cpp | 9 ++++++--- src/bifrost/bf_xgpu.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp index 91d55c843..5a340247d 100644 --- a/src/bf_xgpu.cpp +++ b/src/bf_xgpu.cpp @@ -131,13 +131,16 @@ BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump) { /* * Given an xGPU accumulation buffer, grab a subset of visibilities from - * and gather them in a new buffer, in order chan x visibility x complexity [int32] + * and gather them in a new buffer, in order + * chan x visibility x complexity [int32] (if transpose=0) + * or + * visibility x chan * complexity [int32] (if transpose!=0) * BFarray *in : Pointer to a BFarray with storage in device memory, where xGPU results reside * BFarray *in : Pointer to a BFarray with storage in device memory where collated visibilities should be written. * BFarray *vismap : array of visibilities in [[polA, polB], [polC, polD], ... ] form. * int nchan_sum: The number of frequency channels to sum over */ -BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *conj, int nchan_sum) { +BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *conj, int nchan_sum, int transpose) { long long unsigned nvis = num_contiguous_elements(vismap); int xgpu_error; if (in->space != BF_SPACE_CUDA) { @@ -155,7 +158,7 @@ BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *co if (num_contiguous_elements(conj) != nvis) { return BF_STATUS_INVALID_SHAPE; } - xgpu_error = xgpuCudaSubSelect(&context, (Complex *)in->data, (Complex *)out->data, (int *)vismap->data, (int *)conj->data, nvis, nchan_sum); + xgpu_error = xgpuCudaSubSelect(&context, (Complex *)in->data, (Complex *)out->data, (int *)vismap->data, (int *)conj->data, nvis, nchan_sum, transpose); if (xgpu_error != XGPU_OK) { fprintf(stderr, "ERROR: xgpuKernel: kernel call returned %d\n", xgpu_error); return BF_STATUS_INTERNAL_ERROR; diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h index fa9504a4b..b8f21b783 100644 --- a/src/bifrost/bf_xgpu.h +++ b/src/bifrost/bf_xgpu.h @@ -13,7 +13,7 @@ extern "C" { BFstatus bfXgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); BFstatus bfXgpuCorrelate(BFarray *in, BFarray *out, int doDump); BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump); -BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *conj, int nchan_sum); +BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *conj, int nchan_sum, int transpose); BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray *is_conj); BFstatus bfXgpuReorder(BFarray *xgpu_output, BFarray *reordered, BFarray *baselines, BFarray *is_conjugated); //#endif // BF_XGPU_ENABLED From d1430c3ca11517b32f6d4f88f9f05985f0ccdfb9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 2 Feb 2022 10:48:30 -0700 Subject: [PATCH 0379/1155] Drop the '-e' from the awk calls. --- configure | 6 +++--- configure.ac | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure b/configure index 037565fd0..912654cc9 100755 --- a/configure +++ b/configure @@ -22378,11 +22378,11 @@ DX_RULES="${DX_SNIPPET_doc}" # Version splitting # -PACKAGE_VERSION_MAJOR=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $1}'` +PACKAGE_VERSION_MAJOR=`echo $PACKAGE_VERSION | $AWK -F. '{print $1}'` -PACKAGE_VERSION_MINOR=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $2}'` +PACKAGE_VERSION_MINOR=`echo $PACKAGE_VERSION | $AWK -F. '{print $2}'` -PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. -e '{print $3}'` +PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. '{print $3}'` # diff --git a/configure.ac b/configure.ac index 511cddd12..06946075f 100644 --- a/configure.ac +++ b/configure.ac @@ -264,9 +264,9 @@ DX_INIT_DOXYGEN([bifrost]) # Version splitting # -AC_SUBST([PACKAGE_VERSION_MAJOR], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $1}'`]) -AC_SUBST([PACKAGE_VERSION_MINOR], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $2}'`]) -AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. -e '{print $3}'`]) +AC_SUBST([PACKAGE_VERSION_MAJOR], [`echo $PACKAGE_VERSION | $AWK -F. '{print $1}'`]) +AC_SUBST([PACKAGE_VERSION_MINOR], [`echo $PACKAGE_VERSION | $AWK -F. '{print $2}'`]) +AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. '{print $3}'`]) # # C++14/C++11 toggling From 108732fbc3e13cfa04ce7458d3491ee6363fa475 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 2 Feb 2022 10:55:57 -0700 Subject: [PATCH 0380/1155] Update to d1430c3 on autoconf. --- BifrostDemo.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BifrostDemo.ipynb b/BifrostDemo.ipynb index 5cc0e74c0..4fb164dec 100644 --- a/BifrostDemo.ipynb +++ b/BifrostDemo.ipynb @@ -104,7 +104,7 @@ "\n", "# Use autoconf version:\n", "git checkout autoconf\n", - "git checkout c3450e4ebd2746cbc9e701d0f2bfbb06adfb4f0a\n", + "git checkout d1430c3ca11517b32f6d4f88f9f05985f0ccdfb9\n", "./configure\n", "\n", "# Build and install:\n", From 26f91b7f2642de5217c419ac55f35e69ceec1bd6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 3 Mar 2022 13:26:16 -0700 Subject: [PATCH 0381/1155] Added in IB verbs support for sending packets. --- python/bifrost/packet_writer.py | 18 +- src/bifrost/packet_writer.h | 9 +- src/ib_verbs.hpp | 446 ++++++++++++++++++++++++++++---- src/packet_writer.cpp | 20 +- src/packet_writer.hpp | 190 ++++++++++++-- 5 files changed, 603 insertions(+), 80 deletions(-) diff --git a/python/bifrost/packet_writer.py b/python/bifrost/packet_writer.py index 398caa39f..88d503e41 100644 --- a/python/bifrost/packet_writer.py +++ b/python/bifrost/packet_writer.py @@ -1,5 +1,5 @@ -# Copyright (c) 2019-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -52,6 +52,8 @@ def __enter__(self): return self def __exit__(self, type, value, tb): pass + def set_rate_limit(self, rate_limit_Bps): + _check(_bf.bfPacketWriterSetRateLimit(self.obj, rate_limit_Bps)) def reset_counter(self): _check(_bf.bfPacketWriterResetCounter(self.obj)) def send(self, headerinfo, seq, seq_increment, src, src_increment, idata): @@ -75,6 +77,20 @@ def __init__(self, fmt, sock, core=None): BifrostObject.__init__( self, _bf.bfUdpTransmitCreate, _bf.bfPacketWriterDestroy, fmt, sock.fileno(), core) + + +class UDPVerbsTransmit(_WriterBase): + def __init__(self, fmt, sock, core=None): + try: + fmt = fmt.encode() + except AttributeError: + # Python2 catch + pass + if core is None: + core = -1 + BifrostObject.__init__( + self, _bf.bfUdpVerbsTransmitCreate, _bf.bfPacketWriterDestroy, + fmt, sock.fileno(), core) class DiskWriter(_WriterBase): diff --git a/src/bifrost/packet_writer.h b/src/bifrost/packet_writer.h index 837892706..76614c7d1 100644 --- a/src/bifrost/packet_writer.h +++ b/src/bifrost/packet_writer.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,7 +62,14 @@ BFstatus bfUdpTransmitCreate(BFpacketwriter* obj, const char* format, int fd, int core); +BFstatus bfUdpVerbsTransmitCreate(BFpacketwriter* obj, + const char* format, + int fd, + int core); BFstatus bfPacketWriterDestroy(BFpacketwriter obj); +BFstatus bfPacketWriterSetRateLimit(BFpacketwriter obj, + unsigned int rate_limit); +BFstatus bfPacketWriterResetRateLimit(BFpacketwriter obj); BFstatus bfPacketWriterResetCounter(BFpacketwriter obj); BFstatus bfPacketWriterSend(BFpacketwriter obj, BFheaderinfo info, diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index e2019d559..9942cba9d 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, The Bifrost Authors. All rights reserved. + * Copyright (c) 2020-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -42,9 +42,18 @@ #include #include #include +#include #include +// Catch for older InfiniBand verbs installs that do not have the +// IBV_RAW_PACKET_CAP_IP_CSUM feature check. +#ifndef IBV_RAW_PACKET_CAP_IP_CSUM +#define BF_ENABLE_VERBS_OFFLOAD 0 +#else +#define BF_ENABLE_VERBS_OFFLOAD 1 +#endif + #ifndef BF_VERBS_NQP #define BF_VERBS_NQP 1 #endif @@ -65,6 +74,11 @@ struct bf_ibv_recv_pkt{ uint32_t length; }; +struct bf_ibv_send_pkt{ + ibv_send_wr wr; + ibv_sge sg; +}; + struct bf_ibv_flow { ibv_flow_attr attr; ibv_flow_spec_eth eth; @@ -88,8 +102,62 @@ struct bf_ibv { bf_ibv_recv_pkt* pkt_buf; bf_ibv_recv_pkt* pkt; bf_ibv_recv_pkt* pkt_batch; + + // Send + ibv_cq** send_cq; + + uint8_t* send_mr_buf; + size_t send_mr_size; + ibv_mr* send_mr; + + bf_ibv_send_pkt* send_pkt_buf; + bf_ibv_send_pkt* send_pkt_head; + + uint8_t offload_csum; + uint8_t hardware_pacing; }; +struct __attribute__((packed)) bf_ethernet_hdr { + uint8_t dst_mac[6]; + uint8_t src_mac[6]; + uint16_t type; +}; + +struct __attribute__((packed)) bf_ipv4_hdr { + uint8_t version_ihl; + uint8_t tos; + uint16_t length; + uint16_t id; + uint16_t flags_frag; + uint8_t ttl; + uint8_t proto; + uint16_t checksum; + uint32_t src_addr; + uint32_t dst_addr; +}; + +inline void bf_ipv4_update_checksum(bf_ipv4_hdr* hdr) { + hdr->checksum = 0; + uint16_t *block = reinterpret_cast(hdr); + + uint32_t checksum = 0; + for(uint32_t i=0; i 0xFFFF ) { + checksum = (checksum & 0xFFFF) + (checksum >> 16); + } + hdr->checksum = ~htons((uint16_t) checksum); +} + +struct __attribute__((packed)) bf_udp_hdr { + uint16_t src_port; + uint16_t dst_port; + uint16_t length; + uint16_t checksum; +}; + + class Verbs { int _fd; size_t _pkt_size_max; @@ -142,6 +210,40 @@ class Verbs { ::memcpy(mac, (uint8_t*) ethreq.ifr_hwaddr.sa_data, 6); } + void get_remote_mac_address(uint8_t* mac) { + uint32_t ip; + char ip_str[INET_ADDRSTRLEN]; + this->get_remote_ip_address(&(ip_str[0])); + inet_pton(AF_INET, &(ip_str[0]), &ip); + + if( ((ip & 0xFF) >= 224) && ((ip & 0xFF) < 240) ) { + ETHER_MAP_IP_MULTICAST(&ip, mac); + } else { + int ret = -1; + char cmd[256] = {'\0'}; + char line[256] = {'\0'}; + char* end; + sprintf(cmd, "ping -c 1 %s", ip_str); + FILE* fp = popen(cmd, "r"); + sprintf(cmd, "ip neigh | grep %s | awk '{print $5}'", ip_str); + fp = popen(cmd, "r"); + if( fgets(line, sizeof(line), fp) != NULL) { + if( line[strlen(line)-1] == '\n' ) { + line[strlen(line)-1] = '\0'; + } + if( strncmp(&(line[2]), ":", 1) == 0 ) { + ret = 0; + mac[0] = (uint8_t) strtol(&line[0], &end, 16); + mac[1] = (uint8_t) strtol(&line[3], &end, 16); + mac[2] = (uint8_t) strtol(&line[6], &end, 16); + mac[3] = (uint8_t) strtol(&line[9], &end, 16); + mac[4] = (uint8_t) strtol(&line[12], &end, 16); + mac[5] = (uint8_t) strtol(&line[15], &end, 16); + } + } + check_error(ret, "determine remote hardware address"); + } + } void get_ip_address(char* ip) { sockaddr_in sin; socklen_t len = sizeof(sin); @@ -149,6 +251,13 @@ class Verbs { "query socket name"); inet_ntop(AF_INET, &(sin.sin_addr), ip, INET_ADDRSTRLEN); } + void get_remote_ip_address(char* ip) { + sockaddr_in sin; + socklen_t len = sizeof(sin); + check_error(::getpeername(_fd, (sockaddr *)&sin, &len), + "query peer name"); + inet_ntop(AF_INET, &(sin.sin_addr), ip, INET_ADDRSTRLEN); + } uint16_t get_port() { sockaddr_in sin; socklen_t len = sizeof(sin); @@ -156,6 +265,20 @@ class Verbs { "query socket name"); return ntohs(sin.sin_port); } + uint16_t get_remote_port() { + sockaddr_in sin; + socklen_t len = sizeof(sin); + check_error(::getpeername(_fd, (sockaddr *)&sin, &len), + "query peer name"); + return ntohs(sin.sin_port); + } + uint8_t get_ttl() { + uint8_t ttl; + socklen_t len = sizeof(ttl); + check_error(::getsockopt(_fd, IPPROTO_IP, IP_TTL, &ttl, &len), + "determine TTL"); + return ttl; + } int get_timeout_ms() { timeval value; socklen_t size = sizeof(value); @@ -182,7 +305,7 @@ class Verbs { int ndev, found; ibv_device** ibv_dev_list = NULL; ibv_context* ibv_ctx = NULL; - ibv_device_attr ibv_dev_attr; + ibv_device_attr_ex ibv_dev_attr; ibv_port_attr ibv_port_attr; union ibv_gid ibv_gid; @@ -192,13 +315,6 @@ class Verbs { this->get_mac_address(&(mac[0])); uint64_t gid = this->get_interface_gid(); - /* - std::cout << "MAC: " << std::hex << int(mac[0]) << ":" << int(mac[1]) << ":" << int(mac[2]) - << ":" << int(mac[3]) << ":" << int(mac[4]) << ":" << int(mac[5]) << std::dec << std::endl; - std::cout << "GID: " << std::hex << int(htons( gid & 0xFFFF)) << ":" << int(htons((gid >> 16) & 0xFFFF)) - << ":" << int(htons((gid >> 32) & 0xFFFF)) << ":" << int(htons((gid >> 48) & 0xFFFF)) << std::dec << std::endl; - */ - // Find the right device /* Query all devices */ ibv_dev_list = ibv_get_device_list(&ndev); @@ -211,11 +327,11 @@ class Verbs { check_null(ibv_ctx, "open device"); - check_error(ibv_query_device(ibv_ctx, &ibv_dev_attr), + check_error(ibv_query_device_ex(ibv_ctx, NULL, &ibv_dev_attr), "query device"); /* Loop through the ports on the device */ - for(p=1; p<=ibv_dev_attr.phys_port_cnt; p++) { + for(p=1; p<=ibv_dev_attr.orig_attr.phys_port_cnt; p++) { check_error(ibv_query_port(ibv_ctx, p, &ibv_port_attr), "query port"); @@ -227,8 +343,18 @@ class Verbs { /* Did we find a match? */ if( (ibv_gid.global.subnet_prefix == 0x80feUL) \ && (ibv_gid.global.interface_id == gid) ) { - found = 1; - break; + found = 1; + #if defined BF_ENABLE_VERBS_OFFLOAD && BF_ENABLE_VERBS_OFFLOAD + if( ibv_dev_attr.raw_packet_caps & IBV_RAW_PACKET_CAP_IP_CSUM ) { + _verbs.offload_csum = 1; + } else { + _verbs.offload_csum = 0; + } + #else + _verbs.offload_csum = 0; + #endif + std::cout << "_verbs.offload_csum: " << (int) _verbs.offload_csum << std::endl; + break; } } @@ -284,6 +410,25 @@ class Verbs { _verbs.mr = ibv_reg_mr(_verbs.pd, _verbs.mr_buf, _verbs.mr_size, IBV_ACCESS_LOCAL_WRITE); check_null(_verbs.mr, "register memory region"); + + // Start Send + + _verbs.send_pkt_buf = (bf_ibv_send_pkt*) ::malloc(BF_VERBS_NPKTBUF*BF_VERBS_NQP * sizeof(struct bf_ibv_send_pkt)); + check_null(_verbs.send_pkt_buf, + "allocate send packet buffer"); + ::memset(_verbs.send_pkt_buf, 0, BF_VERBS_NPKTBUF*BF_VERBS_NQP * sizeof(struct bf_ibv_send_pkt)); + _verbs.send_mr_size = (size_t) BF_VERBS_NPKTBUF*BF_VERBS_NQP * _pkt_size_max; + _verbs.send_mr_buf = (uint8_t *) ::mmap(NULL, _verbs.send_mr_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED, -1, 0); + + check_error(_verbs.send_mr_buf == MAP_FAILED, + "allocate memory region buffer"); + check_error(::mlock(_verbs.send_mr_buf, _verbs.send_mr_size), + "lock memory region buffer"); + _verbs.send_mr = ibv_reg_mr(_verbs.pd, _verbs.send_mr_buf, _verbs.send_mr_size, IBV_ACCESS_LOCAL_WRITE); + check_null(_verbs.send_mr, + "register memory region"); + + // End Send } void destroy_buffers() { int failures = 0; @@ -303,6 +448,26 @@ class Verbs { free(_verbs.pkt_buf); } + // Start Send + + if( _verbs.send_mr ) { + if( ibv_dereg_mr(_verbs.send_mr) ) { + failures += 1; + } + } + + if( _verbs.send_mr_buf ) { + if( ::munmap(_verbs.send_mr_buf, _verbs.send_mr_size) ) { + failures += 1; + } + } + + if( _verbs.send_pkt_buf ) { + free(_verbs.send_pkt_buf); + } + + // End Send + if( _verbs.pd ) { if( ibv_dealloc_pd(_verbs.pd) ) { failures += 1; @@ -323,7 +488,7 @@ class Verbs { check_error(::fcntl(_verbs.cc->fd, F_SETFD, flags | O_CLOEXEC), "set completion channel to non-blocking"); ::madvise(_verbs.cc, sizeof(ibv_pd), MADV_DONTFORK); - + // Setup the completion queues _verbs.cq = (ibv_cq**) ::malloc(BF_VERBS_NQP * sizeof(ibv_cq*)); check_null(_verbs.cq, @@ -340,14 +505,29 @@ class Verbs { "change completion queue request notifications"); } + // Start Send + + // Setup the completion queues + _verbs.send_cq = (ibv_cq**) ::malloc(BF_VERBS_NQP * sizeof(ibv_cq*)); + check_null(_verbs.send_cq, + "allocate send completion queues"); + ::memset(_verbs.send_cq, 0, BF_VERBS_NQP * sizeof(ibv_cq*)); + for(i=0; ilkey; + } + } + + // Link the work requests to send queue + uint32_t send_flags = 0; + #if defined BF_ENABLE_VERBS_OFFLOAD && BF_ENABLE_VERBS_OFFLOAD + if( _verbs.offload_csum ) { + send_flags = IBV_SEND_IP_CSUM; + } + #endif + + for(i=0; iget_ip_address(&(ip_str[0])); inet_pton(AF_INET, &(ip_str[0]), &ip); - std::cout << "IP is: " << ip << " (" << ip_str << ")" << std::endl; ::memcpy(&(flow.ipv4.val.dst_ip), &ip, 4); ::memset(&(flow.ipv4.mask.dst_ip), 0xff, 4); @@ -480,47 +712,10 @@ class Verbs { this->get_mac_address(&(mac[0])); if( ((ip & 0xFF) >= 224) && ((ip & 0xFF) < 240) ) { ETHER_MAP_IP_MULTICAST(&ip, mac); - /* - std::cout << "Multicast MAC: " << std::hex << int(mac[0]) << ":" << int(mac[1]) << ":" << int(mac[2]) - << ":" << int(mac[3]) << ":" << int(mac[4]) << ":" << int(mac[5]) << std::dec << std::endl; - */ } ::memcpy(&flow.eth.val.dst_mac, &mac, 6); ::memset(&flow.eth.mask.dst_mac, 0xff, 6); - /* - printf("size: %i\n", flow.attr.size); - printf(" attr: %i vs %lu\n", flow.attr.size, sizeof(ibv_flow_attr)); - printf(" eth: %i vs %lu\n", flow.eth.size, sizeof(ibv_flow_spec_eth)); - printf(" ipv4: %i vs %lu\n", flow.ipv4.size, sizeof(ibv_flow_spec_ipv4)); - printf(" udp: %i vs %lu\n", flow.udp.size, sizeof(ibv_flow_spec_tcp_udp)); - printf("specs: %i\n", flow.attr.num_of_specs); - - printf("type: %i (%i)\n", flow.udp.type, IBV_FLOW_SPEC_UDP); - printf("dst_port: %u\n", flow.udp.val.dst_port); - printf("dst_port: %u\n", flow.udp.mask.dst_port); - printf("src_port: %u\n", flow.udp.val.src_port); - printf("src_port: %u\n", flow.udp.mask.src_port); - - printf("dst_ip: %u\n", flow.ipv4.val.dst_ip); - printf("dst_ip: %u\n", flow.ipv4.mask.dst_ip); - printf("src_ip: %u\n", flow.ipv4.val.src_ip); - printf("src_ip: %u\n", flow.ipv4.mask.src_ip); - - ::memcpy(&(mac[0]), &(flow.eth.val.dst_mac[0]), 6); - printf("dst_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - ::memcpy(&(mac[0]), &(flow.eth.mask.dst_mac[0]), 6); - printf("dst_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - ::memcpy(&(mac[0]), &(flow.eth.val.src_mac[0]), 6); - printf("src_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - ::memcpy(&(mac[0]), &(flow.eth.mask.src_mac[0]), 6); - printf("src_mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - printf("ether_type: %u\n", flow.eth.val.ether_type); - printf("ether_type: %u\n", flow.eth.mask.ether_type); - printf("vlan_tag: %u\n", flow.eth.val.vlan_tag); - printf("vlan_tag: %u\n", flow.eth.mask.vlan_tag); - */ - // Create the flows _verbs.flows = (ibv_flow**) ::malloc(BF_VERBS_NQP * sizeof(ibv_flow*)); check_null(_verbs.flows, @@ -568,8 +763,8 @@ class Verbs { ibv_cq *ev_cq; intptr_t ev_cq_ctx; ibv_wc wc[BF_VERBS_WCBATCH]; - bf_ibv_recv_pkt * recv_head = NULL; - ibv_recv_wr * recv_tail = NULL; + bf_ibv_recv_pkt *recv_head = NULL; + ibv_recv_wr *recv_tail = NULL; // Ensure the queue pairs are in a state suitable for receiving for(i=0; istate) { + case IBV_QPS_RESET: // Unexpected, but maybe user reset it + qp_attr.qp_state = IBV_QPS_INIT; + qp_attr.port_num = _verbs.port_num; + if( ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE|IBV_QP_PORT) ) { + return NULL; + } + case IBV_QPS_INIT: + qp_attr.qp_state = IBV_QPS_RTR; + qp_attr.port_num = _verbs.port_num; + if( ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE) ) { + return NULL; + } + case IBV_QPS_RTR: + qp_attr.qp_state = IBV_QPS_RTS; + if(ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE)) { + return NULL; + } + break; + case IBV_QPS_RTS: + break; + default: + return NULL; + } + } + + for(i=0; iwr.next = &(_verbs.send_pkt_head->wr); + _verbs.send_pkt_head = send_pkt; + } // for each work completion + } while(num_wce); + } + + if( npackets == 0 || !_verbs.send_pkt_head ) { + return NULL; + } + + send_head = _verbs.send_pkt_head; + send_tail = _verbs.send_pkt_head; + for(i=0; iwr.next; i++) { + send_tail = (bf_ibv_send_pkt*) send_tail->wr.next; + } + + _verbs.send_pkt_head = (bf_ibv_send_pkt*) send_tail->wr.next; + send_tail->wr.next = NULL; + + return send_head; + } inline void check_error(int retval, std::string what) { if( retval < 0 ) { destroy_flows(); @@ -743,4 +1006,73 @@ class Verbs { *pkt_ptr = (uint8_t *) _verbs.pkt->wr.sg_list->addr + BF_VERBS_PAYLOAD_OFFSET; return _verbs.pkt->length - BF_VERBS_PAYLOAD_OFFSET; } + inline void get_ethernet_header(bf_ethernet_hdr* hdr) { + uint8_t src_mac[6], dst_mac[6]; + this->get_mac_address(&(src_mac[0])); + this->get_remote_mac_address(&(dst_mac[0])); + + ::memset(hdr, 0, sizeof(bf_ethernet_hdr)); + ::memcpy(hdr->dst_mac, dst_mac, 6); + ::memcpy(hdr->src_mac, src_mac, 6); + hdr->type = htons(0x0800); // IPv4 + } + inline void get_ipv4_header(bf_ipv4_hdr* hdr, size_t udp_length=0) { + uint8_t ttl = this->get_ttl(); + uint32_t src_ip, dst_ip; + char src_ip_str[INET_ADDRSTRLEN], dst_ip_str[INET_ADDRSTRLEN]; + this->get_ip_address(&(src_ip_str[0])); + inet_pton(AF_INET, &(src_ip_str[0]), &src_ip); + this->get_remote_ip_address(&(dst_ip_str[0])); + inet_pton(AF_INET, &(dst_ip_str[0]), &dst_ip); + + ::memset(hdr, 0, sizeof(bf_ipv4_hdr)); + hdr->version_ihl = htons(0x4500); // v4 + 20-byte header + hdr->length = htons((uint16_t) (20 + 8 + udp_length)); + hdr->flags_frag = htons(1<<14); // don't fragment + hdr->ttl = ttl; + hdr->proto = 0x11; // UDP + hdr->src_addr = src_ip; + hdr->dst_addr = dst_ip; + if( !_verbs.offload_csum ) { + bf_ipv4_update_checksum(hdr); + } + } + inline void get_udp_header(bf_udp_hdr* hdr, size_t udp_length=0) { + uint16_t src_port, dst_port; + src_port = this->get_port(); + dst_port = this->get_remote_port(); + + ::memset(hdr, 0, sizeof(bf_udp_hdr)); + hdr->src_port = htons(src_port); + hdr->dst_port = htons(dst_port); + hdr->length = htons((uint16_t) (8 + udp_length)); + } + inline int sendmmsg(mmsghdr *mmsg, int npackets, int flags=0) { + int ret; + bf_ibv_send_pkt* head; + ibv_send_wr *s; + + int i; + uint32_t j; + uint64_t offset; + for(i=0; iqueue(npackets); + ret = ibv_post_send(_verbs.qp[0], &(head->wr), &s); + if( ret ) { + ret = -1; + } else { + ret = npackets; + } + return ret; + } }; diff --git a/src/packet_writer.cpp b/src/packet_writer.cpp index 21bcbede5..7e09a1140 100644 --- a/src/packet_writer.cpp +++ b/src/packet_writer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -145,12 +145,30 @@ BFstatus bfUdpTransmitCreate(BFpacketwriter* obj, return BFpacketwriter_create(obj, format, fd, core, BF_IO_UDP); } +BFstatus bfUdpVerbsTransmitCreate(BFpacketwriter* obj, + const char* format, + int fd, + int core) { + return BFpacketwriter_create(obj, format, fd, core, BF_IO_VERBS); +} + BFstatus bfPacketWriterDestroy(BFpacketwriter obj) { BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); delete obj; return BF_STATUS_SUCCESS; } +BFstatus bfPacketWriterSetRateLimit(BFpacketwriter obj, + uint32_t rate_limit) { + BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); + BF_TRY_RETURN(obj->set_rate_limit(rate_limit)); +} + +BFstatus bfPacketWriterResetRateLimit(BFpacketwriter obj) { + BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); + BF_TRY_RETURN(obj->reset_rate_limit()); +} + BFstatus bfPacketWriterResetCounter(BFpacketwriter obj) { BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); BF_TRY_RETURN(obj->reset_counter()); diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 04e4e23a2..ebc0d94d9 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2020, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -44,9 +44,48 @@ #include // For memcpy, memset #include +#include #include #include #include +#include +#include + +class RateLimiter { + uint32_t _rate; + uint64_t _counter; + bool _first; + std::chrono::high_resolution_clock::time_point _start; + std::chrono::high_resolution_clock::time_point _stop; +public: + RateLimiter(uint32_t rate_limit) + : _rate(rate_limit), _counter(0), _first(true) {} + inline void set_rate(uint32_t rate_limit) { _rate = rate_limit; } + inline uint32_t get_rate() { return _rate; } + inline void reset() { _first = true; _counter = 0; } + inline void begin() { + if( _first ) { + _start = std::chrono::high_resolution_clock::now(); + _first = false; + } + } + inline void end_and_wait(size_t npackets) { + if( _rate > 0 ) { + _stop = std::chrono::high_resolution_clock::now(); + _counter += npackets; + double elapsed_needed = (double) _counter / _rate; + std::chrono::duration elapsed_actual = std::chrono::duration_cast>(_stop-_start); + + double sleep_needed = elapsed_needed - elapsed_actual.count(); + if( sleep_needed > 0.001 ) { + timespec sleep; + sleep.tv_sec = (int) sleep_needed; + sleep.tv_nsec = (int) ((sleep_needed - sleep.tv_sec)*1e9); + nanosleep(&sleep, NULL); + } + } + } +}; class PacketWriterMethod { protected: @@ -89,45 +128,144 @@ class DiskPacketWriter : public PacketWriterMethod { }; class UDPPacketSender : public PacketWriterMethod { + int _last_count; + mmsghdr* _mmsg; + iovec* _iovs; public: UDPPacketSender(int fd) - : PacketWriterMethod(fd) {} + : PacketWriterMethod(fd), _last_count(0), _mmsg(NULL), _iovs(NULL) {} + ~UDPPacketSender() { + if( _mmsg ) { + free(_mmsg); + } + if( _iovs ) { + free(_iovs); + } + } ssize_t send_packets(char* hdrs, int hdr_size, char* data, int data_size, int npackets, int flags=0) { - struct mmsghdr *mmsg = NULL; - struct iovec *iovs = NULL; - mmsg = (struct mmsghdr *) malloc(sizeof(struct mmsghdr)*npackets); - iovs = (struct iovec *) malloc(sizeof(struct iovec)*2*npackets); - memset(mmsg, 0, sizeof(struct mmsghdr)*npackets); + if( npackets != _last_count ) { + if( _mmsg ) { + free(_mmsg); + } + if( _iovs ) { + free(_iovs); + } + + _last_count = npackets; + _mmsg = (struct mmsghdr *) malloc(sizeof(struct mmsghdr)*npackets); + _iovs = (struct iovec *) malloc(sizeof(struct iovec)*5*npackets); + ::mlock(_mmsg, sizeof(struct mmsghdr)*npackets); + ::mlock(_iovs, sizeof(struct iovec)*5*npackets); + } + memset(_mmsg, 0, sizeof(struct mmsghdr)*npackets); for(int i=0; ireset_stats(); } + inline void set_rate_limit(uint32_t rate_limit) { _limiter.set_rate(rate_limit); } + inline uint32_t get_rate_limit() { return _limiter.get_rate(); } + inline void reset_rate_limit() { _limiter.reset(); } inline ssize_t send(char* hdrs, int hdr_size, char* datas, int data_size, int npackets) { + _limiter.begin(); ssize_t nsent = _method->send_packets(hdrs, hdr_size, datas, data_size, npackets); if( nsent == -1 ) { _stats.ninvalid += npackets; @@ -160,6 +303,7 @@ class PacketWriterThread : public BoundThread { } else { _stats.nvalid += npackets; _stats.nvalid_bytes += npackets * (hdr_size + data_size); + _limiter.end_and_wait(npackets); } return nsent; } @@ -225,6 +369,8 @@ class BFpacketwriter_impl { << "core0 : " << _writer->get_core() << "\n"; } virtual ~BFpacketwriter_impl() {} + inline void set_rate_limit(uint32_t rate_limit) { _writer->set_rate_limit(rate_limit); } + inline void reset_rate_limit() { _writer->reset_rate_limit(); } inline void reset_counter() { _framecount = 0; } BFstatus send(BFheaderinfo info, BFoffset seq, @@ -370,10 +516,14 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, method = new DiskPacketWriter(fd); } else if( backend == BF_IO_UDP ) { method = new UDPPacketSender(fd); +#if BF_VERBS_ENABLED + } else if( backend == BF_IO_VERBS ) { + method = new UDPVerbsSender(fd); +#endif } else { return BF_STATUS_UNSUPPORTED; } - PacketWriterThread* writer = new PacketWriterThread(method, core); + PacketWriterThread* writer = new PacketWriterThread(method, 0, core); if( std::string(format).substr(0, 8) == std::string("generic_") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_generic_impl(writer, nsamples), From dc4c194c377b1cf517cc454cc1fd424ed1baee6d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 3 Mar 2022 13:29:38 -0700 Subject: [PATCH 0382/1155] Update the docs. --- user.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user.mk b/user.mk index 891c05ff5..b9fedc3c3 100644 --- a/user.mk +++ b/user.mk @@ -30,4 +30,4 @@ ALIGNMENT ?= 4096 # Memory allocation alignment #NUMA = 1 # Enable use of numa library for setting affinity of ring memory #HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture #VMA = 1 # Enable use of Mellanox libvma in udp_capture -#VERBS = 1 # Enable use of IB verbs with udp_verbs_capture +#VERBS = 1 # Enable use of IB verbs with udp_verbs_capture and udp_verbs_transmit From 8ed17e275a004917d2e431a484a05e43fc2e22fd Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 3 Mar 2022 13:34:38 -0700 Subject: [PATCH 0383/1155] Initial work on RDMA for sending rings between servers. --- python/bifrost/rdma.py | 194 +++++++++++++++++++++++++ src/Makefile | 14 +- src/bifrost/rdma.h | 64 +++++++++ src/rdma.cpp | 144 +++++++++++++++++++ src/rdma.hpp | 313 +++++++++++++++++++++++++++++++++++++++++ user.mk | 1 + 6 files changed, 728 insertions(+), 2 deletions(-) create mode 100644 python/bifrost/rdma.py create mode 100644 src/bifrost/rdma.h create mode 100644 src/rdma.cpp create mode 100644 src/rdma.hpp diff --git a/python/bifrost/rdma.py b/python/bifrost/rdma.py new file mode 100644 index 000000000..44e47aafc --- /dev/null +++ b/python/bifrost/rdma.py @@ -0,0 +1,194 @@ + +# Copyright (c) 2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2022, The University of New Mexico. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of The Bifrost Authors nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Python2 compatibility +from __future__ import absolute_import + +from bifrost.libbifrost import _bf, _check, _get, BifrostObject +from bifrost.ndarray import ndarray, asarray +from bifrost.proclog import ProcLog +import bifrost.affinity as cpu_affinity + +import time +import ctypes + +class RdmaSender(BifrostObject): + def __init__(self, sock, message_size): + BifrostObject.__init__( + self, _bf.bfRdmaCreate, _bf.bfRdmaDestroy, + sock.fileno(), message_size, 1) + def send_header(self, time_tag, header, offset_from_head): + try: + header = header.encode() + except AttributeError: + # Python2 catch + pass + header_buf = ctypes.create_string_buffer(header) + _check(_bf.bfRdmaSendHeader(self.obj, + time_tag, + len(header), + ctypes.cast(header_buf, ctypes.c_void_p), + offset_from_head)) + def send_span(self, span_data): + _check(_bf.bfRdmaSendSpan(self.obj, + asarray(span_data).as_BFarray())) + +class RdmaReceiver(BifrostObject): + def __init__(self, sock, message_size, buffer_factor=5): + BifrostObject.__init__( + self, _bf.bfRdmaCreate, _bf.bfRdmaDestroy, + sock.fileno(), message_size, 0) + self.message_size = message_size + self.buffer_factor = buffer_factor + + self.time_tag = ctypes.c_ulong(0) + self.header_size = ctypes.c_ulong(0) + self.offset_from_head = ctypes.c_ulong(0) + self.span_size = ctypes.c_ulong(0) + self.contents_bufs = [] + for i in range(self.buffer_factor): + contents_buf = ctypes.create_string_buffer(self.message_size) + self.contents_bufs.append(contents_buf) + self.index = 0 + def receive(self): + contents_buf = self.contents_bufs[self.index] + self.index += 1 + if self.index == self.buffer_factor: + self.index = 0 + + _check(_bf.bfRdmaReceive(self.obj, + ctypes.POINTER(ctypes.c_ulong)(self.time_tag), + ctypes.POINTER(ctypes.c_ulong)(self.header_size), + ctypes.POINTER(ctypes.c_ulong)(self.offset_from_head), + ctypes.POINTER(ctypes.c_ulong)(self.span_size), + ctypes.addressof(contents_buf))) + if self.header_size.value > 0: + contents = ctypes.cast(contents_buf, ctypes.c_char_p) + contents = contents.value + return self.time_tag.value, self.header_size.value, contents + else: + span_data = ndarray(shape=(self.span_size.value,), dtype='u8', buffer=ctypes.addressof(contents_buf)) + return span_data + +class RingSender(object): + def __init__(self, iring, sock, gulp_size, guarantee=True, core=-1): + self.iring = iring + self.sock = sock + self.gulp_size = gulp_size + self.guarantee = guarantee + self.core = core + + self.bind_proclog = ProcLog(type(self).__name__+"/bind") + self.in_proclog = ProcLog(type(self).__name__+"/in") + self.sequence_proclog = ProcLog(type(self).__name__+"/sequence0") + self.perf_proclog = ProcLog(type(self).__name__+"/perf") + + self.in_proclog.update( {'nring':1, 'ring0':self.iring.name}) + + def main(self): + sender = RdmaSender(self.sock, self.gulp_size) + + for iseq in self.iring.read(guarantee=self.guarantee): + ihdr = json.loads(iseq.header.tostring()) + sender.send_header(iseq.time_tag, len(ihdr), ihdr, 0) + self.sequence_proclog.update(ihdr) + + prev_time = time.time() + iseq_spans = iseq.read(self.gulp_size) + for ispan in iseq_spans: + if ispan.size < self.gulp_size: + continue + curr_time = time.time() + acquire_time = curr_time - prev_time + prev_time = curr_time + + sender.send_span(ispan) + + curr_time = time.time() + process_time = curr_time - prev_time + prev_time = curr_time + self.perf_proclog.update({'acquire_time': acquire_time, + 'reserve_time': -1, + 'process_time': process_time,}) + + +class RingReceiver(object): + def __init__(self, oring, sock, gulp_size, guarantee=True, core=-1): + self.oring = oring + self.sock = sock + self.gulp_size = gulp_size + self.guarantee = guarantee + self.core = core + + self.bind_proclog = ProcLog(type(self).__name__+"/bind") + self.out_proclog = ProcLog(type(self).__name__+"/out") + self.sequence_proclog = ProcLog(type(self).__name__+"/sequence0") + self.perf_proclog = ProcLog(type(self).__name__+"/perf") + + self.out_proclog.update( {'nring':1, 'ring0':self.oring.name}) + + def main(self): + cpu_affinity.set_core(self.core) + self.bind_proclog.update({'ncore': 1, + 'core0': cpu_affinity.get_core(),}) + + receiver = RdmaReceiver(self.sock, self.gulp_size) + + with self.oring.begin_writing() as oring: + prev_time = time.time() + data = receiver.receive() + while True: + while not isinstance(data, tuple): + data = receiver.receive() + time_tag, _, ihdr = data + self.sequence_proclog.update(ihdr) + + ohdr = ihdr.copy() + + with oring.begin_sequence(time_tag=time_tag, header=ohdr) as oseq: + while True: + data = receiver.receive() + if isinstance(data, tuple): + break + curr_time = time.time() + acquire_time = curr_time - prev_time + prev_time = curr_time + + with oseq.reserve(self.gulp_size) as ospan: + curr_time = time.time() + reserve_time = curr_time - prev_time + prev_time = curr_time + + odata[...] = data + + curr_time = time.time() + process_time = curr_time - prev_time + prev_time = curr_time + self.perf_proclog.update({'acquire_time': acquire_time, + 'reserve_time': reserve_time, + 'process_time': process_time,}) diff --git a/src/Makefile b/src/Makefile index b00ea3960..9d6f0c9a1 100644 --- a/src/Makefile +++ b/src/Makefile @@ -20,6 +20,10 @@ LIBBIFROST_OBJS = \ unpack.o \ quantize.o \ proclog.o +ifdef RDMA + LIBBIFROST_OBJS += \ + rdma.o +endif ifndef NOCUDA # These files require the CUDA Toolkit to compile LIBBIFROST_OBJS += \ @@ -100,11 +104,17 @@ ifdef VMA endif ifdef VERBS - # Requires Mellanox libvma to be installed - LIB += -lvma -libverbs + # Requires Mellanox libibverbs to be installed + LIB += -libverbs CPPFLAGS += -DBF_VERBS_ENABLED=1 endif +ifdef RDMA + # Requires Mellanox libibverbs and librdmacm to be installed + LIB += -libverbs -librdmacm + CPPFLAGS += -DBF_RDMA_ENABLED=1 +endif + ifdef ALIGNMENT CPPFLAGS += -DBF_ALIGNMENT=$(ALIGNMENT) endif diff --git a/src/bifrost/rdma.h b/src/bifrost/rdma.h new file mode 100644 index 000000000..93ccc9e6c --- /dev/null +++ b/src/bifrost/rdma.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2022, The Bifrost Authors. All rights reserved. + * Copyright (c) 2022, The University of New Mexico. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef BF_RDMA_H_INCLUDE_GUARD_ +#define BF_RDMA_H_INCLUDE_GUARD_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef struct BFrdma_impl* BFrdma; + +BFstatus bfRdmaCreate(BFrdma* obj, + int fd, + size_t message_size, + int is_server); +BFstatus bfRdmaDestroy(BFrdma obj); +BFstatus bfRdmaSendHeader(BFrdma obj, + BFoffset time_tag, + BFsize header_size, + const void* header, + BFoffset offset_from_head); +BFstatus bfRdmaSendSpan(BFrdma obj, + BFarray const* span); +BFstatus bfRdmaReceive(BFrdma obj, + BFoffset* time_tag, + BFsize* header_size, + BFoffset* offset_from_head, + BFsize* span_size, + void* contents); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // BF_RDMA_H_INCLUDE_GUARD_ diff --git a/src/rdma.cpp b/src/rdma.cpp new file mode 100644 index 000000000..3b26fb342 --- /dev/null +++ b/src/rdma.cpp @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2022, The Bifrost Authors. All rights reserved. + * Copyright (c) 2022, The University of New Mexico. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "rdma.hpp" +#include "utils.hpp" + +ssize_t BFrdma_impl::send_header(BFoffset time_tag, + BFsize header_size, + const void* header, + BFoffset offset_from_head) { + BF_ASSERT(header_size <= this->max_message_size(), BF_STATUS_INVALID_SHAPE); + + bf_message msg; + msg.type = bf_message::MSG_HEADER; + msg.time_tag = time_tag; + msg.length = header_size; + msg.offset = offset_from_head; + + return _rdma->send(&msg, header); +} + +ssize_t BFrdma_impl::send_span(BFarray const* span) { + size_t span_size = BF_DTYPE_NBYTE(span->dtype); + for(int i=0; indim; i++) { + span_size *= span->shape[i]; + } + BF_ASSERT(span_size <= this->max_message_size(), BF_STATUS_INVALID_SHAPE); + + bf_message msg; + msg.type = bf_message::MSG_SPAN; + msg.time_tag = 0; + msg.length = span_size; + msg.offset = 0; + + return _rdma->send(&msg, span->data); +} + +ssize_t BFrdma_impl::receive(BFoffset* time_tag, + BFsize* header_size, + BFoffset* offset_from_head, + BFsize* span_size, + void* contents) { + bf_message msg; + ::memset(&msg, 0, sizeof(bf_message)); + ssize_t nrecv; + nrecv = _rdma->receive(&msg, contents); + if( msg.type == bf_message::MSG_HEADER) { + *time_tag = msg.time_tag; + *header_size = msg.length; + *offset_from_head = msg.offset; + *span_size = 0; + } else { + *time_tag = 0; + *header_size = 0; + *offset_from_head = 0; + *span_size = msg.length; + + } + + return nrecv; +} + +BFstatus bfRdmaCreate(BFrdma* obj, + int fd, + size_t message_size, + int is_server) { + BF_ASSERT(message_size <= BF_RDMA_MAX_MEMORY, BF_STATUS_INSUFFICIENT_STORAGE); + BF_TRY_RETURN_ELSE(*obj = new BFrdma_impl(fd, message_size, is_server), + *obj = 0); +} + +BFstatus bfRdmaDestroy(BFrdma obj) { + BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); + delete obj; + return BF_STATUS_SUCCESS; +} + +BFstatus bfRdmaSendHeader(BFrdma obj, + BFoffset time_tag, + BFsize header_size, + const void* header, + BFoffset offset_from_head) { + BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); + BF_ASSERT(header, BF_STATUS_INVALID_POINTER); + ssize_t nsent; + nsent = obj->send_header(time_tag, header_size, header, offset_from_head); + if( nsent < 0 ) { + return BF_STATUS_INTERNAL_ERROR; + } + return BF_STATUS_SUCCESS; +} + +BFstatus bfRdmaSendSpan(BFrdma obj, + BFarray const* span) { + BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); + BF_ASSERT(span, BF_STATUS_INVALID_POINTER); + ssize_t nsent; + nsent = obj->send_span(span); + if( nsent < 0 ) { + return BF_STATUS_INTERNAL_ERROR; + } + return BF_STATUS_SUCCESS; +} + +BFstatus bfRdmaReceive(BFrdma obj, + BFoffset* time_tag, + BFsize* header_size, + BFoffset* offset_from_head, + BFsize* span_size, + void* contents) { + BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); + ssize_t nrecv; + nrecv = obj->receive(time_tag, header_size, offset_from_head, span_size, contents); + if( nrecv < 0 ) { + return BF_STATUS_INTERNAL_ERROR; + } + return BF_STATUS_SUCCESS; +} diff --git a/src/rdma.hpp b/src/rdma.hpp new file mode 100644 index 000000000..655afdf6a --- /dev/null +++ b/src/rdma.hpp @@ -0,0 +1,313 @@ +/* + * Copyright (c) 2022, The Bifrost Authors. All rights reserved. + * Copyright (c) 2022, The University of New Mexico. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "assert.hpp" +#include + +#include // For ntohs +#include // For mlock + +#include +#include +#include +#include +#include // For posix_memalign +#include // For memcpy, memset + +#include +#include + +#ifndef BF_RDMA_MAX_MEMORY +#define BF_RDMA_MAX_MEMORY 134217728 +#endif + +struct __attribute__((aligned(8))) bf_message { + enum { + MSG_HEADER = 0, + MSG_SPAN = 1, + MSG_REPLY = 2, + } type; + uint64_t time_tag; + uint64_t offset; + uint64_t length; +}; + +struct bf_rdma { + struct rdma_cm_id* listen_id; + struct rdma_cm_id* id; + + struct rdma_addrinfo* res; + struct ibv_wc wc; + + size_t buf_size; + uint8_t* buf; + uint8_t* send_buf; + struct ibv_mr* mr; + struct ibv_mr* send_mr; +}; + +class Rdma { + int _fd; + size_t _message_size; + bool _is_server; + bf_rdma _rdma; + + void get_ip_address(char* ip) { + sockaddr_in sin; + socklen_t len = sizeof(sin); + if( _is_server ) { + check_error(::getsockname(_fd, (sockaddr *)&sin, &len), + "query socket name"); + } else { + check_error(::getpeername(_fd, (sockaddr *)&sin, &len), + "query peer name"); + } + inet_ntop(AF_INET, &(sin.sin_addr), ip, INET_ADDRSTRLEN); + } + uint16_t get_port() { + sockaddr_in sin; + socklen_t len = sizeof(sin); + if( _is_server ) { + check_error(::getsockname(_fd, (sockaddr *)&sin, &len), + "query socket name"); + } else { + check_error(::getpeername(_fd, (sockaddr *)&sin, &len), + "query peer name"); + } + return ntohs(sin.sin_port); + } + void create_connection(size_t message_size) { + struct rdma_addrinfo hints; + struct ibv_qp_init_attr init_attr; + struct ibv_qp_attr qp_attr; + + char server[INET_ADDRSTRLEN]; + char port[7]; + this->get_ip_address(&(server[0])); + snprintf(&(port[0]), 7, "%d", this->get_port()); + + ::memset(&hints, 0, sizeof(hints)); + if( _is_server ) { + hints.ai_flags = RAI_PASSIVE; + } + hints.ai_port_space = RDMA_PS_TCP; + check_error(rdma_getaddrinfo(&(server[0]), &(port[0]), &hints, &(_rdma.res)), + "query RDMA address information"); + + ::memset(&init_attr, 0, sizeof(init_attr)); + init_attr.cap.max_send_wr = init_attr.cap.max_recv_wr = 1; + init_attr.cap.max_send_sge = init_attr.cap.max_recv_sge = 1; + init_attr.cap.max_inline_data = 0; + if( !_is_server ) { + init_attr.qp_context = _rdma.id; + } + init_attr.sq_sig_all = 1; + + if( _is_server ) { + check_error(rdma_create_ep(&(_rdma.listen_id), _rdma.res, NULL, &init_attr), + "create the RDMA identifier"); + + check_error(rdma_listen(_rdma.listen_id, 0), + "listen for incoming connections"); + + check_error(rdma_get_request(_rdma.listen_id, &(_rdma.id)), + "get connection request"); + + ::memset(&qp_attr, 0, sizeof(qp_attr)); + ::memset(&init_attr, 0, sizeof(init_attr)); + check_error(ibv_query_qp(_rdma.id->qp, &qp_attr, IBV_QP_CAP, &init_attr), + "query the queue pair"); + } else { + check_error(rdma_create_ep(&(_rdma.id), _rdma.res, NULL, &init_attr), + "create the RDMA identifier"); + } + + _rdma.buf_size = message_size + sizeof(bf_message); + check_error(::posix_memalign((void**)&(_rdma.buf), 32, _rdma.buf_size), + "allocate buffer"); + check_error(::mlock(_rdma.buf, _rdma.buf_size), + "lock buffer"); + _rdma.mr = rdma_reg_msgs(_rdma.id, _rdma.buf, _rdma.buf_size); + check_null(_rdma.mr, "create memory region"); + + check_error(::posix_memalign((void**)&(_rdma.send_buf), 32, _rdma.buf_size), + "allocate send buffer"); + check_error(::mlock(_rdma.send_buf, _rdma.buf_size), + "lock send buffer"); + _rdma.send_mr = rdma_reg_msgs(_rdma.id, _rdma.send_buf, _rdma.buf_size); + check_null(_rdma.send_mr, "create send memory region"); + + if( _is_server ) { + check_error(rdma_accept(_rdma.id, NULL), + "accept incomining connections"); + } else { + check_error(rdma_connect(_rdma.id, NULL), + "connect"); + + check_error(rdma_post_recv(_rdma.id, NULL, _rdma.buf, _rdma.buf_size, _rdma.mr), + "set RDMA post receive"); + } + } + inline void close_connection() { + if( _rdma.id ) { + rdma_disconnect(_rdma.id); + } + + if( _rdma.mr ) { + rdma_dereg_mr(_rdma.mr); + } + + if( _rdma.send_mr ) { + rdma_dereg_mr(_rdma.send_mr); + } + + if( _rdma.buf ) { + ::munlock(_rdma.buf, _rdma.buf_size); + ::free(_rdma.buf); + } + + if( _rdma.send_buf ) { + ::munlock(_rdma.send_buf, _rdma.buf_size); + ::free(_rdma.send_buf); + } + + if( _rdma.id ) { + rdma_destroy_ep(_rdma.id); + } + + if( _rdma.listen_id ) { + rdma_destroy_ep(_rdma.listen_id); + } + + if( _rdma.res ) { + rdma_freeaddrinfo(_rdma.res); + } + } + inline void check_error(int retval, std::string what) { + if( retval < 0 ) { + close_connection(); + + std::stringstream ss; + ss << "Failed to " << what << ": (" << errno << ") " + << strerror(errno); + throw Rdma::Error(ss.str()); + } + } + inline void check_null(void* ptr, std::string what) { + if( ptr == NULL ) { + close_connection(); + + std::stringstream ss; + ss << "Failed to " << what << ": (" << errno << ") " + << strerror(errno); + throw Rdma::Error(ss.str()); + } + } +public: + class Error : public std::runtime_error { + typedef std::runtime_error super_t; + protected: + virtual const char* what() const throw() { + return super_t::what(); + } + public: + Error(const std::string& what_arg) + : super_t(what_arg) {} + }; + + Rdma(int fd, size_t message_size, bool is_server) + : _fd(fd), _message_size(message_size), _is_server(is_server) { + ::memset(&_rdma, 0, sizeof(_rdma)); + create_connection(message_size); + } + ~Rdma() { + close_connection(); + } + inline size_t max_message_size() { return _message_size; } + inline ssize_t send(const bf_message* msg, const void* buf) { + ::memcpy(_rdma.send_buf, msg, sizeof(bf_message)); + ::memcpy(_rdma.send_buf+sizeof(bf_message), buf, msg->length); + + check_error(rdma_post_send(_rdma.id, NULL, _rdma.send_buf, _rdma.buf_size, _rdma.send_mr, 0), + "queue send request"); + check_error(rdma_get_send_comp(_rdma.id, &(_rdma.wc)), + "get send completion"); + + bf_message *reply; + check_error(rdma_post_recv(_rdma.id, NULL, _rdma.buf, sizeof(bf_message), _rdma.mr), + "queue receive request"); + check_error(rdma_get_recv_comp(_rdma.id, &(_rdma.wc)), + "get receive completion"); + + reply = reinterpret_cast(_rdma.buf); + if( reply->type != bf_message::MSG_REPLY ) { + return -1; + } + return msg->length; + } + inline ssize_t receive(bf_message* msg, void* buf) { + check_error(rdma_get_recv_comp(_rdma.id, &(_rdma.wc)), + "get receive completion"); + + ::memcpy(msg, _rdma.buf, sizeof(bf_message)); + ::memcpy(buf, _rdma.buf+sizeof(bf_message), msg->length); + + bf_message* reply; + reply = reinterpret_cast(_rdma.send_buf); + reply->type = bf_message::MSG_REPLY; + check_error(rdma_post_send(_rdma.id, NULL, _rdma.send_buf, sizeof(bf_message), _rdma.send_mr, 0), + "queue send request"); + check_error(rdma_get_send_comp(_rdma.id, &(_rdma.wc)), + "get send completion"); + check_error(rdma_post_recv(_rdma.id, NULL, _rdma.buf, _rdma.buf_size, _rdma.mr), + "queue receive request"); + + return msg->length; + } +}; + +class BFrdma_impl { + Rdma* _rdma; + +public: + inline BFrdma_impl(int fd, size_t message_size, int is_server) { + _rdma = new Rdma(fd, message_size, is_server); + } + inline size_t max_message_size() { return _rdma->max_message_size(); } + ssize_t send_header(BFoffset time_tag, + BFsize header_size, + const void* header, + BFoffset offset_from_head); + ssize_t send_span(BFarray const* span); + ssize_t receive(BFoffset* time_tag, + BFsize* header_size, + BFoffset* offset_from_head, + BFsize* span_size, + void* contents); +}; diff --git a/user.mk b/user.mk index b9fedc3c3..c43aaa387 100644 --- a/user.mk +++ b/user.mk @@ -31,3 +31,4 @@ ALIGNMENT ?= 4096 # Memory allocation alignment #HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture #VMA = 1 # Enable use of Mellanox libvma in udp_capture #VERBS = 1 # Enable use of IB verbs with udp_verbs_capture and udp_verbs_transmit +#RDMA = 1 # Enable use of RDMA for ring sharing From 92cbd17cffb655ce63d781bf8bcee9ad4cc90b71 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 8 Mar 2022 23:09:50 -0500 Subject: [PATCH 0384/1155] Minor typo in configure CUDA help string Also patched in ./configure itself: although it's auto-generated, I can't get it to generate anywhere near what it was before. Seems like the results of autoupdate/autoconf are highly dependent on versions and what m4 files they find on the system? Not reproducible with another distribution or configuration. --- config/cuda.m4 | 2 +- configure | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 0c771ccae..7c6a487c7 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -79,7 +79,7 @@ AC_DEFUN([AX_CHECK_CUDA], AC_ARG_WITH([gpu_archs], [AS_HELP_STRING([--with-gpu-archs=...], - [default GPU architectures (default=dectect)])], + [default GPU architectures (default=detect)])], [], [with_gpu_archs='auto']) if test "$HAVE_CUDA" = "1"; then diff --git a/configure b/configure index 912654cc9..e3628e51b 100755 --- a/configure +++ b/configure @@ -1540,7 +1540,7 @@ Optional Packages: --with-cuda-home CUDA install path (default=/usr/local/cuda) --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"') - --with-gpu-archs=... default GPU architectures (default=dectect) + --with-gpu-archs=... default GPU architectures (default=detect) --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) --with-logging-dir=DIR directory for Bifrost proclog logging From 54ed45bfc809f35c74f008d468d9ef39be31fbe2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 10 Mar 2022 09:38:16 -0700 Subject: [PATCH 0385/1155] Better CUDA architectures error message. --- config/cuda.m4 | 4 +++- configure | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 7c6a487c7..5b1432a48 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -148,10 +148,12 @@ AC_DEFUN([AX_CHECK_CUDA], ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) + ar_supported=$( echo $ar_supported | xargs ) if test "$ar_requested" = "$ar_found"; then AC_MSG_RESULT([yes]) else - AC_MSG_ERROR(only architectures $ar_valid are supported) + AC_MSG_NOTICE(supported architectures: $ar_supported) + AC_MSG_ERROR(only '$ar_valid' of the requested architectures are supported) fi AC_MSG_CHECKING([for Pascal-style CUDA managed memory]) diff --git a/configure b/configure index e3628e51b..28c1c6061 100755 --- a/configure +++ b/configure @@ -19651,11 +19651,14 @@ printf %s "checking for valid CUDA architectures... " >&6; } ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) + ar_supported=$( echo $ar_supported | xargs ) if test "$ar_requested" = "$ar_found"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else - as_fn_error $? "only architectures $ar_valid are supported" "$LINENO" 5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: supported architectures: $ar_supported" >&5 +printf "%s\n" "$as_me: supported architectures: $ar_supported" >&6;} + as_fn_error $? "only '$ar_valid' of the requested architectures are supported" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 From ad74b5e7043206a03c1fba7826bfeb7988849748 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 10 Mar 2022 12:04:23 -0500 Subject: [PATCH 0386/1155] Support `python -m bifrost.version` command Just enables a simple command to print out version and copyright info. I think it would be nice to offer many of the 'tool' scripts with this interface, e.g. `python -m bifrost.telemetry --enable` rather than (or I guess in addition to) a script file in bin/. --- .gitignore | 1 + python/Makefile.in | 2 +- python/bifrost/version/__main__.py | 7 +++++++ python/setup.py | 6 +++--- 4 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 python/bifrost/version/__main__.py diff --git a/.gitignore b/.gitignore index e91378b43..65ddc68fe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ doc version.py +/python/bifrost/version/__init__.py *_generated.py .log*.txt test/data/ diff --git a/python/Makefile.in b/python/Makefile.in index 6a4cd1a51..ddf5d157a 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -3,7 +3,7 @@ include ../config.mk INC_DIR = ../src -BIFROST_PYTHON_VERSION_FILE = bifrost/version.py +BIFROST_PYTHON_VERSION_FILE = bifrost/version/__init__.py BIFROST_PYTHON_BINDINGS_FILE = bifrost/libbifrost_generated.py PSRHOME ?= /usr/local diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py new file mode 100644 index 000000000..086020158 --- /dev/null +++ b/python/bifrost/version/__main__.py @@ -0,0 +1,7 @@ +from bifrost import __version__, __copyright__, __license__ + +print( + f"""bifrost {__version__} +{__copyright__} +License: {__license__}""" +) diff --git a/python/setup.py b/python/setup.py index ad82ecb74..7fd8311aa 100755 --- a/python/setup.py +++ b/python/setup.py @@ -35,7 +35,7 @@ import glob # Parse version file to extract __version__ value -bifrost_version_file = 'bifrost/version.py' +bifrost_version_file = 'bifrost/version/__init__.py' try: with open(bifrost_version_file, 'r') as version_file: for line in version_file: @@ -50,8 +50,8 @@ if 'clean' in sys.argv[1:]: sys.exit(0) print("*************************************************************************") - print("Please run `configure` and `make` from the root of the source tree to ") - print("generate version.py ") + print("Please run `configure` and `make` from the root of the source tree to") + print(f"generate {bifrost_version_file}") print("*************************************************************************") raise From 5ff67caf9febb793d956479aef4ca2704a18e0d2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 10 Mar 2022 10:33:54 -0700 Subject: [PATCH 0387/1155] An even better set of messages. --- config/cuda.m4 | 12 +++++++----- configure | 17 ++++++++++------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 5b1432a48..9d35c62f6 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -83,6 +83,11 @@ AC_DEFUN([AX_CHECK_CUDA], [], [with_gpu_archs='auto']) if test "$HAVE_CUDA" = "1"; then + AC_MSG_CHECKING([for valid CUDA architectures]) + ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_supported_flat=$( echo $ar_supported | xargs ) + AC_MSG_RESULT(found: $ar_supported_flat) + if test "$with_gpu_archs" = "auto"; then AC_MSG_CHECKING([which CUDA architectures to target]) @@ -143,17 +148,14 @@ AC_DEFUN([AX_CHECK_CUDA], AC_SUBST([GPU_ARCHS], [$with_gpu_archs]) fi - AC_MSG_CHECKING([for valid CUDA architectures]) + AC_MSG_CHECKING([for valid requested CUDA architectures]) ar_requested=$( echo "$GPU_ARCHS" | wc -w ) - ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) - ar_supported=$( echo $ar_supported | xargs ) if test "$ar_requested" = "$ar_found"; then AC_MSG_RESULT([yes]) else - AC_MSG_NOTICE(supported architectures: $ar_supported) - AC_MSG_ERROR(only '$ar_valid' of the requested architectures are supported) + AC_MSG_ERROR(only '$ar_valid' are supported) fi AC_MSG_CHECKING([for Pascal-style CUDA managed memory]) diff --git a/configure b/configure index 28c1c6061..67f8f102f 100755 --- a/configure +++ b/configure @@ -19556,6 +19556,13 @@ else $as_nop fi if test "$HAVE_CUDA" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 +printf %s "checking for valid CUDA architectures... " >&6; } + ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_supported_flat=$( echo $ar_supported | xargs ) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found: $ar_supported_flat" >&5 +printf "%s\n" "found: $ar_supported_flat" >&6; } + if test "$with_gpu_archs" = "auto"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 printf %s "checking which CUDA architectures to target... " >&6; } @@ -19645,20 +19652,16 @@ fi fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 -printf %s "checking for valid CUDA architectures... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid requested CUDA architectures" >&5 +printf %s "checking for valid requested CUDA architectures... " >&6; } ar_requested=$( echo "$GPU_ARCHS" | wc -w ) - ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) ar_found=$( echo $ar_valid | wc -w ) - ar_supported=$( echo $ar_supported | xargs ) if test "$ar_requested" = "$ar_found"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: supported architectures: $ar_supported" >&5 -printf "%s\n" "$as_me: supported architectures: $ar_supported" >&6;} - as_fn_error $? "only '$ar_valid' of the requested architectures are supported" "$LINENO" 5 + as_fn_error $? "only '$ar_valid' are supported" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 From 26207f2f2d4e948b022aa291e2ef22e18c5c42dd Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 10 Mar 2022 13:31:52 -0500 Subject: [PATCH 0388/1155] Keep version-main friendly with python-2.7 --- python/bifrost/version/__main__.py | 6 +----- python/setup.py | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index 086020158..294cd6278 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -1,7 +1,3 @@ from bifrost import __version__, __copyright__, __license__ -print( - f"""bifrost {__version__} -{__copyright__} -License: {__license__}""" -) +print("\n".join(["bifrost " + __version__, __copyright__, "License: " + __license__])) diff --git a/python/setup.py b/python/setup.py index 7fd8311aa..585828c4a 100755 --- a/python/setup.py +++ b/python/setup.py @@ -51,7 +51,7 @@ sys.exit(0) print("*************************************************************************") print("Please run `configure` and `make` from the root of the source tree to") - print(f"generate {bifrost_version_file}") + print("generate", bifrost_version_file) print("*************************************************************************") raise From 485708586230e3744ad37423dedf051f3d3375d7 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 10 Mar 2022 13:50:24 -0500 Subject: [PATCH 0389/1155] Minor typo in configure message --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 67f8f102f..19a33ae98 100755 --- a/configure +++ b/configure @@ -17592,7 +17592,7 @@ if ! ${CTAGS} --version | grep -q Exuberant then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - as_fn_error $? "exhuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 + as_fn_error $? "exuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } diff --git a/configure.ac b/configure.ac index 06946075f..8d9d6aa0f 100644 --- a/configure.ac +++ b/configure.ac @@ -27,7 +27,7 @@ AS_IF([test x${CTAGS} = x], AC_MSG_CHECKING([whether ${CTAGS} is exuberant]) AS_IF([! ${CTAGS} --version | grep -q Exuberant], [AC_MSG_RESULT([no]) - AC_MSG_ERROR([exhuberant ctags is required, but ${CTAGS} is a different version])], + AC_MSG_ERROR([exuberant ctags is required, but ${CTAGS} is a different version])], [AC_MSG_RESULT([yes])]) AC_SUBST(SO_EXT, $shrext_cmds) From 9e4431f4caa82d521328d43b01ab9477ce53fa21 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 10 Mar 2022 13:02:25 -0700 Subject: [PATCH 0390/1155] Define AM_DEFAULT_VERBOSITY for older automake installs. --- configure | 4 ++++ configure.ac | 2 ++ 2 files changed, 6 insertions(+) diff --git a/configure b/configure index 67f8f102f..9fd635388 100755 --- a/configure +++ b/configure @@ -779,6 +779,7 @@ build_vendor build_cpu build LIBTOOL +AM_DEFAULT_VERBOSITY target_alias host_alias build_alias @@ -3293,6 +3294,9 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +AM_DEFAULT_VERBOSITY=1 + + : ${CXXFLAGS="-O3 -Wall -pedantic"} # diff --git a/configure.ac b/configure.ac index 06946075f..82619016f 100644 --- a/configure.ac +++ b/configure.ac @@ -5,6 +5,8 @@ AC_CONFIG_SRCDIR([src/cuda.cpp]) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_MACRO_DIR([config]) +m4_ifdef([AM_SILENT_RULES], [], [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])]) + : ${CXXFLAGS="-O3 -Wall -pedantic"} # From fc6743f4ecd1eaba8f25ec80f394215308bde7b8 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 10 Mar 2022 19:50:07 -0500 Subject: [PATCH 0391/1155] Remove reference to version.py from ImportError message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I guess referring to `bifrost.version` covers either `bifrost/version.py` or `bifrost/version/__init__.py`… --- python/bifrost/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/bifrost/__init__.py b/python/bifrost/__init__.py index 7151c8ad6..b0a309a3b 100644 --- a/python/bifrost/__init__.py +++ b/python/bifrost/__init__.py @@ -53,7 +53,8 @@ from bifrost.version import __version__ except ImportError: print("*************************************************************************") - print("Please run `make` from the root of the source tree to generate version.py") + print("Please run `configure` and `make` from the root of the source tree to") + print("generate the bifrost.version module.") print("*************************************************************************") raise __author__ = "The Bifrost Authors" From 9612b62e45c53756394b72377394706b3a1938c8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 11 Mar 2022 14:26:14 -0700 Subject: [PATCH 0392/1155] Try ctypesgen==1.0.2 for #161. --- .github/workflows/main.yml | 2 +- Dockerfile.cpu | 2 +- Dockerfile.gpu | 2 +- Dockerfile_prereq.gpu | 2 +- README.md | 2 +- docs/source/Getting-started-guide.rst | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0994a8318..38d739fe6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -45,7 +45,7 @@ jobs: simplejson \ pint \ graphviz \ - git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ + ctypesgen==1.0.2 \ coverage - name: "Build and Install" run: | diff --git a/Dockerfile.cpu b/Dockerfile.cpu index 0c640bf5d..c07f1740a 100644 --- a/Dockerfile.cpu +++ b/Dockerfile.cpu @@ -16,7 +16,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ # Update ctypesgen RUN pip --no-cache-dir install \ - git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f + ctypesgen==1.0.2 # Build the library WORKDIR /bifrost diff --git a/Dockerfile.gpu b/Dockerfile.gpu index e854d99b5..c67f144ba 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -30,7 +30,7 @@ RUN pip --no-cache-dir install \ contextlib2 \ simplejson \ pint \ - git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ + ctypesgen==1.0.2 \ graphviz ENV TERM xterm diff --git a/Dockerfile_prereq.gpu b/Dockerfile_prereq.gpu index 12f4e120d..ca8ca4e9c 100644 --- a/Dockerfile_prereq.gpu +++ b/Dockerfile_prereq.gpu @@ -29,7 +29,7 @@ RUN pip --no-cache-dir install \ contextlib2 \ simplejson \ pint \ - git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f \ + ctypesgen==1.0.2 \ graphviz ENV TERM xterm diff --git a/README.md b/README.md index accb49d11..a52e1c03c 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ print "All done" * ctypesgen ``` -$ sudo pip install numpy contextlib2 pint git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f +$ sudo pip install numpy contextlib2 pint ctypesgen==1.0.2 ``` ### Bifrost Installation diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index e77ffe84a..7fb0fd7ad 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -43,7 +43,7 @@ numpy, matplotlib, contextlib2, simplejson, pint, graphviz, ctypesgen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you have already installed pip, this step should be as simple as -``pip install --user numpy matplotlib contextlib2 simplejson pint graphviz git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f``. +``pip install --user numpy matplotlib contextlib2 simplejson pint graphviz ctypesgen==1.0.2``. C++ dependencies ~~~~~~~~~~~~~~~~ From c69897399de1546a417b2002ec341ec071b2f1d5 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 11 Mar 2022 19:34:07 -0500 Subject: [PATCH 0393/1155] Skip test_16byte unless float128 support is enabled This relates to one of the errors noted in issue #164. --- test/test_transpose.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test_transpose.py b/test/test_transpose.py index e8c0cb2d6..fdbfe2252 100644 --- a/test/test_transpose.py +++ b/test/test_transpose.py @@ -32,7 +32,7 @@ from functools import reduce from itertools import permutations -from bifrost.libbifrost_generated import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED, BF_FLOAT128_ENABLED @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TransposeTest(unittest.TestCase): @@ -60,5 +60,6 @@ def test_4byte(self): self.run_simple_test_shmoo(np.uint32) def test_8byte(self): self.run_simple_test_shmoo(np.uint64) + @unittest.skipUnless(BF_FLOAT128_ENABLED, "requires float128 support") def test_16byte(self): self.run_simple_test_shmoo(np.float128) From 1e47784f4a83ceb1dfe3696e1773cb934ccf9a5f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 14 Mar 2022 10:39:56 -0600 Subject: [PATCH 0394/1155] Added a new BF_GPU_MAX_ARCH value to help with #164. --- configure | 13 +++++++++++++ configure.ac | 4 +++- src/bifrost/config.h.in | 2 ++ src/cuda.hpp | 8 ++++++-- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 3d5fa13df..a63941b57 100755 --- a/configure +++ b/configure @@ -719,6 +719,7 @@ NVCCFLAGS CUOBJDUMP NVPRUNE NVCC +GPU_MAX_ARCH HAVE_CUDA CUDA_HOME HAVE_VMA @@ -728,6 +729,7 @@ HAVE_FLOAT128 HAVE_OPENMP LIBOBJS HAVE_RECVMSG +CXX_VERSION HAVE_CXX11 HAVE_CXX14 SO_EXT @@ -18503,6 +18505,11 @@ printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h fi + CXX_VERSION=11 + +else $as_nop + CXX_VERSION=14 + fi ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes @@ -19308,6 +19315,8 @@ fi HAVE_CUDA=0 + GPU_MAX_ARCH=0 + if test "$enable_cuda" != "no"; then HAVE_CUDA=1 @@ -19668,6 +19677,10 @@ printf "%s\n" "yes" >&6; } as_fn_error $? "only '$ar_valid' are supported" "$LINENO" 5 fi + ar_max_valid=$(echo $ar_valid | ${SED} -e 's/.* //g;' ) + GPU_MAX_ARCH=$ar_max_valid + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 printf %s "checking for Pascal-style CUDA managed memory... " >&6; } cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) diff --git a/configure.ac b/configure.ac index b5e12470c..d5178fb13 100644 --- a/configure.ac +++ b/configure.ac @@ -41,7 +41,9 @@ AC_SUBST(SO_EXT, $shrext_cmds) AC_C_INLINE AX_CXX_COMPILE_STDCXX(14, noext, optional) AS_IF([test x$HAVE_CXX14 != x1], - [AX_CXX_COMPILE_STDCXX(11, noext, mandatory)]) + [AX_CXX_COMPILE_STDCXX(11, noext, mandatory) + AC_SUBST([CXX_VERSION], [11])], + [AC_SUBST([CXX_VERSION], [14])]) AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 9aa7917dd..d7f959648 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -44,10 +44,12 @@ extern "C" { // CUDA support #define BF_CUDA_ENABLED @HAVE_CUDA@ #define BF_GPU_ARCHS "@GPU_ARCHS@" +#define BF_GPU_MAX_ARCH @GPU_MAX_ARCH@ #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ // Features +#define BF_CXX_VERSION @CXX_VERSION@ #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ #define BF_OPENMP_ENABLED @HAVE_OPENMP@ #define BF_NUMA_ENABLED @HAVE_NUMA@ diff --git a/src/cuda.hpp b/src/cuda.hpp index 0f0be3ea8..37a5f07fe 100644 --- a/src/cuda.hpp +++ b/src/cuda.hpp @@ -57,13 +57,17 @@ extern thread_local cudaStream_t g_cuda_stream; #endif inline int get_cuda_device_cc() { - int device; + int device, cc; cudaGetDevice(&device); int cc_major; cudaDeviceGetAttribute(&cc_major, cudaDevAttrComputeCapabilityMajor, device); int cc_minor; cudaDeviceGetAttribute(&cc_minor, cudaDevAttrComputeCapabilityMinor, device); - return cc_major*10 + cc_minor; + cc = cc_major*10 + cc_minor; + if( cc > BF_GPU_MAX_ARCH ) { + cc = BF_GPU_MAX_ARCH; + } + return cc; } #define BF_CHECK_CUDA_EXCEPTION(call, err) \ From 9f0aada45de895746f8288e4a91b2be7fd0a88d4 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 10 Mar 2022 20:46:34 -0500 Subject: [PATCH 0395/1155] Telemetry deactivates itself quietly if $HOME is not writable --- python/bifrost/telemetry.py | 45 +++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/python/bifrost/telemetry.py b/python/bifrost/telemetry.py index a3b7c342f..db4ca5e7e 100644 --- a/python/bifrost/telemetry.py +++ b/python/bifrost/telemetry.py @@ -47,29 +47,40 @@ import bifrost.version -# Create the cache directory -if not os.path.exists(os.path.join(os.path.expanduser('~'), '.bifrost')): - os.mkdir(os.path.join(os.path.expanduser('~'), '.bifrost')) -_CACHE_DIR = os.path.join(os.path.expanduser('~'), '.bifrost', 'telemetry_cache') -if not os.path.exists(_CACHE_DIR): - os.mkdir(_CACHE_DIR) +_DOT_BIFROST_DIR = os.path.join(os.path.expanduser('~'), '.bifrost') +_CACHE_DIR = os.path.join(_DOT_BIFROST_DIR, 'telemetry_cache') +_ACTIVE_KEY = os.path.join(_CACHE_DIR, 'do_not_report') +try: + # Create the cache directory. If it turns out $HOME doesn't exist or is not + # writable (e.g. in a nix build environment), we disable telemetry in the + # FileNotFoundError handler below. + if not os.path.exists(_DOT_BIFROST_DIR): + os.mkdir(_DOT_BIFROST_DIR) + if not os.path.exists(_CACHE_DIR): + os.mkdir(_CACHE_DIR) -# Load the install ID key, creating it if it doesn't exist -_INSTALL_KEY = os.path.join(_CACHE_DIR, 'install.key') -if not os.path.exists(_INSTALL_KEY): - with open(_INSTALL_KEY, 'w') as fh: - fh.write(str(uuid.uuid4())) + # Load the install ID key, creating it if it doesn't exist + _INSTALL_KEY = os.path.join(_CACHE_DIR, 'install.key') + if not os.path.exists(_INSTALL_KEY): + with open(_INSTALL_KEY, 'w') as fh: + fh.write(str(uuid.uuid4())) -with open(_INSTALL_KEY, 'r') as fh: - _INSTALL_KEY = fh.read().rstrip() + with open(_INSTALL_KEY, 'r') as fh: + _INSTALL_KEY = fh.read().rstrip() + + TELEMETRY_ACTIVE = True + if os.path.exists(_ACTIVE_KEY): + TELEMETRY_ACTIVE = False +except FileNotFoundError: + # Quietly disable telemetry because we don't have a place to write the data + # or configuration. The enable/disable functions will still fail when they + # try to unlink/write _ACTIVE_KEY. + _INSTALL_KEY = str(uuid.uuid4()) + TELEMETRY_ACTIVE = False # Reporting control TELEMETRY_MAX_ENTRIES = 100 TELEMETRY_TIMEOUT = 120 # s -TELEMETRY_ACTIVE = True -_ACTIVE_KEY = os.path.join(_CACHE_DIR, 'do_not_report') -if os.path.exists(_ACTIVE_KEY): - TELEMETRY_ACTIVE = False class _TelemetryClient(object): From a087e3c4f2afa78634279b0ef856f878e5f2facd Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 14 Mar 2022 12:25:31 -0400 Subject: [PATCH 0396/1155] Support `python -m bifrost.telemetry` Resolves #163 --- README.md | 9 +-------- python/bifrost/{telemetry.py => telemetry/__init__.py} | 0 .../bifrost/telemetry/__main__.py | 0 3 files changed, 1 insertion(+), 8 deletions(-) rename python/bifrost/{telemetry.py => telemetry/__init__.py} (100%) rename tools/bifrost_telemetry.py => python/bifrost/telemetry/__main__.py (100%) mode change 100755 => 100644 diff --git a/README.md b/README.md index a52e1c03c..b4eda8351 100644 --- a/README.md +++ b/README.md @@ -193,15 +193,8 @@ they are aggregated. Users can opt out of telemetry collection using: -```python -from bifrost import telemetry -telemetry.disable() -``` - -or by using the included `bifrost_telemetry.py` script: - ``` -python bifrost_telemetry.py --disable +python -m bifrost.telemetry --disable ``` This command will set a disk-based flag that disables the reporting process. diff --git a/python/bifrost/telemetry.py b/python/bifrost/telemetry/__init__.py similarity index 100% rename from python/bifrost/telemetry.py rename to python/bifrost/telemetry/__init__.py diff --git a/tools/bifrost_telemetry.py b/python/bifrost/telemetry/__main__.py old mode 100755 new mode 100644 similarity index 100% rename from tools/bifrost_telemetry.py rename to python/bifrost/telemetry/__main__.py From 6dd6f03ff8b6382e1d5db48de3367c71d5e86023 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 14 Mar 2022 10:57:22 -0600 Subject: [PATCH 0397/1155] Removed misguided C++14 support check for map. --- configure | 6 ------ configure.ac | 4 +--- src/bifrost/config.h.in | 1 - 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/configure b/configure index a63941b57..8ff4f8ae1 100755 --- a/configure +++ b/configure @@ -729,7 +729,6 @@ HAVE_FLOAT128 HAVE_OPENMP LIBOBJS HAVE_RECVMSG -CXX_VERSION HAVE_CXX11 HAVE_CXX14 SO_EXT @@ -18505,11 +18504,6 @@ printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h fi - CXX_VERSION=11 - -else $as_nop - CXX_VERSION=14 - fi ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes diff --git a/configure.ac b/configure.ac index d5178fb13..b5e12470c 100644 --- a/configure.ac +++ b/configure.ac @@ -41,9 +41,7 @@ AC_SUBST(SO_EXT, $shrext_cmds) AC_C_INLINE AX_CXX_COMPILE_STDCXX(14, noext, optional) AS_IF([test x$HAVE_CXX14 != x1], - [AX_CXX_COMPILE_STDCXX(11, noext, mandatory) - AC_SUBST([CXX_VERSION], [11])], - [AC_SUBST([CXX_VERSION], [14])]) + [AX_CXX_COMPILE_STDCXX(11, noext, mandatory)]) AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index d7f959648..81cc464bf 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -49,7 +49,6 @@ extern "C" { #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ // Features -#define BF_CXX_VERSION @CXX_VERSION@ #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ #define BF_OPENMP_ENABLED @HAVE_OPENMP@ #define BF_NUMA_ENABLED @HAVE_NUMA@ From 5c766fcd91af23190252e5b4acb112ce17a2d3b4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 14 Mar 2022 11:29:26 -0600 Subject: [PATCH 0398/1155] Fixed a few imports for bifrost.blocks. --- python/bifrost/__init__.py | 6 +++--- python/bifrost/blocks/quantize.py | 2 +- python/bifrost/blocks/transpose.py | 2 +- python/bifrost/blocks/unpack.py | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/python/bifrost/__init__.py b/python/bifrost/__init__.py index 7151c8ad6..731f9b23a 100644 --- a/python/bifrost/__init__.py +++ b/python/bifrost/__init__.py @@ -45,9 +45,9 @@ from bifrost.block_chainer import BlockChainer from bifrost.reduce import reduce # import copy_block, transpose_block, scrunch_block, sigproc_block, fdmt_block -# from bifrost.transpose import transpose -# from bifrost.unpack import unpack -# from bifrost.quantize import quantize +from bifrost.transpose import transpose +from bifrost.unpack import unpack +from bifrost.quantize import quantize try: from bifrost.version import __version__ diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index 5cc07d432..f74f9b21a 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -61,7 +61,7 @@ def on_sequence(self, iseq): def on_data(self, ispan, ospan): idata = ispan.data odata = ospan.data - bf.quantize.quantize(idata, odata, self.scale) + bf.quantize(idata, odata, self.scale) def quantize(iring, dtype, scale=1., *args, **kwargs): """Apply a requantization of bit depth for the data. diff --git a/python/bifrost/blocks/transpose.py b/python/bifrost/blocks/transpose.py index 1623cb69b..ac7d6877b 100644 --- a/python/bifrost/blocks/transpose.py +++ b/python/bifrost/blocks/transpose.py @@ -73,7 +73,7 @@ def on_sequence(self, iseq): def on_data(self, ispan, ospan): # TODO: bf.memory.transpose should support system space too if bf.memory.space_accessible(self.space, ['cuda']): - bf.transpose.transpose(ospan.data, ispan.data, self.axes) + bf.transpose(ospan.data, ispan.data, self.axes) else: ospan.data[...] = np.transpose(ispan.data, self.axes) diff --git a/python/bifrost/blocks/unpack.py b/python/bifrost/blocks/unpack.py index fec94faed..9df7aa984 100644 --- a/python/bifrost/blocks/unpack.py +++ b/python/bifrost/blocks/unpack.py @@ -61,7 +61,7 @@ def on_sequence(self, iseq): def on_data(self, ispan, ospan): idata = ispan.data odata = ospan.data - bf.unpack.unpack(idata, odata, self.align_msb) + bf.unpack(idata, odata, self.align_msb) def unpack(iring, dtype, *args, **kwargs): """Unpack data to a larger data type. From 3e1abbabdfd0bf96287a11d0615a3c5cdc5ed00c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 14 Mar 2022 11:43:58 -0600 Subject: [PATCH 0399/1155] Update for new imports. --- test/test_quantize.py | 5 ++--- test/test_transpose.py | 5 ++--- test/test_unpack.py | 7 +++---- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/test/test_quantize.py b/test/test_quantize.py index 5b3c9edfc..a906bcbf5 100644 --- a/test/test_quantize.py +++ b/test/test_quantize.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -28,7 +28,6 @@ import unittest import numpy as np import bifrost as bf -import bifrost.quantize class QuantizeTest(unittest.TestCase): def run_quantize_from_cf32_test(self, out_dtype): @@ -41,7 +40,7 @@ def run_quantize_from_cf32_test(self, out_dtype): [(2,2), (3,4)], [(4,4), (5,6)]], dtype=out_dtype) - bf.quantize.quantize(iarray, oarray) + bf.quantize(iarray, oarray) np.testing.assert_equal(oarray, oarray_known) def test_cf32_to_ci8(self): self.run_quantize_from_cf32_test('ci8') diff --git a/test/test_transpose.py b/test/test_transpose.py index fdbfe2252..65e8c9bd5 100644 --- a/test/test_transpose.py +++ b/test/test_transpose.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -28,7 +28,6 @@ import unittest import numpy as np import bifrost as bf -import bifrost.transpose from functools import reduce from itertools import permutations @@ -42,7 +41,7 @@ def run_simple_test(self, axes, dtype, shape): odata_gold = idata.transpose(axes) iarray = bf.ndarray(idata, space='cuda') oarray = bf.empty_like(iarray.transpose(axes)) - bf.transpose.transpose(oarray, iarray, axes) + bf.transpose(oarray, iarray, axes) oarray = oarray.copy('system') np.testing.assert_array_equal(oarray, odata_gold) diff --git a/test/test_unpack.py b/test/test_unpack.py index d487312be..adaf0bccc 100644 --- a/test/test_unpack.py +++ b/test/test_unpack.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -28,7 +28,6 @@ import unittest import numpy as np import bifrost as bf -import bifrost.unpack class UnpackTest(unittest.TestCase): def run_unpack_to_ci8_test(self, iarray): @@ -37,7 +36,7 @@ def run_unpack_to_ci8_test(self, iarray): [(4, 5), (6, 7)], [(-8, -7), (-6, -5)]], dtype='ci8') - bf.unpack.unpack(iarray, oarray) + bf.unpack(iarray, oarray) np.testing.assert_equal(oarray, oarray_known) def test_ci4_to_ci8(self): iarray = bf.ndarray([[(0x10,),(0x32,)], @@ -70,7 +69,7 @@ def run_unpack_to_cf32_test(self, iarray): [ 4+5j, 6+7j], [-8-7j, -6-5j]], dtype='cf32') - bf.unpack.unpack(iarray, oarray) + bf.unpack(iarray, oarray) np.testing.assert_equal(oarray, oarray_known) def test_ci4_to_cf32(self): iarray = bf.ndarray([[(0x10,),(0x32,)], From 281f306f041217f579d7b90caf9b673eeb8f31c7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 14 Mar 2022 12:00:20 -0600 Subject: [PATCH 0400/1155] More updates for new imports. --- test/test_guantize.py | 4 ++-- test/test_gunpack.py | 6 +++--- test/test_managed.py | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/test_guantize.py b/test/test_guantize.py index 352346082..f642e40bc 100644 --- a/test/test_guantize.py +++ b/test/test_guantize.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -44,7 +44,7 @@ def run_quantize_from_cf32_test(self, out_dtype): [(2,2), (3,4)], [(4,4), (5,6)]], dtype=out_dtype) - bf.quantize.quantize(iarray.copy(space='cuda'), oarray) + bf.quantize(iarray.copy(space='cuda'), oarray) oarray = oarray.copy(space='system') np.testing.assert_equal(oarray, oarray_known) def test_cf32_to_ci8(self): diff --git a/test/test_gunpack.py b/test/test_gunpack.py index 5bd036731..38a00621c 100644 --- a/test/test_gunpack.py +++ b/test/test_gunpack.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -40,7 +40,7 @@ def run_unpack_to_ci8_test(self, iarray): [(4, 5), (6, 7)], [(-8, -7), (-6, -5)]], dtype='ci8') - bf.unpack.unpack(iarray.copy(space='cuda'), oarray) + bf.unpack(iarray.copy(space='cuda'), oarray) oarray = oarray.copy(space='system') np.testing.assert_equal(oarray, oarray_known) def test_ci4_to_ci8(self): @@ -74,7 +74,7 @@ def run_unpack_to_cf32_test(self, iarray): [ 4+5j, 6+7j], [-8-7j, -6-5j]], dtype='cf32') - bf.unpack.unpack(iarray.copy(space='cuda'), oarray) + bf.unpack(iarray.copy(space='cuda'), oarray) oarray = oarray.copy(space='system') np.testing.assert_equal(oarray, oarray_known) def test_ci4_to_cf32(self): diff --git a/test/test_managed.py b/test/test_managed.py index 7aba0d512..485829982 100644 --- a/test/test_managed.py +++ b/test/test_managed.py @@ -1,5 +1,5 @@ -# Copyright (c) 2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2021-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -282,7 +282,7 @@ def run_unpack_to_ci8_test(self, iarray): [(4, 5), (6, 7)], [(-8, -7), (-6, -5)]], dtype='ci8') - bf.unpack.unpack(iarray.copy(space='cuda_managed'), oarray) + bf.unpack(iarray.copy(space='cuda_managed'), oarray) stream_synchronize() np.testing.assert_equal(oarray, oarray_known) def test_ci4_to_ci8(self): From 0bf33ef5cf6d314b7ecd770ed9c7c1f4f21e46a1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 14 Mar 2022 13:26:01 -0600 Subject: [PATCH 0401/1155] Second check for the auto-detected archs. --- config/cuda.m4 | 12 ++++++++++-- configure | 8 ++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 9d35c62f6..08f7fe4d6 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -15,6 +15,7 @@ AC_DEFUN([AX_CHECK_CUDA], [enable_cuda=yes]) AC_SUBST([HAVE_CUDA], [0]) + AC_SUBST([GPU_MAX_ARCH], [0]) if test "$enable_cuda" != "no"; then AC_SUBST([HAVE_CUDA], [1]) @@ -137,8 +138,12 @@ AC_DEFUN([AX_CHECK_CUDA], [AC_SUBST([GPU_ARCHS], [`cat confarchs.out`]) ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) - AC_SUBST([GPU_ARCHS], [$ar_valid]) - AC_MSG_RESULT([$GPU_ARCHS])], + if test "$ar_valid" = ""; then + AC_MSG_ERROR(failed to find any) + else + AC_SUBST([GPU_ARCHS], [$ar_valid]) + AC_MSG_RESULT([$GPU_ARCHS]) + fi], [AC_MSG_ERROR(failed to find any)]) CXXFLAGS="$CXXFLAGS_save" @@ -157,6 +162,9 @@ AC_DEFUN([AX_CHECK_CUDA], else AC_MSG_ERROR(only '$ar_valid' are supported) fi + + ar_max_valid=$(echo $ar_valid | ${SED} -e 's/.* //g;' ) + AC_SUBST([GPU_MAX_ARCH], [$ar_max_valid]) AC_MSG_CHECKING([for Pascal-style CUDA managed memory]) cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[[1-5]][[0-9]]\b/PRE/g;' ) diff --git a/configure b/configure index 8ff4f8ae1..32a0faabc 100755 --- a/configure +++ b/configure @@ -19639,10 +19639,14 @@ then : ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) - GPU_ARCHS=$ar_valid + if test "$ar_valid" = ""; then + as_fn_error $? "failed to find any" "$LINENO" 5 + else + GPU_ARCHS=$ar_valid - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 printf "%s\n" "$GPU_ARCHS" >&6; } + fi else $as_nop as_fn_error $? "failed to find any" "$LINENO" 5 fi From 7b541fe0475218d3e3f09f4ddae8fb2086c279d7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 14 Mar 2022 13:31:40 -0600 Subject: [PATCH 0402/1155] Error message tweak. --- config/cuda.m4 | 2 +- configure | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 08f7fe4d6..bb6219ce2 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -139,7 +139,7 @@ AC_DEFUN([AX_CHECK_CUDA], ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[[0-9]]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) if test "$ar_valid" = ""; then - AC_MSG_ERROR(failed to find any) + AC_MSG_ERROR(failed to find any supported) else AC_SUBST([GPU_ARCHS], [$ar_valid]) AC_MSG_RESULT([$GPU_ARCHS]) diff --git a/configure b/configure index 32a0faabc..bab84e501 100755 --- a/configure +++ b/configure @@ -19640,7 +19640,7 @@ then : ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) if test "$ar_valid" = ""; then - as_fn_error $? "failed to find any" "$LINENO" 5 + as_fn_error $? "failed to find any supported" "$LINENO" 5 else GPU_ARCHS=$ar_valid From 4c7de6aca0e58c79e5aa9188ad1c5ddc0aaa2d7b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 14 Mar 2022 13:58:08 -0600 Subject: [PATCH 0403/1155] Updated for the new telemetry control method. --- python/Makefile.in | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/python/Makefile.in b/python/Makefile.in index 6a4cd1a51..4c5ad3faf 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -62,8 +62,7 @@ endif @echo "By default Bifrost installs with basic Python telemetry enabled in order" @echo "to help inform how the software is used for future development. You can" @echo "opt out of telemetry collection using:" - @echo ">>> from bifrost import telemetry" - @echo ">>> telemetry.disable()" + @echo "python -m bifrost.telemetry --disable" @echo "*************************************************************************" @echo "" @echo "If you have trouble importing Bifrost from Python you may need" From d8c071deaf2e1d0c26a0fea3d5761d5e0e5ad4e4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 14 Mar 2022 18:15:48 -0600 Subject: [PATCH 0404/1155] An idea for 'bifrost.version --config'. --- python/bifrost/version/__main__.py | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index 294cd6278..fae3bba73 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -1,3 +1,35 @@ +from __future__ import print_function + +import argparse + from bifrost import __version__, __copyright__, __license__ +from bifrost.libbifrost_generated import * + +def _yes_no(value): + if value: + return "yes" + else: + return "no" + +parser = argparse.ArgumentParser(description='Bifrost version/configuration information') +parser.add_argument('--config', action='store_true', + help='also display configuration information') +args = parser.parse_args() print("\n".join(["bifrost " + __version__, __copyright__, "License: " + __license__])) +if args.config: + print("\nConfiguration:") + print(" Memory alignment: %i B" % BF_ALIGNMENT) + print(" OpenMP support: %s" % _yes_no(BF_OPENMP_ENABLED)) + print(" NUMA support %s" % _yes_no(BF_NUMA_ENABLED)) + print(" Hardware locality support: %s" % _yes_no(BF_HWLOC_ENABLED)) + print(" Mellanox messaging accelerator (VMA) support: %s" % _yes_no(BF_VMA_ENABLED)) + print(" Logging directory: %s" % BF_PROCLOG_DIR) + print(" Debugging: %s" % _yes_no(BF_DEBUG_ENABLED)) + print(" CUDA support: %s" % _yes_no(BF_CUDA_ENABLED)) + if BF_CUDA_ENABLED: + print(" CUDA architectures: %s" % BF_GPU_ARCHS) + print(" CUDA shared memory: %i B" % BF_GPU_SHAREDMEM) + print(" CUDA managed memory support: %s" % _yes_no(BF_GPU_MANAGEDMEM)) + print(" CUDA debugging: %s" % _yes_no(BF_CUDA_DEBUG_ENABLED)) + print(" CUDA tracing enabled: %s" % _yes_no(BF_TRACE_ENABLED)) From ef74ece6e943710734f146eeab1b4732c6595872 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 14 Mar 2022 21:53:33 -0400 Subject: [PATCH 0405/1155] Gratuitous one-liner for yes/no in bifrost.version? --- python/bifrost/version/__main__.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index fae3bba73..55e949b93 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -6,10 +6,7 @@ from bifrost.libbifrost_generated import * def _yes_no(value): - if value: - return "yes" - else: - return "no" + return "yes" if value else "no" parser = argparse.ArgumentParser(description='Bifrost version/configuration information') parser.add_argument('--config', action='store_true', From 083c3706f4df71c2021bce14cda3a6572f14ed58 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 15 Mar 2022 08:42:08 -0600 Subject: [PATCH 0406/1155] Added a CUDA version check to deal with unexpected cuFFT behavior. --- config/cuda.m4 | 3 ++- configure | 24 ++++++++++++++++++++---- configure.ac | 8 +++++++- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index bb6219ce2..582676cb1 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -50,7 +50,8 @@ AC_DEFUN([AX_CHECK_CUDA], #include #include ]], [[cudaMalloc(0, 0);]])], - [AC_MSG_RESULT(yes)], + [cuda_version=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) + AC_MSG_RESULT(yes - v$cuda_version)], [AC_MSG_RESULT(no) AC_SUBST([HAVE_CUDA], [0])]) else diff --git a/configure b/configure index bab84e501..18c6ab278 100755 --- a/configure +++ b/configure @@ -19511,8 +19511,9 @@ cudaMalloc(0, 0); _ACEOF if ac_fn_cxx_try_link "$LINENO" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + cuda_version=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes - v$cuda_version" >&5 +printf "%s\n" "yes - v$cuda_version" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -24709,8 +24710,23 @@ echo "" if test x$HAVE_CUDA = x1 then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - $GPU_ARCHS" >&5 -printf "%s\n" "$as_me: cuda: yes - $GPU_ARCHS" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - v$cuda_version - $GPU_ARCHS" >&5 +printf "%s\n" "$as_me: cuda: yes - v$cuda_version - $GPU_ARCHS" >&6;} + if test x$cuda_version = x10.1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 +printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} +fi + if test x$cuda_version = x10.2 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 +printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} +fi + if test x$cuda_version = x11.0 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 +printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} +fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 printf "%s\n" "$as_me: cuda: no" >&6;} diff --git a/configure.ac b/configure.ac index b5e12470c..34a13cb52 100644 --- a/configure.ac +++ b/configure.ac @@ -298,7 +298,13 @@ AC_OUTPUT echo "" AS_IF([test x$HAVE_CUDA = x1], - [AC_MSG_NOTICE(cuda: yes - $GPU_ARCHS)], + [AC_MSG_NOTICE(cuda: yes - v$cuda_version - $GPU_ARCHS) + AS_IF([test x$cuda_version = x10.1], + [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) + AS_IF([test x$cuda_version = x10.2], + [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) + AS_IF([test x$cuda_version = x11.0], + [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)])], [AC_MSG_NOTICE(cuda: no)]) AS_IF([test x$HAVE_NUMA = x1], From 62773981cf9856543730e9393cc7bca4685ce0e2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 16 Mar 2022 08:52:40 -0600 Subject: [PATCH 0407/1155] Added BF_CUDA_VERSION to config.h. --- config/cuda.m4 | 5 +++-- configure | 19 +++++++++++-------- configure.ac | 8 ++++---- python/bifrost/version/__main__.py | 1 + src/bifrost/config.h.in | 1 + 5 files changed, 20 insertions(+), 14 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 582676cb1..dabcdfa19 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -15,6 +15,7 @@ AC_DEFUN([AX_CHECK_CUDA], [enable_cuda=yes]) AC_SUBST([HAVE_CUDA], [0]) + AC_SUBST([CUDA_VERSION], [0]) AC_SUBST([GPU_MAX_ARCH], [0]) if test "$enable_cuda" != "no"; then AC_SUBST([HAVE_CUDA], [1]) @@ -50,8 +51,8 @@ AC_DEFUN([AX_CHECK_CUDA], #include #include ]], [[cudaMalloc(0, 0);]])], - [cuda_version=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) - AC_MSG_RESULT(yes - v$cuda_version)], + [CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) + AC_MSG_RESULT(yes - v$CUDA_VERSION)], [AC_MSG_RESULT(no) AC_SUBST([HAVE_CUDA], [0])]) else diff --git a/configure b/configure index 18c6ab278..b1ef18c70 100755 --- a/configure +++ b/configure @@ -720,6 +720,7 @@ CUOBJDUMP NVPRUNE NVCC GPU_MAX_ARCH +CUDA_VERSION HAVE_CUDA CUDA_HOME HAVE_VMA @@ -19309,6 +19310,8 @@ fi HAVE_CUDA=0 + CUDA_VERSION=0 + GPU_MAX_ARCH=0 if test "$enable_cuda" != "no"; then @@ -19511,9 +19514,9 @@ cudaMalloc(0, 0); _ACEOF if ac_fn_cxx_try_link "$LINENO" then : - cuda_version=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes - v$cuda_version" >&5 -printf "%s\n" "yes - v$cuda_version" >&6; } + CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes - v$CUDA_VERSION" >&5 +printf "%s\n" "yes - v$CUDA_VERSION" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -24710,19 +24713,19 @@ echo "" if test x$HAVE_CUDA = x1 then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - v$cuda_version - $GPU_ARCHS" >&5 -printf "%s\n" "$as_me: cuda: yes - v$cuda_version - $GPU_ARCHS" >&6;} - if test x$cuda_version = x10.1 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS" >&5 +printf "%s\n" "$as_me: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS" >&6;} + if test x$CUDA_VERSION = x10.1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} fi - if test x$cuda_version = x10.2 + if test x$CUDA_VERSION = x10.2 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} fi - if test x$cuda_version = x11.0 + if test x$CUDA_VERSION = x11.0 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} diff --git a/configure.ac b/configure.ac index 34a13cb52..a598b5885 100644 --- a/configure.ac +++ b/configure.ac @@ -298,12 +298,12 @@ AC_OUTPUT echo "" AS_IF([test x$HAVE_CUDA = x1], - [AC_MSG_NOTICE(cuda: yes - v$cuda_version - $GPU_ARCHS) - AS_IF([test x$cuda_version = x10.1], + [AC_MSG_NOTICE(cuda: yes - v$CUDA_VERSION - $GPU_ARCHS) + AS_IF([test x$CUDA_VERSION = x10.1], [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) - AS_IF([test x$cuda_version = x10.2], + AS_IF([test x$CUDA_VERSION = x10.2], [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) - AS_IF([test x$cuda_version = x11.0], + AS_IF([test x$CUDA_VERSION = x11.0], [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)])], [AC_MSG_NOTICE(cuda: no)]) diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index 55e949b93..1857ec51a 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -25,6 +25,7 @@ def _yes_no(value): print(" Debugging: %s" % _yes_no(BF_DEBUG_ENABLED)) print(" CUDA support: %s" % _yes_no(BF_CUDA_ENABLED)) if BF_CUDA_ENABLED: + print(" CUDA version: %.1f" % BF_CUDA_VERSION) print(" CUDA architectures: %s" % BF_GPU_ARCHS) print(" CUDA shared memory: %i B" % BF_GPU_SHAREDMEM) print(" CUDA managed memory support: %s" % _yes_no(BF_GPU_MANAGEDMEM)) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 81cc464bf..0559a878a 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -43,6 +43,7 @@ extern "C" { // CUDA support #define BF_CUDA_ENABLED @HAVE_CUDA@ +#define BF_CUDA_VERSION @CUDA_VERSION@ #define BF_GPU_ARCHS "@GPU_ARCHS@" #define BF_GPU_MAX_ARCH @GPU_MAX_ARCH@ #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ From ed7362759cead523acd2aa67ff2d95be752a0be6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 16 Mar 2022 08:53:20 -0600 Subject: [PATCH 0408/1155] Added a catch to skip the c2r tests with fftshift=True under CUDAs 10.1, 10.2, and 11. Others may be needed. --- test/test_fft.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/test_fft.py b/test/test_fft.py index 6aa9b09d8..ff51fc076 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -37,7 +37,7 @@ from bifrost.fft import Fft import bifrost as bf -from bifrost.libbifrost_generated import BF_CUDA_ENABLED +from bifrost.libbifrost_generated import BF_CUDA_ENABLED, BF_CUDA_VERSION MTOL = 1e-6 # Relative tolerance at the mean magnitude RTOL = 1e-1 @@ -141,7 +141,9 @@ def run_test_c2c(self, shape, axes): self.run_test_c2c_impl(shape, axes, inverse=True, fftshift=True) def run_test_c2r(self, shape, axes): self.run_test_c2r_impl(shape, axes) - self.run_test_c2r_impl(shape, axes, fftshift=True) + if BF_CUDA_VERSION < 10.1 and BF_CUDA_VERSION > 11: + # TODO: How do we announce that this is happening? + self.run_test_c2r_impl(shape, axes, fftshift=True) def test_1D(self): self.run_test_c2c(self.shape1D, [0]) From bba8b864675b1b43f5d65c9436f380295484e786 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 16 Mar 2022 09:28:33 -0600 Subject: [PATCH 0409/1155] 'or' not 'and' --- test/test_fft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_fft.py b/test/test_fft.py index ff51fc076..c7719bc91 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -141,7 +141,7 @@ def run_test_c2c(self, shape, axes): self.run_test_c2c_impl(shape, axes, inverse=True, fftshift=True) def run_test_c2r(self, shape, axes): self.run_test_c2r_impl(shape, axes) - if BF_CUDA_VERSION < 10.1 and BF_CUDA_VERSION > 11: + if BF_CUDA_VERSION < 10.1 or BF_CUDA_VERSION > 11: # TODO: How do we announce that this is happening? self.run_test_c2r_impl(shape, axes, fftshift=True) From e4104c84aca69847a620e905923ed74816e5acce Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 16 Mar 2022 10:04:11 -0600 Subject: [PATCH 0410/1155] Move the cuFFT warning around to make it more obvious. --- configure | 19 ++++++++++++++----- configure.ac | 17 ++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/configure b/configure index b1ef18c70..86de5cf59 100755 --- a/configure +++ b/configure @@ -24706,15 +24706,12 @@ fi # -# User notes +# User warnings # -echo "" - if test x$HAVE_CUDA = x1 then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS" >&5 -printf "%s\n" "$as_me: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS" >&6;} + echo "" if test x$CUDA_VERSION = x10.1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 @@ -24730,6 +24727,18 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} fi +fi + +# +# User notes +# + +echo "" + +if test x$HAVE_CUDA = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS" >&5 +printf "%s\n" "$as_me: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS" >&6;} else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 printf "%s\n" "$as_me: cuda: no" >&6;} diff --git a/configure.ac b/configure.ac index a598b5885..741d6e7c3 100644 --- a/configure.ac +++ b/configure.ac @@ -292,19 +292,26 @@ AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile share/bifrost.p AC_OUTPUT # -# User notes +# User warnings # -echo "" - AS_IF([test x$HAVE_CUDA = x1], - [AC_MSG_NOTICE(cuda: yes - v$CUDA_VERSION - $GPU_ARCHS) + [echo "" AS_IF([test x$CUDA_VERSION = x10.1], [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) AS_IF([test x$CUDA_VERSION = x10.2], [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) AS_IF([test x$CUDA_VERSION = x11.0], - [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)])], + [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)])]) + +# +# User notes +# + +echo "" + +AS_IF([test x$HAVE_CUDA = x1], + [AC_MSG_NOTICE(cuda: yes - v$CUDA_VERSION - $GPU_ARCHS)], [AC_MSG_NOTICE(cuda: no)]) AS_IF([test x$HAVE_NUMA = x1], From 40972a012126c87a510ab67252d19e50516863e0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 16 Mar 2022 10:35:15 -0600 Subject: [PATCH 0411/1155] Formatting cleanup. --- configure | 12 +++++++----- configure.ac | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/configure b/configure index 86de5cf59..f683fa299 100755 --- a/configure +++ b/configure @@ -24711,20 +24711,22 @@ fi if test x$HAVE_CUDA = x1 then : - echo "" - if test x$CUDA_VERSION = x10.1 + if test x$CUDA_VERSION = x10.1 then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 + echo "" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} fi if test x$CUDA_VERSION = x10.2 then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 + echo "" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} fi if test x$CUDA_VERSION = x11.0 then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 + echo "" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} fi fi diff --git a/configure.ac b/configure.ac index 741d6e7c3..c43f55a2d 100644 --- a/configure.ac +++ b/configure.ac @@ -296,13 +296,15 @@ AC_OUTPUT # AS_IF([test x$HAVE_CUDA = x1], - [echo "" - AS_IF([test x$CUDA_VERSION = x10.1], - [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) + [AS_IF([test x$CUDA_VERSION = x10.1], + [echo "" + AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) AS_IF([test x$CUDA_VERSION = x10.2], - [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) + [echo "" + AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) AS_IF([test x$CUDA_VERSION = x11.0], - [AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)])]) + [echo "" + AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)])]) # # User notes From 27a6d1d963267ffe20c9c2e1875b4e15b0490ddc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 16 Mar 2022 10:35:33 -0600 Subject: [PATCH 0412/1155] Add in ctypesgen. --- python/setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/setup.py b/python/setup.py index 585828c4a..b1107a721 100755 --- a/python/setup.py +++ b/python/setup.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -76,6 +76,7 @@ "contextlib2>=0.4.0", "pint>=0.7.0", "graphviz>=0.5.0", + "ctypesgen==1.0.2", "matplotlib" ], ext_package='bifrost', From f7f256cca9f82014fa6aebc2de9a10a7646494c9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 16 Mar 2022 11:38:14 -0600 Subject: [PATCH 0413/1155] Conditional expected failures for c2r transforms. --- test/test_fft.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/test/test_fft.py b/test/test_fft.py index c7719bc91..d452dcac6 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -50,6 +50,11 @@ def compare(result, gold): absmean = np.abs(gold).mean() np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) +def cudaExpectedFailure(testcase): + if BF_CUDA_VERSION < 10.1 or BF_CUDA_VERSION > 11: + return testcase + return unittest.expectedFailure(testcase) + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestFFT(unittest.TestCase): def setUp(self): @@ -141,9 +146,7 @@ def run_test_c2c(self, shape, axes): self.run_test_c2c_impl(shape, axes, inverse=True, fftshift=True) def run_test_c2r(self, shape, axes): self.run_test_c2r_impl(shape, axes) - if BF_CUDA_VERSION < 10.1 or BF_CUDA_VERSION > 11: - # TODO: How do we announce that this is happening? - self.run_test_c2r_impl(shape, axes, fftshift=True) + self.run_test_c2r_impl(shape, axes, fftshift=True) def test_1D(self): self.run_test_c2c(self.shape1D, [0]) @@ -198,10 +201,13 @@ def test_r2c_2D(self): def test_r2c_3D(self): self.run_test_r2c(self.shape3D, [0, 1, 2]) + @cudaExpectedFailure def test_c2r_1D(self): self.run_test_c2r(self.shape1D, [0]) + @cudaExpectedFailure def test_c2r_2D(self): self.run_test_c2r(self.shape2D, [0, 1]) + @cudaExpectedFailure def test_c2r_3D(self): self.run_test_c2r(self.shape3D, [0, 1, 2]) From 53687e172e6c4813679ce4b7a50addbf718149cb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 16 Mar 2022 14:11:15 -0600 Subject: [PATCH 0414/1155] Extend the FFT c2r warning up to 11.6. --- configure | 22 +++++----------------- configure.ac | 14 +++++--------- test/test_fft.py | 2 +- 3 files changed, 11 insertions(+), 27 deletions(-) diff --git a/configure b/configure index f683fa299..aed88bcfd 100755 --- a/configure +++ b/configure @@ -24711,24 +24711,12 @@ fi if test x$HAVE_CUDA = x1 then : - if test x$CUDA_VERSION = x10.1 -then : - echo "" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 + cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10.1-2" -e "11.0-6" ) + if test "$cufft_c2r_modifies" != x""; then + echo "" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} -fi - if test x$CUDA_VERSION = x10.2 -then : - echo "" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 -printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} -fi - if test x$CUDA_VERSION = x11.0 -then : - echo "" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 -printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} -fi + fi fi # diff --git a/configure.ac b/configure.ac index c43f55a2d..0863cbfff 100644 --- a/configure.ac +++ b/configure.ac @@ -296,15 +296,11 @@ AC_OUTPUT # AS_IF([test x$HAVE_CUDA = x1], - [AS_IF([test x$CUDA_VERSION = x10.1], - [echo "" - AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) - AS_IF([test x$CUDA_VERSION = x10.2], - [echo "" - AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)]) - AS_IF([test x$CUDA_VERSION = x11.0], - [echo "" - AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms)])]) + [cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10.[1-2]" -e "11.[0-6]" ) + if test "$cufft_c2r_modifies" != x""; then + echo "" + AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms) + fi]) # # User notes diff --git a/test/test_fft.py b/test/test_fft.py index d452dcac6..9169dd68d 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -51,7 +51,7 @@ def compare(result, gold): np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) def cudaExpectedFailure(testcase): - if BF_CUDA_VERSION < 10.1 or BF_CUDA_VERSION > 11: + if BF_CUDA_VERSION < 10.1 or BF_CUDA_VERSION > 11.6: return testcase return unittest.expectedFailure(testcase) From a26d2f4ae63e3e4768009b88fe8d480b12b8d68d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 16 Mar 2022 14:38:18 -0600 Subject: [PATCH 0415/1155] Warning logic fix. --- configure | 4 ++-- configure.ac | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configure b/configure index aed88bcfd..d169ad209 100755 --- a/configure +++ b/configure @@ -24711,8 +24711,8 @@ fi if test x$HAVE_CUDA = x1 then : - cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10.1-2" -e "11.0-6" ) - if test "$cufft_c2r_modifies" != x""; then + cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10\.[1-2]" -e "11\.[0-6]" ) + if test "$cufft_c2r_modifies" != ""; then echo "" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} diff --git a/configure.ac b/configure.ac index 0863cbfff..9d9650bfe 100644 --- a/configure.ac +++ b/configure.ac @@ -296,8 +296,8 @@ AC_OUTPUT # AS_IF([test x$HAVE_CUDA = x1], - [cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10.[1-2]" -e "11.[0-6]" ) - if test "$cufft_c2r_modifies" != x""; then + [cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10\.[[1-2]]" -e "11\.[[0-6]]" ) + if test "$cufft_c2r_modifies" != ""; then echo "" AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms) fi]) From e3adff5bc6642aa795481e2ca7ce54389d40a39b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 21 Mar 2022 14:54:55 -0600 Subject: [PATCH 0416/1155] Noted the change to ctypesgen 1.0.2. --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 76ed3bfec..2103ae651 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,6 +9,7 @@ * Added support for the cuda_managed space on Pascal and later GPUs * Added support for ci32 in bf.map * Added support for converting a bifrost.ndarray to/from a cupy.ndarray + * Switched to ctypesgen 1.0.2 0.9.0 * Added support for Python3 From 4ccbf2845a0dfe7cd84b83e504fec202108c8eee Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 21 Mar 2022 15:21:52 -0600 Subject: [PATCH 0417/1155] Re-versioning to match the next release. --- CHANGELOG | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 2103ae651..c479445f4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,4 @@ -0.9.1 - * Fixed a problem with like_bmon.py crashing when there are a large number of pipelines - * Added a CHANGELOG file - * Added a lightweight telemetry client for the Python API +0.10.0 * Switched over to an autotools-based build system * Added a .m4 file to help other autotools-based software find Bifrost * Added a pkg-config file for Bifrost @@ -10,6 +7,12 @@ * Added support for ci32 in bf.map * Added support for converting a bifrost.ndarray to/from a cupy.ndarray * Switched to ctypesgen 1.0.2 + * Added an example Python notebook that can run on Google Colab + +0.9.1 + * Fixed a problem with like_bmon.py crashing when there are a large number of pipelines + * Added a CHANGELOG file + * Added a lightweight telemetry client for the Python API 0.9.0 * Added support for Python3 From 7944d612a526bb35b1610ead0797c41752affab3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 21 Mar 2022 15:41:51 -0600 Subject: [PATCH 0418/1155] A few more changes. --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index c479445f4..cfbe115bf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,8 @@ * Added support for converting a bifrost.ndarray to/from a cupy.ndarray * Switched to ctypesgen 1.0.2 * Added an example Python notebook that can run on Google Colab + * Added support for 'python -m bifrost.version' + * Removed bifrost_telemetry.py in favor of 'python -m bifrost.telemetry' 0.9.1 * Fixed a problem with like_bmon.py crashing when there are a large number of pipelines From a986afaefc964a956bb6343c02c7dd4b46d08349 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 09:07:15 -0600 Subject: [PATCH 0419/1155] Update branch to use since #157 has been merged. --- BifrostDemo.ipynb | 3 --- 1 file changed, 3 deletions(-) diff --git a/BifrostDemo.ipynb b/BifrostDemo.ipynb index 4fb164dec..2d2254a9c 100644 --- a/BifrostDemo.ipynb +++ b/BifrostDemo.ipynb @@ -102,9 +102,6 @@ "cd \"${HOME}/bifrost_repo\"\n", "git pull --all\n", "\n", - "# Use autoconf version:\n", - "git checkout autoconf\n", - "git checkout d1430c3ca11517b32f6d4f88f9f05985f0ccdfb9\n", "./configure\n", "\n", "# Build and install:\n", From becbbc843396c1fb0edf10c4505aa92fbee458a5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 09:10:32 -0600 Subject: [PATCH 0420/1155] ctypesgen version update. --- BifrostDemo.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BifrostDemo.ipynb b/BifrostDemo.ipynb index 2d2254a9c..8ef5c0cc8 100644 --- a/BifrostDemo.ipynb +++ b/BifrostDemo.ipynb @@ -79,7 +79,7 @@ "# @title Install python deps\n", "%%shell\n", "\n", - "pip install -q contextlib2 pint simplejson git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f" + "pip install -q contextlib2 pint simplejson ctypesgen==1.0.2" ] }, { From a57a83f8bffc91feed5146d7264a72e0c8ddeb6d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 09:19:46 -0600 Subject: [PATCH 0421/1155] This is Bifrost v0.10.0. --- configure | 18 +++++++++--------- configure.ac | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/configure b/configure index d169ad209..9b068b575 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for bifrost 0.9.0. +# Generated by GNU Autoconf 2.71 for bifrost 0.10.0. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -618,8 +618,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='bifrost' PACKAGE_TARNAME='bifrost' -PACKAGE_VERSION='0.9.0' -PACKAGE_STRING='bifrost 0.9.0' +PACKAGE_VERSION='0.10.0' +PACKAGE_STRING='bifrost 0.10.0' PACKAGE_BUGREPORT='' PACKAGE_URL='https://github.com/ledatelescope/bifrost/' @@ -1428,7 +1428,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bifrost 0.9.0 to adapt to many kinds of systems. +\`configure' configures bifrost 0.10.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1494,7 +1494,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bifrost 0.9.0:";; + short | recursive ) echo "Configuration of bifrost 0.10.0:";; esac cat <<\_ACEOF @@ -1640,7 +1640,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bifrost configure 0.9.0 +bifrost configure 0.10.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2314,7 +2314,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bifrost $as_me 0.9.0, which was +It was created by bifrost $as_me 0.10.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -22968,7 +22968,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bifrost $as_me 0.9.0, which was +This file was extended by bifrost $as_me 0.10.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23028,7 +23028,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -bifrost config.status 0.9.0 +bifrost config.status 0.10.0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 9d9650bfe..cdfca1278 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([bifrost], [0.9.0], [], [], [https://github.com/ledatelescope/bifrost/]) +AC_INIT([bifrost], [0.10.0], [], [], [https://github.com/ledatelescope/bifrost/]) AC_LANG(C++) AC_CONFIG_SRCDIR([src/cuda.cpp]) From c038eeea461d8d8a1acf522fd7b697dcad4bbc1d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 11:44:13 -0600 Subject: [PATCH 0422/1155] Formatting and cleanup. --- src/map.cpp | 139 +++++++++++++++++++++++++--------------------------- 1 file changed, 66 insertions(+), 73 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index ce788dd4d..47006a914 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -452,7 +452,6 @@ class DiskCacheMgr { } if( !status ) { - //cout << "INVALIDATING DISK CACHE" << endl; try { remove_file(_cachedir + "*.inf"); remove_file(_cachedir + "*.ptx"); @@ -462,11 +461,11 @@ class DiskCacheMgr { } void write_to_disk(std::string cache_key, - std::string kernel_name, - std::string ptx, - bool basic_indexing_only) { + std::string kernel_name, + std::string ptx, + bool basic_indexing_only) { // Do this with a file lock to avoid interference from other processes - LockFile lock(_cachedir + ".lock"); + LockFile lock(_cachedir + ".lock"); this->tag_cache(); @@ -498,77 +497,73 @@ class DiskCacheMgr { // Done index.close(); cache.close(); - //cout << "SAVED TO DISK " << cache_key << " as " << basename.str() << endl; } catch( std::exception ) {} } void load_from_disk(ObjectCache > *kernel_cache) { // Do this with a file lock to avoid interference from other processes - LockFile lock(_cachedir + ".lock"); - - // Validate the cache - this->validate_cache(); - - std::ifstream index, cache; - size_t kernel_size; - std::string kernel_name; - bool basic_indexing_only; - std::string cache_key; - std::string ptx; - CUDAKernel kernel; - - std::string field; - - // Find the files - DIR* dir = opendir(_cachedir.c_str()); - struct dirent *entry; - while( (entry = readdir(dir)) != NULL ) { - _indexfile = _cachedir + std::string(entry->d_name); - if( _indexfile.size() < 4 ) { - continue; - } - if( _indexfile.compare(_indexfile.size()-4, 4, ".inf") == 0 ) { - // We have an info file, get the corresponding ptx file - _cachefile = _indexfile.substr(0, _indexfile.size()-4) + ".ptx"; - - try { - // Open - index.open(_indexfile, std::ios::in); - cache.open(_cachefile, std::ios::in|std::ios::binary); - - // Read in info and then build the kernels - // * PTX size - std::getline(index, field); - kernel_size = std::atoi(field.c_str()); - // * Kernel name - std::getline(index, kernel_name); - // * Whether or not the kernel supports basic indexing only - std::getline(index, field); - basic_indexing_only = false; - if( std::atoi(field.c_str()) > 0 ) { - basic_indexing_only = true; - } - // * In-memory cache name - std::getline(index, cache_key); - while( std::getline(index, field) ) { - cache_key = cache_key + "\n" + field; - } - - // Check the cache to see if it is aleady there... - if( !kernel_cache->contains(cache_key) ) { - ptx.resize(kernel_size); - cache.read(&ptx[0], kernel_size); - kernel.set(kernel_name.c_str(), ptx.c_str()); - - kernel_cache->insert(cache_key, - std::make_pair(kernel, basic_indexing_only)); - //cout << "LOADED FROM DISK " << cache_key << endl; - } else { - //cout << "ALREADY THERE" << cache_key << endl; - } - - // Done - index.close(); + LockFile lock(_cachedir + ".lock"); + + // Validate the cache + this->validate_cache(); + + std::ifstream index, cache; + size_t kernel_size; + std::string kernel_name; + bool basic_indexing_only; + std::string cache_key; + std::string ptx; + CUDAKernel kernel; + + std::string field; + + // Find the files + DIR* dir = opendir(_cachedir.c_str()); + struct dirent *entry; + while( (entry = readdir(dir)) != NULL ) { + _indexfile = _cachedir + std::string(entry->d_name); + if( _indexfile.size() < 4 ) { + continue; + } + if( _indexfile.compare(_indexfile.size()-4, 4, ".inf") == 0 ) { + // We have an info file, get the corresponding ptx file + _cachefile = _indexfile.substr(0, _indexfile.size()-4) + ".ptx"; + + try { + // Open + index.open(_indexfile, std::ios::in); + cache.open(_cachefile, std::ios::in|std::ios::binary); + + // Read in info and then build the kernels + // * PTX size + std::getline(index, field); + kernel_size = std::atoi(field.c_str()); + // * Kernel name + std::getline(index, kernel_name); + // * Whether or not the kernel supports basic indexing only + std::getline(index, field); + basic_indexing_only = false; + if( std::atoi(field.c_str()) > 0 ) { + basic_indexing_only = true; + } + // * In-memory cache name + std::getline(index, cache_key); + while( std::getline(index, field) ) { + cache_key = cache_key + "\n" + field; + } + + // Check the cache to see if it is aleady there... + if( !kernel_cache->contains(cache_key) ) { + ptx.resize(kernel_size); + cache.read(&ptx[0], kernel_size); + kernel.set(kernel_name.c_str(), ptx.c_str()); + + kernel_cache->insert(cache_key, + std::make_pair(kernel, basic_indexing_only)); + } + + // Done + index.close(); cache.close(); } catch( std::exception) {} } @@ -734,8 +729,6 @@ BFstatus bfMap(int ndim, DiskCacheMgr::get().save(cache_key, kernel_name, ptx, basic_indexing_only); #endif //std::cout << "INSERTING INTO CACHE" << std::endl; - } else { - //std::cout << "FOUND IN CACHE" << std::endl; } auto& cache_entry = kernel_cache.get(cache_key); CUDAKernel& kernel = cache_entry.first; From 5a0fff8f1e7cfb4455654d335e0dd59c1126c39d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 12:52:01 -0600 Subject: [PATCH 0423/1155] Rebuild configure. --- configure | 5831 +++++++++++------------------------------------------ 1 file changed, 1163 insertions(+), 4668 deletions(-) diff --git a/configure b/configure index 9b068b575..e84ea8a4b 100755 --- a/configure +++ b/configure @@ -661,50 +661,9 @@ LTLIBOBJS PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR PACKAGE_VERSION_MAJOR -DX_RULES -PAPER_SIZE -DOXYGEN_PAPER_SIZE -GENERATE_LATEX -DX_PDFLATEX -DX_FLAG_pdf -DX_EGREP -DX_DVIPS -DX_MAKEINDEX -DX_LATEX -DX_FLAG_ps -DX_FLAG_html -GENERATE_CHI -DX_FLAG_chi -GENERATE_HTMLHELP -GENERATE_HTML -HHC_PATH -DX_HHC -DX_FLAG_chm -GENERATE_XML -DX_FLAG_xml -GENERATE_RTF -DX_FLAG_rtf -GENERATE_MAN -DX_FLAG_man -DOT_PATH -HAVE_DOT -DX_DOT -DX_FLAG_dot -PERL_PATH -DX_PERL -DX_DOXYGEN -DX_FLAG_doc -PROJECT -SRCDIR -DX_ENV -DX_DOCDIR -DX_CONFIG -DX_PROJECT HAVE_DOCKER -DOCKER PYINSTALLFLAGS PYBUILDFLAGS -PYTHON HAVE_PYTHON HAVE_CUDA_DEBUG enable_native_arch @@ -730,10 +689,7 @@ HAVE_FLOAT128 HAVE_OPENMP LIBOBJS HAVE_RECVMSG -HAVE_CXX11 -HAVE_CXX14 SO_EXT -CTAGS SET_MAKE INSTALL_DATA INSTALL_SCRIPT @@ -832,7 +788,6 @@ with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock -with_ctags enable_numa enable_hwloc enable_vma @@ -847,21 +802,10 @@ enable_debug enable_trace enable_native_arch enable_cuda_debug +enable_map_cache enable_python -with_python with_pybuild_flags with_pyinstall_flags -with_docker -enable_doxygen_doc -enable_doxygen_dot -enable_doxygen_man -enable_doxygen_rtf -enable_doxygen_xml -enable_doxygen_chm -enable_doxygen_chi -enable_doxygen_html -enable_doxygen_ps -enable_doxygen_pdf ' ac_precious_vars='build_alias host_alias @@ -875,11 +819,7 @@ CXX CXXFLAGS CCC LT_SYS_LIBRARY_PATH -CXXCPP -CTAGS -PYTHON -DOCKER -DOXYGEN_PAPER_SIZE' +CXXCPP' # Initialize some variables set by options. @@ -1515,18 +1455,8 @@ Optional Features: --enable-trace enable tracing mode for nvprof/nvvp (default=no) --disable-native-arch disable native architecture compilation (default=no) --enable-cuda-debug enable CUDA debugging (nvcc -G; default=no) + --disable-map-cache disable caching bifrost.map kernels (default=no) --disable-python disable building the Python bindings (default=no) - --disable-doxygen-doc don't generate any doxygen documentation - --enable-doxygen-dot generate graphics for doxygen documentation - --disable-doxygen-man don't generate doxygen manual pages - --enable-doxygen-rtf generate doxygen RTF documentation - --enable-doxygen-xml generate doxygen XML documentation - --enable-doxygen-chm generate doxygen compressed HTML help documentation - --enable-doxygen-chi generate doxygen separate compressed HTML help index - file - --disable-doxygen-html don't generate doxygen plain HTML documentation - --disable-doxygen-ps don't generate doxygen PostScript documentation - --disable-doxygen-pdf don't generate doxygen PDF documentation Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1539,7 +1469,6 @@ Optional Packages: --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). - --with-ctags=[PATH] absolute path to ctags executable --with-cuda-home CUDA install path (default=/usr/local/cuda) --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"') @@ -1548,10 +1477,8 @@ Optional Packages: --with-alignment=N default memory alignment in bytes (default=4096) --with-logging-dir=DIR directory for Bifrost proclog logging (default=autodetect) - --with-python=[PATH] absolute path to python executable --with-pybuild-flags build flags for python (default='') --with-pyinstall-flags install flags for python (default='') - --with-docker=[PATH] absolute path to docker executable Some influential environment variables: CC C compiler command @@ -1566,11 +1493,6 @@ Some influential environment variables: LT_SYS_LIBRARY_PATH User-defined run-time library search path. CXXCPP C++ preprocessor - CTAGS Absolute path to ctags executable - PYTHON Absolute path to python executable - DOCKER Absolute path to docker executable - DOXYGEN_PAPER_SIZE - a4wide (default), a4, letter, legal or executive Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -17443,151 +17365,7 @@ printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi - - - - - - - - - - - if test -z "$CTAGS" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 -printf %s "checking whether ctags executable path has been provided... " >&6; } - -# Check whether --with-ctags was given. -if test ${with_ctags+y} -then : - withval=$with_ctags; - if test "$withval" != yes && test "$withval" != no -then : - - CTAGS="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } - -else $as_nop - - CTAGS="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : - - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CTAGS+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - -fi - -fi - -else $as_nop - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - # Extract the first word of "ctags", so it can be a program name with args. -set dummy ctags; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CTAGS+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $CTAGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CTAGS=$ac_cv_path_CTAGS -if test -n "$CTAGS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 -printf "%s\n" "$CTAGS" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - -fi - - -fi - - - - - - +AX_WITH_PROG(CTAGS, ctags) if test x${CTAGS} = x then : as_fn_error $? "Required program ctags was not found" "$LINENO" 5 @@ -17655,4749 +17433,1466 @@ _ACEOF ;; esac - ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - +AX_CXX_COMPILE_STDCXX(14, noext, optional) +if test x$HAVE_CXX14 != x1 +then : + AX_CXX_COMPILE_STDCXX(11, noext, mandatory) +fi +ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes +then : + printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h +fi +ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes +then : + printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h +fi - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 -printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } -if eval test \${$cachevar+y} +ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h +fi -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. -#ifndef __cplusplus + for ac_func in recvmsg +do : + ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" +if test "x$ac_cv_func_recvmsg" = xyes +then : + printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h + HAVE_RECVMSG=1 -#error "This is not a C++ compiler" +else $as_nop + HAVE_RECVMSG=0 -#elif __cplusplus < 201103L +fi -#error "This is not a C++11 compiler" +done +ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes +then : + printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h -#else +fi -namespace cxx11 -{ +ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes +then : + printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h - namespace test_static_assert - { +fi - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; +ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h - } +fi - namespace test_final_override - { +ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes +then : + printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; +fi - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; +ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes +then : + printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h - } +fi - namespace test_double_right_angle_brackets - { +ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h - template < typename T > - struct check {}; +fi - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; +ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h - } +fi - namespace test_decltype - { +ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } +fi - } +ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes +then : - namespace test_type_deduction - { +printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - template < typename T > - struct is_same - { - static const bool value = true; - }; +fi - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +printf %s "checking for stdbool.h that conforms to C99... " >&6; } +if test ${ac_cv_header_stdbool_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } + #ifndef __bool_true_false_are_defined + #error "__bool_true_false_are_defined is not defined" + #endif + char a[__bool_true_false_are_defined == 1 ? 1 : -1]; - } + /* Regardless of whether this is C++ or "_Bool" is a + valid type name, "true" and "false" should be usable + in #if expressions and integer constant expressions, + and "bool" should be a valid type name. */ - namespace test_noexcept - { + #if !true + #error "'true' is not true" + #endif + #if true != 1 + #error "'true' is not equal to 1" + #endif + char b[true == 1 ? 1 : -1]; + char c[true]; - int f() { return 0; } - int g() noexcept { return 0; } + #if false + #error "'false' is not false" + #endif + #if false != 0 + #error "'false' is not equal to 0" + #endif + char d[false == 0 ? 1 : -1]; - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); + enum { e = false, f = true, g = false * true, h = true * 256 }; - } + char i[(bool) 0.5 == true ? 1 : -1]; + char j[(bool) 0.0 == false ? 1 : -1]; + char k[sizeof (bool) > 0 ? 1 : -1]; - namespace test_constexpr - { - - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } - - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } + struct sb { bool s: 1; bool t; } s; + char l[sizeof s.t > 0 ? 1 : -1]; - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + bool m[h]; + char n[sizeof m == h * sizeof m[0] ? 1 : -1]; + char o[-1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + bool p = true; + bool *pp = &p; - } + /* C 1999 specifies that bool, true, and false are to be + macros, but C++ 2011 and later overrule this. */ + #if __cplusplus < 201103 + #ifndef bool + #error "bool is not defined" + #endif + #ifndef false + #error "false is not defined" + #endif + #ifndef true + #error "true is not defined" + #endif + #endif - namespace test_rvalue_references - { + /* If _Bool is available, repeat with it all the tests + above that used bool. */ + #ifdef HAVE__BOOL + struct sB { _Bool s: 1; _Bool t; } t; - template < int N > - struct answer - { - static constexpr int value = N; - }; + char q[(_Bool) 0.5 == true ? 1 : -1]; + char r[(_Bool) 0.0 == false ? 1 : -1]; + char u[sizeof (_Bool) > 0 ? 1 : -1]; + char v[sizeof t.t > 0 ? 1 : -1]; - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } + _Bool w[h]; + char x[sizeof m == h * sizeof m[0] ? 1 : -1]; + char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; + _Bool z = true; + _Bool *pz = &p; + #endif - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } +int +main (void) +{ - } + bool ps = &s; + *pp |= p; + *pp |= ! p; - namespace test_uniform_initialization - { + #ifdef HAVE__BOOL + _Bool pt = &t; + *pz |= z; + *pz |= ! z; + #endif - struct test - { - static const int zero {}; - static const int one {1}; - }; + /* Refer to every declared value, so they cannot be + discarded as unused. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + + !l + !m + !n + !o + !p + !pp + !ps + #ifdef HAVE__BOOL + + !q + !r + !u + !v + !w + !x + !y + !z + !pt + #endif + ); - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_header_stdbool_h=yes +else $as_nop + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } - } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +printf %s "checking for GNU libc compatible malloc... " >&6; } +if test ${ac_cv_func_malloc_0_nonnull+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + case "$host_os" in # (( + # Guess yes on platforms where we know the result. + *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ + | hpux* | solaris* | cygwin* | mingw* | msys* ) + ac_cv_func_malloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_malloc_0_nonnull=no ;; + esac +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include - namespace test_lambdas - { +int +main (void) +{ +void *p = malloc (0); + int result = !p; + free (p); + return result; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO" +then : + ac_cv_func_malloc_0_nonnull=yes +else $as_nop + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes +then : - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } +printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } +else $as_nop + printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h - } + case " $LIBOBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS malloc.$ac_objext" + ;; +esac - namespace test_variadic_templates - { - template - struct sum; +printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; +fi - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - } +HAVE_OPENMP=0 - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { +AX_OPENMP +if test x$OPENMP_CXXFLAGS != x +then : + HAVE_OPENMP=1 - struct foo {}; +fi +if test x$HAVE_OPENMP != x1 +then : - template - using member = typename T::member_type; +else $as_nop + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" + LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" +fi - template - void func(...) {} +ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : - template - void func(member*) {} +printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h - void test(); - void test() { func(0); } +fi - } +ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" +case $ac_cv_c_int16_t in #( + no|yes) ;; #( + *) -} // namespace cxx11 +printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h +;; +esac -#endif // __cplusplus >= 201103L +ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" +case $ac_cv_c_int32_t in #( + no|yes) ;; #( + *) +printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h +;; +esac +ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" +case $ac_cv_c_int64_t in #( + no|yes) ;; #( + *) +printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h +;; +esac -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. +ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t" +case $ac_cv_c_int8_t in #( + no|yes) ;; #( + *) -#ifndef __cplusplus +printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h +;; +esac -#error "This is not a C++ compiler" -#elif __cplusplus < 201402L + ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default +" +if test "x$ac_cv_type_pid_t" = xyes +then : -#error "This is not a C++14 compiler" +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#else + #if defined _WIN64 && !defined __CYGWIN__ + LLP64 + #endif -namespace cxx14 +int +main (void) { - namespace test_polymorphic_lambdas - { + ; + return 0; +} - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_pid_type='int' +else $as_nop + ac_pid_type='__int64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } +printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - namespace test_binary_literals - { - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); +fi - } - namespace test_generalized_constexpr - { +ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes +then : - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } +else $as_nop - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); +printf "%s\n" "#define size_t unsigned int" >>confdefs.h - } +fi - namespace test_lambda_init_capture - { +ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" +if test "x$ac_cv_type_ssize_t" = xyes +then : - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } +else $as_nop - } +printf "%s\n" "#define ssize_t int" >>confdefs.h - namespace test_digit_separators - { +fi - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); +ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" +case $ac_cv_c_uint16_t in #( + no|yes) ;; #( + *) - } - namespace test_return_type_deduction - { +printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h +;; + esac - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } +ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" +case $ac_cv_c_uint32_t in #( + no|yes) ;; #( + *) - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; +printf "%s\n" "#define _UINT32_T 1" >>confdefs.h - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } +printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h +;; + esac - } +ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" +case $ac_cv_c_uint64_t in #( + no|yes) ;; #( + *) + +printf "%s\n" "#define _UINT64_T 1" >>confdefs.h + + +printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" +case $ac_cv_c_uint8_t in #( + no|yes) ;; #( + *) + +printf "%s\n" "#define _UINT8_T 1" >>confdefs.h -} // namespace cxx14 -#endif // __cplusplus >= 201402L +printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h +;; + esac + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 +printf %s "checking for long double with more range or precision than double... " >&6; } +if test ${ac_cv_type_long_double_wider+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + long double const a[] = + { + 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON, + LDBL_MIN, LDBL_MAX, LDBL_EPSILON + }; + long double + f (long double x) + { + return ((x + (unsigned long int) 10) * (-1 / x) + a[0] + + (x ? f (x) : 'c')); + } +int +main (void) +{ +static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) + + (DBL_MANT_DIG < LDBL_MANT_DIG) + - (LDBL_MAX_EXP < DBL_MAX_EXP) + - (LDBL_MANT_DIG < DBL_MANT_DIG))) + && (int) LDBL_EPSILON == 0 + )]; +test_array [0] = 0; +return test_array [0]; + ; + return 0; +} _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : - eval $cachevar=yes + ac_cv_type_long_double_wider=yes else $as_nop - eval $cachevar=no + ac_cv_type_long_double_wider=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - if test x$ax_cxx_compile_cxx14_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX14=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} - else - HAVE_CXX14=1 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 +printf "%s\n" "$ac_cv_type_long_double_wider" >&6; } + if test $ac_cv_type_long_double_wider = yes; then -printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h +printf "%s\n" "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h fi +HAVE_FLOAT128=0 -if test x$HAVE_CXX14 != x1 +if test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1 then : - ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no + HAVE_FLOAT128=0 +fi +# +# NUMA +# +# Check whether --enable-numa was given. +if test ${enable_numa+y} +then : + enableval=$enable_numa; enable_numa=no +else $as_nop + enable_numa=yes +fi +HAVE_NUMA=0 - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval test \${$cachevar+y} +if test x$enable_numa != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } +if test ${ac_cv_lib_numa_numa_node_of_cpu+y} then : printf %s "(cached) " >&6 else $as_nop - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnuma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201103L - -#error "This is not a C++11 compiler" - -#else - -namespace cxx11 +namespace conftest { + extern "C" int numa_node_of_cpu (); +} +int +main (void) { +return conftest::numa_node_of_cpu (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + ac_cv_lib_numa_numa_node_of_cpu=yes +else $as_nop + ac_cv_lib_numa_numa_node_of_cpu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes +then : + HAVE_NUMA=1 - namespace test_static_assert - { + LIBS="$LIBS -lnuma" +fi - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; +fi - } +# +# HWLOC +# - namespace test_final_override - { +# Check whether --enable-hwloc was given. +if test ${enable_hwloc+y} +then : + enableval=$enable_hwloc; enable_hwloc=no +else $as_nop + enable_hwloc=yes +fi - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; +HAVE_HWLOC=0 - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; +if test x$enable_hwloc != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } +if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lhwloc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - } +namespace conftest { + extern "C" int hwloc_topology_init (); +} +int +main (void) +{ +return conftest::hwloc_topology_init (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + ac_cv_lib_hwloc_hwloc_topology_init=yes +else $as_nop + ac_cv_lib_hwloc_hwloc_topology_init=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes +then : + HAVE_HWLOC=1 - namespace test_double_right_angle_brackets - { + LIBS="$LIBS -lhwloc" +fi - template < typename T > - struct check {}; +fi - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; +# +# VMA +# - } +# Check whether --enable-vma was given. +if test ${enable_vma+y} +then : + enableval=$enable_vma; enable_vma=yes +else $as_nop + enable_vma=no +fi - namespace test_decltype - { +HAVE_VMA=0 - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } +if test x$enable_vma != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } +if test ${ac_cv_lib_vma_recvfrom_zcopy+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lvma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - } +namespace conftest { + extern "C" int recvfrom_zcopy (); +} +int +main (void) +{ +return conftest::recvfrom_zcopy (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + ac_cv_lib_vma_recvfrom_zcopy=yes +else $as_nop + ac_cv_lib_vma_recvfrom_zcopy=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes +then : + HAVE_VMA=1 - namespace test_type_deduction - { + LIBS="$LIBS -lvma" +fi - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; +fi - template < typename T > - struct is_same - { - static const bool value = true; - }; +# +# CUDA +# - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } +################################# +# NOTE # +# This needs to come after all # +# other compiler/library tests # +# since it changes LIB to # +# include CUDA-specific entries # +################################# - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - } - namespace test_noexcept - { - int f() { return 0; } - int g() noexcept { return 0; } +# Check whether --with-cuda_home was given. +if test ${with_cuda_home+y} +then : + withval=$with_cuda_home; +else $as_nop + with_cuda_home=/usr/local/cuda +fi - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); + CUDA_HOME=$with_cuda_home - } - namespace test_constexpr - { + # Check whether --enable-cuda was given. +if test ${enable_cuda+y} +then : + enableval=$enable_cuda; enable_cuda=no +else $as_nop + enable_cuda=yes +fi - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } + HAVE_CUDA=0 - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); + CUDA_VERSION=0 - } + GPU_MAX_ARCH=0 - namespace test_rvalue_references - { + if test "$enable_cuda" != "no"; then + HAVE_CUDA=1 - template < int N > - struct answer - { - static constexpr int value = N; - }; - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVCC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $NVCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } + test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="no" + ;; +esac +fi +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +printf "%s\n" "$NVCC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - } - namespace test_uniform_initialization - { + # Extract the first word of "nvprune", so it can be a program name with args. +set dummy nvprune; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVPRUNE+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $NVPRUNE in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - struct test - { - static const int zero {}; - static const int one {1}; - }; + test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="no" + ;; +esac +fi +NVPRUNE=$ac_cv_path_NVPRUNE +if test -n "$NVPRUNE"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +printf "%s\n" "$NVPRUNE" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - } + # Extract the first word of "cuobjdump", so it can be a program name with args. +set dummy cuobjdump; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CUOBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $CUOBJDUMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - namespace test_lambdas - { + test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="no" + ;; +esac +fi +CUOBJDUMP=$ac_cv_path_CUOBJDUMP +if test -n "$CUOBJDUMP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +printf "%s\n" "$CUOBJDUMP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } + fi - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } + if test "$HAVE_CUDA" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +printf %s "checking for a working CUDA installation... " >&6; } - } + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" - namespace test_variadic_templates - { + ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template - struct sum; - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; + #include + #include +int +main (void) +{ +cudaMalloc(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template <> - struct sum<> - { - static constexpr auto value = 0; - }; +else $as_nop + HAVE_CUDA=0 - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } + if test "$HAVE_CUDA" = "1"; then + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart" - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - - struct foo {}; - - template - using member = typename T::member_type; - - template - void func(...) {} - - template - void func(member*) {} - - void test(); + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - void test() { func(0); } - } + #include + #include +int +main (void) +{ +cudaMalloc(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes - v$CUDA_VERSION" >&5 +printf "%s\n" "yes - v$CUDA_VERSION" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + HAVE_CUDA=0 -} // namespace cxx11 +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + HAVE_CUDA=0 -#endif // __cplusplus >= 201103L + fi + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + fi -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" +# Check whether --with-nvcc_flags was given. +if test ${with_nvcc_flags+y} then : - eval $cachevar=yes + withval=$with_nvcc_flags; else $as_nop - eval $cachevar=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" + with_nvcc_flags='-O3 -Xcompiler "-Wall"' fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$ax_cxx_compile_cxx11_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX11=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} - else - HAVE_CXX11=1 + NVCCFLAGS=$with_nvcc_flags -printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h + if test "$HAVE_CUDA" = "1"; then + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" + NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" fi -fi -ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes +# Check whether --with-gpu_archs was given. +if test ${with_gpu_archs+y} then : - printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h - + withval=$with_gpu_archs; +else $as_nop + with_gpu_archs='auto' fi -ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes -then : - printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h + if test "$HAVE_CUDA" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 +printf %s "checking for valid CUDA architectures... " >&6; } + ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_supported_flat=$( echo $ar_supported | xargs ) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found: $ar_supported_flat" >&5 +printf "%s\n" "found: $ar_supported_flat" >&6; } -fi + if test "$with_gpu_archs" = "auto"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +printf %s "checking which CUDA architectures to target... " >&6; } -ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + if test "$cross_compiling" = yes then : - printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -fi + #include + #include + #include + #include + #include +int +main (void) +{ - for ac_func in recvmsg -do : - ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" -if test "x$ac_cv_func_recvmsg" = xyes + std::set archs; + int major, minor, arch; + int deviceCount = 0; + cudaGetDeviceCount(&deviceCount); + if( deviceCount == 0 ) { + return 1; + } + std::ofstream fh; + fh.open("confarchs.out"); + for(int dev=0; dev 0 ) { + fh << " "; + } + fh << arch; + } + arch += minor; + if( archs.count(arch) == 0 ) { + archs.insert(arch); + fh << " " << arch; + } + } + fh.close(); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO" then : - printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h - HAVE_RECVMSG=1 + GPU_ARCHS=`cat confarchs.out` -else $as_nop - HAVE_RECVMSG=0 + ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) + if test "$ar_valid" = ""; then + as_fn_error $? "failed to find any supported" "$LINENO" 5 + else + GPU_ARCHS=$ar_valid + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +printf "%s\n" "$GPU_ARCHS" >&6; } + fi +else $as_nop + as_fn_error $? "failed to find any" "$LINENO" 5 fi - -done -ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes -then : - printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h - +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes -then : - printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h - -fi -ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes -then : - printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + else + GPU_ARCHS=$with_gpu_archs -fi + fi -ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes -then : - printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid requested CUDA architectures" >&5 +printf %s "checking for valid requested CUDA architectures... " >&6; } + ar_requested=$( echo "$GPU_ARCHS" | wc -w ) + ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) + ar_found=$( echo $ar_valid | wc -w ) + if test "$ar_requested" = "$ar_found"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + as_fn_error $? "only '$ar_valid' are supported" "$LINENO" 5 + fi -fi + ar_max_valid=$(echo $ar_valid | ${SED} -e 's/.* //g;' ) + GPU_MAX_ARCH=$ar_max_valid -ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes -then : - printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 +printf %s "checking for Pascal-style CUDA managed memory... " >&6; } + cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) + if ! echo $cm_invalid | ${GREP} -q PRE; then + GPU_PASCAL_MANAGEDMEM=1 -ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + GPU_PASCAL_MANAGEDMEM=0 -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + else + GPU_PASCAL_MANAGEDMEM=0 -ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h + fi -fi -ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h +# Check whether --with-shared_mem was given. +if test ${with_shared_mem+y} +then : + withval=$with_shared_mem; +else $as_nop + with_shared_mem=16384 fi -ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes -then : - -printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h - - -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -printf %s "checking for stdbool.h that conforms to C99... " >&6; } -if test ${ac_cv_header_stdbool_h+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - - #ifndef __bool_true_false_are_defined - #error "__bool_true_false_are_defined is not defined" - #endif - char a[__bool_true_false_are_defined == 1 ? 1 : -1]; - - /* Regardless of whether this is C++ or "_Bool" is a - valid type name, "true" and "false" should be usable - in #if expressions and integer constant expressions, - and "bool" should be a valid type name. */ - - #if !true - #error "'true' is not true" - #endif - #if true != 1 - #error "'true' is not equal to 1" - #endif - char b[true == 1 ? 1 : -1]; - char c[true]; - - #if false - #error "'false' is not false" - #endif - #if false != 0 - #error "'false' is not equal to 0" - #endif - char d[false == 0 ? 1 : -1]; - - enum { e = false, f = true, g = false * true, h = true * 256 }; - - char i[(bool) 0.5 == true ? 1 : -1]; - char j[(bool) 0.0 == false ? 1 : -1]; - char k[sizeof (bool) > 0 ? 1 : -1]; - - struct sb { bool s: 1; bool t; } s; - char l[sizeof s.t > 0 ? 1 : -1]; - - /* The following fails for - HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - bool m[h]; - char n[sizeof m == h * sizeof m[0] ? 1 : -1]; - char o[-1 - (bool) 0 < 0 ? 1 : -1]; - /* Catch a bug in an HP-UX C compiler. See - https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ - bool p = true; - bool *pp = &p; - - /* C 1999 specifies that bool, true, and false are to be - macros, but C++ 2011 and later overrule this. */ - #if __cplusplus < 201103 - #ifndef bool - #error "bool is not defined" - #endif - #ifndef false - #error "false is not defined" - #endif - #ifndef true - #error "true is not defined" - #endif - #endif - - /* If _Bool is available, repeat with it all the tests - above that used bool. */ - #ifdef HAVE__BOOL - struct sB { _Bool s: 1; _Bool t; } t; - - char q[(_Bool) 0.5 == true ? 1 : -1]; - char r[(_Bool) 0.0 == false ? 1 : -1]; - char u[sizeof (_Bool) > 0 ? 1 : -1]; - char v[sizeof t.t > 0 ? 1 : -1]; - - _Bool w[h]; - char x[sizeof m == h * sizeof m[0] ? 1 : -1]; - char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; - _Bool z = true; - _Bool *pz = &p; - #endif - -int -main (void) -{ - - bool ps = &s; - *pp |= p; - *pp |= ! p; - - #ifdef HAVE__BOOL - _Bool pt = &t; - *pz |= z; - *pz |= ! z; - #endif - - /* Refer to every declared value, so they cannot be - discarded as unused. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k - + !l + !m + !n + !o + !p + !pp + !ps - #ifdef HAVE__BOOL - + !q + !r + !u + !v + !w + !x + !y + !z + !pt - #endif - ); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_header_stdbool_h=yes -else $as_nop - ac_cv_header_stdbool_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -printf %s "checking for GNU libc compatible malloc... " >&6; } -if test ${ac_cv_func_malloc_0_nonnull+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : - case "$host_os" in # (( - # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ - | hpux* | solaris* | cygwin* | mingw* | msys* ) - ac_cv_func_malloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_malloc_0_nonnull=no ;; - esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main (void) -{ -void *p = malloc (0); - int result = !p; - free (p); - return result; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO" -then : - ac_cv_func_malloc_0_nonnull=yes -else $as_nop - ac_cv_func_malloc_0_nonnull=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes -then : - -printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h - -else $as_nop - printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h - - case " $LIBOBJS " in - *" malloc.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS malloc.$ac_objext" - ;; -esac - - -printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h - -fi - - - -HAVE_OPENMP=0 - - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 -printf %s "checking for OpenMP flag of C++ compiler... " >&6; } -if test ${ax_cv_cxx_openmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop - saveCXXFLAGS=$CXXFLAGS -ax_cv_cxx_openmp=unknown -# Flags to try: -fopenmp (gcc), -mp (SGI & PGI), -# -qopenmp (icc>=15), -openmp (icc), -# -xopenmp (Sun), -omp (Tru64), -# -qsmp=omp (AIX), -# none -ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none" -if test "x$OPENMP_CXXFLAGS" != x; then - ax_openmp_flags="$OPENMP_CXXFLAGS $ax_openmp_flags" -fi -for ax_openmp_flag in $ax_openmp_flags; do - case $ax_openmp_flag in - none) CXXFLAGS=$saveCXX ;; - *) CXXFLAGS="$saveCXXFLAGS $ax_openmp_flag" ;; - esac - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include - -static void -parallel_fill(int * data, int n) -{ - int i; -#pragma omp parallel for - for (i = 0; i < n; ++i) - data[i] = i; -} - -int -main() -{ - int arr[100000]; - omp_set_num_threads(2); - parallel_fill(arr, 100000); - return 0; -} - -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - ax_cv_cxx_openmp=$ax_openmp_flag; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -done -CXXFLAGS=$saveCXXFLAGS - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 -printf "%s\n" "$ax_cv_cxx_openmp" >&6; } -if test "x$ax_cv_cxx_openmp" = "xunknown"; then - : -else - if test "x$ax_cv_cxx_openmp" != "xnone"; then - OPENMP_CXXFLAGS=$ax_cv_cxx_openmp - fi - -printf "%s\n" "#define HAVE_OPENMP 1" >>confdefs.h - -fi - -if test x$OPENMP_CXXFLAGS != x -then : - HAVE_OPENMP=1 - -fi -if test x$HAVE_OPENMP != x1 -then : - -else $as_nop - CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" - LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" -fi - -ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes -then : - -printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h - - -fi - -ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" -case $ac_cv_c_int16_t in #( - no|yes) ;; #( - *) - -printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h -;; -esac - -ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" -case $ac_cv_c_int32_t in #( - no|yes) ;; #( - *) - -printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h -;; -esac - -ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" -case $ac_cv_c_int64_t in #( - no|yes) ;; #( - *) - -printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h -;; -esac - -ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t" -case $ac_cv_c_int8_t in #( - no|yes) ;; #( - *) - -printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h -;; -esac - - - ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default -" -if test "x$ac_cv_type_pid_t" = xyes -then : - -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if defined _WIN64 && !defined __CYGWIN__ - LLP64 - #endif - -int -main (void) -{ - - ; - return 0; -} - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - - -fi - - -ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes -then : - -else $as_nop - -printf "%s\n" "#define size_t unsigned int" >>confdefs.h - -fi - -ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes -then : - -else $as_nop - -printf "%s\n" "#define ssize_t int" >>confdefs.h - -fi - -ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" -case $ac_cv_c_uint16_t in #( - no|yes) ;; #( - *) - - -printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" -case $ac_cv_c_uint32_t in #( - no|yes) ;; #( - *) - -printf "%s\n" "#define _UINT32_T 1" >>confdefs.h - - -printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" -case $ac_cv_c_uint64_t in #( - no|yes) ;; #( - *) - -printf "%s\n" "#define _UINT64_T 1" >>confdefs.h - - -printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" -case $ac_cv_c_uint8_t in #( - no|yes) ;; #( - *) - -printf "%s\n" "#define _UINT8_T 1" >>confdefs.h - - -printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h -;; - esac - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 -printf %s "checking for long double with more range or precision than double... " >&6; } -if test ${ac_cv_type_long_double_wider+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - long double const a[] = - { - 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON, - LDBL_MIN, LDBL_MAX, LDBL_EPSILON - }; - long double - f (long double x) - { - return ((x + (unsigned long int) 10) * (-1 / x) + a[0] - + (x ? f (x) : 'c')); - } - -int -main (void) -{ -static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) - + (DBL_MANT_DIG < LDBL_MANT_DIG) - - (LDBL_MAX_EXP < DBL_MAX_EXP) - - (LDBL_MANT_DIG < DBL_MANT_DIG))) - && (int) LDBL_EPSILON == 0 - )]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_type_long_double_wider=yes -else $as_nop - ac_cv_type_long_double_wider=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 -printf "%s\n" "$ac_cv_type_long_double_wider" >&6; } - if test $ac_cv_type_long_double_wider = yes; then - -printf "%s\n" "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h - - fi - -HAVE_FLOAT128=0 - -if test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1 -then : - HAVE_FLOAT128=0 - -fi - -# -# NUMA -# - -# Check whether --enable-numa was given. -if test ${enable_numa+y} -then : - enableval=$enable_numa; enable_numa=no -else $as_nop - enable_numa=yes -fi - -HAVE_NUMA=0 - -if test x$enable_numa != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } -if test ${ac_cv_lib_numa_numa_node_of_cpu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnuma $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -namespace conftest { - extern "C" int numa_node_of_cpu (); -} -int -main (void) -{ -return conftest::numa_node_of_cpu (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - ac_cv_lib_numa_numa_node_of_cpu=yes -else $as_nop - ac_cv_lib_numa_numa_node_of_cpu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes -then : - HAVE_NUMA=1 - - LIBS="$LIBS -lnuma" -fi - -fi - -# -# HWLOC -# - -# Check whether --enable-hwloc was given. -if test ${enable_hwloc+y} -then : - enableval=$enable_hwloc; enable_hwloc=no -else $as_nop - enable_hwloc=yes -fi - -HAVE_HWLOC=0 - -if test x$enable_hwloc != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } -if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lhwloc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -namespace conftest { - extern "C" int hwloc_topology_init (); -} -int -main (void) -{ -return conftest::hwloc_topology_init (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - ac_cv_lib_hwloc_hwloc_topology_init=yes -else $as_nop - ac_cv_lib_hwloc_hwloc_topology_init=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes -then : - HAVE_HWLOC=1 - - LIBS="$LIBS -lhwloc" -fi - -fi - -# -# VMA -# - -# Check whether --enable-vma was given. -if test ${enable_vma+y} -then : - enableval=$enable_vma; enable_vma=yes -else $as_nop - enable_vma=no -fi - -HAVE_VMA=0 - -if test x$enable_vma != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } -if test ${ac_cv_lib_vma_recvfrom_zcopy+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lvma $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -namespace conftest { - extern "C" int recvfrom_zcopy (); -} -int -main (void) -{ -return conftest::recvfrom_zcopy (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - ac_cv_lib_vma_recvfrom_zcopy=yes -else $as_nop - ac_cv_lib_vma_recvfrom_zcopy=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes -then : - HAVE_VMA=1 - - LIBS="$LIBS -lvma" -fi - -fi - -# -# CUDA -# - -################################# -# NOTE # -# This needs to come after all # -# other compiler/library tests # -# since it changes LIB to # -# include CUDA-specific entries # -################################# - - - - -# Check whether --with-cuda_home was given. -if test ${with_cuda_home+y} -then : - withval=$with_cuda_home; -else $as_nop - with_cuda_home=/usr/local/cuda -fi - - CUDA_HOME=$with_cuda_home - - - # Check whether --enable-cuda was given. -if test ${enable_cuda+y} -then : - enableval=$enable_cuda; enable_cuda=no -else $as_nop - enable_cuda=yes -fi - - - HAVE_CUDA=0 - - CUDA_VERSION=0 - - GPU_MAX_ARCH=0 - - if test "$enable_cuda" != "no"; then - HAVE_CUDA=1 - - - # Extract the first word of "nvcc", so it can be a program name with args. -set dummy nvcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_NVCC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $NVCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$CUDA_HOME/bin:$PATH" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="no" - ;; -esac -fi -NVCC=$ac_cv_path_NVCC -if test -n "$NVCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -printf "%s\n" "$NVCC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - # Extract the first word of "nvprune", so it can be a program name with args. -set dummy nvprune; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_NVPRUNE+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $NVPRUNE in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$CUDA_HOME/bin:$PATH" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="no" - ;; -esac -fi -NVPRUNE=$ac_cv_path_NVPRUNE -if test -n "$NVPRUNE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -printf "%s\n" "$NVPRUNE" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - # Extract the first word of "cuobjdump", so it can be a program name with args. -set dummy cuobjdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CUOBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $CUOBJDUMP in - [\\/]* | ?:[\\/]*) - ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$CUDA_HOME/bin:$PATH" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="no" - ;; -esac -fi -CUOBJDUMP=$ac_cv_path_CUOBJDUMP -if test -n "$CUOBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -printf "%s\n" "$CUOBJDUMP" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - fi - - if test "$HAVE_CUDA" = "1"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 -printf %s "checking for a working CUDA installation... " >&6; } - - CXXFLAGS_save="$CXXFLAGS" - LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" - - ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - #include - #include -int -main (void) -{ -cudaMalloc(0, 0); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - -else $as_nop - HAVE_CUDA=0 - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - if test "$HAVE_CUDA" = "1"; then - LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart" - - ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - #include - #include -int -main (void) -{ -cudaMalloc(0, 0); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes - v$CUDA_VERSION" >&5 -printf "%s\n" "yes - v$CUDA_VERSION" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - HAVE_CUDA=0 - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - HAVE_CUDA=0 - - fi - - CXXFLAGS="$CXXFLAGS_save" - LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" - fi - - -# Check whether --with-nvcc_flags was given. -if test ${with_nvcc_flags+y} -then : - withval=$with_nvcc_flags; -else $as_nop - with_nvcc_flags='-O3 -Xcompiler "-Wall"' -fi - - NVCCFLAGS=$with_nvcc_flags - - - if test "$HAVE_CUDA" = "1"; then - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" - NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" - fi - - -# Check whether --with-gpu_archs was given. -if test ${with_gpu_archs+y} -then : - withval=$with_gpu_archs; -else $as_nop - with_gpu_archs='auto' -fi - - if test "$HAVE_CUDA" = "1"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 -printf %s "checking for valid CUDA architectures... " >&6; } - ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) - ar_supported_flat=$( echo $ar_supported | xargs ) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found: $ar_supported_flat" >&5 -printf "%s\n" "found: $ar_supported_flat" >&6; } - - if test "$with_gpu_archs" = "auto"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 -printf %s "checking which CUDA architectures to target... " >&6; } - - CXXFLAGS_save="$CXXFLAGS" - LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" - - LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="-lcuda -lcudart" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' - if test "$cross_compiling" = yes -then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - #include - #include - #include - #include - #include -int -main (void) -{ - - std::set archs; - int major, minor, arch; - int deviceCount = 0; - cudaGetDeviceCount(&deviceCount); - if( deviceCount == 0 ) { - return 1; - } - std::ofstream fh; - fh.open("confarchs.out"); - for(int dev=0; dev 0 ) { - fh << " "; - } - fh << arch; - } - arch += minor; - if( archs.count(arch) == 0 ) { - archs.insert(arch); - fh << " " << arch; - } - } - fh.close(); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO" -then : - GPU_ARCHS=`cat confarchs.out` - - ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) - ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) - if test "$ar_valid" = ""; then - as_fn_error $? "failed to find any supported" "$LINENO" 5 - else - GPU_ARCHS=$ar_valid - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 -printf "%s\n" "$GPU_ARCHS" >&6; } - fi -else $as_nop - as_fn_error $? "failed to find any" "$LINENO" 5 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - CXXFLAGS="$CXXFLAGS_save" - LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" - else - GPU_ARCHS=$with_gpu_archs - - fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid requested CUDA architectures" >&5 -printf %s "checking for valid requested CUDA architectures... " >&6; } - ar_requested=$( echo "$GPU_ARCHS" | wc -w ) - ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) - ar_found=$( echo $ar_valid | wc -w ) - if test "$ar_requested" = "$ar_found"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - else - as_fn_error $? "only '$ar_valid' are supported" "$LINENO" 5 - fi - - ar_max_valid=$(echo $ar_valid | ${SED} -e 's/.* //g;' ) - GPU_MAX_ARCH=$ar_max_valid - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 -printf %s "checking for Pascal-style CUDA managed memory... " >&6; } - cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) - if ! echo $cm_invalid | ${GREP} -q PRE; then - GPU_PASCAL_MANAGEDMEM=1 - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - else - GPU_PASCAL_MANAGEDMEM=0 - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - fi - else - GPU_PASCAL_MANAGEDMEM=0 - - fi - - - -# Check whether --with-shared_mem was given. -if test ${with_shared_mem+y} -then : - withval=$with_shared_mem; -else $as_nop - with_shared_mem=16384 -fi - -GPU_SHAREDMEM=$with_shared_mem - -if test x$HAVE_CUDA = x0 -then : - GPU_SHAREDMEM=0 - -fi - -# -# Bifrost memory alignment -# - - -# Check whether --with-alignment was given. -if test ${with_alignment+y} -then : - withval=$with_alignment; -else $as_nop - with_alignment=4096 -fi - -ALIGNMENT=$with_alignment - - -# -# Bifrost proclog location -# - - - - - -# Check whether --with-logging_dir was given. -if test ${with_logging_dir+y} -then : - withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir - -else $as_nop - HAVE_TMPFS=/tmp - -fi - - - if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 -printf %s "checking for /dev/shm... " >&6; } -if test ${ac_cv_file__dev_shm+y} -then : - printf %s "(cached) " >&6 -else $as_nop - test "$cross_compiling" = yes && - as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 -if test -r "/dev/shm"; then - ac_cv_file__dev_shm=yes -else - ac_cv_file__dev_shm=no -fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 -printf "%s\n" "$ac_cv_file__dev_shm" >&6; } -if test "x$ac_cv_file__dev_shm" = xyes -then : - HAVE_TMPFS=/dev/shm/bifrost - -fi - - fi - - if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 -printf %s "checking for /Volumes/RAMDisk... " >&6; } -if test ${ac_cv_file__Volumes_RAMDisk+y} -then : - printf %s "(cached) " >&6 -else $as_nop - test "$cross_compiling" = yes && - as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 -if test -r "/Volumes/RAMDisk"; then - ac_cv_file__Volumes_RAMDisk=yes -else - ac_cv_file__Volumes_RAMDisk=no -fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 -printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } -if test "x$ac_cv_file__Volumes_RAMDisk" = xyes -then : - HAVE_TMPFS=/Volumes/RAMDisk/bifrost - -fi - - fi - - if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 -printf %s "checking for /tmp... " >&6; } -if test ${ac_cv_file__tmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop - test "$cross_compiling" = yes && - as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 -if test -r "/tmp"; then - ac_cv_file__tmp=yes -else - ac_cv_file__tmp=no -fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 -printf "%s\n" "$ac_cv_file__tmp" >&6; } -if test "x$ac_cv_file__tmp" = xyes -then : - HAVE_TMPFS=/tmp - -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 -printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} - HAVE_TMPFS=/tmp/bifrost - - fi - - -# -# Bifrost Features -# - -# Check whether --enable-debug was given. -if test ${enable_debug+y} -then : - enableval=$enable_debug; enable_debug=yes -else $as_nop - enable_debug=no -fi - -HAVE_DEBUG=0 - -if test x$enable_debug != xno -then : - HAVE_DEBUG=1 - - CXXFLAGS="$CXXFLAGS -g" - NVCCFLAGS="$NVCCFLAGS -g" -fi - -# Check whether --enable-trace was given. -if test ${enable_trace+y} -then : - enableval=$enable_trace; enable_trace=yes -else $as_nop - enable_trace=no -fi - -HAVE_TRACE=0 - -if test x$enable_trace != xno -then : - HAVE_TRACE=1 - -fi - - - - # Check whether --enable-native_arch was given. -if test ${enable_native_arch+y} -then : - enableval=$enable_native_arch; enable_native_arch=no -else $as_nop - enable_native_arch=yes -fi - - - if test "$enable_native_arch" = "yes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler accepts '-march=native'" >&5 -printf %s "checking if the compiler accepts '-march=native'... " >&6; } - - CXXFLAGS_temp="$CXXFLAGS -march=native" - - ac_compile='$CXX -c $CXXFLAGS_temp conftest.$ac_ext >&5' - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - -int -main (void) -{ - - int i = 5; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - CXXFLAGS="$CXXFLAGS -march=native" - NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - enable_native_arch=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - fi - - -# Check whether --enable-cuda_debug was given. -if test ${enable_cuda_debug+y} -then : - enableval=$enable_cuda_debug; enable_cuda_debug=yes -else $as_nop - enable_cuda_debug=no -fi - -HAVE_CUDA_DEBUG=0 - -if test x$enable_cuda_debug != xno -then : - HAVE_CUDA_DEBUG=1 - - NVCCFLAGS="$NVCCFLAGS -G" -fi - -# -# Python -# - -# Check whether --enable-python was given. -if test ${enable_python+y} -then : - enableval=$enable_python; enable_python=no -else $as_nop - enable_python=yes -fi - -HAVE_PYTHON=0 - -if test x$enable_python != xno -then : - - - - - - - - - - - if test -z "$PYTHON" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 -printf %s "checking whether python executable path has been provided... " >&6; } - -# Check whether --with-python was given. -if test ${with_python+y} -then : - withval=$with_python; - if test "$withval" != yes && test "$withval" != no -then : - - PYTHON="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } - -else $as_nop - - PYTHON="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : - - # Extract the first word of "python", so it can be a program name with args. -set dummy python; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PYTHON+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $PYTHON in - [\\/]* | ?:[\\/]*) - ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="no" - ;; -esac -fi -PYTHON=$ac_cv_path_PYTHON -if test -n "$PYTHON"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - -fi - -fi - -else $as_nop - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - # Extract the first word of "python", so it can be a program name with args. -set dummy python; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PYTHON+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $PYTHON in - [\\/]* | ?:[\\/]*) - ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="no" - ;; -esac -fi -PYTHON=$ac_cv_path_PYTHON -if test -n "$PYTHON"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -printf "%s\n" "$PYTHON" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - -fi - - -fi - - - - - - - if test x${PYTHON} != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 -printf %s "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 -printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - HAVE_PYTHON=1 - -fi -fi -fi - -# Check whether --with-pybuild_flags was given. -if test ${with_pybuild_flags+y} -then : - withval=$with_pybuild_flags; -fi - -PYBUILDFLAGS=$with_pybuild_flags - - - -# Check whether --with-pyinstall_flags was given. -if test ${with_pyinstall_flags+y} -then : - withval=$with_pyinstall_flags; -fi - -PYINSTALLFLAGS=$with_pyinstall_flags - - -# -# Docker -# - - - - - - - - - - - - if test -z "$DOCKER" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 -printf %s "checking whether docker executable path has been provided... " >&6; } - -# Check whether --with-docker was given. -if test ${with_docker+y} -then : - withval=$with_docker; - if test "$withval" != yes && test "$withval" != no -then : - - DOCKER="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } - -else $as_nop - - DOCKER="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - if test "$withval" != no -then : - - # Extract the first word of "docker", so it can be a program name with args. -set dummy docker; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DOCKER+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DOCKER in - [\\/]* | ?:[\\/]*) - ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_DOCKER" && ac_cv_path_DOCKER="no" - ;; -esac -fi -DOCKER=$ac_cv_path_DOCKER -if test -n "$DOCKER"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - -fi - -fi - -else $as_nop - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - # Extract the first word of "docker", so it can be a program name with args. -set dummy docker; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DOCKER+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DOCKER in - [\\/]* | ?:[\\/]*) - ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_DOCKER" && ac_cv_path_DOCKER="no" - ;; -esac -fi -DOCKER=$ac_cv_path_DOCKER -if test -n "$DOCKER"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 -printf "%s\n" "$DOCKER" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - -fi - - -fi - - - - - - -if test x${DOCKER} != xno -then : - HAVE_DOCKER=1 - -fi - -# -# Documentation -# - - - - - - - - - - - - -# Files: -DX_PROJECT=bifrost - -DX_CONFIG='$(srcdir)/Doxyfile' - -DX_DOCDIR='doxygen-doc' - - -# Environment variables used inside doxygen.cfg: -DX_ENV="$DX_ENV SRCDIR='$srcdir'" -SRCDIR=$srcdir - -DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'" -PROJECT=$DX_PROJECT - -DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" - - -# Doxygen itself: - - - - # Check whether --enable-doxygen-doc was given. -if test ${enable_doxygen_doc+y} -then : - enableval=$enable_doxygen_doc; -case "$enableval" in -#( -y|Y|yes|Yes|YES) - DX_FLAG_doc=1 - - -;; #( -n|N|no|No|NO) - DX_FLAG_doc=0 - -;; #( -*) - as_fn_error $? "invalid value '$enableval' given to doxygen-doc" "$LINENO" 5 -;; -esac - -else $as_nop - -DX_FLAG_doc=1 - - - -fi - -if test "$DX_FLAG_doc" = 1; then - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. -set dummy ${ac_tool_prefix}doxygen; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DOXYGEN+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_DOXYGEN in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN -if test -n "$DX_DOXYGEN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 -printf "%s\n" "$DX_DOXYGEN" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_DOXYGEN"; then - ac_pt_DX_DOXYGEN=$DX_DOXYGEN - # Extract the first word of "doxygen", so it can be a program name with args. -set dummy doxygen; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_DOXYGEN in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN -if test -n "$ac_pt_DX_DOXYGEN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 -printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_DOXYGEN" = x; then - DX_DOXYGEN="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_DOXYGEN=$ac_pt_DX_DOXYGEN - fi -else - DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN" -fi - -if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} - DX_FLAG_doc=0 - -fi - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. -set dummy ${ac_tool_prefix}perl; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_PERL+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_PERL in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_PERL=$ac_cv_path_DX_PERL -if test -n "$DX_PERL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 -printf "%s\n" "$DX_PERL" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_PERL"; then - ac_pt_DX_PERL=$DX_PERL - # Extract the first word of "perl", so it can be a program name with args. -set dummy perl; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_PERL+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_PERL in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL -if test -n "$ac_pt_DX_PERL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 -printf "%s\n" "$ac_pt_DX_PERL" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_PERL" = x; then - DX_PERL="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_PERL=$ac_pt_DX_PERL - fi -else - DX_PERL="$ac_cv_path_DX_PERL" -fi - -if test "$DX_FLAG_doc$DX_PERL" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} - DX_FLAG_doc=0 - -fi - - : -fi -if test "$DX_FLAG_doc" = 1; then - DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'" -PERL_PATH=$DX_PERL - - : -else - - : -fi - - -# Dot for graphics: - - - - # Check whether --enable-doxygen-dot was given. -if test ${enable_doxygen_dot+y} -then : - enableval=$enable_doxygen_dot; -case "$enableval" in -#( -y|Y|yes|Yes|YES) - DX_FLAG_dot=1 - - -test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 - -;; #( -n|N|no|No|NO) - DX_FLAG_dot=0 - -;; #( -*) - as_fn_error $? "invalid value '$enableval' given to doxygen-dot" "$LINENO" 5 -;; -esac - -else $as_nop - -DX_FLAG_dot=0 - - -test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0 - - - -fi - -if test "$DX_FLAG_dot" = 1; then - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. -set dummy ${ac_tool_prefix}dot; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DOT+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_DOT in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_DOT=$ac_cv_path_DX_DOT -if test -n "$DX_DOT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 -printf "%s\n" "$DX_DOT" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_DOT"; then - ac_pt_DX_DOT=$DX_DOT - # Extract the first word of "dot", so it can be a program name with args. -set dummy dot; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DOT+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_DOT in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT -if test -n "$ac_pt_DX_DOT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 -printf "%s\n" "$ac_pt_DX_DOT" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_DOT" = x; then - DX_DOT="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_DOT=$ac_pt_DX_DOT - fi -else - DX_DOT="$ac_cv_path_DX_DOT" -fi - -if test "$DX_FLAG_dot$DX_DOT" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 -printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} - DX_FLAG_dot=0 - -fi - - : -fi -if test "$DX_FLAG_dot" = 1; then - DX_ENV="$DX_ENV HAVE_DOT='YES'" -HAVE_DOT=YES - - DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'" -DOT_PATH=`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'` - - : -else - DX_ENV="$DX_ENV HAVE_DOT='NO'" -HAVE_DOT=NO - - : -fi - - -# Man pages generation: - - - - # Check whether --enable-doxygen-man was given. -if test ${enable_doxygen_man+y} -then : - enableval=$enable_doxygen_man; -case "$enableval" in -#( -y|Y|yes|Yes|YES) - DX_FLAG_man=1 - - -test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 - -;; #( -n|N|no|No|NO) - DX_FLAG_man=0 - -;; #( -*) - as_fn_error $? "invalid value '$enableval' given to doxygen-man" "$LINENO" 5 -;; -esac - -else $as_nop - -DX_FLAG_man=1 - - -test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 - - - -fi - -if test "$DX_FLAG_man" = 1; then - - : -fi -if test "$DX_FLAG_man" = 1; then - DX_ENV="$DX_ENV GENERATE_MAN='YES'" -GENERATE_MAN=YES - - : -else - DX_ENV="$DX_ENV GENERATE_MAN='NO'" -GENERATE_MAN=NO - - : -fi - - -# RTF file generation: - - - - # Check whether --enable-doxygen-rtf was given. -if test ${enable_doxygen_rtf+y} -then : - enableval=$enable_doxygen_rtf; -case "$enableval" in -#( -y|Y|yes|Yes|YES) - DX_FLAG_rtf=1 - - -test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 - -;; #( -n|N|no|No|NO) - DX_FLAG_rtf=0 - -;; #( -*) - as_fn_error $? "invalid value '$enableval' given to doxygen-rtf" "$LINENO" 5 -;; -esac - -else $as_nop - -DX_FLAG_rtf=0 - - -test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0 - - - -fi - -if test "$DX_FLAG_rtf" = 1; then - - : -fi -if test "$DX_FLAG_rtf" = 1; then - DX_ENV="$DX_ENV GENERATE_RTF='YES'" -GENERATE_RTF=YES - - : -else - DX_ENV="$DX_ENV GENERATE_RTF='NO'" -GENERATE_RTF=NO - - : -fi - - -# XML file generation: - - - - # Check whether --enable-doxygen-xml was given. -if test ${enable_doxygen_xml+y} -then : - enableval=$enable_doxygen_xml; -case "$enableval" in -#( -y|Y|yes|Yes|YES) - DX_FLAG_xml=1 - - -test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 - -;; #( -n|N|no|No|NO) - DX_FLAG_xml=0 - -;; #( -*) - as_fn_error $? "invalid value '$enableval' given to doxygen-xml" "$LINENO" 5 -;; -esac - -else $as_nop - -DX_FLAG_xml=0 - - -test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0 - - - -fi - -if test "$DX_FLAG_xml" = 1; then - - : -fi -if test "$DX_FLAG_xml" = 1; then - DX_ENV="$DX_ENV GENERATE_XML='YES'" -GENERATE_XML=YES - - : -else - DX_ENV="$DX_ENV GENERATE_XML='NO'" -GENERATE_XML=NO - - : -fi - - -# (Compressed) HTML help generation: - - - - # Check whether --enable-doxygen-chm was given. -if test ${enable_doxygen_chm+y} -then : - enableval=$enable_doxygen_chm; -case "$enableval" in -#( -y|Y|yes|Yes|YES) - DX_FLAG_chm=1 - - -test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 - -;; #( -n|N|no|No|NO) - DX_FLAG_chm=0 - -;; #( -*) - as_fn_error $? "invalid value '$enableval' given to doxygen-chm" "$LINENO" 5 -;; -esac - -else $as_nop - -DX_FLAG_chm=0 - - -test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0 - - - -fi - -if test "$DX_FLAG_chm" = 1; then - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. -set dummy ${ac_tool_prefix}hhc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_HHC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_HHC in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_HHC=$ac_cv_path_DX_HHC -if test -n "$DX_HHC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 -printf "%s\n" "$DX_HHC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_HHC"; then - ac_pt_DX_HHC=$DX_HHC - # Extract the first word of "hhc", so it can be a program name with args. -set dummy hhc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_HHC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_HHC in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC -if test -n "$ac_pt_DX_HHC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 -printf "%s\n" "$ac_pt_DX_HHC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_HHC" = x; then - DX_HHC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_HHC=$ac_pt_DX_HHC - fi -else - DX_HHC="$ac_cv_path_DX_HHC" -fi - -if test "$DX_FLAG_chm$DX_HHC" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 -printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} - DX_FLAG_chm=0 - -fi - - : -fi -if test "$DX_FLAG_chm" = 1; then - DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'" -HHC_PATH=$DX_HHC - - DX_ENV="$DX_ENV GENERATE_HTML='YES'" -GENERATE_HTML=YES - - DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'" -GENERATE_HTMLHELP=YES - - : -else - DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'" -GENERATE_HTMLHELP=NO - - : -fi - - -# Separate CHI file generation. - - - - # Check whether --enable-doxygen-chi was given. -if test ${enable_doxygen_chi+y} -then : - enableval=$enable_doxygen_chi; -case "$enableval" in -#( -y|Y|yes|Yes|YES) - DX_FLAG_chi=1 - - -test "$DX_FLAG_chm" = "1" \ -|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 - -;; #( -n|N|no|No|NO) - DX_FLAG_chi=0 - -;; #( -*) - as_fn_error $? "invalid value '$enableval' given to doxygen-chi" "$LINENO" 5 -;; -esac - -else $as_nop - -DX_FLAG_chi=0 - - -test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0 - - - -fi - -if test "$DX_FLAG_chi" = 1; then - - : -fi -if test "$DX_FLAG_chi" = 1; then - DX_ENV="$DX_ENV GENERATE_CHI='YES'" -GENERATE_CHI=YES - - : -else - DX_ENV="$DX_ENV GENERATE_CHI='NO'" -GENERATE_CHI=NO - - : -fi - - -# Plain HTML pages generation: - - - - # Check whether --enable-doxygen-html was given. -if test ${enable_doxygen_html+y} -then : - enableval=$enable_doxygen_html; -case "$enableval" in -#( -y|Y|yes|Yes|YES) - DX_FLAG_html=1 - - -test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 - -test "$DX_FLAG_chm" = "0" \ -|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 - -;; #( -n|N|no|No|NO) - DX_FLAG_html=0 - -;; #( -*) - as_fn_error $? "invalid value '$enableval' given to doxygen-html" "$LINENO" 5 -;; -esac - -else $as_nop - -DX_FLAG_html=1 - - -test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0 - - -test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0 - - - -fi - -if test "$DX_FLAG_html" = 1; then - - : -fi -if test "$DX_FLAG_html" = 1; then - DX_ENV="$DX_ENV GENERATE_HTML='YES'" -GENERATE_HTML=YES - - : -else - test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'" -GENERATE_HTML=NO - - : -fi - - -# PostScript file generation: - - - - # Check whether --enable-doxygen-ps was given. -if test ${enable_doxygen_ps+y} -then : - enableval=$enable_doxygen_ps; -case "$enableval" in -#( -y|Y|yes|Yes|YES) - DX_FLAG_ps=1 - - -test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 - -;; #( -n|N|no|No|NO) - DX_FLAG_ps=0 - -;; #( -*) - as_fn_error $? "invalid value '$enableval' given to doxygen-ps" "$LINENO" 5 -;; -esac - -else $as_nop - -DX_FLAG_ps=1 - - -test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0 - - - -fi - -if test "$DX_FLAG_ps" = 1; then - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. -set dummy ${ac_tool_prefix}latex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_LATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_LATEX in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_LATEX=$ac_cv_path_DX_LATEX -if test -n "$DX_LATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 -printf "%s\n" "$DX_LATEX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_LATEX"; then - ac_pt_DX_LATEX=$DX_LATEX - # Extract the first word of "latex", so it can be a program name with args. -set dummy latex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_LATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_LATEX in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX -if test -n "$ac_pt_DX_LATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 -printf "%s\n" "$ac_pt_DX_LATEX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_LATEX" = x; then - DX_LATEX="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_LATEX=$ac_pt_DX_LATEX - fi -else - DX_LATEX="$ac_cv_path_DX_LATEX" -fi - -if test "$DX_FLAG_ps$DX_LATEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} - DX_FLAG_ps=0 - -fi - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. -set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_MAKEINDEX in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX -if test -n "$DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -printf "%s\n" "$DX_MAKEINDEX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_MAKEINDEX"; then - ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX - # Extract the first word of "makeindex", so it can be a program name with args. -set dummy makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_MAKEINDEX in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX -if test -n "$ac_pt_DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_MAKEINDEX" = x; then - DX_MAKEINDEX="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX - fi -else - DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" -fi - -if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} - DX_FLAG_ps=0 - -fi - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. -set dummy ${ac_tool_prefix}dvips; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_DVIPS+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_DVIPS in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_DVIPS=$ac_cv_path_DX_DVIPS -if test -n "$DX_DVIPS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 -printf "%s\n" "$DX_DVIPS" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_DVIPS"; then - ac_pt_DX_DVIPS=$DX_DVIPS - # Extract the first word of "dvips", so it can be a program name with args. -set dummy dvips; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_DVIPS+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_DVIPS in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS -if test -n "$ac_pt_DX_DVIPS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 -printf "%s\n" "$ac_pt_DX_DVIPS" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_DVIPS" = x; then - DX_DVIPS="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_DVIPS=$ac_pt_DX_DVIPS - fi -else - DX_DVIPS="$ac_cv_path_DX_DVIPS" -fi - -if test "$DX_FLAG_ps$DX_DVIPS" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} - DX_FLAG_ps=0 - -fi - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. -set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_EGREP in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_EGREP=$ac_cv_path_DX_EGREP -if test -n "$DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -printf "%s\n" "$DX_EGREP" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_EGREP"; then - ac_pt_DX_EGREP=$DX_EGREP - # Extract the first word of "egrep", so it can be a program name with args. -set dummy egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_EGREP in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP -if test -n "$ac_pt_DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -printf "%s\n" "$ac_pt_DX_EGREP" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_EGREP" = x; then - DX_EGREP="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_EGREP=$ac_pt_DX_EGREP - fi -else - DX_EGREP="$ac_cv_path_DX_EGREP" -fi - -if test "$DX_FLAG_ps$DX_EGREP" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 -printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} - DX_FLAG_ps=0 - -fi - - : -fi -if test "$DX_FLAG_ps" = 1; then - - : -else - - : -fi - - -# PDF file generation: - - - - # Check whether --enable-doxygen-pdf was given. -if test ${enable_doxygen_pdf+y} -then : - enableval=$enable_doxygen_pdf; -case "$enableval" in -#( -y|Y|yes|Yes|YES) - DX_FLAG_pdf=1 - - -test "$DX_FLAG_doc" = "1" \ -|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 - -;; #( -n|N|no|No|NO) - DX_FLAG_pdf=0 - -;; #( -*) - as_fn_error $? "invalid value '$enableval' given to doxygen-pdf" "$LINENO" 5 -;; -esac - -else $as_nop - -DX_FLAG_pdf=1 - - -test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0 - - - -fi - -if test "$DX_FLAG_pdf" = 1; then - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. -set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_PDFLATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_PDFLATEX in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX -if test -n "$DX_PDFLATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 -printf "%s\n" "$DX_PDFLATEX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_PDFLATEX"; then - ac_pt_DX_PDFLATEX=$DX_PDFLATEX - # Extract the first word of "pdflatex", so it can be a program name with args. -set dummy pdflatex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_PDFLATEX in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX -if test -n "$ac_pt_DX_PDFLATEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 -printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_PDFLATEX" = x; then - DX_PDFLATEX="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_PDFLATEX=$ac_pt_DX_PDFLATEX - fi -else - DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX" -fi - -if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} - DX_FLAG_pdf=0 - -fi - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. -set dummy ${ac_tool_prefix}makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_MAKEINDEX in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX -if test -n "$DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 -printf "%s\n" "$DX_MAKEINDEX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_MAKEINDEX"; then - ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX - # Extract the first word of "makeindex", so it can be a program name with args. -set dummy makeindex; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_MAKEINDEX in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX -if test -n "$ac_pt_DX_MAKEINDEX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 -printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_MAKEINDEX" = x; then - DX_MAKEINDEX="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX - fi -else - DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" -fi - -if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} - DX_FLAG_pdf=0 - -fi - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. -set dummy ${ac_tool_prefix}egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DX_EGREP in - [\\/]* | ?:[\\/]*) - ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DX_EGREP=$ac_cv_path_DX_EGREP -if test -n "$DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 -printf "%s\n" "$DX_EGREP" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_DX_EGREP"; then - ac_pt_DX_EGREP=$DX_EGREP - # Extract the first word of "egrep", so it can be a program name with args. -set dummy egrep; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_DX_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_EGREP in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP -if test -n "$ac_pt_DX_EGREP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 -printf "%s\n" "$ac_pt_DX_EGREP" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_pt_DX_EGREP" = x; then - DX_EGREP="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DX_EGREP=$ac_pt_DX_EGREP - fi -else - DX_EGREP="$ac_cv_path_DX_EGREP" -fi - -if test "$DX_FLAG_pdf$DX_EGREP" = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 -printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} - DX_FLAG_pdf=0 +GPU_SHAREDMEM=$with_shared_mem -fi +if test x$HAVE_CUDA = x0 +then : + GPU_SHAREDMEM=0 - : fi -if test "$DX_FLAG_pdf" = 1; then - : -else +# +# Bifrost memory alignment +# - : -fi +# Check whether --with-alignment was given. +if test ${with_alignment+y} +then : + withval=$with_alignment; +else $as_nop + with_alignment=4096 +fi -# LaTeX generation for PS and/or PDF: -if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then - DX_ENV="$DX_ENV GENERATE_LATEX='YES'" -GENERATE_LATEX=YES +ALIGNMENT=$with_alignment -else - DX_ENV="$DX_ENV GENERATE_LATEX='NO'" -GENERATE_LATEX=NO -fi +# +# Bifrost proclog location +# -# Paper size for PS and/or PDF: -case "$DOXYGEN_PAPER_SIZE" in -#( -"") - DOXYGEN_PAPER_SIZE="" -;; #( -a4wide|a4|letter|legal|executive) - DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" -PAPER_SIZE=$DOXYGEN_PAPER_SIZE -;; #( -*) - as_fn_error $? "unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" "$LINENO" 5 -;; -esac -# Rules: -if test $DX_FLAG_html -eq 1 +# Check whether --with-logging_dir was given. +if test ${with_logging_dir+y} then : - DX_SNIPPET_html="## ------------------------------- ## -## Rules specific for HTML output. ## -## ------------------------------- ## - -DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ - \$(DX_DOCDIR)/html + withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir -" else $as_nop - DX_SNIPPET_html="" + HAVE_TMPFS=/tmp + fi -if test $DX_FLAG_chi -eq 1 + + + if test "$HAVE_TMPFS" = "/tmp"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +printf %s "checking for /dev/shm... " >&6; } +if test ${ac_cv_file__dev_shm+y} then : - DX_SNIPPET_chi=" -DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ - \$(DX_DOCDIR)/\$(PACKAGE).chi" + printf %s "(cached) " >&6 else $as_nop - DX_SNIPPET_chi="" + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/dev/shm"; then + ac_cv_file__dev_shm=yes +else + ac_cv_file__dev_shm=no +fi fi -if test $DX_FLAG_chm -eq 1 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +printf "%s\n" "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes then : - DX_SNIPPET_chm="## ------------------------------ ## -## Rules specific for CHM output. ## -## ------------------------------ ## + HAVE_TMPFS=/dev/shm/bifrost -DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ - \$(DX_DOCDIR)/chm\ -${DX_SNIPPET_chi} +fi -" + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +printf %s "checking for /Volumes/RAMDisk... " >&6; } +if test ${ac_cv_file__Volumes_RAMDisk+y} +then : + printf %s "(cached) " >&6 else $as_nop - DX_SNIPPET_chm="" + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/Volumes/RAMDisk"; then + ac_cv_file__Volumes_RAMDisk=yes +else + ac_cv_file__Volumes_RAMDisk=no fi -if test $DX_FLAG_man -eq 1 +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes then : - DX_SNIPPET_man="## ------------------------------ ## -## Rules specific for MAN output. ## -## ------------------------------ ## + HAVE_TMPFS=/Volumes/RAMDisk/bifrost -DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ - \$(DX_DOCDIR)/man +fi -" + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +printf %s "checking for /tmp... " >&6; } +if test ${ac_cv_file__tmp+y} +then : + printf %s "(cached) " >&6 else $as_nop - DX_SNIPPET_man="" + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/tmp"; then + ac_cv_file__tmp=yes +else + ac_cv_file__tmp=no +fi fi -if test $DX_FLAG_rtf -eq 1 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +printf "%s\n" "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes then : - DX_SNIPPET_rtf="## ------------------------------ ## -## Rules specific for RTF output. ## -## ------------------------------ ## + HAVE_TMPFS=/tmp -DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ - \$(DX_DOCDIR)/rtf +fi -" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + HAVE_TMPFS=/tmp/bifrost + + fi + + +# +# Bifrost Features +# + +# Check whether --enable-debug was given. +if test ${enable_debug+y} +then : + enableval=$enable_debug; enable_debug=yes else $as_nop - DX_SNIPPET_rtf="" + enable_debug=no fi -if test $DX_FLAG_xml -eq 1 + +HAVE_DEBUG=0 + +if test x$enable_debug != xno then : - DX_SNIPPET_xml="## ------------------------------ ## -## Rules specific for XML output. ## -## ------------------------------ ## + HAVE_DEBUG=1 -DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ - \$(DX_DOCDIR)/xml + CXXFLAGS="$CXXFLAGS -g" + NVCCFLAGS="$NVCCFLAGS -g" +fi -" +# Check whether --enable-trace was given. +if test ${enable_trace+y} +then : + enableval=$enable_trace; enable_trace=yes else $as_nop - DX_SNIPPET_xml="" + enable_trace=no fi -if test $DX_FLAG_ps -eq 1 -then : - DX_SNIPPET_ps="## ----------------------------- ## -## Rules specific for PS output. ## -## ----------------------------- ## -DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ - \$(DX_DOCDIR)/\$(PACKAGE).ps +HAVE_TRACE=0 + +if test x$enable_trace != xno +then : + HAVE_TRACE=1 -DX_PS_GOAL = doxygen-ps +fi -doxygen-ps: \$(DX_CLEAN_PS) -\$(DX_DOCDIR)/\$(PACKAGE).ps: \$(DX_DOCDIR)/\$(PACKAGE).tag - \$(DX_V_LATEX)cd \$(DX_DOCDIR)/latex; \\ - rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ - \$(DX_LATEX) refman.tex; \\ - \$(DX_MAKEINDEX) refman.idx; \\ - \$(DX_LATEX) refman.tex; \\ - countdown=5; \\ - while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ - refman.log > /dev/null 2>&1 \\ - && test \$\$countdown -gt 0; do \\ - \$(DX_LATEX) refman.tex; \\ - countdown=\`expr \$\$countdown - 1\`; \\ - done; \\ - \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi -" + # Check whether --enable-native_arch was given. +if test ${enable_native_arch+y} +then : + enableval=$enable_native_arch; enable_native_arch=no else $as_nop - DX_SNIPPET_ps="" + enable_native_arch=yes fi -if test $DX_FLAG_pdf -eq 1 -then : - DX_SNIPPET_pdf="## ------------------------------ ## -## Rules specific for PDF output. ## -## ------------------------------ ## -DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ - \$(DX_DOCDIR)/\$(PACKAGE).pdf -DX_PDF_GOAL = doxygen-pdf + if test "$enable_native_arch" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler accepts '-march=native'" >&5 +printf %s "checking if the compiler accepts '-march=native'... " >&6; } + + CXXFLAGS_temp="$CXXFLAGS -march=native" + + ac_compile='$CXX -c $CXXFLAGS_temp conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -doxygen-pdf: \$(DX_CLEAN_PDF) -\$(DX_DOCDIR)/\$(PACKAGE).pdf: \$(DX_DOCDIR)/\$(PACKAGE).tag - \$(DX_V_LATEX)cd \$(DX_DOCDIR)/latex; \\ - rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ - \$(DX_PDFLATEX) refman.tex; \\ - \$(DX_MAKEINDEX) refman.idx; \\ - \$(DX_PDFLATEX) refman.tex; \\ - countdown=5; \\ - while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ - refman.log > /dev/null 2>&1 \\ - && test \$\$countdown -gt 0; do \\ - \$(DX_PDFLATEX) refman.tex; \\ - countdown=\`expr \$\$countdown - 1\`; \\ - done; \\ - mv refman.pdf ../\$(PACKAGE).pdf -" +int +main (void) +{ + + int i = 5; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + CXXFLAGS="$CXXFLAGS -march=native" + NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else $as_nop - DX_SNIPPET_pdf="" + enable_native_arch=no + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + + +# Check whether --enable-cuda_debug was given. +if test ${enable_cuda_debug+y} then : - DX_SNIPPET_latex="## ------------------------------------------------- ## -## Rules specific for LaTeX (shared for PS and PDF). ## -## ------------------------------------------------- ## + enableval=$enable_cuda_debug; enable_cuda_debug=yes +else $as_nop + enable_cuda_debug=no +fi -DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) -_DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) -_DX_v_LATEX_0 = @echo \" LATEX \" \$@; +HAVE_CUDA_DEBUG=0 -DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ - \$(DX_DOCDIR)/latex +if test x$enable_cuda_debug != xno +then : + HAVE_CUDA_DEBUG=1 -" + NVCCFLAGS="$NVCCFLAGS -G" +fi + +# Check whether --enable-map_cache was given. +if test ${enable_map_cache+y} +then : + enableval=$enable_map_cache; enable_map_cache=no else $as_nop - DX_SNIPPET_latex="" + enable_map_cache=yes fi -if test $DX_FLAG_doc -eq 1 +if test x$enable_map_cache != xno +then : + CPPFLAGS="$CPPFLAGS -DBF_MAPCACHE_ENABLED=1" +fi + +# +# Python +# + +# Check whether --enable-python was given. +if test ${enable_python+y} then : - DX_SNIPPET_doc="## --------------------------------- ## -## Format-independent Doxygen rules. ## -## --------------------------------- ## + enableval=$enable_python; enable_python=no +else $as_nop + enable_python=yes +fi + +HAVE_PYTHON=0 -${DX_SNIPPET_html}\ -${DX_SNIPPET_chm}\ -${DX_SNIPPET_man}\ -${DX_SNIPPET_rtf}\ -${DX_SNIPPET_xml}\ -${DX_SNIPPET_ps}\ -${DX_SNIPPET_pdf}\ -${DX_SNIPPET_latex}\ -DX_V_DXGEN = \$(_DX_v_DXGEN_\$(V)) -_DX_v_DXGEN_ = \$(_DX_v_DXGEN_\$(AM_DEFAULT_VERBOSITY)) -_DX_v_DXGEN_0 = @echo \" DXGEN \" \$<; +if test x$enable_python != xno +then : + AX_WITH_PROG(PYTHON, python, no, $PATH) + if test x${PYTHON} != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +printf %s "checking whether $PYTHON as ctypesgen... " >&6; } + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_PYTHON=1 -.PHONY: doxygen-run doxygen-doc \$(DX_PS_GOAL) \$(DX_PDF_GOAL) +fi +fi +fi -.INTERMEDIATE: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) +# Check whether --with-pybuild_flags was given. +if test ${with_pybuild_flags+y} +then : + withval=$with_pybuild_flags; +fi -doxygen-run: \$(DX_DOCDIR)/\$(PACKAGE).tag +PYBUILDFLAGS=$with_pybuild_flags -doxygen-doc: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) -\$(DX_DOCDIR)/\$(PACKAGE).tag: \$(DX_CONFIG) \$(pkginclude_HEADERS) - \$(A""M_V_at)rm -rf \$(DX_DOCDIR) - \$(DX_V_DXGEN)\$(DX_ENV) DOCDIR=\$(DX_DOCDIR) \$(DX_DOXYGEN) \$(DX_CONFIG) - \$(A""M_V_at)echo Timestamp >\$@ -DX_CLEANFILES = \\ - \$(DX_DOCDIR)/doxygen_sqlite3.db \\ - \$(DX_DOCDIR)/\$(PACKAGE).tag \\ - -r \\ - \$(DX_CLEAN_HTML) \\ - \$(DX_CLEAN_CHM) \\ - \$(DX_CLEAN_CHI) \\ - \$(DX_CLEAN_MAN) \\ - \$(DX_CLEAN_RTF) \\ - \$(DX_CLEAN_XML) \\ - \$(DX_CLEAN_PS) \\ - \$(DX_CLEAN_PDF) \\ - \$(DX_CLEAN_LATEX)" -else $as_nop - DX_SNIPPET_doc="" +# Check whether --with-pyinstall_flags was given. +if test ${with_pyinstall_flags+y} +then : + withval=$with_pyinstall_flags; fi -DX_RULES="${DX_SNIPPET_doc}" +PYINSTALLFLAGS=$with_pyinstall_flags + + +# +# Docker +# + +AX_WITH_PROG(DOCKER, docker, no, $PATH) +if test x${DOCKER} != xno +then : + HAVE_DOCKER=1 + +fi -#For debugging: -#echo DX_FLAG_doc=$DX_FLAG_doc -#echo DX_FLAG_dot=$DX_FLAG_dot -#echo DX_FLAG_man=$DX_FLAG_man -#echo DX_FLAG_html=$DX_FLAG_html -#echo DX_FLAG_chm=$DX_FLAG_chm -#echo DX_FLAG_chi=$DX_FLAG_chi -#echo DX_FLAG_rtf=$DX_FLAG_rtf -#echo DX_FLAG_xml=$DX_FLAG_xml -#echo DX_FLAG_pdf=$DX_FLAG_pdf -#echo DX_FLAG_ps=$DX_FLAG_ps -#echo DX_ENV=$DX_ENV +# +# Documentation +# +DX_DOT_FEATURE(OFF) +DX_HTML_FEATURE(ON) +DX_CHM_FEATURE(OFF) +DX_CHI_FEATURE(OFF) +DX_MAN_FEATURE(ON) +DX_RTF_FEATURE(OFF) +DX_XML_FEATURE(OFF) +DX_PDF_FEATURE(ON) +DX_PS_FEATURE(ON) +DX_INIT_DOXYGEN(bifrost) # # Version splitting From 6572c97da4169a204a19b0d2ad98264c552aa8e6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 13:05:24 -0600 Subject: [PATCH 0424/1155] Rebuild configure correctly. --- configure | 5841 ++++++++++++++++++++++++++++++++++++++++---------- configure.ac | 2 + 2 files changed, 4685 insertions(+), 1158 deletions(-) diff --git a/configure b/configure index e84ea8a4b..73c180b27 100755 --- a/configure +++ b/configure @@ -661,9 +661,50 @@ LTLIBOBJS PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR PACKAGE_VERSION_MAJOR +DX_RULES +PAPER_SIZE +DOXYGEN_PAPER_SIZE +GENERATE_LATEX +DX_PDFLATEX +DX_FLAG_pdf +DX_EGREP +DX_DVIPS +DX_MAKEINDEX +DX_LATEX +DX_FLAG_ps +DX_FLAG_html +GENERATE_CHI +DX_FLAG_chi +GENERATE_HTMLHELP +GENERATE_HTML +HHC_PATH +DX_HHC +DX_FLAG_chm +GENERATE_XML +DX_FLAG_xml +GENERATE_RTF +DX_FLAG_rtf +GENERATE_MAN +DX_FLAG_man +DOT_PATH +HAVE_DOT +DX_DOT +DX_FLAG_dot +PERL_PATH +DX_PERL +DX_DOXYGEN +DX_FLAG_doc +PROJECT +SRCDIR +DX_ENV +DX_DOCDIR +DX_CONFIG +DX_PROJECT HAVE_DOCKER +DOCKER PYINSTALLFLAGS PYBUILDFLAGS +PYTHON HAVE_PYTHON HAVE_CUDA_DEBUG enable_native_arch @@ -689,7 +730,10 @@ HAVE_FLOAT128 HAVE_OPENMP LIBOBJS HAVE_RECVMSG +HAVE_CXX11 +HAVE_CXX14 SO_EXT +CTAGS SET_MAKE INSTALL_DATA INSTALL_SCRIPT @@ -788,6 +832,7 @@ with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock +with_ctags enable_numa enable_hwloc enable_vma @@ -804,8 +849,20 @@ enable_native_arch enable_cuda_debug enable_map_cache enable_python +with_python with_pybuild_flags with_pyinstall_flags +with_docker +enable_doxygen_doc +enable_doxygen_dot +enable_doxygen_man +enable_doxygen_rtf +enable_doxygen_xml +enable_doxygen_chm +enable_doxygen_chi +enable_doxygen_html +enable_doxygen_ps +enable_doxygen_pdf ' ac_precious_vars='build_alias host_alias @@ -819,7 +876,11 @@ CXX CXXFLAGS CCC LT_SYS_LIBRARY_PATH -CXXCPP' +CXXCPP +CTAGS +PYTHON +DOCKER +DOXYGEN_PAPER_SIZE' # Initialize some variables set by options. @@ -1457,6 +1518,17 @@ Optional Features: --enable-cuda-debug enable CUDA debugging (nvcc -G; default=no) --disable-map-cache disable caching bifrost.map kernels (default=no) --disable-python disable building the Python bindings (default=no) + --disable-doxygen-doc don't generate any doxygen documentation + --enable-doxygen-dot generate graphics for doxygen documentation + --disable-doxygen-man don't generate doxygen manual pages + --enable-doxygen-rtf generate doxygen RTF documentation + --enable-doxygen-xml generate doxygen XML documentation + --enable-doxygen-chm generate doxygen compressed HTML help documentation + --enable-doxygen-chi generate doxygen separate compressed HTML help index + file + --disable-doxygen-html don't generate doxygen plain HTML documentation + --disable-doxygen-ps don't generate doxygen PostScript documentation + --disable-doxygen-pdf don't generate doxygen PDF documentation Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1469,6 +1541,7 @@ Optional Packages: --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). + --with-ctags=[PATH] absolute path to ctags executable --with-cuda-home CUDA install path (default=/usr/local/cuda) --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"') @@ -1477,8 +1550,10 @@ Optional Packages: --with-alignment=N default memory alignment in bytes (default=4096) --with-logging-dir=DIR directory for Bifrost proclog logging (default=autodetect) + --with-python=[PATH] absolute path to python executable --with-pybuild-flags build flags for python (default='') --with-pyinstall-flags install flags for python (default='') + --with-docker=[PATH] absolute path to docker executable Some influential environment variables: CC C compiler command @@ -1493,6 +1568,11 @@ Some influential environment variables: LT_SYS_LIBRARY_PATH User-defined run-time library search path. CXXCPP C++ preprocessor + CTAGS Absolute path to ctags executable + PYTHON Absolute path to python executable + DOCKER Absolute path to docker executable + DOXYGEN_PAPER_SIZE + a4wide (default), a4, letter, legal or executive Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -17365,7 +17445,151 @@ printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi -AX_WITH_PROG(CTAGS, ctags) + + + + + + + + + + + if test -z "$CTAGS" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctags executable path has been provided" >&5 +printf %s "checking whether ctags executable path has been provided... " >&6; } + +# Check whether --with-ctags was given. +if test ${with_ctags+y} +then : + withval=$with_ctags; + if test "$withval" != yes && test "$withval" != no +then : + + CTAGS="$withval" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } + +else $as_nop + + CTAGS="" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : + + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CTAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + +fi + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + # Extract the first word of "ctags", so it can be a program name with args. +set dummy ctags; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CTAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $CTAGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CTAGS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CTAGS=$ac_cv_path_CTAGS +if test -n "$CTAGS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 +printf "%s\n" "$CTAGS" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + + +fi + + + + + + if test x${CTAGS} = x then : as_fn_error $? "Required program ctags was not found" "$LINENO" 5 @@ -17433,1466 +17657,4762 @@ _ACEOF ;; esac -AX_CXX_COMPILE_STDCXX(14, noext, optional) -if test x$HAVE_CXX14 != x1 -then : - AX_CXX_COMPILE_STDCXX(11, noext, mandatory) -fi -ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes -then : - printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h + ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no -fi -ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" -if test "x$ac_cv_func_rint" = xyes -then : - printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h -fi -ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = xyes + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 +printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } +if eval test \${$cachevar+y} then : - printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h + printf %s "(cached) " >&6 +else $as_nop + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -fi +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. - for ac_func in recvmsg -do : - ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" -if test "x$ac_cv_func_recvmsg" = xyes -then : - printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h - HAVE_RECVMSG=1 +#ifndef __cplusplus -else $as_nop - HAVE_RECVMSG=0 +#error "This is not a C++ compiler" -fi +#elif __cplusplus < 201103L -done -ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" -if test "x$ac_cv_func_sqrt" = xyes -then : - printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h +#error "This is not a C++11 compiler" -fi +#else -ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes -then : - printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h +namespace cxx11 +{ -fi + namespace test_static_assert + { -ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" -if test "x$ac_cv_header_arpa_inet_h" = xyes -then : - printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; -fi + } -ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = xyes -then : - printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h + namespace test_final_override + { -fi + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; -ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" -if test "x$ac_cv_header_netinet_in_h" = xyes -then : - printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; -fi + } -ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h + namespace test_double_right_angle_brackets + { -fi + template < typename T > + struct check {}; -ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; -fi + } -ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + namespace test_decltype + { -fi + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } -ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes -then : + } -printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h + namespace test_type_deduction + { + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; -fi + template < typename T > + struct is_same + { + static const bool value = true; + }; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -printf %s "checking for stdbool.h that conforms to C99... " >&6; } -if test ${ac_cv_header_stdbool_h+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } - #ifndef __bool_true_false_are_defined - #error "__bool_true_false_are_defined is not defined" - #endif - char a[__bool_true_false_are_defined == 1 ? 1 : -1]; + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } - /* Regardless of whether this is C++ or "_Bool" is a - valid type name, "true" and "false" should be usable - in #if expressions and integer constant expressions, - and "bool" should be a valid type name. */ + } - #if !true - #error "'true' is not true" - #endif - #if true != 1 - #error "'true' is not equal to 1" - #endif - char b[true == 1 ? 1 : -1]; - char c[true]; + namespace test_noexcept + { - #if false - #error "'false' is not false" - #endif - #if false != 0 - #error "'false' is not equal to 0" - #endif - char d[false == 0 ? 1 : -1]; + int f() { return 0; } + int g() noexcept { return 0; } - enum { e = false, f = true, g = false * true, h = true * 256 }; + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); - char i[(bool) 0.5 == true ? 1 : -1]; - char j[(bool) 0.0 == false ? 1 : -1]; - char k[sizeof (bool) > 0 ? 1 : -1]; + } - struct sb { bool s: 1; bool t; } s; - char l[sizeof s.t > 0 ? 1 : -1]; + namespace test_constexpr + { - /* The following fails for - HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - bool m[h]; - char n[sizeof m == h * sizeof m[0] ? 1 : -1]; - char o[-1 - (bool) 0 < 0 ? 1 : -1]; - /* Catch a bug in an HP-UX C compiler. See - https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ - bool p = true; - bool *pp = &p; + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } - /* C 1999 specifies that bool, true, and false are to be - macros, but C++ 2011 and later overrule this. */ - #if __cplusplus < 201103 - #ifndef bool - #error "bool is not defined" - #endif - #ifndef false - #error "false is not defined" - #endif - #ifndef true - #error "true is not defined" - #endif - #endif + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } - /* If _Bool is available, repeat with it all the tests - above that used bool. */ - #ifdef HAVE__BOOL - struct sB { _Bool s: 1; _Bool t; } t; + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); - char q[(_Bool) 0.5 == true ? 1 : -1]; - char r[(_Bool) 0.0 == false ? 1 : -1]; - char u[sizeof (_Bool) > 0 ? 1 : -1]; - char v[sizeof t.t > 0 ? 1 : -1]; + } - _Bool w[h]; - char x[sizeof m == h * sizeof m[0] ? 1 : -1]; - char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; - _Bool z = true; - _Bool *pz = &p; - #endif + namespace test_rvalue_references + { -int -main (void) -{ + template < int N > + struct answer + { + static constexpr int value = N; + }; - bool ps = &s; - *pp |= p; - *pp |= ! p; + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } - #ifdef HAVE__BOOL - _Bool pt = &t; - *pz |= z; - *pz |= ! z; - #endif + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } - /* Refer to every declared value, so they cannot be - discarded as unused. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k - + !l + !m + !n + !o + !p + !pp + !ps - #ifdef HAVE__BOOL - + !q + !r + !u + !v + !w + !x + !y + !z + !pt - #endif - ); + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_cv_header_stdbool_h=yes -else $as_nop - ac_cv_header_stdbool_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } + namespace test_uniform_initialization + { -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -printf %s "checking for GNU libc compatible malloc... " >&6; } -if test ${ac_cv_func_malloc_0_nonnull+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : - case "$host_os" in # (( - # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ - | hpux* | solaris* | cygwin* | mingw* | msys* ) - ac_cv_func_malloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_malloc_0_nonnull=no ;; - esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include + struct test + { + static const int zero {}; + static const int one {1}; + }; -int -main (void) -{ -void *p = malloc (0); - int result = !p; - free (p); - return result; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO" -then : - ac_cv_func_malloc_0_nonnull=yes -else $as_nop - ac_cv_func_malloc_0_nonnull=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes -then : + } -printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h + namespace test_lambdas + { -else $as_nop - printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } - case " $LIBOBJS " in - *" malloc.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS malloc.$ac_objext" - ;; -esac + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } -printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h + } -fi + namespace test_variadic_templates + { + template + struct sum; + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; -HAVE_OPENMP=0 + template <> + struct sum<> + { + static constexpr auto value = 0; + }; -AX_OPENMP -if test x$OPENMP_CXXFLAGS != x -then : - HAVE_OPENMP=1 + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); -fi -if test x$HAVE_OPENMP != x1 -then : + } -else $as_nop - CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" - LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" -fi + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { -ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes -then : + struct foo {}; -printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h + template + using member = typename T::member_type; + template + void func(...) {} -fi + template + void func(member*) {} -ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" -case $ac_cv_c_int16_t in #( - no|yes) ;; #( - *) + void test(); -printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h -;; -esac + void test() { func(0); } -ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" -case $ac_cv_c_int32_t in #( - no|yes) ;; #( - *) + } -printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h -;; -esac +} // namespace cxx11 -ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" -case $ac_cv_c_int64_t in #( - no|yes) ;; #( - *) +#endif // __cplusplus >= 201103L -printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h -;; -esac -ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t" -case $ac_cv_c_int8_t in #( - no|yes) ;; #( - *) -printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h -;; -esac +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. - ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default -" -if test "x$ac_cv_type_pid_t" = xyes -then : +#ifndef __cplusplus -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +#error "This is not a C++ compiler" - #if defined _WIN64 && !defined __CYGWIN__ - LLP64 - #endif +#elif __cplusplus < 201402L -int -main (void) +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 { - ; - return 0; -} + namespace test_polymorphic_lambdas + { -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } -printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h + } + namespace test_binary_literals + { -fi + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + } -ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes -then : + namespace test_generalized_constexpr + { -else $as_nop + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } -printf "%s\n" "#define size_t unsigned int" >>confdefs.h + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); -fi + } -ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes -then : + namespace test_lambda_init_capture + { -else $as_nop + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } -printf "%s\n" "#define ssize_t int" >>confdefs.h + } -fi + namespace test_digit_separators + { -ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" -case $ac_cv_c_uint16_t in #( - no|yes) ;; #( - *) - - -printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" -case $ac_cv_c_uint32_t in #( - no|yes) ;; #( - *) - -printf "%s\n" "#define _UINT32_T 1" >>confdefs.h + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + } -printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" -case $ac_cv_c_uint64_t in #( - no|yes) ;; #( - *) - -printf "%s\n" "#define _UINT64_T 1" >>confdefs.h + namespace test_return_type_deduction + { + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } -printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h -;; - esac + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; -ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" -case $ac_cv_c_uint8_t in #( - no|yes) ;; #( - *) + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; -printf "%s\n" "#define _UINT8_T 1" >>confdefs.h + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } + } -printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h -;; - esac +} // namespace cxx14 +#endif // __cplusplus >= 201402L - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 -printf %s "checking for long double with more range or precision than double... " >&6; } -if test ${ac_cv_type_long_double_wider+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - long double const a[] = - { - 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON, - LDBL_MIN, LDBL_MAX, LDBL_EPSILON - }; - long double - f (long double x) - { - return ((x + (unsigned long int) 10) * (-1 / x) + a[0] - + (x ? f (x) : 'c')); - } -int -main (void) -{ -static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) - + (DBL_MANT_DIG < LDBL_MANT_DIG) - - (LDBL_MAX_EXP < DBL_MAX_EXP) - - (LDBL_MANT_DIG < DBL_MANT_DIG))) - && (int) LDBL_EPSILON == 0 - )]; -test_array [0] = 0; -return test_array [0]; - ; - return 0; -} _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : - ac_cv_type_long_double_wider=yes + eval $cachevar=yes else $as_nop - ac_cv_type_long_double_wider=no + eval $cachevar=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 -printf "%s\n" "$ac_cv_type_long_double_wider" >&6; } - if test $ac_cv_type_long_double_wider = yes; then +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -printf "%s\n" "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h + if test x$ax_cxx_compile_cxx14_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX14=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} + else + HAVE_CXX14=1 + +printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h fi -HAVE_FLOAT128=0 -if test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1 +if test x$HAVE_CXX14 != x1 then : - HAVE_FLOAT128=0 + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no -fi -# -# NUMA -# -# Check whether --enable-numa was given. -if test ${enable_numa+y} -then : - enableval=$enable_numa; enable_numa=no -else $as_nop - enable_numa=yes -fi -HAVE_NUMA=0 -if test x$enable_numa != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } -if test ${ac_cv_lib_numa_numa_node_of_cpu+y} + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnuma $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -namespace conftest { - extern "C" int numa_node_of_cpu (); -} -int -main (void) -{ -return conftest::numa_node_of_cpu (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - ac_cv_lib_numa_numa_node_of_cpu=yes -else $as_nop - ac_cv_lib_numa_numa_node_of_cpu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes -then : - HAVE_NUMA=1 - LIBS="$LIBS -lnuma" -fi +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. -fi +#ifndef __cplusplus -# -# HWLOC -# +#error "This is not a C++ compiler" -# Check whether --enable-hwloc was given. -if test ${enable_hwloc+y} -then : - enableval=$enable_hwloc; enable_hwloc=no -else $as_nop - enable_hwloc=yes -fi +#elif __cplusplus < 201103L -HAVE_HWLOC=0 +#error "This is not a C++11 compiler" -if test x$enable_hwloc != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 -printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } -if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lhwloc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +#else -namespace conftest { - extern "C" int hwloc_topology_init (); -} -int -main (void) +namespace cxx11 { -return conftest::hwloc_topology_init (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - ac_cv_lib_hwloc_hwloc_topology_init=yes -else $as_nop - ac_cv_lib_hwloc_hwloc_topology_init=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 -printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } -if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes -then : - HAVE_HWLOC=1 - LIBS="$LIBS -lhwloc" -fi + namespace test_static_assert + { -fi + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; -# -# VMA -# + } -# Check whether --enable-vma was given. -if test ${enable_vma+y} -then : - enableval=$enable_vma; enable_vma=yes -else $as_nop - enable_vma=no -fi + namespace test_final_override + { -HAVE_VMA=0 + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; -if test x$enable_vma != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 -printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } -if test ${ac_cv_lib_vma_recvfrom_zcopy+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lvma $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; -namespace conftest { - extern "C" int recvfrom_zcopy (); -} -int -main (void) -{ -return conftest::recvfrom_zcopy (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - ac_cv_lib_vma_recvfrom_zcopy=yes -else $as_nop - ac_cv_lib_vma_recvfrom_zcopy=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 -printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } -if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes -then : - HAVE_VMA=1 + } - LIBS="$LIBS -lvma" -fi + namespace test_double_right_angle_brackets + { -fi + template < typename T > + struct check {}; -# -# CUDA -# + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; -################################# -# NOTE # -# This needs to come after all # -# other compiler/library tests # -# since it changes LIB to # -# include CUDA-specific entries # -################################# + } + namespace test_decltype + { + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + } -# Check whether --with-cuda_home was given. -if test ${with_cuda_home+y} -then : - withval=$with_cuda_home; -else $as_nop - with_cuda_home=/usr/local/cuda -fi + namespace test_type_deduction + { - CUDA_HOME=$with_cuda_home + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + template < typename T > + struct is_same + { + static const bool value = true; + }; - # Check whether --enable-cuda was given. -if test ${enable_cuda+y} -then : - enableval=$enable_cuda; enable_cuda=no -else $as_nop - enable_cuda=yes -fi + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } - HAVE_CUDA=0 + } - CUDA_VERSION=0 + namespace test_noexcept + { - GPU_MAX_ARCH=0 + int f() { return 0; } + int g() noexcept { return 0; } - if test "$enable_cuda" != "no"; then - HAVE_CUDA=1 + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + } - # Extract the first word of "nvcc", so it can be a program name with args. -set dummy nvcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_NVCC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $NVCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$CUDA_HOME/bin:$PATH" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + namespace test_constexpr + { - test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="no" - ;; -esac -fi -NVCC=$ac_cv_path_NVCC -if test -n "$NVCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 -printf "%s\n" "$NVCC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } - # Extract the first word of "nvprune", so it can be a program name with args. -set dummy nvprune; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_NVPRUNE+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $NVPRUNE in - [\\/]* | ?:[\\/]*) - ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$CUDA_HOME/bin:$PATH" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); - test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="no" - ;; -esac -fi -NVPRUNE=$ac_cv_path_NVPRUNE -if test -n "$NVPRUNE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 -printf "%s\n" "$NVPRUNE" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + } + namespace test_rvalue_references + { - # Extract the first word of "cuobjdump", so it can be a program name with args. -set dummy cuobjdump; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CUOBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $CUOBJDUMP in - [\\/]* | ?:[\\/]*) - ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$CUDA_HOME/bin:$PATH" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + template < int N > + struct answer + { + static constexpr int value = N; + }; - test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="no" - ;; -esac -fi -CUOBJDUMP=$ac_cv_path_CUOBJDUMP -if test -n "$CUOBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 -printf "%s\n" "$CUOBJDUMP" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } - fi + } - if test "$HAVE_CUDA" = "1"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 -printf %s "checking for a working CUDA installation... " >&6; } + namespace test_uniform_initialization + { - CXXFLAGS_save="$CXXFLAGS" - LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" + struct test + { + static const int zero {}; + static const int one {1}; + }; - ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + } - #include - #include -int -main (void) -{ -cudaMalloc(0, 0); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + namespace test_lambdas + { -else $as_nop - HAVE_CUDA=0 + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } - if test "$HAVE_CUDA" = "1"; then - LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart" + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } - ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + } + namespace test_variadic_templates + { - #include - #include -int -main (void) -{ -cudaMalloc(0, 0); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes - v$CUDA_VERSION" >&5 -printf "%s\n" "yes - v$CUDA_VERSION" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - HAVE_CUDA=0 + template + struct sum; -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - HAVE_CUDA=0 + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; - fi + template <> + struct sum<> + { + static constexpr auto value = 0; + }; - CXXFLAGS="$CXXFLAGS_save" - LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" - fi + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + } -# Check whether --with-nvcc_flags was given. -if test ${with_nvcc_flags+y} + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" then : - withval=$with_nvcc_flags; + eval $cachevar=yes else $as_nop - with_nvcc_flags='-O3 -Xcompiler "-Wall"' + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" fi +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - NVCCFLAGS=$with_nvcc_flags + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX11=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 +printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h - if test "$HAVE_CUDA" = "1"; then - CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" - CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" - NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" - LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" fi -# Check whether --with-gpu_archs was given. -if test ${with_gpu_archs+y} -then : - withval=$with_gpu_archs; -else $as_nop - with_gpu_archs='auto' fi +ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" +if test "x$ac_cv_func_memset" = xyes +then : + printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h - if test "$HAVE_CUDA" = "1"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 -printf %s "checking for valid CUDA architectures... " >&6; } - ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) - ar_supported_flat=$( echo $ar_supported | xargs ) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found: $ar_supported_flat" >&5 -printf "%s\n" "found: $ar_supported_flat" >&6; } +fi - if test "$with_gpu_archs" = "auto"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 -printf %s "checking which CUDA architectures to target... " >&6; } +ac_fn_cxx_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes +then : + printf "%s\n" "#define HAVE_RINT 1" >>confdefs.h - CXXFLAGS_save="$CXXFLAGS" - LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" +fi - LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="-lcuda -lcudart" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' - if test "$cross_compiling" = yes +ac_fn_cxx_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = xyes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h +fi - #include - #include - #include - #include - #include -int -main (void) -{ - std::set archs; - int major, minor, arch; - int deviceCount = 0; - cudaGetDeviceCount(&deviceCount); - if( deviceCount == 0 ) { - return 1; - } - std::ofstream fh; - fh.open("confarchs.out"); - for(int dev=0; dev 0 ) { - fh << " "; - } - fh << arch; - } - arch += minor; - if( archs.count(arch) == 0 ) { - archs.insert(arch); - fh << " " << arch; - } - } - fh.close(); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO" + for ac_func in recvmsg +do : + ac_fn_cxx_check_func "$LINENO" "recvmsg" "ac_cv_func_recvmsg" +if test "x$ac_cv_func_recvmsg" = xyes then : - GPU_ARCHS=`cat confarchs.out` - - ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) - ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) - if test "$ar_valid" = ""; then - as_fn_error $? "failed to find any supported" "$LINENO" 5 - else - GPU_ARCHS=$ar_valid + printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h + HAVE_RECVMSG=1 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 -printf "%s\n" "$GPU_ARCHS" >&6; } - fi else $as_nop - as_fn_error $? "failed to find any" "$LINENO" 5 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + HAVE_RECVMSG=0 + fi +done +ac_fn_cxx_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = xyes +then : + printf "%s\n" "#define HAVE_SQRT 1" >>confdefs.h - CXXFLAGS="$CXXFLAGS_save" - LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" - else - GPU_ARCHS=$with_gpu_archs +fi - fi +ac_fn_cxx_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes +then : + printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid requested CUDA architectures" >&5 -printf %s "checking for valid requested CUDA architectures... " >&6; } - ar_requested=$( echo "$GPU_ARCHS" | wc -w ) - ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) - ar_found=$( echo $ar_valid | wc -w ) - if test "$ar_requested" = "$ar_found"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - else - as_fn_error $? "only '$ar_valid' are supported" "$LINENO" 5 - fi +fi - ar_max_valid=$(echo $ar_valid | ${SED} -e 's/.* //g;' ) - GPU_MAX_ARCH=$ar_max_valid +ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h +fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 -printf %s "checking for Pascal-style CUDA managed memory... " >&6; } - cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) - if ! echo $cm_invalid | ${GREP} -q PRE; then - GPU_PASCAL_MANAGEDMEM=1 +ac_fn_cxx_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes +then : + printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - else - GPU_PASCAL_MANAGEDMEM=0 +fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - fi - else - GPU_PASCAL_MANAGEDMEM=0 +ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes +then : + printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h - fi +fi +ac_fn_cxx_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h +fi -# Check whether --with-shared_mem was given. -if test ${with_shared_mem+y} +ac_fn_cxx_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes then : - withval=$with_shared_mem; -else $as_nop - with_shared_mem=16384 + printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h + fi -GPU_SHAREDMEM=$with_shared_mem +ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi + +ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes +then : + +printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h + + +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +printf %s "checking for stdbool.h that conforms to C99... " >&6; } +if test ${ac_cv_header_stdbool_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + + #ifndef __bool_true_false_are_defined + #error "__bool_true_false_are_defined is not defined" + #endif + char a[__bool_true_false_are_defined == 1 ? 1 : -1]; + + /* Regardless of whether this is C++ or "_Bool" is a + valid type name, "true" and "false" should be usable + in #if expressions and integer constant expressions, + and "bool" should be a valid type name. */ + + #if !true + #error "'true' is not true" + #endif + #if true != 1 + #error "'true' is not equal to 1" + #endif + char b[true == 1 ? 1 : -1]; + char c[true]; + + #if false + #error "'false' is not false" + #endif + #if false != 0 + #error "'false' is not equal to 0" + #endif + char d[false == 0 ? 1 : -1]; + + enum { e = false, f = true, g = false * true, h = true * 256 }; + + char i[(bool) 0.5 == true ? 1 : -1]; + char j[(bool) 0.0 == false ? 1 : -1]; + char k[sizeof (bool) > 0 ? 1 : -1]; + + struct sb { bool s: 1; bool t; } s; + char l[sizeof s.t > 0 ? 1 : -1]; + + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + bool m[h]; + char n[sizeof m == h * sizeof m[0] ? 1 : -1]; + char o[-1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + bool p = true; + bool *pp = &p; + + /* C 1999 specifies that bool, true, and false are to be + macros, but C++ 2011 and later overrule this. */ + #if __cplusplus < 201103 + #ifndef bool + #error "bool is not defined" + #endif + #ifndef false + #error "false is not defined" + #endif + #ifndef true + #error "true is not defined" + #endif + #endif + + /* If _Bool is available, repeat with it all the tests + above that used bool. */ + #ifdef HAVE__BOOL + struct sB { _Bool s: 1; _Bool t; } t; + + char q[(_Bool) 0.5 == true ? 1 : -1]; + char r[(_Bool) 0.0 == false ? 1 : -1]; + char u[sizeof (_Bool) > 0 ? 1 : -1]; + char v[sizeof t.t > 0 ? 1 : -1]; + + _Bool w[h]; + char x[sizeof m == h * sizeof m[0] ? 1 : -1]; + char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; + _Bool z = true; + _Bool *pz = &p; + #endif + +int +main (void) +{ + + bool ps = &s; + *pp |= p; + *pp |= ! p; + + #ifdef HAVE__BOOL + _Bool pt = &t; + *pz |= z; + *pz |= ! z; + #endif + + /* Refer to every declared value, so they cannot be + discarded as unused. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + + !l + !m + !n + !o + !p + !pp + !ps + #ifdef HAVE__BOOL + + !q + !r + !u + !v + !w + !x + !y + !z + !pt + #endif + ); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_header_stdbool_h=yes +else $as_nop + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +printf %s "checking for GNU libc compatible malloc... " >&6; } +if test ${ac_cv_func_malloc_0_nonnull+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + case "$host_os" in # (( + # Guess yes on platforms where we know the result. + *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ + | hpux* | solaris* | cygwin* | mingw* | msys* ) + ac_cv_func_malloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_malloc_0_nonnull=no ;; + esac +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +void *p = malloc (0); + int result = !p; + free (p); + return result; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO" +then : + ac_cv_func_malloc_0_nonnull=yes +else $as_nop + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes +then : + +printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h + +else $as_nop + printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS malloc.$ac_objext" + ;; +esac + + +printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h + +fi + + + +HAVE_OPENMP=0 + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C++ compiler" >&5 +printf %s "checking for OpenMP flag of C++ compiler... " >&6; } +if test ${ax_cv_cxx_openmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop + saveCXXFLAGS=$CXXFLAGS +ax_cv_cxx_openmp=unknown +# Flags to try: -fopenmp (gcc), -mp (SGI & PGI), +# -qopenmp (icc>=15), -openmp (icc), +# -xopenmp (Sun), -omp (Tru64), +# -qsmp=omp (AIX), +# none +ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none" +if test "x$OPENMP_CXXFLAGS" != x; then + ax_openmp_flags="$OPENMP_CXXFLAGS $ax_openmp_flags" +fi +for ax_openmp_flag in $ax_openmp_flags; do + case $ax_openmp_flag in + none) CXXFLAGS=$saveCXX ;; + *) CXXFLAGS="$saveCXXFLAGS $ax_openmp_flag" ;; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +static void +parallel_fill(int * data, int n) +{ + int i; +#pragma omp parallel for + for (i = 0; i < n; ++i) + data[i] = i; +} + +int +main() +{ + int arr[100000]; + omp_set_num_threads(2); + parallel_fill(arr, 100000); + return 0; +} + +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + ax_cv_cxx_openmp=$ax_openmp_flag; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +done +CXXFLAGS=$saveCXXFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 +printf "%s\n" "$ax_cv_cxx_openmp" >&6; } +if test "x$ax_cv_cxx_openmp" = "xunknown"; then + : +else + if test "x$ax_cv_cxx_openmp" != "xnone"; then + OPENMP_CXXFLAGS=$ax_cv_cxx_openmp + fi + +printf "%s\n" "#define HAVE_OPENMP 1" >>confdefs.h + +fi + +if test x$OPENMP_CXXFLAGS != x +then : + HAVE_OPENMP=1 + +fi +if test x$HAVE_OPENMP != x1 +then : + +else $as_nop + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" + LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" +fi + +ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : + +printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h + + +fi + +ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" +case $ac_cv_c_int16_t in #( + no|yes) ;; #( + *) + +printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h +;; +esac + +ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" +case $ac_cv_c_int32_t in #( + no|yes) ;; #( + *) + +printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h +;; +esac + +ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" +case $ac_cv_c_int64_t in #( + no|yes) ;; #( + *) + +printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h +;; +esac + +ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t" +case $ac_cv_c_int8_t in #( + no|yes) ;; #( + *) + +printf "%s\n" "#define int8_t $ac_cv_c_int8_t" >>confdefs.h +;; +esac + + + ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default +" +if test "x$ac_cv_type_pid_t" = xyes +then : + +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if defined _WIN64 && !defined __CYGWIN__ + LLP64 + #endif + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_pid_type='int' +else $as_nop + ac_pid_type='__int64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h + + +fi + + +ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes +then : + +else $as_nop + +printf "%s\n" "#define size_t unsigned int" >>confdefs.h + +fi + +ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" +if test "x$ac_cv_type_ssize_t" = xyes +then : + +else $as_nop + +printf "%s\n" "#define ssize_t int" >>confdefs.h + +fi + +ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" +case $ac_cv_c_uint16_t in #( + no|yes) ;; #( + *) + + +printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" +case $ac_cv_c_uint32_t in #( + no|yes) ;; #( + *) + +printf "%s\n" "#define _UINT32_T 1" >>confdefs.h + + +printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" +case $ac_cv_c_uint64_t in #( + no|yes) ;; #( + *) + +printf "%s\n" "#define _UINT64_T 1" >>confdefs.h + + +printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" +case $ac_cv_c_uint8_t in #( + no|yes) ;; #( + *) + +printf "%s\n" "#define _UINT8_T 1" >>confdefs.h + + +printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h +;; + esac + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 +printf %s "checking for long double with more range or precision than double... " >&6; } +if test ${ac_cv_type_long_double_wider+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + long double const a[] = + { + 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON, + LDBL_MIN, LDBL_MAX, LDBL_EPSILON + }; + long double + f (long double x) + { + return ((x + (unsigned long int) 10) * (-1 / x) + a[0] + + (x ? f (x) : 'c')); + } + +int +main (void) +{ +static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) + + (DBL_MANT_DIG < LDBL_MANT_DIG) + - (LDBL_MAX_EXP < DBL_MAX_EXP) + - (LDBL_MANT_DIG < DBL_MANT_DIG))) + && (int) LDBL_EPSILON == 0 + )]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_type_long_double_wider=yes +else $as_nop + ac_cv_type_long_double_wider=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 +printf "%s\n" "$ac_cv_type_long_double_wider" >&6; } + if test $ac_cv_type_long_double_wider = yes; then + +printf "%s\n" "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h + + fi + +HAVE_FLOAT128=0 + +if test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1 +then : + HAVE_FLOAT128=0 + +fi + +# +# NUMA +# + +# Check whether --enable-numa was given. +if test ${enable_numa+y} +then : + enableval=$enable_numa; enable_numa=no +else $as_nop + enable_numa=yes +fi + +HAVE_NUMA=0 + +if test x$enable_numa != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 +printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } +if test ${ac_cv_lib_numa_numa_node_of_cpu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnuma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +namespace conftest { + extern "C" int numa_node_of_cpu (); +} +int +main (void) +{ +return conftest::numa_node_of_cpu (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + ac_cv_lib_numa_numa_node_of_cpu=yes +else $as_nop + ac_cv_lib_numa_numa_node_of_cpu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 +printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } +if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes +then : + HAVE_NUMA=1 + + LIBS="$LIBS -lnuma" +fi + +fi + +# +# HWLOC +# + +# Check whether --enable-hwloc was given. +if test ${enable_hwloc+y} +then : + enableval=$enable_hwloc; enable_hwloc=no +else $as_nop + enable_hwloc=yes +fi + +HAVE_HWLOC=0 + +if test x$enable_hwloc != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc_topology_init in -lhwloc" >&5 +printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } +if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lhwloc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +namespace conftest { + extern "C" int hwloc_topology_init (); +} +int +main (void) +{ +return conftest::hwloc_topology_init (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + ac_cv_lib_hwloc_hwloc_topology_init=yes +else $as_nop + ac_cv_lib_hwloc_hwloc_topology_init=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 +printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } +if test "x$ac_cv_lib_hwloc_hwloc_topology_init" = xyes +then : + HAVE_HWLOC=1 + + LIBS="$LIBS -lhwloc" +fi + +fi + +# +# VMA +# + +# Check whether --enable-vma was given. +if test ${enable_vma+y} +then : + enableval=$enable_vma; enable_vma=yes +else $as_nop + enable_vma=no +fi + +HAVE_VMA=0 + +if test x$enable_vma != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom_zcopy in -lvma" >&5 +printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } +if test ${ac_cv_lib_vma_recvfrom_zcopy+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lvma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +namespace conftest { + extern "C" int recvfrom_zcopy (); +} +int +main (void) +{ +return conftest::recvfrom_zcopy (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + ac_cv_lib_vma_recvfrom_zcopy=yes +else $as_nop + ac_cv_lib_vma_recvfrom_zcopy=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 +printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes +then : + HAVE_VMA=1 + + LIBS="$LIBS -lvma" +fi + +fi + +# +# CUDA +# + +################################# +# NOTE # +# This needs to come after all # +# other compiler/library tests # +# since it changes LIB to # +# include CUDA-specific entries # +################################# + + + + +# Check whether --with-cuda_home was given. +if test ${with_cuda_home+y} +then : + withval=$with_cuda_home; +else $as_nop + with_cuda_home=/usr/local/cuda +fi + + CUDA_HOME=$with_cuda_home + + + # Check whether --enable-cuda was given. +if test ${enable_cuda+y} +then : + enableval=$enable_cuda; enable_cuda=no +else $as_nop + enable_cuda=yes +fi + + + HAVE_CUDA=0 + + CUDA_VERSION=0 + + GPU_MAX_ARCH=0 + + if test "$enable_cuda" != "no"; then + HAVE_CUDA=1 + + + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVCC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $NVCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="no" + ;; +esac +fi +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +printf "%s\n" "$NVCC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + # Extract the first word of "nvprune", so it can be a program name with args. +set dummy nvprune; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVPRUNE+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $NVPRUNE in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVPRUNE="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="no" + ;; +esac +fi +NVPRUNE=$ac_cv_path_NVPRUNE +if test -n "$NVPRUNE"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVPRUNE" >&5 +printf "%s\n" "$NVPRUNE" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + # Extract the first word of "cuobjdump", so it can be a program name with args. +set dummy cuobjdump; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CUOBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $CUOBJDUMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$CUDA_HOME/bin:$PATH" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CUOBJDUMP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="no" + ;; +esac +fi +CUOBJDUMP=$ac_cv_path_CUOBJDUMP +if test -n "$CUOBJDUMP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CUOBJDUMP" >&5 +printf "%s\n" "$CUOBJDUMP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + fi + + if test "$HAVE_CUDA" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 +printf %s "checking for a working CUDA installation... " >&6; } + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #include +int +main (void) +{ +cudaMalloc(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + +else $as_nop + HAVE_CUDA=0 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + if test "$HAVE_CUDA" = "1"; then + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart" + + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #include +int +main (void) +{ +cudaMalloc(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes - v$CUDA_VERSION" >&5 +printf "%s\n" "yes - v$CUDA_VERSION" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + HAVE_CUDA=0 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + HAVE_CUDA=0 + + fi + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + fi + + +# Check whether --with-nvcc_flags was given. +if test ${with_nvcc_flags+y} +then : + withval=$with_nvcc_flags; +else $as_nop + with_nvcc_flags='-O3 -Xcompiler "-Wall"' +fi + + NVCCFLAGS=$with_nvcc_flags + + + if test "$HAVE_CUDA" = "1"; then + CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" + CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" + NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" + LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" + fi + + +# Check whether --with-gpu_archs was given. +if test ${with_gpu_archs+y} +then : + withval=$with_gpu_archs; +else $as_nop + with_gpu_archs='auto' +fi + + if test "$HAVE_CUDA" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid CUDA architectures" >&5 +printf %s "checking for valid CUDA architectures... " >&6; } + ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_supported_flat=$( echo $ar_supported | xargs ) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found: $ar_supported_flat" >&5 +printf "%s\n" "found: $ar_supported_flat" >&6; } + + if test "$with_gpu_archs" = "auto"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CUDA architectures to target" >&5 +printf %s "checking which CUDA architectures to target... " >&6; } + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #include + #include + #include + #include +int +main (void) +{ + + std::set archs; + int major, minor, arch; + int deviceCount = 0; + cudaGetDeviceCount(&deviceCount); + if( deviceCount == 0 ) { + return 1; + } + std::ofstream fh; + fh.open("confarchs.out"); + for(int dev=0; dev 0 ) { + fh << " "; + } + fh << arch; + } + arch += minor; + if( archs.count(arch) == 0 ) { + archs.insert(arch); + fh << " " << arch; + } + } + fh.close(); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO" +then : + GPU_ARCHS=`cat confarchs.out` + + ar_supported=$( ${NVCC} -h | ${GREP} -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq ) + ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) + if test "$ar_valid" = ""; then + as_fn_error $? "failed to find any supported" "$LINENO" 5 + else + GPU_ARCHS=$ar_valid + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 +printf "%s\n" "$GPU_ARCHS" >&6; } + fi +else $as_nop + as_fn_error $? "failed to find any" "$LINENO" 5 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + else + GPU_ARCHS=$with_gpu_archs + + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for valid requested CUDA architectures" >&5 +printf %s "checking for valid requested CUDA architectures... " >&6; } + ar_requested=$( echo "$GPU_ARCHS" | wc -w ) + ar_valid=$( echo $GPU_ARCHS $ar_supported | xargs -n1 | sort | uniq -d | xargs ) + ar_found=$( echo $ar_valid | wc -w ) + if test "$ar_requested" = "$ar_found"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + as_fn_error $? "only '$ar_valid' are supported" "$LINENO" 5 + fi + + ar_max_valid=$(echo $ar_valid | ${SED} -e 's/.* //g;' ) + GPU_MAX_ARCH=$ar_max_valid + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 +printf %s "checking for Pascal-style CUDA managed memory... " >&6; } + cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) + if ! echo $cm_invalid | ${GREP} -q PRE; then + GPU_PASCAL_MANAGEDMEM=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + GPU_PASCAL_MANAGEDMEM=0 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + else + GPU_PASCAL_MANAGEDMEM=0 + + fi + + + +# Check whether --with-shared_mem was given. +if test ${with_shared_mem+y} +then : + withval=$with_shared_mem; +else $as_nop + with_shared_mem=16384 +fi + +GPU_SHAREDMEM=$with_shared_mem + +if test x$HAVE_CUDA = x0 +then : + GPU_SHAREDMEM=0 + +fi + +# +# Bifrost memory alignment +# + + +# Check whether --with-alignment was given. +if test ${with_alignment+y} +then : + withval=$with_alignment; +else $as_nop + with_alignment=4096 +fi + +ALIGNMENT=$with_alignment + + +# +# Bifrost proclog location +# + + + + + +# Check whether --with-logging_dir was given. +if test ${with_logging_dir+y} +then : + withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir + +else $as_nop + HAVE_TMPFS=/tmp + +fi + + + if test "$HAVE_TMPFS" = "/tmp"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 +printf %s "checking for /dev/shm... " >&6; } +if test ${ac_cv_file__dev_shm+y} +then : + printf %s "(cached) " >&6 +else $as_nop + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/dev/shm"; then + ac_cv_file__dev_shm=yes +else + ac_cv_file__dev_shm=no +fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 +printf "%s\n" "$ac_cv_file__dev_shm" >&6; } +if test "x$ac_cv_file__dev_shm" = xyes +then : + HAVE_TMPFS=/dev/shm/bifrost + +fi + + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 +printf %s "checking for /Volumes/RAMDisk... " >&6; } +if test ${ac_cv_file__Volumes_RAMDisk+y} +then : + printf %s "(cached) " >&6 +else $as_nop + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/Volumes/RAMDisk"; then + ac_cv_file__Volumes_RAMDisk=yes +else + ac_cv_file__Volumes_RAMDisk=no +fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 +printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } +if test "x$ac_cv_file__Volumes_RAMDisk" = xyes +then : + HAVE_TMPFS=/Volumes/RAMDisk/bifrost + +fi + + fi + + if test "$HAVE_TMPFS" = "/tmp"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 +printf %s "checking for /tmp... " >&6; } +if test ${ac_cv_file__tmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/tmp"; then + ac_cv_file__tmp=yes +else + ac_cv_file__tmp=no +fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 +printf "%s\n" "$ac_cv_file__tmp" >&6; } +if test "x$ac_cv_file__tmp" = xyes +then : + HAVE_TMPFS=/tmp + +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 +printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} + HAVE_TMPFS=/tmp/bifrost + + fi + + +# +# Bifrost Features +# + +# Check whether --enable-debug was given. +if test ${enable_debug+y} +then : + enableval=$enable_debug; enable_debug=yes +else $as_nop + enable_debug=no +fi + +HAVE_DEBUG=0 + +if test x$enable_debug != xno +then : + HAVE_DEBUG=1 + + CXXFLAGS="$CXXFLAGS -g" + NVCCFLAGS="$NVCCFLAGS -g" +fi + +# Check whether --enable-trace was given. +if test ${enable_trace+y} +then : + enableval=$enable_trace; enable_trace=yes +else $as_nop + enable_trace=no +fi + +HAVE_TRACE=0 + +if test x$enable_trace != xno +then : + HAVE_TRACE=1 + +fi + + + + # Check whether --enable-native_arch was given. +if test ${enable_native_arch+y} +then : + enableval=$enable_native_arch; enable_native_arch=no +else $as_nop + enable_native_arch=yes +fi + + + if test "$enable_native_arch" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler accepts '-march=native'" >&5 +printf %s "checking if the compiler accepts '-march=native'... " >&6; } + + CXXFLAGS_temp="$CXXFLAGS -march=native" + + ac_compile='$CXX -c $CXXFLAGS_temp conftest.$ac_ext >&5' + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + int i = 5; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + CXXFLAGS="$CXXFLAGS -march=native" + NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + enable_native_arch=no + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + + +# Check whether --enable-cuda_debug was given. +if test ${enable_cuda_debug+y} +then : + enableval=$enable_cuda_debug; enable_cuda_debug=yes +else $as_nop + enable_cuda_debug=no +fi + +HAVE_CUDA_DEBUG=0 + +if test x$enable_cuda_debug != xno +then : + HAVE_CUDA_DEBUG=1 + + NVCCFLAGS="$NVCCFLAGS -G" +fi + +# Check whether --enable-map_cache was given. +if test ${enable_map_cache+y} +then : + enableval=$enable_map_cache; enable_map_cache=no +else $as_nop + enable_map_cache=yes +fi + +if test x$enable_map_cache != xno +then : + CPPFLAGS="$CPPFLAGS -DBF_MAPCACHE_ENABLED=1" +fi + +# +# Python +# + +# Check whether --enable-python was given. +if test ${enable_python+y} +then : + enableval=$enable_python; enable_python=no +else $as_nop + enable_python=yes +fi + +HAVE_PYTHON=0 + +if test x$enable_python != xno +then : + + + + + + + + + + + if test -z "$PYTHON" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +printf %s "checking whether python executable path has been provided... " >&6; } + +# Check whether --with-python was given. +if test ${with_python+y} +then : + withval=$with_python; + if test "$withval" != yes && test "$withval" != no +then : + + PYTHON="$withval" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } + +else $as_nop + + PYTHON="" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : + + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="no" + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + +fi + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="no" + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +printf "%s\n" "$PYTHON" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + + +fi + + + + + + + if test x${PYTHON} != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +printf %s "checking whether $PYTHON as ctypesgen... " >&6; } + if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_PYTHON=1 + +fi +fi +fi + +# Check whether --with-pybuild_flags was given. +if test ${with_pybuild_flags+y} +then : + withval=$with_pybuild_flags; +fi + +PYBUILDFLAGS=$with_pybuild_flags + + + +# Check whether --with-pyinstall_flags was given. +if test ${with_pyinstall_flags+y} +then : + withval=$with_pyinstall_flags; +fi + +PYINSTALLFLAGS=$with_pyinstall_flags + + +# +# Docker +# + + + + + + + + + + + + if test -z "$DOCKER" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether docker executable path has been provided" >&5 +printf %s "checking whether docker executable path has been provided... " >&6; } + +# Check whether --with-docker was given. +if test ${with_docker+y} +then : + withval=$with_docker; + if test "$withval" != yes && test "$withval" != no +then : + + DOCKER="$withval" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } + +else $as_nop + + DOCKER="" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : + + # Extract the first word of "docker", so it can be a program name with args. +set dummy docker; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DOCKER+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DOCKER in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOCKER" && ac_cv_path_DOCKER="no" + ;; +esac +fi +DOCKER=$ac_cv_path_DOCKER +if test -n "$DOCKER"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + +fi + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + # Extract the first word of "docker", so it can be a program name with args. +set dummy docker; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DOCKER+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DOCKER in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DOCKER="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOCKER" && ac_cv_path_DOCKER="no" + ;; +esac +fi +DOCKER=$ac_cv_path_DOCKER +if test -n "$DOCKER"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 +printf "%s\n" "$DOCKER" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + + +fi + + + + + + +if test x${DOCKER} != xno +then : + HAVE_DOCKER=1 + +fi + +# +# Documentation +# + + + + + + + + + + + + +# Files: +DX_PROJECT=bifrost + +DX_CONFIG='$(srcdir)/Doxyfile' + +DX_DOCDIR='doxygen-doc' + + +# Environment variables used inside doxygen.cfg: +DX_ENV="$DX_ENV SRCDIR='$srcdir'" +SRCDIR=$srcdir + +DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'" +PROJECT=$DX_PROJECT + +DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" + + +# Doxygen itself: + + + + # Check whether --enable-doxygen-doc was given. +if test ${enable_doxygen_doc+y} +then : + enableval=$enable_doxygen_doc; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_doc=1 + + +;; #( +n|N|no|No|NO) + DX_FLAG_doc=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-doc" "$LINENO" 5 +;; +esac + +else $as_nop + +DX_FLAG_doc=1 + + + +fi + +if test "$DX_FLAG_doc" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. +set dummy ${ac_tool_prefix}doxygen; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DOXYGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DX_DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN +if test -n "$DX_DOXYGEN"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +printf "%s\n" "$DX_DOXYGEN" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DOXYGEN"; then + ac_pt_DX_DOXYGEN=$DX_DOXYGEN + # Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN +if test -n "$ac_pt_DX_DOXYGEN"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_DX_DOXYGEN" = x; then + DX_DOXYGEN="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DOXYGEN=$ac_pt_DX_DOXYGEN + fi +else + DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN" +fi + +if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + DX_FLAG_doc=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. +set dummy ${ac_tool_prefix}perl; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_PERL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DX_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_PERL=$ac_cv_path_DX_PERL +if test -n "$DX_PERL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +printf "%s\n" "$DX_PERL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_PERL"; then + ac_pt_DX_PERL=$DX_PERL + # Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_PERL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL +if test -n "$ac_pt_DX_PERL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +printf "%s\n" "$ac_pt_DX_PERL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_DX_PERL" = x; then + DX_PERL="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_PERL=$ac_pt_DX_PERL + fi +else + DX_PERL="$ac_cv_path_DX_PERL" +fi + +if test "$DX_FLAG_doc$DX_PERL" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + DX_FLAG_doc=0 + +fi + + : +fi +if test "$DX_FLAG_doc" = 1; then + DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'" +PERL_PATH=$DX_PERL + + : +else + + : +fi + + +# Dot for graphics: + + + + # Check whether --enable-doxygen-dot was given. +if test ${enable_doxygen_dot+y} +then : + enableval=$enable_doxygen_dot; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_dot=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-dot requires doxygen-doc" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_dot=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-dot" "$LINENO" 5 +;; +esac + +else $as_nop + +DX_FLAG_dot=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0 + + + +fi + +if test "$DX_FLAG_dot" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. +set dummy ${ac_tool_prefix}dot; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DOT+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DX_DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DOT=$ac_cv_path_DX_DOT +if test -n "$DX_DOT"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +printf "%s\n" "$DX_DOT" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DOT"; then + ac_pt_DX_DOT=$DX_DOT + # Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DOT+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT +if test -n "$ac_pt_DX_DOT"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +printf "%s\n" "$ac_pt_DX_DOT" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_DX_DOT" = x; then + DX_DOT="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DOT=$ac_pt_DX_DOT + fi +else + DX_DOT="$ac_cv_path_DX_DOT" +fi + +if test "$DX_FLAG_dot$DX_DOT" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + DX_FLAG_dot=0 + +fi + + : +fi +if test "$DX_FLAG_dot" = 1; then + DX_ENV="$DX_ENV HAVE_DOT='YES'" +HAVE_DOT=YES + + DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'" +DOT_PATH=`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'` + + : +else + DX_ENV="$DX_ENV HAVE_DOT='NO'" +HAVE_DOT=NO + + : +fi + + +# Man pages generation: + + + + # Check whether --enable-doxygen-man was given. +if test ${enable_doxygen_man+y} +then : + enableval=$enable_doxygen_man; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_man=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-man requires doxygen-doc" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_man=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-man" "$LINENO" 5 +;; +esac + +else $as_nop + +DX_FLAG_man=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 + + + +fi + +if test "$DX_FLAG_man" = 1; then + + : +fi +if test "$DX_FLAG_man" = 1; then + DX_ENV="$DX_ENV GENERATE_MAN='YES'" +GENERATE_MAN=YES + + : +else + DX_ENV="$DX_ENV GENERATE_MAN='NO'" +GENERATE_MAN=NO + + : +fi + + +# RTF file generation: + + + + # Check whether --enable-doxygen-rtf was given. +if test ${enable_doxygen_rtf+y} +then : + enableval=$enable_doxygen_rtf; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_rtf=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-rtf requires doxygen-doc" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_rtf=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-rtf" "$LINENO" 5 +;; +esac + +else $as_nop + +DX_FLAG_rtf=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0 + + + +fi + +if test "$DX_FLAG_rtf" = 1; then + + : +fi +if test "$DX_FLAG_rtf" = 1; then + DX_ENV="$DX_ENV GENERATE_RTF='YES'" +GENERATE_RTF=YES + + : +else + DX_ENV="$DX_ENV GENERATE_RTF='NO'" +GENERATE_RTF=NO + + : +fi + + +# XML file generation: + + + + # Check whether --enable-doxygen-xml was given. +if test ${enable_doxygen_xml+y} +then : + enableval=$enable_doxygen_xml; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_xml=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-xml requires doxygen-doc" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_xml=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-xml" "$LINENO" 5 +;; +esac + +else $as_nop + +DX_FLAG_xml=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0 + + + +fi + +if test "$DX_FLAG_xml" = 1; then + + : +fi +if test "$DX_FLAG_xml" = 1; then + DX_ENV="$DX_ENV GENERATE_XML='YES'" +GENERATE_XML=YES + + : +else + DX_ENV="$DX_ENV GENERATE_XML='NO'" +GENERATE_XML=NO + + : +fi + + +# (Compressed) HTML help generation: + + + + # Check whether --enable-doxygen-chm was given. +if test ${enable_doxygen_chm+y} +then : + enableval=$enable_doxygen_chm; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_chm=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-chm requires doxygen-doc" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_chm=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-chm" "$LINENO" 5 +;; +esac + +else $as_nop + +DX_FLAG_chm=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0 + + + +fi + +if test "$DX_FLAG_chm" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. +set dummy ${ac_tool_prefix}hhc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_HHC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DX_HHC in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_HHC=$ac_cv_path_DX_HHC +if test -n "$DX_HHC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +printf "%s\n" "$DX_HHC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_HHC"; then + ac_pt_DX_HHC=$DX_HHC + # Extract the first word of "hhc", so it can be a program name with args. +set dummy hhc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_HHC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_HHC in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC +if test -n "$ac_pt_DX_HHC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +printf "%s\n" "$ac_pt_DX_HHC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_DX_HHC" = x; then + DX_HHC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_HHC=$ac_pt_DX_HHC + fi +else + DX_HHC="$ac_cv_path_DX_HHC" +fi + +if test "$DX_FLAG_chm$DX_HHC" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + DX_FLAG_chm=0 + +fi + + : +fi +if test "$DX_FLAG_chm" = 1; then + DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'" +HHC_PATH=$DX_HHC + + DX_ENV="$DX_ENV GENERATE_HTML='YES'" +GENERATE_HTML=YES + + DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'" +GENERATE_HTMLHELP=YES + + : +else + DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'" +GENERATE_HTMLHELP=NO + + : +fi + + +# Separate CHI file generation. + + + + # Check whether --enable-doxygen-chi was given. +if test ${enable_doxygen_chi+y} +then : + enableval=$enable_doxygen_chi; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_chi=1 + + +test "$DX_FLAG_chm" = "1" \ +|| as_fn_error $? "doxygen-chi requires doxygen-chm" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_chi=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-chi" "$LINENO" 5 +;; +esac + +else $as_nop + +DX_FLAG_chi=0 + + +test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0 + + + +fi + +if test "$DX_FLAG_chi" = 1; then + + : +fi +if test "$DX_FLAG_chi" = 1; then + DX_ENV="$DX_ENV GENERATE_CHI='YES'" +GENERATE_CHI=YES + + : +else + DX_ENV="$DX_ENV GENERATE_CHI='NO'" +GENERATE_CHI=NO + + : +fi + + +# Plain HTML pages generation: + + + + # Check whether --enable-doxygen-html was given. +if test ${enable_doxygen_html+y} +then : + enableval=$enable_doxygen_html; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_html=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-html requires doxygen-doc" "$LINENO" 5 + +test "$DX_FLAG_chm" = "0" \ +|| as_fn_error $? "doxygen-html contradicts doxygen-chm" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_html=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-html" "$LINENO" 5 +;; +esac + +else $as_nop + +DX_FLAG_html=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0 + + +test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0 + + + +fi + +if test "$DX_FLAG_html" = 1; then + + : +fi +if test "$DX_FLAG_html" = 1; then + DX_ENV="$DX_ENV GENERATE_HTML='YES'" +GENERATE_HTML=YES + + : +else + test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'" +GENERATE_HTML=NO + + : +fi + + +# PostScript file generation: + + + + # Check whether --enable-doxygen-ps was given. +if test ${enable_doxygen_ps+y} +then : + enableval=$enable_doxygen_ps; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_ps=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-ps requires doxygen-doc" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_ps=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-ps" "$LINENO" 5 +;; +esac + +else $as_nop + +DX_FLAG_ps=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0 + + + +fi + +if test "$DX_FLAG_ps" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. +set dummy ${ac_tool_prefix}latex; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_LATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DX_LATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_LATEX=$ac_cv_path_DX_LATEX +if test -n "$DX_LATEX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +printf "%s\n" "$DX_LATEX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_LATEX"; then + ac_pt_DX_LATEX=$DX_LATEX + # Extract the first word of "latex", so it can be a program name with args. +set dummy latex; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_LATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_LATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX +if test -n "$ac_pt_DX_LATEX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +printf "%s\n" "$ac_pt_DX_LATEX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_DX_LATEX" = x; then + DX_LATEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_LATEX=$ac_pt_DX_LATEX + fi +else + DX_LATEX="$ac_cv_path_DX_LATEX" +fi + +if test "$DX_FLAG_ps$DX_LATEX" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. +set dummy ${ac_tool_prefix}makeindex; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX +if test -n "$DX_MAKEINDEX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +printf "%s\n" "$DX_MAKEINDEX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_MAKEINDEX"; then + ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX + # Extract the first word of "makeindex", so it can be a program name with args. +set dummy makeindex; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX +if test -n "$ac_pt_DX_MAKEINDEX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_DX_MAKEINDEX" = x; then + DX_MAKEINDEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX + fi +else + DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" +fi + +if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. +set dummy ${ac_tool_prefix}dvips; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_DVIPS+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DX_DVIPS in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DVIPS=$ac_cv_path_DX_DVIPS +if test -n "$DX_DVIPS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +printf "%s\n" "$DX_DVIPS" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DVIPS"; then + ac_pt_DX_DVIPS=$DX_DVIPS + # Extract the first word of "dvips", so it can be a program name with args. +set dummy dvips; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_DVIPS+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_DVIPS in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS +if test -n "$ac_pt_DX_DVIPS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +printf "%s\n" "$ac_pt_DX_DVIPS" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_DX_DVIPS" = x; then + DX_DVIPS="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DVIPS=$ac_pt_DX_DVIPS + fi +else + DX_DVIPS="$ac_cv_path_DX_DVIPS" +fi + +if test "$DX_FLAG_ps$DX_DVIPS" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. +set dummy ${ac_tool_prefix}egrep; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_EGREP=$ac_cv_path_DX_EGREP +if test -n "$DX_EGREP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +printf "%s\n" "$DX_EGREP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_EGREP"; then + ac_pt_DX_EGREP=$DX_EGREP + # Extract the first word of "egrep", so it can be a program name with args. +set dummy egrep; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP +if test -n "$ac_pt_DX_EGREP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +printf "%s\n" "$ac_pt_DX_EGREP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_DX_EGREP" = x; then + DX_EGREP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_EGREP=$ac_pt_DX_EGREP + fi +else + DX_EGREP="$ac_cv_path_DX_EGREP" +fi + +if test "$DX_FLAG_ps$DX_EGREP" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + : +fi +if test "$DX_FLAG_ps" = 1; then + + : +else + + : +fi + + +# PDF file generation: + + + + # Check whether --enable-doxygen-pdf was given. +if test ${enable_doxygen_pdf+y} +then : + enableval=$enable_doxygen_pdf; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_pdf=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-pdf requires doxygen-doc" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_pdf=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-pdf" "$LINENO" 5 +;; +esac + +else $as_nop + +DX_FLAG_pdf=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0 + -if test x$HAVE_CUDA = x0 + +fi + +if test "$DX_FLAG_pdf" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. +set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_PDFLATEX+y} then : - GPU_SHAREDMEM=0 + printf %s "(cached) " >&6 +else $as_nop + case $DX_PDFLATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX +if test -n "$DX_PDFLATEX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +printf "%s\n" "$DX_PDFLATEX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_PDFLATEX"; then + ac_pt_DX_PDFLATEX=$DX_PDFLATEX + # Extract the first word of "pdflatex", so it can be a program name with args. +set dummy pdflatex; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_PDFLATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX +if test -n "$ac_pt_DX_PDFLATEX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_DX_PDFLATEX" = x; then + DX_PDFLATEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_PDFLATEX=$ac_pt_DX_PDFLATEX + fi +else + DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX" +fi + +if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. +set dummy ${ac_tool_prefix}makeindex; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX +if test -n "$DX_MAKEINDEX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +printf "%s\n" "$DX_MAKEINDEX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_MAKEINDEX"; then + ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX + # Extract the first word of "makeindex", so it can be a program name with args. +set dummy makeindex; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX +if test -n "$ac_pt_DX_MAKEINDEX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_DX_MAKEINDEX" = x; then + DX_MAKEINDEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX + fi +else + DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" +fi + +if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. +set dummy ${ac_tool_prefix}egrep; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_EGREP=$ac_cv_path_DX_EGREP +if test -n "$DX_EGREP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +printf "%s\n" "$DX_EGREP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_EGREP"; then + ac_pt_DX_EGREP=$DX_EGREP + # Extract the first word of "egrep", so it can be a program name with args. +set dummy egrep; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_DX_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP +if test -n "$ac_pt_DX_EGREP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +printf "%s\n" "$ac_pt_DX_EGREP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + if test "x$ac_pt_DX_EGREP" = x; then + DX_EGREP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_EGREP=$ac_pt_DX_EGREP + fi +else + DX_EGREP="$ac_cv_path_DX_EGREP" fi -# -# Bifrost memory alignment -# - +if test "$DX_FLAG_pdf$DX_EGREP" = 1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 -# Check whether --with-alignment was given. -if test ${with_alignment+y} -then : - withval=$with_alignment; -else $as_nop - with_alignment=4096 fi -ALIGNMENT=$with_alignment + : +fi +if test "$DX_FLAG_pdf" = 1; then + : +else -# -# Bifrost proclog location -# + : +fi +# LaTeX generation for PS and/or PDF: +if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then + DX_ENV="$DX_ENV GENERATE_LATEX='YES'" +GENERATE_LATEX=YES +else + DX_ENV="$DX_ENV GENERATE_LATEX='NO'" +GENERATE_LATEX=NO +fi -# Check whether --with-logging_dir was given. -if test ${with_logging_dir+y} -then : - withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir +# Paper size for PS and/or PDF: -else $as_nop - HAVE_TMPFS=/tmp +case "$DOXYGEN_PAPER_SIZE" in +#( +"") + DOXYGEN_PAPER_SIZE="" -fi +;; #( +a4wide|a4|letter|legal|executive) + DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" +PAPER_SIZE=$DOXYGEN_PAPER_SIZE +;; #( +*) + as_fn_error $? "unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" "$LINENO" 5 +;; +esac - if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/shm" >&5 -printf %s "checking for /dev/shm... " >&6; } -if test ${ac_cv_file__dev_shm+y} -then : - printf %s "(cached) " >&6 -else $as_nop - test "$cross_compiling" = yes && - as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 -if test -r "/dev/shm"; then - ac_cv_file__dev_shm=yes -else - ac_cv_file__dev_shm=no -fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 -printf "%s\n" "$ac_cv_file__dev_shm" >&6; } -if test "x$ac_cv_file__dev_shm" = xyes +# Rules: +if test $DX_FLAG_html -eq 1 then : - HAVE_TMPFS=/dev/shm/bifrost - -fi + DX_SNIPPET_html="## ------------------------------- ## +## Rules specific for HTML output. ## +## ------------------------------- ## - fi +DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ + \$(DX_DOCDIR)/html - if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /Volumes/RAMDisk" >&5 -printf %s "checking for /Volumes/RAMDisk... " >&6; } -if test ${ac_cv_file__Volumes_RAMDisk+y} -then : - printf %s "(cached) " >&6 +" else $as_nop - test "$cross_compiling" = yes && - as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 -if test -r "/Volumes/RAMDisk"; then - ac_cv_file__Volumes_RAMDisk=yes -else - ac_cv_file__Volumes_RAMDisk=no -fi + DX_SNIPPET_html="" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 -printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } -if test "x$ac_cv_file__Volumes_RAMDisk" = xyes +if test $DX_FLAG_chi -eq 1 then : - HAVE_TMPFS=/Volumes/RAMDisk/bifrost - + DX_SNIPPET_chi=" +DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ + \$(DX_DOCDIR)/\$(PACKAGE).chi" +else $as_nop + DX_SNIPPET_chi="" fi +if test $DX_FLAG_chm -eq 1 +then : + DX_SNIPPET_chm="## ------------------------------ ## +## Rules specific for CHM output. ## +## ------------------------------ ## - fi +DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ + \$(DX_DOCDIR)/chm\ +${DX_SNIPPET_chi} - if test "$HAVE_TMPFS" = "/tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /tmp" >&5 -printf %s "checking for /tmp... " >&6; } -if test ${ac_cv_file__tmp+y} -then : - printf %s "(cached) " >&6 +" else $as_nop - test "$cross_compiling" = yes && - as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 -if test -r "/tmp"; then - ac_cv_file__tmp=yes -else - ac_cv_file__tmp=no -fi + DX_SNIPPET_chm="" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 -printf "%s\n" "$ac_cv_file__tmp" >&6; } -if test "x$ac_cv_file__tmp" = xyes +if test $DX_FLAG_man -eq 1 then : - HAVE_TMPFS=/tmp - -fi + DX_SNIPPET_man="## ------------------------------ ## +## Rules specific for MAN output. ## +## ------------------------------ ## - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $HAVE_TMPFS may have performance problems for logging" >&5 -printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for logging" >&2;} - HAVE_TMPFS=/tmp/bifrost - - fi - - -# -# Bifrost Features -# +DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ + \$(DX_DOCDIR)/man -# Check whether --enable-debug was given. -if test ${enable_debug+y} -then : - enableval=$enable_debug; enable_debug=yes +" else $as_nop - enable_debug=no + DX_SNIPPET_man="" fi - -HAVE_DEBUG=0 - -if test x$enable_debug != xno +if test $DX_FLAG_rtf -eq 1 then : - HAVE_DEBUG=1 + DX_SNIPPET_rtf="## ------------------------------ ## +## Rules specific for RTF output. ## +## ------------------------------ ## - CXXFLAGS="$CXXFLAGS -g" - NVCCFLAGS="$NVCCFLAGS -g" -fi +DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ + \$(DX_DOCDIR)/rtf -# Check whether --enable-trace was given. -if test ${enable_trace+y} -then : - enableval=$enable_trace; enable_trace=yes +" else $as_nop - enable_trace=no + DX_SNIPPET_rtf="" fi - -HAVE_TRACE=0 - -if test x$enable_trace != xno +if test $DX_FLAG_xml -eq 1 then : - HAVE_TRACE=1 - -fi - + DX_SNIPPET_xml="## ------------------------------ ## +## Rules specific for XML output. ## +## ------------------------------ ## +DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ + \$(DX_DOCDIR)/xml - # Check whether --enable-native_arch was given. -if test ${enable_native_arch+y} -then : - enableval=$enable_native_arch; enable_native_arch=no +" else $as_nop - enable_native_arch=yes + DX_SNIPPET_xml="" fi +if test $DX_FLAG_ps -eq 1 +then : + DX_SNIPPET_ps="## ----------------------------- ## +## Rules specific for PS output. ## +## ----------------------------- ## +DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps\\ + \$(DX_DOCDIR)/\$(PACKAGE).ps - if test "$enable_native_arch" = "yes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler accepts '-march=native'" >&5 -printf %s "checking if the compiler accepts '-march=native'... " >&6; } - - CXXFLAGS_temp="$CXXFLAGS -march=native" - - ac_compile='$CXX -c $CXXFLAGS_temp conftest.$ac_ext >&5' - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - +DX_PS_GOAL = doxygen-ps +doxygen-ps: \$(DX_CLEAN_PS) -int -main (void) -{ +\$(DX_DOCDIR)/\$(PACKAGE).ps: \$(DX_DOCDIR)/\$(PACKAGE).tag + \$(DX_V_LATEX)cd \$(DX_DOCDIR)/latex; \\ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ + \$(DX_LATEX) refman.tex; \\ + \$(DX_MAKEINDEX) refman.idx; \\ + \$(DX_LATEX) refman.tex; \\ + countdown=5; \\ + while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ + refman.log > /dev/null 2>&1 \\ + && test \$\$countdown -gt 0; do \\ + \$(DX_LATEX) refman.tex; \\ + countdown=\`expr \$\$countdown - 1\`; \\ + done; \\ + \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi - int i = 5; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - CXXFLAGS="$CXXFLAGS -march=native" - NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +" else $as_nop - enable_native_arch=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + DX_SNIPPET_ps="" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - fi - - -# Check whether --enable-cuda_debug was given. -if test ${enable_cuda_debug+y} +if test $DX_FLAG_pdf -eq 1 then : - enableval=$enable_cuda_debug; enable_cuda_debug=yes -else $as_nop - enable_cuda_debug=no -fi + DX_SNIPPET_pdf="## ------------------------------ ## +## Rules specific for PDF output. ## +## ------------------------------ ## -HAVE_CUDA_DEBUG=0 +DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf\\ + \$(DX_DOCDIR)/\$(PACKAGE).pdf -if test x$enable_cuda_debug != xno -then : - HAVE_CUDA_DEBUG=1 +DX_PDF_GOAL = doxygen-pdf - NVCCFLAGS="$NVCCFLAGS -G" -fi +doxygen-pdf: \$(DX_CLEAN_PDF) -# Check whether --enable-map_cache was given. -if test ${enable_map_cache+y} -then : - enableval=$enable_map_cache; enable_map_cache=no +\$(DX_DOCDIR)/\$(PACKAGE).pdf: \$(DX_DOCDIR)/\$(PACKAGE).tag + \$(DX_V_LATEX)cd \$(DX_DOCDIR)/latex; \\ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ + \$(DX_PDFLATEX) refman.tex; \\ + \$(DX_MAKEINDEX) refman.idx; \\ + \$(DX_PDFLATEX) refman.tex; \\ + countdown=5; \\ + while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ + refman.log > /dev/null 2>&1 \\ + && test \$\$countdown -gt 0; do \\ + \$(DX_PDFLATEX) refman.tex; \\ + countdown=\`expr \$\$countdown - 1\`; \\ + done; \\ + mv refman.pdf ../\$(PACKAGE).pdf + +" else $as_nop - enable_map_cache=yes + DX_SNIPPET_pdf="" fi - -if test x$enable_map_cache != xno +if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 then : - CPPFLAGS="$CPPFLAGS -DBF_MAPCACHE_ENABLED=1" -fi - -# -# Python -# + DX_SNIPPET_latex="## ------------------------------------------------- ## +## Rules specific for LaTeX (shared for PS and PDF). ## +## ------------------------------------------------- ## -# Check whether --enable-python was given. -if test ${enable_python+y} -then : - enableval=$enable_python; enable_python=no -else $as_nop - enable_python=yes -fi +DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) +_DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) +_DX_v_LATEX_0 = @echo \" LATEX \" \$@; -HAVE_PYTHON=0 +DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ + \$(DX_DOCDIR)/latex -if test x$enable_python != xno -then : - AX_WITH_PROG(PYTHON, python, no, $PATH) - if test x${PYTHON} != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 -printf %s "checking whether $PYTHON as ctypesgen... " >&6; } - if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 -printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} +" else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - HAVE_PYTHON=1 - -fi -fi + DX_SNIPPET_latex="" fi -# Check whether --with-pybuild_flags was given. -if test ${with_pybuild_flags+y} +if test $DX_FLAG_doc -eq 1 then : - withval=$with_pybuild_flags; -fi - -PYBUILDFLAGS=$with_pybuild_flags + DX_SNIPPET_doc="## --------------------------------- ## +## Format-independent Doxygen rules. ## +## --------------------------------- ## +${DX_SNIPPET_html}\ +${DX_SNIPPET_chm}\ +${DX_SNIPPET_man}\ +${DX_SNIPPET_rtf}\ +${DX_SNIPPET_xml}\ +${DX_SNIPPET_ps}\ +${DX_SNIPPET_pdf}\ +${DX_SNIPPET_latex}\ +DX_V_DXGEN = \$(_DX_v_DXGEN_\$(V)) +_DX_v_DXGEN_ = \$(_DX_v_DXGEN_\$(AM_DEFAULT_VERBOSITY)) +_DX_v_DXGEN_0 = @echo \" DXGEN \" \$<; +.PHONY: doxygen-run doxygen-doc \$(DX_PS_GOAL) \$(DX_PDF_GOAL) -# Check whether --with-pyinstall_flags was given. -if test ${with_pyinstall_flags+y} -then : - withval=$with_pyinstall_flags; -fi - -PYINSTALLFLAGS=$with_pyinstall_flags +.INTERMEDIATE: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) +doxygen-run: \$(DX_DOCDIR)/\$(PACKAGE).tag -# -# Docker -# +doxygen-doc: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) -AX_WITH_PROG(DOCKER, docker, no, $PATH) -if test x${DOCKER} != xno -then : - HAVE_DOCKER=1 +\$(DX_DOCDIR)/\$(PACKAGE).tag: \$(DX_CONFIG) \$(pkginclude_HEADERS) + \$(A""M_V_at)rm -rf \$(DX_DOCDIR) + \$(DX_V_DXGEN)\$(DX_ENV) DOCDIR=\$(DX_DOCDIR) \$(DX_DOXYGEN) \$(DX_CONFIG) + \$(A""M_V_at)echo Timestamp >\$@ +DX_CLEANFILES = \\ + \$(DX_DOCDIR)/doxygen_sqlite3.db \\ + \$(DX_DOCDIR)/\$(PACKAGE).tag \\ + -r \\ + \$(DX_CLEAN_HTML) \\ + \$(DX_CLEAN_CHM) \\ + \$(DX_CLEAN_CHI) \\ + \$(DX_CLEAN_MAN) \\ + \$(DX_CLEAN_RTF) \\ + \$(DX_CLEAN_XML) \\ + \$(DX_CLEAN_PS) \\ + \$(DX_CLEAN_PDF) \\ + \$(DX_CLEAN_LATEX)" +else $as_nop + DX_SNIPPET_doc="" fi +DX_RULES="${DX_SNIPPET_doc}" -# -# Documentation -# -DX_DOT_FEATURE(OFF) -DX_HTML_FEATURE(ON) -DX_CHM_FEATURE(OFF) -DX_CHI_FEATURE(OFF) -DX_MAN_FEATURE(ON) -DX_RTF_FEATURE(OFF) -DX_XML_FEATURE(OFF) -DX_PDF_FEATURE(ON) -DX_PS_FEATURE(ON) -DX_INIT_DOXYGEN(bifrost) +#For debugging: +#echo DX_FLAG_doc=$DX_FLAG_doc +#echo DX_FLAG_dot=$DX_FLAG_dot +#echo DX_FLAG_man=$DX_FLAG_man +#echo DX_FLAG_html=$DX_FLAG_html +#echo DX_FLAG_chm=$DX_FLAG_chm +#echo DX_FLAG_chi=$DX_FLAG_chi +#echo DX_FLAG_rtf=$DX_FLAG_rtf +#echo DX_FLAG_xml=$DX_FLAG_xml +#echo DX_FLAG_pdf=$DX_FLAG_pdf +#echo DX_FLAG_ps=$DX_FLAG_ps +#echo DX_ENV=$DX_ENV + # # Version splitting @@ -21296,6 +24816,11 @@ if test x$HAVE_FLOAT128 != x0 then : OPTIONS="$OPTIONS float128" +fi +if test x$enable_map_cache != xno +then : + OPTIONS="$OPTIONS map_cache" + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: options:$OPTIONS" >&5 printf "%s\n" "$as_me: options:$OPTIONS" >&6;} diff --git a/configure.ac b/configure.ac index 73989826a..c2ea9d4d6 100644 --- a/configure.ac +++ b/configure.ac @@ -351,6 +351,8 @@ AS_IF([test x$enable_native_arch != xno], [AC_SUBST([OPTIONS], ["$OPTIONS native"])]) AS_IF([test x$HAVE_FLOAT128 != x0], [AC_SUBST([OPTIONS], ["$OPTIONS float128"])]) +AS_IF([test x$enable_map_cache != xno], + [AC_SUBST([OPTIONS], ["$OPTIONS map_cache"])]) AC_MSG_NOTICE(options:$OPTIONS) echo "" From 550f9dc5625c0da81c8e2cb2a46191bfbc8fc9b2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 14:49:15 -0600 Subject: [PATCH 0425/1155] Move from CPPFLAGS to config.h for map cache control. --- configure.ac | 3 ++- src/bifrost/config.h.in | 1 + src/map.cpp | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index c2ea9d4d6..85894fc09 100644 --- a/configure.ac +++ b/configure.ac @@ -211,8 +211,9 @@ AC_ARG_ENABLE([map_cache], [disable caching bifrost.map kernels (default=no)])], [enable_map_cache=no], [enable_map_cache=yes]) +AC_SUBST([HAVE_MAP_CACHE], [0]) AS_IF([test x$enable_map_cache != xno], - [CPPFLAGS="$CPPFLAGS -DBF_MAPCACHE_ENABLED=1"]) + [AC_SUBST([HAVE_MAP_CACHE], [1])]) # # Python diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 0559a878a..023e3fcec 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -48,6 +48,7 @@ extern "C" { #define BF_GPU_MAX_ARCH @GPU_MAX_ARCH@ #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ +#define BF_GPU_MAP_CACHE @HAVE_MAP_CACHE@ // Features #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ diff --git a/src/map.cpp b/src/map.cpp index 47006a914..f4f70e7b7 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -399,7 +399,7 @@ BFstatus build_map_kernel(int* external_ndim, return BF_STATUS_SUCCESS; } -#if BF_MAPCACHE_ENABLED +#if defined(BF_GPU_MAP_CACHE) && BF_GPU_MAP_CACHE class DiskCacheMgr { std::string _cachedir; std::string _indexfile; From a87bf746d2bf81191b463c05a69f2a3ed076da44 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 14:49:31 -0600 Subject: [PATCH 0426/1155] Add the map cache to the listing. --- python/bifrost/version/__main__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index 1857ec51a..f6c1eedc4 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -29,5 +29,6 @@ def _yes_no(value): print(" CUDA architectures: %s" % BF_GPU_ARCHS) print(" CUDA shared memory: %i B" % BF_GPU_SHAREDMEM) print(" CUDA managed memory support: %s" % _yes_no(BF_GPU_MANAGEDMEM)) + print(" CUDA map cache: %s" % _yes_no(BF_GPU_MAP_CACHE)) print(" CUDA debugging: %s" % _yes_no(BF_CUDA_DEBUG_ENABLED)) print(" CUDA tracing enabled: %s" % _yes_no(BF_TRACE_ENABLED)) From c93acbfd9c5a42e1d49c81f18a17016f6a58dfd7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 14:50:09 -0600 Subject: [PATCH 0427/1155] Rebuild configure. --- configure | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 73c180b27..8d3a1a69f 100755 --- a/configure +++ b/configure @@ -706,6 +706,7 @@ PYINSTALLFLAGS PYBUILDFLAGS PYTHON HAVE_PYTHON +HAVE_MAP_CACHE HAVE_CUDA_DEBUG enable_native_arch HAVE_TRACE @@ -19948,9 +19949,12 @@ else $as_nop enable_map_cache=yes fi +HAVE_MAP_CACHE=0 + if test x$enable_map_cache != xno then : - CPPFLAGS="$CPPFLAGS -DBF_MAPCACHE_ENABLED=1" + HAVE_MAP_CACHE=1 + fi # From 6596cf9c5e7583f88b1bb8ef977fb5753ac2853b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 14:57:35 -0600 Subject: [PATCH 0428/1155] Formatting. --- src/map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map.cpp b/src/map.cpp index f4f70e7b7..9497c50bd 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -399,7 +399,7 @@ BFstatus build_map_kernel(int* external_ndim, return BF_STATUS_SUCCESS; } -#if defined(BF_GPU_MAP_CACHE) && BF_GPU_MAP_CACHE +#if defined BF_GPU_MAP_CACHE && BF_GPU_MAP_CACHE class DiskCacheMgr { std::string _cachedir; std::string _indexfile; From d47a544dddfc46ed633058e7a9c9beedb9e9e305 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 15:57:20 -0600 Subject: [PATCH 0429/1155] Added list_cache to bifrost.map to show the cache contents. Fixed a define problem in map.cpp. --- python/bifrost/__init__.py | 4 ++-- python/bifrost/map.py | 32 ++++++++++++++++++++++++++++++-- src/map.cpp | 4 ++-- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/python/bifrost/__init__.py b/python/bifrost/__init__.py index 351f38a3b..c4214ae1b 100644 --- a/python/bifrost/__init__.py +++ b/python/bifrost/__init__.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -38,7 +38,7 @@ from bifrost import device from bifrost.ndarray import ndarray, asarray, empty_like, empty, zeros_like, zeros from bifrost import views -from bifrost.map import map, map_clear_cache +from bifrost.map import map from bifrost.pipeline import Pipeline, get_default_pipeline, block_scope from bifrost import blocks from bifrost.block_chainer import BlockChainer diff --git a/python/bifrost/map.py b/python/bifrost/map.py index 202217939..43663f9b4 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -35,6 +35,9 @@ from bifrost.ndarray import asarray import numpy as np import ctypes +import glob +import os +from bifrost.libbifrost_generated import BF_GPU_MAP_CACHE from bifrost import telemetry telemetry.track_module() @@ -143,5 +146,30 @@ def map(func_string, data, axis_names=None, shape=None, func_name, func_string, extra_code, _array(block_shape), _array(block_axes))) -def map_clear_cache(): +def list_cache(): + output = '' + if BF_GPU_MAP_CACHE: + cache_path = os.path.join(os.path.expanduser('~'), 'map_cache') + try: + with open(os.path.join(cache_path, 'cache.version'), 'r') as fh: + version = fh.read() + runtime, driver = version.split(None, 1) + runtime = int(runtime, 10) + runtime = "%i.%i" % (runtime//1000, (runtime//10) % 1000) + driver = int(driver, 10) + driver = "%i.%i" % (driver//1000, (driver//10) % 1000) + + entries = glob.glob(os.path.join(cache_path, '*.inf')) + + output += "Cache version: %s (runtime), %s (driver)\n" % (runtime, driver) + output += "Cache entries: %i" % len(entries) + except OSError: + pass + + if len(output) == 0: + output = 'none' + print(output) + + +def clear_cache(): _check(_bf.bfMapClearCache()) diff --git a/src/map.cpp b/src/map.cpp index 9497c50bd..7791d209e 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -792,7 +792,7 @@ BFstatus bfMap(int ndim, } BFstatus bfMapClearCache() { -#if BF_MAPCACHE_ENABLED +#if defined BF_GPU_MAP_CACHE && BF_GPU_MAP_CACHE DiskCacheMgr::get().clear(); return BF_STATUS_SUCCESS; #else From 3ec66a797bcb63cae8fc46497f442762068c8871 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 16:00:46 -0600 Subject: [PATCH 0430/1155] Boilerplate. --- python/bifrost/telemetry/__init__.py | 4 ++-- python/bifrost/telemetry/__main__.py | 4 ++-- python/bifrost/version/__main__.py | 28 ++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/python/bifrost/telemetry/__init__.py b/python/bifrost/telemetry/__init__.py index db4ca5e7e..e3e4a674c 100644 --- a/python/bifrost/telemetry/__init__.py +++ b/python/bifrost/telemetry/__init__.py @@ -1,6 +1,6 @@ -# Copyright (c) 2021, The Bifrost Authors. All rights reserved. -# Copyright (c) 2021, The University of New Mexico. All rights reserved. +# Copyright (c) 2021-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2021-2022, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/python/bifrost/telemetry/__main__.py b/python/bifrost/telemetry/__main__.py index 5e883108f..1992e9b89 100644 --- a/python/bifrost/telemetry/__main__.py +++ b/python/bifrost/telemetry/__main__.py @@ -1,7 +1,7 @@ #!/usr/bin/env python -# Copyright (c) 2021, The Bifrost Authors. All rights reserved. -# Copyright (c) 2021, The University of New Mexico. All rights reserved. +# Copyright (c) 2021-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2021-2022, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index 1857ec51a..a810664cd 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -1,3 +1,31 @@ + +# Copyright (c) 2021-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2021-2022, The University of New Mexico. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of The Bifrost Authors nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + from __future__ import print_function import argparse From c78ff92c016588f13eed91a094d0bb52f021b7c6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 16:02:41 -0600 Subject: [PATCH 0431/1155] Cleanup. --- python/bifrost/telemetry/__main__.py | 53 ++++++++++++---------------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/python/bifrost/telemetry/__main__.py b/python/bifrost/telemetry/__main__.py index 1992e9b89..7feb9e2ae 100644 --- a/python/bifrost/telemetry/__main__.py +++ b/python/bifrost/telemetry/__main__.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # Copyright (c) 2021-2022, The Bifrost Authors. All rights reserved. # Copyright (c) 2021-2022, The University of New Mexico. All rights reserved. @@ -35,36 +34,30 @@ import argparse from bifrost import telemetry -telemetry.track_script() +parser = argparse.ArgumentParser( + description='update the Bifrost telemetry setting', + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) +tgroup = parser.add_mutually_exclusive_group(required=False) +tgroup.add_argument('-e', '--enable', action='store_true', + help='enable telemetry for Bifrost') +tgroup.add_argument('-d', '--disable', action='store_true', + help='disable telemetry for Bifrost') +parser.add_argument('-k', '--key', action='store_true', + help='show install identification key') +args = parser.parse_args() -def main(args): - # Toggle - if args.enable: - telemetry.enable() - elif args.disable: - telemetry.disable() - - # Report - ## Status - print("Bifrost Telemetry is %s" % ('active' if telemetry.is_active() else 'in-active')) +# Toggle +if args.enable: + telemetry.enable() +elif args.disable: + telemetry.disable() - ## Key - if args.key: - print(" Identification key: %s" % telemetry._INSTALL_KEY) +# Report +## Status +print("Bifrost Telemetry is %s" % ('active' if telemetry.is_active() else 'in-active')) - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - description='update the Bifrost telemetry setting', - formatter_class=argparse.ArgumentDefaultsHelpFormatter - ) - tgroup = parser.add_mutually_exclusive_group(required=False) - tgroup.add_argument('-e', '--enable', action='store_true', - help='enable telemetry for Bifrost') - tgroup.add_argument('-d', '--disable', action='store_true', - help='disable telemetry for Bifrost') - parser.add_argument('-k', '--key', action='store_true', - help='show install identification key') - args = parser.parse_args() - main(args) +## Key +if args.key: + print(" Identification key: %s" % telemetry._INSTALL_KEY) From 2ab86ca0c6466d9e26312c54d9c244be2f52f17f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 17:56:18 -0600 Subject: [PATCH 0432/1155] Various fixes. --- configure | 142 ++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 12 +++- src/Makefile.in | 5 +- 3 files changed, 155 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 9b068b575..3a53b79fa 100755 --- a/configure +++ b/configure @@ -723,6 +723,8 @@ GPU_MAX_ARCH CUDA_VERSION HAVE_CUDA CUDA_HOME +HAVE_RDMA +HAVE_VERBS HAVE_VMA HAVE_HWLOC HAVE_NUMA @@ -836,6 +838,8 @@ with_ctags enable_numa enable_hwloc enable_vma +enable_verbs +enable_rdma with_cuda_home enable_cuda with_nvcc_flags @@ -1510,6 +1514,8 @@ Optional Features: --disable-numa disable numa support (default=no) --disable-hwloc disable hwloc support (default=no) --enable-vma enable vma support (default=no) + --enable-verbs enable Infiniband verbs support (default=no) + --enable-rdma enable RDMA support (default=no) --disable-cuda disable cuda support (default=no) --enable-debug enable debugging mode (default=no) --enable-trace enable tracing mode for nvprof/nvvp (default=no) @@ -19273,6 +19279,124 @@ fi fi +# +# Infiniband Verbs +# + +# Check whether --enable-verbs was given. +if test ${enable_verbs+y} +then : + enableval=$enable_verbs; enable_verbs=yes +else $as_nop + enable_verbs=no +fi + +HAVE_VERBS=0 + +if test x$enable_verbs != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ibv_query_device in -lverbs" >&5 +printf %s "checking for ibv_query_device in -lverbs... " >&6; } +if test ${ac_cv_lib_verbs_ibv_query_device+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lverbs $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +namespace conftest { + extern "C" int ibv_query_device (); +} +int +main (void) +{ +return conftest::ibv_query_device (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + ac_cv_lib_verbs_ibv_query_device=yes +else $as_nop + ac_cv_lib_verbs_ibv_query_device=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_verbs_ibv_query_device" >&5 +printf "%s\n" "$ac_cv_lib_verbs_ibv_query_device" >&6; } +if test "x$ac_cv_lib_verbs_ibv_query_device" = xyes +then : + HAVE_VERBS=1 + + LIBS="$LIBS -lverbs" +fi + +fi + +# +# RDMA +# + +# Check whether --enable-rdma was given. +if test ${enable_rdma+y} +then : + enableval=$enable_rdma; enable_rdma=yes +else $as_nop + enable_rdma=no +fi + +HAVE_RDMA=0 + +if test x$enable_rdma != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rdma_get_devices in -lrdma" >&5 +printf %s "checking for rdma_get_devices in -lrdma... " >&6; } +if test ${ac_cv_lib_rdma_rdma_get_devices+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrdma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +namespace conftest { + extern "C" int rdma_get_devices (); +} +int +main (void) +{ +return conftest::rdma_get_devices (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + ac_cv_lib_rdma_rdma_get_devices=yes +else $as_nop + ac_cv_lib_rdma_rdma_get_devices=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rdma_rdma_get_devices" >&5 +printf "%s\n" "$ac_cv_lib_rdma_rdma_get_devices" >&6; } +if test "x$ac_cv_lib_rdma_rdma_get_devices" = xyes +then : + HAVE_RDMA=1 + + LIBS="$LIBS -lrdmacm" +fi + +fi + # # CUDA # @@ -24761,6 +24885,24 @@ else $as_nop printf "%s\n" "$as_me: libvma: no" >&6;} fi +if test x$HAVE_VERBS = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libverbs: yes" >&5 +printf "%s\n" "$as_me: libverbs: yes" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libverbs: no" >&5 +printf "%s\n" "$as_me: libverbs: no" >&6;} +fi + +if test x$HAVE_RDMA = x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: librdmacm: yes" >&5 +printf "%s\n" "$as_me: librdmacm: yes" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: librdmacm: no" >&5 +printf "%s\n" "$as_me: librdmacm: no" >&6;} +fi + if test x$HAVE_PYTHON = x1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: python bindings: yes" >&5 diff --git a/configure.ac b/configure.ac index 401a0473d..68822eeb8 100644 --- a/configure.ac +++ b/configure.ac @@ -146,11 +146,11 @@ AS_IF([test x$enable_verbs != xno], LIBS="$LIBS -lverbs"])]) # -# RDMA connection manager +# RDMA # AC_ARG_ENABLE([rdma], - AS_HELP_STRING([--enable-rdma, + AS_HELP_STRING([--enable-rdma], [enable RDMA support (default=no)]), [enable_rdma=yes], [enable_rdma=no]) @@ -354,6 +354,14 @@ AS_IF([test x$HAVE_VMA = x1], [AC_MSG_NOTICE(libvma: yes)], [AC_MSG_NOTICE(libvma: no)]) +AS_IF([test x$HAVE_VERBS = x1], + [AC_MSG_NOTICE(libverbs: yes)], + [AC_MSG_NOTICE(libverbs: no)]) + +AS_IF([test x$HAVE_RDMA = x1], + [AC_MSG_NOTICE(librdmacm: yes)], + [AC_MSG_NOTICE(librdmacm: no)]) + AS_IF([test x$HAVE_PYTHON = x1], [AC_MSG_NOTICE(python bindings: yes)], [AC_MSG_NOTICE(python bindings: no)]) diff --git a/src/Makefile.in b/src/Makefile.in index 618102b96..95ceef166 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -17,6 +17,7 @@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ HAVE_CXX14 ?= @HAVE_CXX14@ HAVE_RECVMSG ?= @HAVE_RECVMSG@ +HAVE_RDMA ?= @HAVE_RDMA@ HAVE_CUDA ?= @HAVE_CUDA@ @@ -43,8 +44,8 @@ ifeq ($(HAVE_RECVMSG),1) LIBBIFROST_OBJS += \ address.o \ udp_socket.o \ - udp_capture.o \ - udp_transmit.o + packet_capture.o \ + packet_writer.o endif ifeq ($(HAVE_RDMA),1) LIBBIFROST_OBJS += \ From e208e370df6be2c3179d3d427fa3fb4824fe58ea Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 18:16:43 -0600 Subject: [PATCH 0433/1155] Added in verbs and RDMA info. --- python/bifrost/version/__main__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index a810664cd..874075d97 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -49,6 +49,8 @@ def _yes_no(value): print(" NUMA support %s" % _yes_no(BF_NUMA_ENABLED)) print(" Hardware locality support: %s" % _yes_no(BF_HWLOC_ENABLED)) print(" Mellanox messaging accelerator (VMA) support: %s" % _yes_no(BF_VMA_ENABLED)) + print(" Infiniband verbs support: %s" % _yes_no(BF_VERBS_ENABLED)) + print(" RDMA ring transport support: %s" % _yes_no(BF_RDMA_ENABLED)) print(" Logging directory: %s" % BF_PROCLOG_DIR) print(" Debugging: %s" % _yes_no(BF_DEBUG_ENABLED)) print(" CUDA support: %s" % _yes_no(BF_CUDA_ENABLED)) From 0ecd7a51474961b94371f0d58f36f6b72729a2ea Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 18:16:57 -0600 Subject: [PATCH 0434/1155] Python3 fixes. --- test/test_disk_io.py | 20 ++++++++++++++++---- test/test_udp_io.py | 20 ++++++++++++++++---- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/test/test_disk_io.py b/test/test_disk_io.py index e4836736d..f58fe61dc 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -55,7 +55,11 @@ def callback(self, seq0, time_tag, decim, chan0, nsrc, hdr_ptr, hdr_size_ptr): 'complex': True, 'nbit': 8} #print "******** CFREQ:", hdr['cfreq'] - hdr_str = json.dumps(hdr) + try: + hdr_str = json.dumps(hdr).encode() + except AttributeError: + # Python2 catch + pass # TODO: Can't pad with NULL because returned as C-string #hdr_str = json.dumps(hdr).ljust(4096, '\0') #hdr_str = json.dumps(hdr).ljust(4096, ' ') @@ -95,7 +99,11 @@ def callback(self, seq0, time_tag, decim, chan0, chan1, nsrc, hdr_ptr, hdr_size_ 'complex': True, 'nbit': 4} #print "******** CFREQ:", hdr['cfreq'] - hdr_str = json.dumps(hdr) + try: + hdr_str = json.dumps(hdr).encode() + except AttributeError: + # Python2 catch + pass # TODO: Can't pad with NULL because returned as C-string #hdr_str = json.dumps(hdr).ljust(4096, '\0') #hdr_str = json.dumps(hdr).ljust(4096, ' ') @@ -135,7 +143,11 @@ def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ 'complex': False, 'nbit': 32} #print("******** HDR:", hdr) - hdr_str = json.dumps(hdr) + try: + hdr_str = json.dumps(hdr).encode() + except AttributeError: + # Python2 catch + pass # TODO: Can't pad with NULL because returned as C-string #hdr_str = json.dumps(hdr).ljust(4096, '\0') #hdr_str = json.dumps(hdr).ljust(4096, ' ') diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 78181eb86..bee98bbfa 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -57,7 +57,11 @@ def callback(self, seq0, time_tag, decim, chan0, nsrc, hdr_ptr, hdr_size_ptr): 'complex': True, 'nbit': 8} #print "******** CFREQ:", hdr['cfreq'] - hdr_str = json.dumps(hdr) + try: + hdr_str = json.dumps(hdr).encode() + except AttributeError: + # Python2 catch + pass # TODO: Can't pad with NULL because returned as C-string #hdr_str = json.dumps(hdr).ljust(4096, '\0') #hdr_str = json.dumps(hdr).ljust(4096, ' ') @@ -97,7 +101,11 @@ def callback(self, seq0, time_tag, decim, chan0, chan1, nsrc, hdr_ptr, hdr_size_ 'complex': True, 'nbit': 4} #print "******** CFREQ:", hdr['cfreq'] - hdr_str = json.dumps(hdr) + try: + hdr_str = json.dumps(hdr).encode() + except AttributeError: + # Python2 catch + pass # TODO: Can't pad with NULL because returned as C-string #hdr_str = json.dumps(hdr).ljust(4096, '\0') #hdr_str = json.dumps(hdr).ljust(4096, ' ') @@ -136,7 +144,11 @@ def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ 'complex': False, 'nbit': 32} print("******** HDR:", hdr) - hdr_str = json.dumps(hdr) + try: + hdr_str = json.dumps(hdr).encode() + except AttributeError: + # Python2 catch + pass # TODO: Can't pad with NULL because returned as C-string #hdr_str = json.dumps(hdr).ljust(4096, '\0') #hdr_str = json.dumps(hdr).ljust(4096, ' ') From 45b5c6d2f84c8610d3c1efee5f933e9df79e29ac Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 18:39:44 -0600 Subject: [PATCH 0435/1155] MacOS fixes (but more are needed). --- src/formats/base.hpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/formats/base.hpp b/src/formats/base.hpp index 64583a83b..585e629fd 100644 --- a/src/formats/base.hpp +++ b/src/formats/base.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2020, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -34,6 +34,18 @@ #include // For ntohs +#if defined __APPLE__ && __APPLE__ + +#include +#define htobe16(x) OSSwapHostToBigInt16(x) +#define be16toh(x) OSSwapBigToHostInt16(x) +#define htobe32(x) OSSwapHostToBigInt32(x) +#define be32toh(x) OSSwapBigToHostInt32(x) +#define htobe64(x) OSSwapHostToBigInt64(x) +#define be64toh(x) OSSwapBigToHostInt64(x) + +#endif + #define BF_UNPACK_FACTOR 1 #define JUMBO_FRAME_SIZE 9000 From 4c982114fe8066068c2a52deac3357dc8cacd467 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 19:05:56 -0600 Subject: [PATCH 0436/1155] More MacOS fixes. --- src/Socket.hpp | 23 ++++++++++++++++++++++- src/packet_capture.hpp | 6 ++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 31e7e611b..ea9e80cd4 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -124,10 +124,16 @@ client.send/recv_block/packet(...); #include #include #include + +#if defined __linux__ && __linux__ + //#include #include #include +#endif + + #if defined __APPLE__ && __APPLE__ #include @@ -642,6 +648,7 @@ void Socket::sniff(sockaddr_storage local_address, if( _mode != Socket::MODE_CLOSED ) { throw Socket::Error("Socket is already open"); } +#if defined __linux__ && __linux__ this->open(AF_PACKET, htons(ETH_P_IP)); // Allow binding multiple sockets to one port @@ -684,6 +691,10 @@ void Socket::sniff(sockaddr_storage local_address, // Make the socket promiscuous this->set_promiscuous(true); +#else + #warning packet sniffing is not supported on this OS + check_error(-1, "unsupported on this OS"); +#endif } // TODO: Add timeout support? Bit of a pain to implement. void Socket::connect(sockaddr_storage remote_address) { @@ -1088,6 +1099,7 @@ int Socket::interface_from_addr(sockaddr* address, return found; } void Socket::set_promiscuous(int state) { +#if defined __linux__ && __linux__ sockaddr_storage addr = this->get_local_address(); struct ifreq ethreq; @@ -1114,9 +1126,13 @@ void Socket::set_promiscuous(int state) { check_error(ioctl(_fd, SIOCSIFFLAGS, ðreq), "change interface setup"); } - +#else + #warning promiscuous network interfaces are not supported on this OS + check_error(-1, "unsupported on this OS"); +#endif } int Socket::get_promiscuous() { +#if defined __linux__ && __linux__ sockaddr_storage addr = this->get_local_address(); struct ifreq ethreq; @@ -1137,6 +1153,11 @@ int Socket::get_promiscuous() { } else { return false; } +#else + #warning promiscuous network interfaces are not supported on this OS + check_error(-1, "unsupported on this OS"); + return false; +#endif } #if __cplusplus >= 201103L diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 253a2ca49..8f54dc82f 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -55,6 +55,12 @@ using bifrost::ring::WriteSequence; #include #include +#if defined __APPLE__ && __APPLE__ + +#define lseek64 lseek + +#endif + #ifndef BF_HWLOC_ENABLED #define BF_HWLOC_ENABLED 0 //#define BF_HWLOC_ENABLED 1 From e5767756b79281c87caf959de2e3517a42a9470e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Mar 2022 19:54:05 -0600 Subject: [PATCH 0437/1155] Add in Socket.hpp to clear the last few problems on MacOS. --- src/packet_capture.hpp | 1 + src/packet_writer.hpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 8f54dc82f..d74a9997b 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -37,6 +37,7 @@ using bifrost::ring::RingWriter; using bifrost::ring::WriteSpan; using bifrost::ring::WriteSequence; #include "proclog.hpp" +#include "Socket.hpp" #include "formats/formats.hpp" #include "hw_locality.hpp" diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 15acb6373..f64eed5ad 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -30,6 +30,7 @@ #include #include #include "proclog.hpp" +#include "Socket.hpp" #include "formats/formats.hpp" #include "utils.hpp" #include "hw_locality.hpp" From c326768465981823be379b08a5352c9994482a28 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 23 Mar 2022 10:47:39 -0600 Subject: [PATCH 0438/1155] Move the RDMA buffer size control into configure and config.h. --- configure.ac | 9 +++++++++ src/bifrost/config.h.in | 1 + src/rdma.cpp | 2 +- src/rdma.hpp | 5 +---- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 68822eeb8..cb594257f 100644 --- a/configure.ac +++ b/configure.ac @@ -160,6 +160,15 @@ AS_IF([test x$enable_rdma != xno], [AC_SUBST([HAVE_RDMA], [1]) LIBS="$LIBS -lrdmacm"])]) +AC_ARG_WITH([rdma_max_mem], + AS_HELP_STRING([--with-rdma-max-mem=N], + [maximum RDMA buffer size in bytes (default=134217728)]), + [], + [with_rdma_max_mem=134217728]) +AC_SUBST([RDMA_MAXMEM], [$with_rdma_max_mem]) +AS_IF([test x$HAVE_RDMA = x0], + [AC_SUBST([RDMA_MAXMEM], [0])]) + # # CUDA # diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 1ffd99528..b70a49a52 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -57,6 +57,7 @@ extern "C" { #define BF_VMA_ENABLED @HAVE_VMA@ #define BF_VERBS_ENABLED @HAVE_VERBS@ #define BF_RDMA_ENABLED @HAVE_RDMA@ +#define BF_RDMA_MAXMEM @RDMA_MAXMEM@ // Debugging features #define BF_DEBUG_ENABLED @HAVE_DEBUG@ diff --git a/src/rdma.cpp b/src/rdma.cpp index 3b26fb342..102c693ae 100644 --- a/src/rdma.cpp +++ b/src/rdma.cpp @@ -90,7 +90,7 @@ BFstatus bfRdmaCreate(BFrdma* obj, int fd, size_t message_size, int is_server) { - BF_ASSERT(message_size <= BF_RDMA_MAX_MEMORY, BF_STATUS_INSUFFICIENT_STORAGE); + BF_ASSERT(message_size <= BF_RDMA_MAXMEM, BF_STATUS_INSUFFICIENT_STORAGE); BF_TRY_RETURN_ELSE(*obj = new BFrdma_impl(fd, message_size, is_server), *obj = 0); } diff --git a/src/rdma.hpp b/src/rdma.hpp index 655afdf6a..9c2819ca3 100644 --- a/src/rdma.hpp +++ b/src/rdma.hpp @@ -28,6 +28,7 @@ */ #include "assert.hpp" +#include #include #include // For ntohs @@ -43,10 +44,6 @@ #include #include -#ifndef BF_RDMA_MAX_MEMORY -#define BF_RDMA_MAX_MEMORY 134217728 -#endif - struct __attribute__((aligned(8))) bf_message { enum { MSG_HEADER = 0, From 1ae5f6e0b31d2f3de66ba9b24634d6a16cf0044a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 23 Mar 2022 10:48:24 -0600 Subject: [PATCH 0439/1155] Rebuild configure. --- configure | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/configure b/configure index 3a53b79fa..19abe2c48 100755 --- a/configure +++ b/configure @@ -723,6 +723,7 @@ GPU_MAX_ARCH CUDA_VERSION HAVE_CUDA CUDA_HOME +RDMA_MAXMEM HAVE_RDMA HAVE_VERBS HAVE_VMA @@ -840,6 +841,7 @@ enable_hwloc enable_vma enable_verbs enable_rdma +with_rdma_max_mem with_cuda_home enable_cuda with_nvcc_flags @@ -1546,6 +1548,8 @@ Optional Packages: --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-ctags=[PATH] absolute path to ctags executable + --with-rdma-max-mem=N maximum RDMA buffer size in bytes + (default=134217728) --with-cuda-home CUDA install path (default=/usr/local/cuda) --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"') @@ -19397,6 +19401,23 @@ fi fi + +# Check whether --with-rdma_max_mem was given. +if test ${with_rdma_max_mem+y} +then : + withval=$with_rdma_max_mem; +else $as_nop + with_rdma_max_mem=134217728 +fi + +RDMA_MAXMEM=$with_rdma_max_mem + +if test x$HAVE_RDMA = x0 +then : + RDMA_MAXMEM=0 + +fi + # # CUDA # From b3cfd36f0e5db4f69dfc9fddde85f789fc2063b2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 23 Mar 2022 15:09:34 -0600 Subject: [PATCH 0440/1155] Make sure we also use the stride information when wrapping a numpy.ndarray. --- python/bifrost/ndarray.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 55439443c..f4ef3d369 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -222,6 +222,7 @@ def __new__(cls, base=None, space=None, shape=None, dtype=None, space=space, shape=base.shape, dtype=base.bf.dtype, + strides=base.strides, native=base.bf.native, conjugated=conjugated) copy_array(obj, base) From 76eb87adb0e876722e98ac3622cd6779b244f46e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 07:08:59 -0600 Subject: [PATCH 0441/1155] Clearing the cache always works if it does not exist. --- src/map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map.cpp b/src/map.cpp index 7791d209e..5865c09c6 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -796,6 +796,6 @@ BFstatus bfMapClearCache() { DiskCacheMgr::get().clear(); return BF_STATUS_SUCCESS; #else - return BF_STATUS_UNSUPPORTED; + return BF_STATUS_SUCCESS; #endif } From f24402ff45cb484a78aa1d4fbffeb127f76c47d2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 07:10:05 -0600 Subject: [PATCH 0442/1155] clear_cache -> clear_map_cache, plus import from __init__.py. --- python/bifrost/__init__.py | 2 +- python/bifrost/map.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/python/bifrost/__init__.py b/python/bifrost/__init__.py index c4214ae1b..3bde60cab 100644 --- a/python/bifrost/__init__.py +++ b/python/bifrost/__init__.py @@ -38,7 +38,7 @@ from bifrost import device from bifrost.ndarray import ndarray, asarray, empty_like, empty, zeros_like, zeros from bifrost import views -from bifrost.map import map +from bifrost.map import map, clear_map_cache from bifrost.pipeline import Pipeline, get_default_pipeline, block_scope from bifrost import blocks from bifrost.block_chainer import BlockChainer diff --git a/python/bifrost/map.py b/python/bifrost/map.py index 43663f9b4..cb3ddc02f 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -146,7 +146,7 @@ def map(func_string, data, axis_names=None, shape=None, func_name, func_string, extra_code, _array(block_shape), _array(block_axes))) -def list_cache(): +def list_map_cache(): output = '' if BF_GPU_MAP_CACHE: cache_path = os.path.join(os.path.expanduser('~'), 'map_cache') @@ -171,5 +171,5 @@ def list_cache(): print(output) -def clear_cache(): +def clear_map_cache(): _check(_bf.bfMapClearCache()) From 9408003adfdaf57c7d8c754a2c7b147125523fa2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 07:12:32 -0600 Subject: [PATCH 0443/1155] Clear the map cache only once per test suite. --- test/test_map.py | 8 ++++++-- test/test_transpose.py | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/test/test_map.py b/test/test_map.py index 2dfcdbb5f..87ab911fa 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -34,9 +34,13 @@ @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestMap(unittest.TestCase): + first_test = True + def setUp(self): np.random.seed(1234) - bf.map_clear_cache() + if self.first_test: + bf.clear_map_cache() + self.first_test = False def run_simple_test(self, x, funcstr, func): x_orig = x x = bf.asarray(x, 'cuda') diff --git a/test/test_transpose.py b/test/test_transpose.py index b1083f389..ee619e655 100644 --- a/test/test_transpose.py +++ b/test/test_transpose.py @@ -35,8 +35,12 @@ @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TransposeTest(unittest.TestCase): + first_test = True + def setUp(self): - bf.map_clear_cache() + if self.first_test: + bf.clear_map_cache() + self.first_test = False def run_simple_test(self, axes, dtype, shape): n = reduce(lambda a,b:a*b, shape) idata = (np.arange(n).reshape(shape) % 251).astype(dtype) From 1c8d598044eba0c9c06fecb7eaa3c5cf59efe76d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 07:15:41 -0600 Subject: [PATCH 0444/1155] list_map_cache cleanup/fixes. --- python/bifrost/map.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/python/bifrost/map.py b/python/bifrost/map.py index cb3ddc02f..970683b27 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -147,9 +147,9 @@ def map(func_string, data, axis_names=None, shape=None, _array(block_shape), _array(block_axes))) def list_map_cache(): - output = '' + output = "Cache enabled: %s" % ('yes' if BF_GPU_MAP_CACHE else 'no') if BF_GPU_MAP_CACHE: - cache_path = os.path.join(os.path.expanduser('~'), 'map_cache') + cache_path = os.path.join(os.path.expanduser('~'), '.bifrost', 'map_cache') try: with open(os.path.join(cache_path, 'cache.version'), 'r') as fh: version = fh.read() @@ -166,8 +166,6 @@ def list_map_cache(): except OSError: pass - if len(output) == 0: - output = 'none' print(output) From 6cdcbc5d18ea2ddbc4f46ed3b46bc095444dd4cc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 07:16:42 -0600 Subject: [PATCH 0445/1155] Remove an old comment. --- src/map.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/map.cpp b/src/map.cpp index 5865c09c6..97cb2b451 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -728,7 +728,6 @@ BFstatus bfMap(int ndim, #if BF_MAPCACHE_ENABLED DiskCacheMgr::get().save(cache_key, kernel_name, ptx, basic_indexing_only); #endif - //std::cout << "INSERTING INTO CACHE" << std::endl; } auto& cache_entry = kernel_cache.get(cache_key); CUDAKernel& kernel = cache_entry.first; From 7a5d290233139d090721de02a9599d89ea1ded07 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 07:18:45 -0600 Subject: [PATCH 0446/1155] Remove debugging prints. --- src/map.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 97cb2b451..5254cda24 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -583,7 +583,6 @@ class DiskCacheMgr { DiskCacheMgr() : _cachedir(get_home_dir()+"/.bifrost/map_cache/"), _loaded(false) { - std::cout << "CACHE: " << _cachedir << std::endl; make_dir(_cachedir); } public: @@ -592,7 +591,6 @@ class DiskCacheMgr { static DiskCacheMgr& get() { static DiskCacheMgr cache; - std::cout << "HOME: " << get_home_dir() << std::endl; return cache; } From c2779e7756e12706b060755790941971ba5448b4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 07:29:59 -0600 Subject: [PATCH 0447/1155] inline process_exists() for now. --- src/fileutils.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fileutils.hpp b/src/fileutils.hpp index 637b6b390..a321243d2 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -71,7 +71,7 @@ inline bool file_exists(std::string path) { return !(stat(path.c_str(), &s) == -1 && errno == ENOENT); } -bool process_exists(pid_t pid) { +inline bool process_exists(pid_t pid) { #if defined __APPLE__ && __APPLE__ // Based on information from: From 865bef6e318bdbeb53ac319d8f33a6de57d64a71 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 07:38:17 -0600 Subject: [PATCH 0448/1155] HAVE_MAP_CACHE follows HAVE_CUDA if the cache is requested. --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 8d3a1a69f..2ede5b2cd 100755 --- a/configure +++ b/configure @@ -19953,7 +19953,7 @@ HAVE_MAP_CACHE=0 if test x$enable_map_cache != xno then : - HAVE_MAP_CACHE=1 + HAVE_MAP_CACHE=$HAVE_CUDA fi diff --git a/configure.ac b/configure.ac index 85894fc09..fd515906a 100644 --- a/configure.ac +++ b/configure.ac @@ -213,7 +213,7 @@ AC_ARG_ENABLE([map_cache], [enable_map_cache=yes]) AC_SUBST([HAVE_MAP_CACHE], [0]) AS_IF([test x$enable_map_cache != xno], - [AC_SUBST([HAVE_MAP_CACHE], [1])]) + [AC_SUBST([HAVE_MAP_CACHE], [$HAVE_CUDA])]) # # Python From 4fe1d7120a53a52d1b38f019c6b20c94f48c7987 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 08:57:46 -0600 Subject: [PATCH 0449/1155] Simplify. --- src/map.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 5254cda24..6ab24515b 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -791,8 +791,6 @@ BFstatus bfMap(int ndim, BFstatus bfMapClearCache() { #if defined BF_GPU_MAP_CACHE && BF_GPU_MAP_CACHE DiskCacheMgr::get().clear(); - return BF_STATUS_SUCCESS; -#else - return BF_STATUS_SUCCESS; #endif + return BF_STATUS_SUCCESS; } From f235b2148b1a3f83f713134b7c6246f6cf771fad Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 09:09:11 -0600 Subject: [PATCH 0450/1155] Fix a few define problems. --- src/bifrost/config.h.in | 1 + src/map.cpp | 10 +++------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 023e3fcec..4af655012 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -49,6 +49,7 @@ extern "C" { #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ #define BF_GPU_MAP_CACHE @HAVE_MAP_CACHE@ +#define BF_GPU_MAP_CACHE_SIZE 128 // Features #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ diff --git a/src/map.cpp b/src/map.cpp index 6ab24515b..1a278a02f 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -38,10 +38,6 @@ bfMap(3, c.shape, {"dm", "t"}, // This enables print-out of generated source and PTX //#define BF_DEBUG_RTC 1 -#ifndef BF_MAP_KERNEL_CACHE_SIZE -#define BF_MAP_KERNEL_CACHE_SIZE 128 -#endif - #include #include #include "fileutils.hpp" @@ -632,7 +628,7 @@ BFstatus bfMap(int ndim, int const block_axes[2]) { // Map containing compiled kernels and basic_indexing_only flag thread_local static ObjectCache > - kernel_cache(BF_MAP_KERNEL_CACHE_SIZE); + kernel_cache(BF_GPU_MAP_CACHE_SIZE); BF_ASSERT(ndim >= 0, BF_STATUS_INVALID_ARGUMENT); //BF_ASSERT(!ndim || shape, BF_STATUS_INVALID_POINTER); //BF_ASSERT(!ndim || axis_names, BF_STATUS_INVALID_POINTER); @@ -692,7 +688,7 @@ BFstatus bfMap(int ndim, } std::string cache_key = cache_key_ss.str(); -#if BF_MAPCACHE_ENABLED +#if defined BF_GPU_MAP_CACHE && BF_GPU_MAP_CACHE DiskCacheMgr::get().load(&kernel_cache); #endif @@ -723,7 +719,7 @@ BFstatus bfMap(int ndim, BF_TRY(kernel.set(kernel_name.c_str(), ptx.c_str())); kernel_cache.insert(cache_key, std::make_pair(kernel, basic_indexing_only)); -#if BF_MAPCACHE_ENABLED +#if defined BF_GPU_MAP_CACHE && BF_GPU_MAP_CACHE DiskCacheMgr::get().save(cache_key, kernel_name, ptx, basic_indexing_only); #endif } From 7302af0dbdb541ebe9db317bbf232df96c0ab2fa Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 09:12:44 -0600 Subject: [PATCH 0451/1155] list_map_cache() formatting. --- python/bifrost/map.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/map.py b/python/bifrost/map.py index 970683b27..2ddd12c3c 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -161,8 +161,8 @@ def list_map_cache(): entries = glob.glob(os.path.join(cache_path, '*.inf')) - output += "Cache version: %s (runtime), %s (driver)\n" % (runtime, driver) - output += "Cache entries: %i" % len(entries) + output += "\nCache version: %s (runtime), %s (driver)" % (runtime, driver) + output += "\nCache entries: %i" % len(entries) except OSError: pass From 316806fa0796dc7971585e7ea1a05f54075633e3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 09:44:00 -0600 Subject: [PATCH 0452/1155] Also tag the cache with a 'map cache' version so that we can invalidate based on changes in that as well. --- python/bifrost/map.py | 6 ++++-- src/bifrost/config.h.in | 5 +++-- src/map.cpp | 16 ++++++++-------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/python/bifrost/map.py b/python/bifrost/map.py index 2ddd12c3c..a02f7dfb7 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -153,7 +153,9 @@ def list_map_cache(): try: with open(os.path.join(cache_path, 'cache.version'), 'r') as fh: version = fh.read() - runtime, driver = version.split(None, 1) + mapcache, runtime, driver = version.split(None, 2) + mapcache = int(mapcache, 10) + mapcache = "%i.%i" % (mapcache//1000, (mapcache//10) % 1000) runtime = int(runtime, 10) runtime = "%i.%i" % (runtime//1000, (runtime//10) % 1000) driver = int(driver, 10) @@ -161,7 +163,7 @@ def list_map_cache(): entries = glob.glob(os.path.join(cache_path, '*.inf')) - output += "\nCache version: %s (runtime), %s (driver)" % (runtime, driver) + output += "\nCache version: %s (map cache) %s (runtime), %s (driver)" % (mapcache, runtime, driver) output += "\nCache entries: %i" % len(entries) except OSError: pass diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 4af655012..e0736c7a5 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -1,6 +1,6 @@ /* - * Copyright (c) 2021, The Bifrost Authors. All rights reserved. - * Copyright (c) 2021, The University of New Mexico. All rights reserved. + * Copyright (c) 2021-2022, The Bifrost Authors. All rights reserved. + * Copyright (c) 2021-2022, The University of New Mexico. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -50,6 +50,7 @@ extern "C" { #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ #define BF_GPU_MAP_CACHE @HAVE_MAP_CACHE@ #define BF_GPU_MAP_CACHE_SIZE 128 +#define BF_GPU_MAP_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) // Features #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ diff --git a/src/map.cpp b/src/map.cpp index 1a278a02f..f5264fd0c 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -406,17 +406,17 @@ class DiskCacheMgr { std::hash _get_name; void tag_cache(void) { - // NOTE: Must be called from within a LockFile lock - int rt, drv; + // NOTE: Must be called from within a LockFile lock + int rt, drv; cudaRuntimeGetVersion(&rt); cudaDriverGetVersion(&drv); - + std::ofstream info; if( !file_exists(_cachedir + "cache.version") ) { try { info.open(_cachedir + "cache.version", std::ios::out); - info << rt << " " << drv << endl; + info << BF_GPU_MAP_CACHE_VERSION << " " << rt << " " << drv << endl; info.close(); } catch( std::exception ) {} } @@ -425,7 +425,7 @@ class DiskCacheMgr { void validate_cache(void) { // NOTE: Must be called from within a LockFile lock bool status = true; - int rt, drv, cached_rt, cached_drv; + int rt, drv, cached_mc, cached_rt, cached_drv; cudaRuntimeGetVersion(&rt); cudaDriverGetVersion(&drv); @@ -435,15 +435,15 @@ class DiskCacheMgr { info.open(_cachedir + "cache.version", std::ios::in); // Read - info >> cached_rt >> cached_drv; + info >> cached_mc >> cached_rt >> cached_drv; // Close info.close(); } catch( std::exception ) { - cached_rt = cached_drv = -1; + cached_mc = cached_rt = cached_drv = -1; } - if( rt != cached_rt || drv != cached_drv ) { + if( BF_GPU_MAP_CACHE_VERSION != cached_mc || rt != cached_rt || drv != cached_drv ) { status = false; } From ac1bd23dbaf48b434a5be5c0f17f853cbe633e53 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 10:34:22 -0600 Subject: [PATCH 0453/1155] Update for the map cache. --- CHANGELOG | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index cfbe115bf..dce9283d0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +0.10.1 + * Added a disk cache for bifrost.map calls + 0.10.0 * Switched over to an autotools-based build system * Added a .m4 file to help other autotools-based software find Bifrost From fb30280ea1757567c290c36c40e435914a290ba4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 15:16:38 -0600 Subject: [PATCH 0454/1155] Make a note about using setUpClass. --- test/test_map.py | 1 + test/test_transpose.py | 1 + 2 files changed, 2 insertions(+) diff --git a/test/test_map.py b/test/test_map.py index 87ab911fa..1a9356c9c 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -36,6 +36,7 @@ class TestMap(unittest.TestCase): first_test = True + # TODO: @classmethod; def setUpClass(kls) def setUp(self): np.random.seed(1234) if self.first_test: diff --git a/test/test_transpose.py b/test/test_transpose.py index ee619e655..6102c3486 100644 --- a/test/test_transpose.py +++ b/test/test_transpose.py @@ -37,6 +37,7 @@ class TransposeTest(unittest.TestCase): first_test = True + # TODO: @classmethod; def setUpClass(kls) def setUp(self): if self.first_test: bf.clear_map_cache() From 06a02540be8d59457f20f52d0ba687c155b265e2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 15:27:37 -0600 Subject: [PATCH 0455/1155] Remove stream_create and switch get/set_stream over to something that I know works with cupy. --- python/bifrost/device.py | 28 +++++++++------------------- src/bifrost/cuda.h | 4 +--- src/cuda.cpp | 17 +---------------- 3 files changed, 11 insertions(+), 38 deletions(-) diff --git a/python/bifrost/device.py b/python/bifrost/device.py index 1bac68483..c04dde8e9 100644 --- a/python/bifrost/device.py +++ b/python/bifrost/device.py @@ -28,7 +28,7 @@ # Python2 compatibility from __future__ import absolute_import -from ctypes import c_ulong, byref +from ctypes import c_ulong, pointer as c_pointer from bifrost.libbifrost import _bf, _check, _get from bifrost import telemetry @@ -43,27 +43,17 @@ def set_device(device): def get_device(): return _get(_bf.bfDeviceGet) -def create_stream(nonblocking=False): - """Create a new CUDA stream and return it as a ctypes.c_ulong instance. - If the `nonblocking` is True then the stream may run independently with - respect to stream 0.""" - stream = c_ulong(0) - _check(_bf.bfStreamCreate(byref(stream), nonblocking)) - return stream - - -def get_stream(): - """Get the current CUDA stream and return it as a ctypes.c_ulong instance.""" - stream = c_ulong(0) - _check(_bf.bfStreamGet(byref(stream))) - return stream - def set_stream(stream): """Set the CUDA stream to the provided ctypes.c_ulong instance.""" - if not isinstance(stream, c_ulong): - raise TypeError("Expected a ctypes.u_int instance") - _check(_bf.bfStreamSet(byref(stream))) + stream = c_ulong(stream) + _check(_bf.bfStreamSet(c_pointer(stream))) return True + +def get_stream(): + """Get the current CUDA stream and return it as a ctypes.c_ulong instance.""" + stream = c_ulong(0) + _check(_bf.bfStreamGet(c_pointer(stream))) + return stream.value def stream_synchronize(): _check(_bf.bfStreamSynchronize()) diff --git a/src/bifrost/cuda.h b/src/bifrost/cuda.h index 8967ce783..62ff1314e 100644 --- a/src/bifrost/cuda.h +++ b/src/bifrost/cuda.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -35,8 +35,6 @@ extern "C" { #endif -BFstatus bfStreamCreate(void* stream, - BFbool nonblocking); BFstatus bfStreamGet(void* stream); BFstatus bfStreamSet(void const* stream); BFstatus bfStreamSynchronize(); diff --git a/src/cuda.cpp b/src/cuda.cpp index 3a29c3581..0bc8a9464 100644 --- a/src/cuda.cpp +++ b/src/cuda.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -34,21 +34,6 @@ thread_local cudaStream_t g_cuda_stream = cudaStreamPerThread; #endif -BFstatus bfStreamCreate(void* stream, - BFbool nonblocking=false) { - BF_ASSERT(stream, BF_STATUS_INVALID_POINTER); -#if BF_CUDA_ENABLED - int flags = cudaStreamDefault; - if( nonblocking ) { - flags = cudaStreamNonBlocking; - } - BF_CHECK_CUDA(cudaStreamCreateWithFlags((cudaStream_t*)stream, flags), - BF_STATUS_DEVICE_ERROR); -#else - BF_FAIL("Built without CUDA support (bfStreamCreate)", BF_STATUS_INVALID_STATE); -#endif - return BF_STATUS_SUCCESS; -} BFstatus bfStreamGet(void* stream) { BF_ASSERT(stream, BF_STATUS_INVALID_POINTER); #if BF_CUDA_ENABLED From 97a821d871d69c65aa0232e0130e71d8d8b45233 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 15:30:54 -0600 Subject: [PATCH 0456/1155] Update to match what is in bifrost.device. --- python/bifrost/libbifrost.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 51e84998f..f3bff2d52 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -73,14 +73,12 @@ def __enter__(self): def __exit__(self, type, value, tb): self._destroy() def set_stream(self, stream): - if not isinstance(stream, ctypes.c_ulong): - raise TypeError("Expected a ctypes.u_ulong instance") set_fnc = getattr(_bf, self._obj_basename+"SetStream", None) if set_fnc is None: raise AttributeError("set_stream() is not supported by %s objects" % self._obj_basename) _check( set_fnc(self.obj, - ctypes.byref(stream)) ) + ctypes.pointer(stream)) ) def get_stream(self): get_fnc = getattr(_bf, self._obj_basename+"GetStream", None) if get_fnc is None: @@ -88,8 +86,8 @@ def get_stream(self): stream = ctypes.c_ulong(0) _check( get_fnc(self.obj, - ctypes.byref(stream))) - return stream + ctypes.pointer(stream))) + return stream.value def _array(size_or_vals, dtype=None): if size_or_vals is None: From 9ca1e4cbbf2a5bad501f79328a3bfb30c3064ec3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 15:31:47 -0600 Subject: [PATCH 0457/1155] This didn't actually change. --- src/bifrost/cuda.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bifrost/cuda.h b/src/bifrost/cuda.h index 62ff1314e..8b796447b 100644 --- a/src/bifrost/cuda.h +++ b/src/bifrost/cuda.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions From 70145513da0f8daa01dfe59042c6dba74c2efca4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 15:34:24 -0600 Subject: [PATCH 0458/1155] Py3 fix. --- python/bifrost/device.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/python/bifrost/device.py b/python/bifrost/device.py index c04dde8e9..b69045652 100644 --- a/python/bifrost/device.py +++ b/python/bifrost/device.py @@ -38,6 +38,11 @@ def set_device(device): if isinstance(device, int): _check(_bf.bfDeviceSet(device)) else: + try: + device = device.encode() + except AttributeError: + # Python2 catch + pass _check(_bf.bfDeviceSetById(device)) def get_device(): From e1d6b78b50656f7fed22e0fb19a9fa8047675e17 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 15:42:10 -0600 Subject: [PATCH 0459/1155] Small formatting cleanup. --- src/map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map.cpp b/src/map.cpp index f5264fd0c..27378c8a8 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -555,7 +555,7 @@ class DiskCacheMgr { kernel.set(kernel_name.c_str(), ptx.c_str()); kernel_cache->insert(cache_key, - std::make_pair(kernel, basic_indexing_only)); + std::make_pair(kernel, basic_indexing_only)); } // Done From e768e2ea0aaadf7a250c9d98d127d00791ebe9f8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 21:14:44 -0600 Subject: [PATCH 0460/1155] Is this the answer? --- src/Socket.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index ea9e80cd4..b16b1e297 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -137,6 +137,7 @@ client.send/recv_block/packet(...); #if defined __APPLE__ && __APPLE__ #include +#include #include #define SOCK_NONBLOCK O_NONBLOCK @@ -609,7 +610,7 @@ void Socket::bind(sockaddr_storage local_address, // ... and work accordingly if( !multicast ) { // Normal address - check_error(::bind(_fd, (struct sockaddr*)&local_address, sizeof(local_address)), + check_error(::bind(_fd, (struct sockaddr*)&local_address, sizeof(struct sockaddr)), "bind socket"); if( _type == SOCK_STREAM ) { check_error(::listen(_fd, max_conn_queue), From 7cc53ecc2de2610aa7a6beb3598c0e70b1d5a52b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 24 Mar 2022 21:18:11 -0600 Subject: [PATCH 0461/1155] Removing debugging. --- test/test_udp_io.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index bee98bbfa..2f677d29a 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -143,7 +143,7 @@ def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ 'npol': 4, 'complex': False, 'nbit': 32} - print("******** HDR:", hdr) + #print("******** HDR:", hdr) try: hdr_str = json.dumps(hdr).encode() except AttributeError: @@ -258,7 +258,6 @@ def test_read_tbn(self): # Compare ## Reorder to match what we sent out final = np.array(final, dtype=np.uint8) - print('tbn_final:', final.shape) final = final.reshape(-1,512,32,2) final = final.transpose(0,2,1,3).copy() final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8', buffer=final.ctypes.data) @@ -477,7 +476,6 @@ def test_read_pbeam(self): # Compare ## Reorder to match what we sent out final = np.array(final, dtype=np.float32) - print("final:", final.shape) final = final.reshape(-1,128*4,1) final = final.transpose(0,2,1).copy() ## Reduce to match the capture block size From a57921f27cf9078bf18b8ef1387f5be1d156e2d4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 06:04:20 -0600 Subject: [PATCH 0462/1155] Style. --- src/fileutils.hpp | 4 ++-- src/map.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/fileutils.hpp b/src/fileutils.hpp index a321243d2..5a01e9af0 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -35,7 +35,7 @@ #include // For getpwuid #include -#if defined __APPLE__ && __APPLE__ +#if defined(__APPLE__) && __APPLE__ #include #endif @@ -72,7 +72,7 @@ inline bool file_exists(std::string path) { && errno == ENOENT); } inline bool process_exists(pid_t pid) { -#if defined __APPLE__ && __APPLE__ +#if defined(__APPLE__) && __APPLE__ // Based on information from: // https://developer.apple.com/library/archive/qa/qa2001/qa1123.html diff --git a/src/map.cpp b/src/map.cpp index 27378c8a8..ebc589a2b 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -395,7 +395,7 @@ BFstatus build_map_kernel(int* external_ndim, return BF_STATUS_SUCCESS; } -#if defined BF_GPU_MAP_CACHE && BF_GPU_MAP_CACHE +#if defined(BF_GPU_MAP_CACHE) && BF_GPU_MAP_CACHE class DiskCacheMgr { std::string _cachedir; std::string _indexfile; @@ -688,7 +688,7 @@ BFstatus bfMap(int ndim, } std::string cache_key = cache_key_ss.str(); -#if defined BF_GPU_MAP_CACHE && BF_GPU_MAP_CACHE +#if defined(BF_GPU_MAP_CACHE) && BF_GPU_MAP_CACHE DiskCacheMgr::get().load(&kernel_cache); #endif @@ -719,7 +719,7 @@ BFstatus bfMap(int ndim, BF_TRY(kernel.set(kernel_name.c_str(), ptx.c_str())); kernel_cache.insert(cache_key, std::make_pair(kernel, basic_indexing_only)); -#if defined BF_GPU_MAP_CACHE && BF_GPU_MAP_CACHE +#if defined(BF_GPU_MAP_CACHE) && BF_GPU_MAP_CACHE DiskCacheMgr::get().save(cache_key, kernel_name, ptx, basic_indexing_only); #endif } @@ -785,7 +785,7 @@ BFstatus bfMap(int ndim, } BFstatus bfMapClearCache() { -#if defined BF_GPU_MAP_CACHE && BF_GPU_MAP_CACHE +#if defined(BF_GPU_MAP_CACHE) && BF_GPU_MAP_CACHE DiskCacheMgr::get().clear(); #endif return BF_STATUS_SUCCESS; From 8851fb7fa2e6901063096e594e317c4586cb2f94 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 06:05:55 -0600 Subject: [PATCH 0463/1155] Not really a value for config.h. --- src/bifrost/config.h.in | 1 - src/map.cpp | 6 +++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index e0736c7a5..96c26ae69 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -49,7 +49,6 @@ extern "C" { #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ #define BF_GPU_MAP_CACHE @HAVE_MAP_CACHE@ -#define BF_GPU_MAP_CACHE_SIZE 128 #define BF_GPU_MAP_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) // Features diff --git a/src/map.cpp b/src/map.cpp index ebc589a2b..4b7001463 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -38,6 +38,10 @@ bfMap(3, c.shape, {"dm", "t"}, // This enables print-out of generated source and PTX //#define BF_DEBUG_RTC 1 +#ifndef BF_MAP_KERNEL_CACHE_SIZE +#define BF_MAP_KERNEL_CACHE_SIZE 128 +#endif + #include #include #include "fileutils.hpp" @@ -628,7 +632,7 @@ BFstatus bfMap(int ndim, int const block_axes[2]) { // Map containing compiled kernels and basic_indexing_only flag thread_local static ObjectCache > - kernel_cache(BF_GPU_MAP_CACHE_SIZE); + kernel_cache(BF_MAP_KERNEL_CACHE_SIZE); BF_ASSERT(ndim >= 0, BF_STATUS_INVALID_ARGUMENT); //BF_ASSERT(!ndim || shape, BF_STATUS_INVALID_POINTER); //BF_ASSERT(!ndim || axis_names, BF_STATUS_INVALID_POINTER); From 3547518a307498a6eec91f75869c5976430d55ac Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 06:10:50 -0600 Subject: [PATCH 0464/1155] More descriptive name. --- src/bifrost/config.h.in | 4 ++-- src/map.cpp | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 96c26ae69..3738259db 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -48,8 +48,8 @@ extern "C" { #define BF_GPU_MAX_ARCH @GPU_MAX_ARCH@ #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ -#define BF_GPU_MAP_CACHE @HAVE_MAP_CACHE@ -#define BF_GPU_MAP_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) +#define BF_MAP_KERNEL_DISK_CACHE @HAVE_MAP_CACHE@ +#define BF_MAP_KERNEL_DISK_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) // Features #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ diff --git a/src/map.cpp b/src/map.cpp index 4b7001463..63d1621f7 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -399,7 +399,7 @@ BFstatus build_map_kernel(int* external_ndim, return BF_STATUS_SUCCESS; } -#if defined(BF_GPU_MAP_CACHE) && BF_GPU_MAP_CACHE +#if defined(BF_MAP_KERNEL_DISK_CACHE) && BF_MAP_KERNEL_DISK_CACHE class DiskCacheMgr { std::string _cachedir; std::string _indexfile; @@ -420,7 +420,7 @@ class DiskCacheMgr { if( !file_exists(_cachedir + "cache.version") ) { try { info.open(_cachedir + "cache.version", std::ios::out); - info << BF_GPU_MAP_CACHE_VERSION << " " << rt << " " << drv << endl; + info << BF_MAP_KERNEL_DISK_CACHE_VERSION << " " << rt << " " << drv << endl; info.close(); } catch( std::exception ) {} } @@ -447,7 +447,7 @@ class DiskCacheMgr { cached_mc = cached_rt = cached_drv = -1; } - if( BF_GPU_MAP_CACHE_VERSION != cached_mc || rt != cached_rt || drv != cached_drv ) { + if( BF_MAP_KERNEL_DISK_CACHE_VERSION != cached_mc || rt != cached_rt || drv != cached_drv ) { status = false; } @@ -692,7 +692,7 @@ BFstatus bfMap(int ndim, } std::string cache_key = cache_key_ss.str(); -#if defined(BF_GPU_MAP_CACHE) && BF_GPU_MAP_CACHE +#if defined(BF_MAP_KERNEL_DISK_CACHE) && BF_MAP_KERNEL_DISK_CACHE DiskCacheMgr::get().load(&kernel_cache); #endif @@ -723,7 +723,7 @@ BFstatus bfMap(int ndim, BF_TRY(kernel.set(kernel_name.c_str(), ptx.c_str())); kernel_cache.insert(cache_key, std::make_pair(kernel, basic_indexing_only)); -#if defined(BF_GPU_MAP_CACHE) && BF_GPU_MAP_CACHE +#if defined(BF_MAP_KERNEL_DISK_CACHE) && BF_MAP_KERNEL_DISK_CACHE DiskCacheMgr::get().save(cache_key, kernel_name, ptx, basic_indexing_only); #endif } @@ -789,7 +789,7 @@ BFstatus bfMap(int ndim, } BFstatus bfMapClearCache() { -#if defined(BF_GPU_MAP_CACHE) && BF_GPU_MAP_CACHE +#if defined(BF_MAP_KERNEL_DISK_CACHE) && BF_MAP_KERNEL_DISK_CACHE DiskCacheMgr::get().clear(); #endif return BF_STATUS_SUCCESS; From 1f8b80f585dbdcea559fc1b498c6b0851b5318a7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 06:27:13 -0600 Subject: [PATCH 0465/1155] Match what is in #135. --- src/fileutils.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileutils.hpp b/src/fileutils.hpp index 5a01e9af0..77a48bbde 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -47,7 +47,7 @@ inline std::string get_home_dir(void) { return std::string(homedir); } inline void make_dir(std::string path, int perms=775) { - if( std::system(("mkdir -p "+path+" -m "+std::to_string(perms)).c_str()) ) { + if( std::system(("mkdir -p -m "+std::to_string(perms)+" "+path).c_str()) ) { throw std::runtime_error("Failed to create path: "+path); } } From 50b5277da972fecf1c36c5b6490faf887760acb7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 06:31:14 -0600 Subject: [PATCH 0466/1155] Ugh. --- python/bifrost/map.py | 6 +++--- python/bifrost/version/__main__.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/bifrost/map.py b/python/bifrost/map.py index a02f7dfb7..dc652b248 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -37,7 +37,7 @@ import ctypes import glob import os -from bifrost.libbifrost_generated import BF_GPU_MAP_CACHE +from bifrost.libbifrost_generated import BF_MAP_KERNEL_DISK_CACHE from bifrost import telemetry telemetry.track_module() @@ -147,8 +147,8 @@ def map(func_string, data, axis_names=None, shape=None, _array(block_shape), _array(block_axes))) def list_map_cache(): - output = "Cache enabled: %s" % ('yes' if BF_GPU_MAP_CACHE else 'no') - if BF_GPU_MAP_CACHE: + output = "Cache enabled: %s" % ('yes' if BF_MAP_KERNEL_DISK_CACHE else 'no') + if BF_MAP_KERNEL_DISK_CACHE: cache_path = os.path.join(os.path.expanduser('~'), '.bifrost', 'map_cache') try: with open(os.path.join(cache_path, 'cache.version'), 'r') as fh: diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index f6c1eedc4..19451f8f9 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -29,6 +29,6 @@ def _yes_no(value): print(" CUDA architectures: %s" % BF_GPU_ARCHS) print(" CUDA shared memory: %i B" % BF_GPU_SHAREDMEM) print(" CUDA managed memory support: %s" % _yes_no(BF_GPU_MANAGEDMEM)) - print(" CUDA map cache: %s" % _yes_no(BF_GPU_MAP_CACHE)) + print(" CUDA map cache: %s" % _yes_no(BF_MAP_KERNEL_DISK_CACHE)) print(" CUDA debugging: %s" % _yes_no(BF_CUDA_DEBUG_ENABLED)) print(" CUDA tracing enabled: %s" % _yes_no(BF_TRACE_ENABLED)) From 87ac1ababe769fefc47d098a2106094c35763d31 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 06:40:54 -0600 Subject: [PATCH 0467/1155] Switch to a global control variable. --- test/test_map.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_map.py b/test/test_map.py index 1a9356c9c..d5bdd8d54 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -32,16 +32,16 @@ from bifrost.libbifrost_generated import BF_CUDA_ENABLED +_FIRST_TEST = True + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestMap(unittest.TestCase): - first_test = True - # TODO: @classmethod; def setUpClass(kls) def setUp(self): np.random.seed(1234) - if self.first_test: + if _FIRST_TEST: bf.clear_map_cache() - self.first_test = False + _FIRST_TEST = False def run_simple_test(self, x, funcstr, func): x_orig = x x = bf.asarray(x, 'cuda') From 599ac73f1a05b70bc16aa3ceb817531e079e49d7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 06:42:44 -0600 Subject: [PATCH 0468/1155] Switch to a global control variable. --- test/test_map.py | 1 + test/test_transpose.py | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/test/test_map.py b/test/test_map.py index d5bdd8d54..b4dc53fcf 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -39,6 +39,7 @@ class TestMap(unittest.TestCase): # TODO: @classmethod; def setUpClass(kls) def setUp(self): np.random.seed(1234) + global _FIRST_TEST if _FIRST_TEST: bf.clear_map_cache() _FIRST_TEST = False diff --git a/test/test_transpose.py b/test/test_transpose.py index 6102c3486..a073e5caa 100644 --- a/test/test_transpose.py +++ b/test/test_transpose.py @@ -33,15 +33,16 @@ from bifrost.libbifrost_generated import BF_CUDA_ENABLED, BF_FLOAT128_ENABLED +_FIRST_TEST = True + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TransposeTest(unittest.TestCase): - first_test = True - # TODO: @classmethod; def setUpClass(kls) def setUp(self): - if self.first_test: + global _FIRST_TEST + if _FIRST_TEST: bf.clear_map_cache() - self.first_test = False + _FIRST_TEST = False def run_simple_test(self, axes, dtype, shape): n = reduce(lambda a,b:a*b, shape) idata = (np.arange(n).reshape(shape) % 251).astype(dtype) From d300068893d2512a72a5b40c34b4766686c61c97 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 06:55:21 -0600 Subject: [PATCH 0469/1155] More specific. --- python/bifrost/version/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index 19451f8f9..6db9cda00 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -29,6 +29,6 @@ def _yes_no(value): print(" CUDA architectures: %s" % BF_GPU_ARCHS) print(" CUDA shared memory: %i B" % BF_GPU_SHAREDMEM) print(" CUDA managed memory support: %s" % _yes_no(BF_GPU_MANAGEDMEM)) - print(" CUDA map cache: %s" % _yes_no(BF_MAP_KERNEL_DISK_CACHE)) + print(" CUDA map disk cache: %s" % _yes_no(BF_MAP_KERNEL_DISK_CACHE)) print(" CUDA debugging: %s" % _yes_no(BF_CUDA_DEBUG_ENABLED)) print(" CUDA tracing enabled: %s" % _yes_no(BF_TRACE_ENABLED)) From 1b98a1888744e24c03c5b862074affedfd8a366f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 08:18:39 -0600 Subject: [PATCH 0470/1155] Work on addressing #155 where slices interact poorly with . --- src/reduce.cu | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/reduce.cu b/src/reduce.cu index 363751e69..9801876b9 100644 --- a/src/reduce.cu +++ b/src/reduce.cu @@ -288,20 +288,24 @@ BFstatus reduce_itype_otype(BFarray const* in, ndim > 2 ? out->strides[ndim-1-2] : 0, 0); bool use_vec2_kernel = ( + is_contiguous(in) && istride_reduce == 1 && reduce_size == 2 && istrides.x % 2 == 0 && istrides.y % 2 == 0 && istrides.z % 2 == 0); //std::cout << istride_reduce << ", " << reduce_size << ", " << istrides.x << ", " << istrides.y << ", " << istrides.z << std::endl; bool use_vec4_kernel = ( + is_contiguous(in) && istride_reduce == 1 && reduce_size == 4 && istrides.x % 4 == 0 && istrides.y % 4 == 0 && istrides.z % 4 == 0); bool use_vec8_kernel = ( + is_contiguous(in) && sizeof(IType) <= 2 && istride_reduce == 1 && reduce_size == 8 && istrides.x % 8 == 0 && istrides.y % 8 == 0 && istrides.z % 8 == 0); bool use_vec16_kernel = ( + is_contiguous(in) && sizeof(IType) == 1 && istride_reduce == 1 && reduce_size == 16 && From 0784c9d52514e4f512c3bf4bcff14cc34df14001 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 10:35:55 -0600 Subject: [PATCH 0471/1155] I think this is a better check for the input data. --- src/reduce.cu | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/src/reduce.cu b/src/reduce.cu index 9801876b9..7fc03d983 100644 --- a/src/reduce.cu +++ b/src/reduce.cu @@ -243,6 +243,11 @@ void launch_reduce_loop_kernel(IType const* in, BF_STATUS_INTERNAL_ERROR); } +inline bool is_reduce_vector_aligned(BFarray const* in, + long reduce_size) { + return ((((uint64_t) in->data) / BF_DTYPE_NBYTE(in->dtype) % reduce_size) == 0); +} + template BFstatus reduce_itype_otype(BFarray const* in, BFarray const* out, @@ -288,29 +293,29 @@ BFstatus reduce_itype_otype(BFarray const* in, ndim > 2 ? out->strides[ndim-1-2] : 0, 0); bool use_vec2_kernel = ( - is_contiguous(in) && istride_reduce == 1 && reduce_size == 2 && - istrides.x % 2 == 0 && istrides.y % 2 == 0 && istrides.z % 2 == 0); + istrides.x % 2 == 0 && istrides.y % 2 == 0 && istrides.z % 2 == 0 && + is_reduce_vector_aligned(in, reduce_size)); //std::cout << istride_reduce << ", " << reduce_size << ", " << istrides.x << ", " << istrides.y << ", " << istrides.z << std::endl; bool use_vec4_kernel = ( - is_contiguous(in) && istride_reduce == 1 && reduce_size == 4 && - istrides.x % 4 == 0 && istrides.y % 4 == 0 && istrides.z % 4 == 0); + istrides.x % 4 == 0 && istrides.y % 4 == 0 && istrides.z % 4 == 0 && + is_reduce_vector_aligned(in, reduce_size)); bool use_vec8_kernel = ( - is_contiguous(in) && sizeof(IType) <= 2 && istride_reduce == 1 && reduce_size == 8 && - istrides.x % 8 == 0 && istrides.y % 8 == 0 && istrides.z % 8 == 0); + istrides.x % 8 == 0 && istrides.y % 8 == 0 && istrides.z % 8 == 0 && + is_reduce_vector_aligned(in, reduce_size)); bool use_vec16_kernel = ( - is_contiguous(in) && sizeof(IType) == 1 && istride_reduce == 1 && reduce_size == 16 && - istrides.x % 16 == 0 && istrides.y % 16 == 0 && istrides.z % 16 == 0); - + istrides.x % 16 == 0 && istrides.y % 16 == 0 && istrides.z % 16 == 0 && + is_reduce_vector_aligned(in, reduce_size)); + if( use_vec2_kernel ) { BF_TRY_RETURN( launch_reduce_vector_kernel<2>((IType*)in->data, (OType*)out->data, @@ -557,17 +562,20 @@ BFstatus reduce_complex_standard_itype_otype(BFarray const* in, bool use_vec2_kernel = ( istride_reduce == 1 && reduce_size == 2 && - istrides.x % 2 == 0 && istrides.y % 2 == 0 && istrides.z % 2 == 0); + istrides.x % 2 == 0 && istrides.y % 2 == 0 && istrides.z % 2 == 0 && + is_reduce_vector_aligned(in, reduce_size)); //std::cout << istride_reduce << ", " << reduce_size << ", " << istrides.x << ", " << istrides.y << ", " << istrides.z << std::endl; bool use_vec4_kernel = ( istride_reduce == 1 && reduce_size == 4 && - istrides.x % 4 == 0 && istrides.y % 4 == 0 && istrides.z % 4 == 0); + istrides.x % 4 == 0 && istrides.y % 4 == 0 && istrides.z % 4 == 0 && + is_reduce_vector_aligned(in, reduce_size)); bool use_vec8_kernel = ( sizeof(IType) <= 2 && istride_reduce == 1 && reduce_size == 8 && - istrides.x % 8 == 0 && istrides.y % 8 == 0 && istrides.z % 8 == 0); + istrides.x % 8 == 0 && istrides.y % 8 == 0 && istrides.z % 8 == 0 && + is_reduce_vector_aligned(in, reduce_size)); if( use_vec2_kernel ) { BF_TRY_RETURN( @@ -800,17 +808,20 @@ BFstatus reduce_complex_power_itype_otype(BFarray const* in, bool use_vec2_kernel = ( istride_reduce == 1 && reduce_size == 2 && - istrides.x % 2 == 0 && istrides.y % 2 == 0 && istrides.z % 2 == 0); + istrides.x % 2 == 0 && istrides.y % 2 == 0 && istrides.z % 2 == 0 && + is_reduce_vector_aligned(in, reduce_size)); //std::cout << istride_reduce << ", " << reduce_size << ", " << istrides.x << ", " << istrides.y << ", " << istrides.z << std::endl; bool use_vec4_kernel = ( istride_reduce == 1 && reduce_size == 4 && - istrides.x % 4 == 0 && istrides.y % 4 == 0 && istrides.z % 4 == 0); + istrides.x % 4 == 0 && istrides.y % 4 == 0 && istrides.z % 4 == 0 && + is_reduce_vector_aligned(in, reduce_size)); bool use_vec8_kernel = ( sizeof(IType) <= 2 && istride_reduce == 1 && reduce_size == 8 && - istrides.x % 8 == 0 && istrides.y % 8 == 0 && istrides.z % 8 == 0); + istrides.x % 8 == 0 && istrides.y % 8 == 0 && istrides.z % 8 == 0 && + is_reduce_vector_aligned(in, reduce_size)); if( use_vec2_kernel ) { BF_TRY_RETURN( From 5dd1a385e0bbff19e5771b816b2c340c96e861ec Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Mar 2022 11:20:34 -0600 Subject: [PATCH 0472/1155] Add in tests for calling reduce with an input array that is a slice. --- test/test_reduce.py | 83 +++++++++++++++++++++++++++++++++------------ 1 file changed, 62 insertions(+), 21 deletions(-) diff --git a/test/test_reduce.py b/test/test_reduce.py index 73bec5c77..f6f0797c6 100644 --- a/test/test_reduce.py +++ b/test/test_reduce.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,6 +25,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from __future__ import division + import unittest import numpy as np import bifrost as bf @@ -77,16 +79,33 @@ def run_reduce_test(self, shape, axis, n, op='sum', dtype=np.float32): a = bf.asarray(a, space='cuda') b = bf.empty_like(b_gold, space='cuda') bf.reduce(a, b, op) - #for _ in range(10): - # bf.reduce(a, b, op) - #bf.device.stream_synchronize(); - #t0 = time.time() - #nrep = 30 - #for _ in range(nrep): - # bf.reduce(a, b, op) - #bf.device.stream_synchronize(); - #dt = time.time() - t0 - #print nrep * (a.nbytes + b.nbytes) / dt / 1e9, 'GB/s', shape, axis, n, dtype + b = b.copy('system') + np.testing.assert_allclose(b, b_gold) + def run_reduce_slice_test(self, shape, axis, n, op='sum', dtype=np.float32): + if n is None: + return None + a = ((np.random.random(size=shape)*2-1)*127).astype(np.int8).astype(dtype) + if axis == 0: + a_slice = a[1:((a.shape[0]-1)//n-1)*n+1,...] + elif axis == 1: + a_slice = a[:,1:((a.shape[1]-1)//n-1)*n+1,:] + else: + a_slice = a[...,1:((a.shape[-1]-1)//n-1)*n+1] + if a_slice.shape[0] == 0 or a_slice.shape[1] == 0 or a_slice.shape[-1] == 0: + return None + if op[:3] == 'pwr': + b_gold = pwrscrunch(a_slice.astype(np.float32), n, axis, NP_OPS[op[3:]]) + else: + b_gold = scrunch(a_slice.astype(np.float32), n, axis, NP_OPS[op]) + a = bf.ndarray(a, space='cuda') + if axis == 0: + a_slice = a[1:((a.shape[0]-1)//n-1)*n+1,...] + elif axis == 1: + a_slice = a[:,1:((a.shape[1]-1)//n-1)*n+1,:] + else: + a_slice = a[...,1:((a.shape[-1]-1)//n-1)*n+1] + b = bf.empty_like(b_gold, space='cuda') + bf.reduce(a_slice, b, op) b = b.copy('system') np.testing.assert_allclose(b, b_gold) def test_reduce(self): @@ -98,6 +117,7 @@ def test_reduce(self): for dtype in [np.float32, np.int16, np.int8]: #print shape, axis, n, op, dtype self.run_reduce_test(shape, axis, n, op, dtype) + self.run_reduce_slice_test(shape, axis, n, op, dtype) def test_reduce_pow2(self): for shape in [(16,32,64), (16,64,256), (256,64,16)]:#, (256, 256, 512)]: for axis in range(3): @@ -106,6 +126,7 @@ def test_reduce_pow2(self): for dtype in [np.float32, np.int16, np.int8]: #print shape, axis, n, op, dtype self.run_reduce_test(shape, axis, n, op, dtype) + self.run_reduce_slice_test(shape, axis, n, op, dtype) def run_complex_reduce_test(self, shape, axis, n, op='sum', dtype=np.complex64): a = ((np.random.random(size=shape)*2-1)*127).astype(np.int8).astype(dtype) \ @@ -117,16 +138,34 @@ def run_complex_reduce_test(self, shape, axis, n, op='sum', dtype=np.complex64): a = bf.asarray(a, space='cuda') b = bf.empty_like(b_gold, space='cuda') bf.reduce(a, b, op) - #for _ in range(10): - # bf.reduce(a, b, op) - #bf.device.stream_synchronize(); - #t0 = time.time() - #nrep = 30 - #for _ in range(nrep): - # bf.reduce(a, b, op) - #bf.device.stream_synchronize(); - #dt = time.time() - t0 - #print nrep * (a.nbytes + b.nbytes) / dt / 1e9, 'GB/s', shape, axis, n, dtype + b = b.copy('system') + np.testing.assert_allclose(b, b_gold, rtol=1e-3 if op[:3] == 'pwr' else 1e-7) + def run_complex_reduce_slice_test(self, shape, axis, n, op='sum', dtype=np.float32): + if n is None: + return None + a = ((np.random.random(size=shape)*2-1)*127).astype(np.int8).astype(dtype) \ + + 1j*((np.random.random(size=shape)*2-1)*127).astype(np.int8).astype(dtype) + if axis == 0: + a_slice = a[1:((a.shape[0]-1)//n-1)*n+1,...] + elif axis == 1: + a_slice = a[:,1:((a.shape[1]-1)//n-1)*n+1,:] + else: + a_slice = a[...,1:((a.shape[-1]-1)//n-1)*n+1] + if a_slice.shape[0] == 0 or a_slice.shape[1] == 0 or a_slice.shape[-1] == 0: + return None + if op[:3] == 'pwr': + b_gold = pwrscrunch(a_slice.astype(np.complex64), n, axis, NP_OPS[op[3:]]) + else: + b_gold = scrunch(a_slice.astype(np.complex64), n, axis, NP_OPS[op]) + a = bf.ndarray(a, space='cuda') + if axis == 0: + a_slice = a[1:((a.shape[0]-1)//n-1)*n+1,...] + elif axis == 1: + a_slice = a[:,1:((a.shape[1]-1)//n-1)*n+1,:] + else: + a_slice = a[...,1:((a.shape[-1]-1)//n-1)*n+1] + b = bf.empty_like(b_gold, space='cuda') + bf.reduce(a_slice, b, op) b = b.copy('system') np.testing.assert_allclose(b, b_gold, rtol=1e-3 if op[:3] == 'pwr' else 1e-7) def test_complex_reduce(self): @@ -138,6 +177,7 @@ def test_complex_reduce(self): for dtype in [np.complex64,]: #print shape, axis, n, op, dtype self.run_complex_reduce_test(shape, axis, n, op, dtype) + self.run_complex_reduce_slice_test(shape, axis, n, op, dtype) def test_complex_reduce_pow2(self): for shape in [(16,32,64), (16,64,256), (256,64,16)]:#, (256, 256, 512)]: for axis in range(3): @@ -146,3 +186,4 @@ def test_complex_reduce_pow2(self): for dtype in [np.complex64,]: #print shape, axis, n, op, dtype self.run_complex_reduce_test(shape, axis, n, op, dtype) + self.run_complex_reduce_slice_test(shape, axis, n, op, dtype) From c13750758a21f9d687c4f99b4741b3ee3d77bd13 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sat, 26 Mar 2022 09:12:54 -0400 Subject: [PATCH 0473/1155] In fileutils, catch polymorphic exceptions as references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit My g++ 10.3 was throwing this warning, and I'm reading it could mean that subclass exceptions would not match. There are other places in the code that use `const&` in a `catch` so I assume fix is compatible with other compilers we encounter. ``` map.cpp:425:21: warning: catching polymorphic type ‘class std::exception’ by value [ -Wcatch-value=] 425 | } catch( std::exception ) {} | ^~~~~~~~~ ``` --- src/map.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 63d1621f7..da97bba73 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -422,7 +422,7 @@ class DiskCacheMgr { info.open(_cachedir + "cache.version", std::ios::out); info << BF_MAP_KERNEL_DISK_CACHE_VERSION << " " << rt << " " << drv << endl; info.close(); - } catch( std::exception ) {} + } catch( std::exception const& ) {} } } @@ -443,7 +443,7 @@ class DiskCacheMgr { // Close info.close(); - } catch( std::exception ) { + } catch( std::exception const& ) { cached_mc = cached_rt = cached_drv = -1; } @@ -456,7 +456,7 @@ class DiskCacheMgr { remove_file(_cachedir + "*.inf"); remove_file(_cachedir + "*.ptx"); remove_file(_cachedir + "cache.version"); - } catch( std::exception ) {} + } catch( std::exception const& ) {} } } @@ -497,7 +497,7 @@ class DiskCacheMgr { // Done index.close(); cache.close(); - } catch( std::exception ) {} + } catch( std::exception const& ) {} } void load_from_disk(ObjectCache > *kernel_cache) { @@ -565,7 +565,7 @@ class DiskCacheMgr { // Done index.close(); cache.close(); - } catch( std::exception) {} + } catch( std::exception const&) {} } } closedir(dir); @@ -578,7 +578,7 @@ class DiskCacheMgr { try { remove_file(_cachedir + "*.inf"); remove_file(_cachedir + "*.ptx"); - } catch( std::exception ) {} + } catch( std::exception const& ) {} } DiskCacheMgr() From d050c349382adaabe8a16232b6dc3f3024badf9d Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sat, 26 Mar 2022 09:45:43 -0400 Subject: [PATCH 0474/1155] Separate fileutils.cpp, to avoid inline duplication --- src/Makefile.in | 1 + src/fileutils.cpp | 124 ++++++++++++++++++++++++++++++++++++++++++++++ src/fileutils.hpp | 101 ++++--------------------------------- 3 files changed, 135 insertions(+), 91 deletions(-) create mode 100644 src/fileutils.cpp diff --git a/src/Makefile.in b/src/Makefile.in index a53ca6596..e2f5eda2b 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -32,6 +32,7 @@ LIBBIFROST_OBJS = \ memory.o \ affinity.o \ cuda.o \ + fileutils.o \ ring.o \ ring_impl.o \ array.o \ diff --git a/src/fileutils.cpp b/src/fileutils.cpp new file mode 100644 index 000000000..25d6a8a08 --- /dev/null +++ b/src/fileutils.cpp @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fileutils.hpp" + +std::string get_home_dir(void) { + const char *homedir; + if ((homedir = getenv("HOME")) == NULL) { + homedir = getpwuid(getuid())->pw_dir; + } + return std::string(homedir); +} +void make_dir(std::string path, int perms) { + if( std::system(("mkdir -p -m "+std::to_string(perms)+" "+path).c_str()) ) { + throw std::runtime_error("Failed to create path: "+path); + } +} +void remove_all(std::string path) { + if( std::system(("rm -rf "+path).c_str()) ) { + throw std::runtime_error("Failed to remove all: "+path); + } +} +void remove_dir(std::string path) { + if( std::system(("rmdir "+path+" 2> /dev/null").c_str()) ) { + throw std::runtime_error("Failed to remove dir: "+path); + } +} +void remove_file(std::string path) { + if( std::system(("rm -f "+path).c_str()) ) { + throw std::runtime_error("Failed to remove file: "+path); + } +} +bool file_exists(std::string path) { + struct stat s; + return !(stat(path.c_str(), &s) == -1 + && errno == ENOENT); +} +bool process_exists(pid_t pid) { +#if defined(__APPLE__) && __APPLE__ + + // Based on information from: + // https://developer.apple.com/library/archive/qa/qa2001/qa1123.html + + static const int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 }; + kinfo_proc *proclist = NULL; + int err, found = 0; + size_t len, count; + len = 0; + err = sysctl((int *) name, (sizeof(name) / sizeof(*name)) - 1, + NULL, &len, NULL, 0); + if( err == 0 ) { + proclist = (kinfo_proc*) ::malloc(len); + err = sysctl((int *) name, (sizeof(name) / sizeof(*name)) - 1, + proclist, &len, NULL, 0); + if( err == 0 ) { + count = len / sizeof(kinfo_proc); + for(int i=0; i #endif -inline std::string get_home_dir(void) { - const char *homedir; - if ((homedir = getenv("HOME")) == NULL) { - homedir = getpwuid(getuid())->pw_dir; - } - return std::string(homedir); -} -inline void make_dir(std::string path, int perms=775) { - if( std::system(("mkdir -p -m "+std::to_string(perms)+" "+path).c_str()) ) { - throw std::runtime_error("Failed to create path: "+path); - } -} -inline void remove_all(std::string path) { - if( std::system(("rm -rf "+path).c_str()) ) { - throw std::runtime_error("Failed to remove all: "+path); - } -} -inline void remove_dir(std::string path) { - if( std::system(("rmdir "+path+" 2> /dev/null").c_str()) ) { - throw std::runtime_error("Failed to remove dir: "+path); - } -} -inline void remove_file(std::string path) { - if( std::system(("rm -f "+path).c_str()) ) { - throw std::runtime_error("Failed to remove file: "+path); - } -} -inline bool file_exists(std::string path) { - struct stat s; - return !(stat(path.c_str(), &s) == -1 - && errno == ENOENT); -} -inline bool process_exists(pid_t pid) { -#if defined(__APPLE__) && __APPLE__ - - // Based on information from: - // https://developer.apple.com/library/archive/qa/qa2001/qa1123.html - - static const int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 }; - kinfo_proc *proclist = NULL; - int err, found = 0; - size_t len, count; - len = 0; - err = sysctl((int *) name, (sizeof(name) / sizeof(*name)) - 1, - NULL, &len, NULL, 0); - if( err == 0 ) { - proclist = (kinfo_proc*) ::malloc(len); - err = sysctl((int *) name, (sizeof(name) / sizeof(*name)) - 1, - proclist, &len, NULL, 0); - if( err == 0 ) { - count = len / sizeof(kinfo_proc); - for(int i=0; i Date: Sat, 26 Mar 2022 08:27:57 -0600 Subject: [PATCH 0475/1155] If using the map cache always target the lowest arch. that the library was configured for. --- config/cuda.m4 | 3 +++ configure | 6 ++++++ src/bifrost/config.h.in | 1 + src/map.cpp | 4 ++++ 4 files changed, 14 insertions(+) diff --git a/config/cuda.m4 b/config/cuda.m4 index dabcdfa19..23c1cec46 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -16,6 +16,7 @@ AC_DEFUN([AX_CHECK_CUDA], AC_SUBST([HAVE_CUDA], [0]) AC_SUBST([CUDA_VERSION], [0]) + AC_SUBST([GPU_MIN_ARCH], [0]) AC_SUBST([GPU_MAX_ARCH], [0]) if test "$enable_cuda" != "no"; then AC_SUBST([HAVE_CUDA], [1]) @@ -165,6 +166,8 @@ AC_DEFUN([AX_CHECK_CUDA], AC_MSG_ERROR(only '$ar_valid' are supported) fi + ar_min_valid=$(echo $ar_valid | ${SED} -e 's/ .*//g;' ) + AC_SUBST([GPU_MIN_ARCH], [$ar_min_valid]) ar_max_valid=$(echo $ar_valid | ${SED} -e 's/.* //g;' ) AC_SUBST([GPU_MAX_ARCH], [$ar_max_valid]) diff --git a/configure b/configure index 2ede5b2cd..bda1a6ca2 100755 --- a/configure +++ b/configure @@ -721,6 +721,7 @@ CUOBJDUMP NVPRUNE NVCC GPU_MAX_ARCH +GPU_MIN_ARCH CUDA_VERSION HAVE_CUDA CUDA_HOME @@ -19315,6 +19316,8 @@ fi CUDA_VERSION=0 + GPU_MIN_ARCH=0 + GPU_MAX_ARCH=0 if test "$enable_cuda" != "no"; then @@ -19682,6 +19685,9 @@ printf "%s\n" "yes" >&6; } as_fn_error $? "only '$ar_valid' are supported" "$LINENO" 5 fi + ar_min_valid=$(echo $ar_valid | ${SED} -e 's/ .*//g;' ) + GPU_MIN_ARCH=$ar_min_valid + ar_max_valid=$(echo $ar_valid | ${SED} -e 's/.* //g;' ) GPU_MAX_ARCH=$ar_max_valid diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 3738259db..66ef807fb 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -45,6 +45,7 @@ extern "C" { #define BF_CUDA_ENABLED @HAVE_CUDA@ #define BF_CUDA_VERSION @CUDA_VERSION@ #define BF_GPU_ARCHS "@GPU_ARCHS@" +#define BF_GPU_MIN_ARCH @GPU_MIN_ARCH@ #define BF_GPU_MAX_ARCH @GPU_MAX_ARCH@ #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ diff --git a/src/map.cpp b/src/map.cpp index 63d1621f7..116ce5862 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -343,7 +343,11 @@ BFstatus build_map_kernel(int* external_ndim, options.push_back("--device-as-default-execution-space"); options.push_back("--use_fast_math"); std::stringstream cc_ss; +#if defined(BF_MAP_KERNEL_DISK_CACHE) && BF_MAP_KERNEL_DISK_CACHE + cc_ss << "compute_" << BF_GPU_MIN_ARCH; +#else cc_ss << "compute_" << get_cuda_device_cc(); +#endif options.push_back("-arch="+cc_ss.str()); options.push_back("--restrict"); std::vector options_c; From 5724141cb5af589b37684dca2563618079e14fb2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 26 Mar 2022 08:49:06 -0600 Subject: [PATCH 0476/1155] Added a TODO with caching options to consider. --- src/map.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/map.cpp b/src/map.cpp index 7cbf591eb..74ef71846 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -464,6 +464,7 @@ class DiskCacheMgr { } } + // TODO: Per arch. caches/files? Compile to cubin and cache per arch.? void write_to_disk(std::string cache_key, std::string kernel_name, std::string ptx, From 44567fade76755da10ae27bfd58ce921c960ec4c Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sat, 26 Mar 2022 13:48:09 -0400 Subject: [PATCH 0477/1155] Expose list_map_cache I couldn't get access to it by importing `bifrost.map`, because of the collision between the module `map` and the function `map` within `bifrost.map`. --- python/bifrost/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/__init__.py b/python/bifrost/__init__.py index 3bde60cab..609e935b3 100644 --- a/python/bifrost/__init__.py +++ b/python/bifrost/__init__.py @@ -38,7 +38,7 @@ from bifrost import device from bifrost.ndarray import ndarray, asarray, empty_like, empty, zeros_like, zeros from bifrost import views -from bifrost.map import map, clear_map_cache +from bifrost.map import map, clear_map_cache, list_map_cache from bifrost.pipeline import Pipeline, get_default_pipeline, block_scope from bifrost import blocks from bifrost.block_chainer import BlockChainer From 3ccab0f39b8ac854a3f5bc58c5a26b0d160bceaf Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sun, 27 Mar 2022 11:21:54 -0400 Subject: [PATCH 0478/1155] Constants for cache filenames; notes on fileutils system and flock. --- python/bifrost/map.py | 5 +++-- src/bifrost/map.h | 3 +++ src/fileutils.cpp | 17 +++++++++++++++-- src/fileutils.hpp | 4 ++-- src/map.cpp | 19 ++++++++++--------- src/proclog.cpp | 8 ++++---- 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/python/bifrost/map.py b/python/bifrost/map.py index dc652b248..9b9a9d041 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -149,9 +149,10 @@ def map(func_string, data, axis_names=None, shape=None, def list_map_cache(): output = "Cache enabled: %s" % ('yes' if BF_MAP_KERNEL_DISK_CACHE else 'no') if BF_MAP_KERNEL_DISK_CACHE: - cache_path = os.path.join(os.path.expanduser('~'), '.bifrost', 'map_cache') + cache_path = os.path.join(os.path.expanduser('~'), '.bifrost', + BF_MAP_KERNEL_DISK_CACHE_SUBDIR) try: - with open(os.path.join(cache_path, 'cache.version'), 'r') as fh: + with open(os.path.join(cache_path, _bf.BF_MAP_KERNEL_DISK_CACHE_VERSION_FILE), 'r') as fh: version = fh.read() mapcache, runtime, driver = version.split(None, 2) mapcache = int(mapcache, 10) diff --git a/src/bifrost/map.h b/src/bifrost/map.h index 4abffbd0d..ae3e64af1 100644 --- a/src/bifrost/map.h +++ b/src/bifrost/map.h @@ -93,6 +93,9 @@ BFstatus bfMap(int ndim, BFstatus bfMapClearCache(); +#define BF_MAP_KERNEL_DISK_CACHE_SUBDIR "map_cache" +#define BF_MAP_KERNEL_DISK_CACHE_VERSION_FILE "cache.version" + #ifdef __cplusplus } // extern "C" #endif diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 25d6a8a08..4b8376ffe 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -35,12 +35,18 @@ std::string get_home_dir(void) { } return std::string(homedir); } + +/* NOTE: For convenience, these functions build a shell command and pass it to + system(). The PATH argument is not shell-quoted or otherwise sanitized, so + only use with program constants, not with data from command line or config + files. Might eventually implement these with C++/boost filesystem library. */ + void make_dir(std::string path, int perms) { if( std::system(("mkdir -p -m "+std::to_string(perms)+" "+path).c_str()) ) { throw std::runtime_error("Failed to create path: "+path); } } -void remove_all(std::string path) { +void remove_files_recursively(std::string path) { if( std::system(("rm -rf "+path).c_str()) ) { throw std::runtime_error("Failed to remove all: "+path); } @@ -50,11 +56,13 @@ void remove_dir(std::string path) { throw std::runtime_error("Failed to remove dir: "+path); } } -void remove_file(std::string path) { +void remove_file_glob(std::string path) { + // Often, PATH contains wildcard, so this can't just be unlink system call. if( std::system(("rm -f "+path).c_str()) ) { throw std::runtime_error("Failed to remove file: "+path); } } + bool file_exists(std::string path) { struct stat s; return !(stat(path.c_str(), &s) == -1 @@ -102,6 +110,11 @@ std::string get_dirname(std::string filename) { return filename.substr(0, filename.find_last_of("/")); } +/* NOTE: In case of abnormal exit (such as segmentation fault or other signal), + the lock file will not be removed, and the next attempt to lock might busy- + wait until the file is manually deleted. If this is a common issue, we could + potentially write the PID into the lock file to help with tracking whether + the process died. */ LockFile::LockFile(std::string lockfile) : _lockfile(lockfile) { while( true ) { _fd = open(_lockfile.c_str(), O_CREAT, 600); diff --git a/src/fileutils.hpp b/src/fileutils.hpp index f23a4ee58..cdb72f116 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -41,9 +41,9 @@ std::string get_home_dir(void); void make_dir(std::string path, int perms=775); -void remove_all(std::string path); +void remove_files_recursively(std::string path); void remove_dir(std::string path); -void remove_file(std::string path); +void remove_file_glob(std::string path); bool file_exists(std::string path); bool process_exists(pid_t pid); diff --git a/src/map.cpp b/src/map.cpp index 74ef71846..14bbab2cf 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -421,9 +421,9 @@ class DiskCacheMgr { std::ofstream info; - if( !file_exists(_cachedir + "cache.version") ) { + if( !file_exists(_cachedir + BF_MAP_KERNEL_DISK_CACHE_VERSION_FILE) ) { try { - info.open(_cachedir + "cache.version", std::ios::out); + info.open(_cachedir + BF_MAP_KERNEL_DISK_CACHE_VERSION_FILE, std::ios::out); info << BF_MAP_KERNEL_DISK_CACHE_VERSION << " " << rt << " " << drv << endl; info.close(); } catch( std::exception const& ) {} @@ -440,7 +440,7 @@ class DiskCacheMgr { std::ifstream info; try { // Open - info.open(_cachedir + "cache.version", std::ios::in); + info.open(_cachedir + BF_MAP_KERNEL_DISK_CACHE_VERSION_FILE, std::ios::in); // Read info >> cached_mc >> cached_rt >> cached_drv; @@ -457,9 +457,9 @@ class DiskCacheMgr { if( !status ) { try { - remove_file(_cachedir + "*.inf"); - remove_file(_cachedir + "*.ptx"); - remove_file(_cachedir + "cache.version"); + remove_file_glob(_cachedir + "*.inf"); + remove_file_glob(_cachedir + "*.ptx"); + remove_file_glob(_cachedir + BF_MAP_KERNEL_DISK_CACHE_VERSION_FILE); } catch( std::exception const& ) {} } } @@ -581,13 +581,14 @@ class DiskCacheMgr { LockFile lock(_cachedir + ".lock"); try { - remove_file(_cachedir + "*.inf"); - remove_file(_cachedir + "*.ptx"); + remove_file_glob(_cachedir + "*.inf"); + remove_file_glob(_cachedir + "*.ptx"); } catch( std::exception const& ) {} } DiskCacheMgr() - : _cachedir(get_home_dir()+"/.bifrost/map_cache/"), _loaded(false) { + : _cachedir(get_home_dir()+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), + _loaded(false) { make_dir(_cachedir); } public: diff --git a/src/proclog.cpp b/src/proclog.cpp index 3ddd82ec9..e727c6d1e 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -59,8 +59,8 @@ class ProcLogMgr { pid_t pid = atoi(ep->d_name); if( pid && !process_exists(pid) ) { try { - remove_all(std::string(base_logdir) + "/" + - std::to_string(pid)); + remove_files_recursively(std::string(base_logdir) + "/" + + std::to_string(pid)); } catch( std::exception& ) {} } } @@ -78,7 +78,7 @@ class ProcLogMgr { } ~ProcLogMgr() { try { - remove_all(_logdir); + remove_files_recursively(_logdir); this->try_base_logdir_cleanup(); } catch( std::exception& ) {} } @@ -129,7 +129,7 @@ class ProcLogMgr { } void destroy_log(std::string filename) { std::lock_guard lock(_mutex); - remove_file(filename); + remove_file_glob(filename); _logs.erase(filename); } void update_log_s(std::string filename, const char* str) { From daa6b6563884db602300189d8369d4b13b81fa28 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sun, 27 Mar 2022 19:45:46 -0400 Subject: [PATCH 0479/1155] Remove DRY_RUN setting from makefiles Make already has a dry run option (`-n`) that prints commands instead of executing them. It isn't compatible with these `ifeq` blocks and I don't really see the benefit of the duplication of "if not dry run exec command else print command". --- Makefile.in | 24 +----------------------- python/Makefile.in | 8 +------- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/Makefile.in b/Makefile.in index ce771071e..dab82536d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -101,42 +101,20 @@ endif # TODO: Consider adding a mode 'develop=1' that makes symlinks instead of copying # the library and headers. -DRY_RUN ?= 0 - $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN): $(LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) -ifeq ($(DRY_RUN),0) + mkdir -p $(INSTALL_LIB_DIR) cp $< $@ ln -f -s $(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO).$(LIBBIFROST_MAJOR) ln -f -s $(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO) -else - @echo "cp $< $@" - @echo "ln -f -s $(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO).$(LIBBIFROST_MAJOR)" - @echo "ln -f -s $(LIBBIFROST_SO_MAJ_MIN) $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO)" -endif $(INSTALL_INC_DIR)/bifrost: $(INC_DIR)/bifrost/*.h #$(INC_DIR)/bifrost/*.hpp -ifeq ($(DRY_RUN),0) mkdir -p $@ cp $? $@/ -else - @echo "mkdir -p $@" - @echo "cp $? $@/" -endif $(INSTALL_DAT_DIR)/bifrost: $(DAT_DIR)/*.m4 -ifeq ($(DRY_RUN),0) mkdir -p $@ cp $? $@/ -else - @echo "mkdir -p $@" - @echo "cp $? $@/" -endif $(INSTALL_LIB_DIR)/pkgconfig: $(DAT_DIR)/*.pc -ifeq ($(DRY_RUN),0) mkdir -p $@ cp $? $@/ -else - @echo "mkdir -p $@" - @echo "cp $? $@/" -endif diff --git a/python/Makefile.in b/python/Makefile.in index 2c7901b37..82e647664 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -50,14 +50,8 @@ build: bifrost/*.py Makefile $(BIFROST_PYTHON_VERSION_FILE) $(BIFROST_PYTHON_BIN @PYTHON@ setup.py build @PYBUILDFLAGS@ .PHONY: build -DRY_RUN ?= 0 - install: build -ifeq ($(DRY_RUN),0) - @PYTHON@ -m pip install @PYINSTALLFLAGS@ . -else - @echo "@PYTHON@ -m pip install @PYINSTALLFLAGS@ ." -endif + @@PYTHON@ -m pip install @PYINSTALLFLAGS@ . @echo "*************************************************************************" @echo "By default Bifrost installs with basic Python telemetry enabled in order" @echo "to help inform how the software is used for future development. You can" From 3ae8accf69faf8ee49e15d42db4baf497acccda5 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sun, 27 Mar 2022 20:17:49 -0400 Subject: [PATCH 0480/1155] Simplify makefile outputs, don't use \r Using carriage returns is okay interactively and when things are going well. But it also goes wrong; entire lines usually disappear from build logs, and in some circumstances I see run-on messages like this: ``` Building C++ source file common.cppBuilding C++ source file memory.cppBuilding C++ source file affinity.cppBuilding C++ source file cuda.cppBuilding C++ sourc e file ring.cppBuilding C++ source file ring_impl.cppBuilding C++ source file a rray.cppBuilding C++ source file unpack.cppBuilding C++ source file quantize.cp pBuilding C++ source file proclog.cppBuilding C++ source file address.cppIn fil e included from address.cpp:30: ``` Cleaner looking status messages in one context is not worth the trouble in other contexts, IMO. --- src/Makefile.in | 13 ++++--------- src/autodep.mk | 17 +++++------------ 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index a53ca6596..dc6861472 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -107,8 +107,7 @@ all: $(LIBBIFROST_SO) .PHONY: all $(LIBBIFROST_VERSION_FILE): $(INC_DIR)/bifrost/*.h - $(CLEAR_LINE) - @echo -n "Generating $(LIBBIFROST_VERSION_FILE)\r" + @echo "Generating $(LIBBIFROST_VERSION_FILE)" echo "VERS_$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR) {" > $@ echo " global:" >> $@ @CTAGS@ -x --c-kinds=p $^ | @AWK@ '{print " " $$1 ";"}' >> $@ @@ -135,8 +134,7 @@ fft_kernels.o: fft_kernels.cu fft_kernels.h Makefile # Note: This needs to be compiled with "-dc" to make CUFFT callbacks work $(NVCC) $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(GCCFLAGS)" -dc $(OUTPUT_OPTION) $< _cuda_device_link.o: Makefile fft_kernels.o libcufft_static_pruned.a - $(CLEAR_LINE) - @echo -n "Linking _cuda_device_link.o\r" + @echo "Linking _cuda_device_link.o" # TODO: "nvcc -dlink ..." does not error or warn when a -lblah is not found @ls ./libcufft_static_pruned.a > /dev/null $(NVCC) -dlink -o $@ $(NVCCFLAGS) fft_kernels.o -L. -lcufft_static_pruned @@ -152,13 +150,11 @@ endif # Note: $(LIB) must go at after OBJS $(LIBBIFROST_SO): $(LIBBIFROST_OBJS) $(LIBBIFROST_VERSION_FILE) $(CUDA_DEVICE_LINK_OBJ) - $(CLEAR_LINE) - @echo -n "Linking $(LIBBIFROST_SO_NAME)\r" + @echo "Linking $(LIBBIFROST_SO_NAME)" mkdir -p $(LIB_DIR) $(LINKER) $(SHARED_FLAG) -Wl,$(WLFLAGS) -o $@ $(LIBBIFROST_OBJS) $(CUDA_DEVICE_LINK_OBJ) $(LIB) $(LDFLAGS) ln -s -f $(LIBBIFROST_SO_NAME) $(LIBBIFROST_SO_STEM).$(LIBBIFROST_MAJOR) ln -s -f $(LIBBIFROST_SO_NAME) $(LIBBIFROST_SO_STEM) - $(CLEAR_LINE) @echo "Successfully built $(LIBBIFROST_SO_NAME)" *.o: $(MAKEFILES) @@ -168,8 +164,7 @@ map.o: $(JIT_SOURCES) stringify: stringify.cpp $(CXX) -o stringify -Wall -O3 stringify.cpp %.jit: % stringify - @$(CLEAR_LINE) - @echo -n "Building JIT version of $<\r" + @echo "Building JIT version of $<" ./stringify $< > $@ clean: diff --git a/src/autodep.mk b/src/autodep.mk index a3fae6eeb..d11031514 100644 --- a/src/autodep.mk +++ b/src/autodep.mk @@ -17,44 +17,37 @@ COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(GCCFLAGS) $(TARGET_ARCH) -c COMPILE.nvcc = $(NVCC) $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(GCCFLAGS)" $(TARGET_ARCH) -c POSTCOMPILE = mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d -CLEAR_LINE = tput el && echo -n "\033[2K" || true # Clears the current line - %.o : %.c %.o : %.c $(DEPDIR)/%.d - @$(CLEAR_LINE) - @echo -n "Building C source file $<\r" + @echo "Building C source file $<" @$(DEPBUILD.c) $< > /dev/null $(COMPILE.c) $(OUTPUT_OPTION) $< @$(POSTCOMPILE) %.o : %.cpp %.o : %.cpp $(DEPDIR)/%.d - @$(CLEAR_LINE) - @echo -n "Building C++ source file $<\r" + @echo "Building C++ source file $<" $(DEPBUILD.cc) $< > /dev/null $(COMPILE.cc) $(OUTPUT_OPTION) $< $(POSTCOMPILE) %.o : %.cc %.o : %.cc $(DEPDIR)/%.d - @$(CLEAR_LINE) - @echo -n "Building C++ source file $<\r" + @echo "Building C++ source file $<" @$(DEPBUILD.cc) $< > /dev/null $(COMPILE.cc) $(OUTPUT_OPTION) $< @$(POSTCOMPILE) %.o : %.cxx %.o : %.cxx $(DEPDIR)/%.d - @$(CLEAR_LINE) - @echo -n "Building C++ source file $<\r" + @echo "Building C++ source file $<" @$(DEPBUILD.cc) $< > /dev/null $(COMPILE.cc) $(OUTPUT_OPTION) $< @$(POSTCOMPILE) %.o : %.cu %.o : %.cu $(DEPDIR)/%.d - @$(CLEAR_LINE) - @echo -n "Building CUDA source file $<\r" + @echo "Building CUDA source file $<" @$(DEPBUILD.cc) $< > /dev/null $(COMPILE.nvcc) $(OUTPUT_OPTION) $< @$(POSTCOMPILE) From 902c65309f0c7a47e1c50701b1b068fcf8726477 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Mar 2022 06:53:37 -0600 Subject: [PATCH 0481/1155] Move BF_MAP_KERNEL_CACHE_SIZE into map.h. --- src/bifrost/map.h | 1 + src/map.cpp | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/bifrost/map.h b/src/bifrost/map.h index ae3e64af1..8cfeb2f28 100644 --- a/src/bifrost/map.h +++ b/src/bifrost/map.h @@ -93,6 +93,7 @@ BFstatus bfMap(int ndim, BFstatus bfMapClearCache(); +#define BF_MAP_KERNEL_CACHE_SIZE 128 #define BF_MAP_KERNEL_DISK_CACHE_SUBDIR "map_cache" #define BF_MAP_KERNEL_DISK_CACHE_VERSION_FILE "cache.version" diff --git a/src/map.cpp b/src/map.cpp index 14bbab2cf..454d67a99 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -38,10 +38,6 @@ bfMap(3, c.shape, {"dm", "t"}, // This enables print-out of generated source and PTX //#define BF_DEBUG_RTC 1 -#ifndef BF_MAP_KERNEL_CACHE_SIZE -#define BF_MAP_KERNEL_CACHE_SIZE 128 -#endif - #include #include #include "fileutils.hpp" From a65af24f1cec6f706e53b839d56106759bc41529 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Mar 2022 06:57:28 -0600 Subject: [PATCH 0482/1155] Formatting. --- src/proclog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proclog.cpp b/src/proclog.cpp index e727c6d1e..1e888f71f 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -60,7 +60,7 @@ class ProcLogMgr { if( pid && !process_exists(pid) ) { try { remove_files_recursively(std::string(base_logdir) + "/" + - std::to_string(pid)); + std::to_string(pid)); } catch( std::exception& ) {} } } From 9ddeec9fe4f62e227c2c5706361a6072fe274ba7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Mar 2022 06:59:39 -0600 Subject: [PATCH 0483/1155] Formatting. --- src/Makefile.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index e2f5eda2b..b72502d83 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -42,8 +42,8 @@ LIBBIFROST_OBJS = \ ifeq ($(HAVE_RECVMSG),1) # These files require recvmsg to compile LIBBIFROST_OBJS += \ - address.o \ - udp_socket.o \ + address.o \ + udp_socket.o \ udp_capture.o \ udp_transmit.o endif From 25c46103db7bf0a095263b45f2f419f1e4f437ac Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Mar 2022 07:08:31 -0600 Subject: [PATCH 0484/1155] Variable fix. --- python/bifrost/map.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/map.py b/python/bifrost/map.py index 9b9a9d041..04ab30a15 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -150,7 +150,7 @@ def list_map_cache(): output = "Cache enabled: %s" % ('yes' if BF_MAP_KERNEL_DISK_CACHE else 'no') if BF_MAP_KERNEL_DISK_CACHE: cache_path = os.path.join(os.path.expanduser('~'), '.bifrost', - BF_MAP_KERNEL_DISK_CACHE_SUBDIR) + _bf.BF_MAP_KERNEL_DISK_CACHE_SUBDIR) try: with open(os.path.join(cache_path, _bf.BF_MAP_KERNEL_DISK_CACHE_VERSION_FILE), 'r') as fh: version = fh.read() From d75cf87fd69d8a1f1a9c1bd7e71e0647f26f5268 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Mar 2022 07:25:39 -0600 Subject: [PATCH 0485/1155] Add in a test for the cache listing function. --- test/test_map.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/test/test_map.py b/test/test_map.py index b4dc53fcf..992107a1a 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -25,11 +25,16 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +import sys import ctypes import unittest import numpy as np import bifrost as bf - +try: + from io import StringIO +except ImportError: + from StringIO import StringIO + from bifrost.libbifrost_generated import BF_CUDA_ENABLED _FIRST_TEST = True @@ -227,3 +232,15 @@ def test_custom_shape(self): a = a.copy('system') b = b.copy('system') np.testing.assert_equal(b, a[:,j,:]) + def test_list_cache(self): + # TODO: would be nicer as a context manager, something like + # contextlib.redirect_stdout + orig_stdout = sys.stdout + new_stdout = StringIO() + sys.stdout = new_stdout + + try: + bf.list_map_cache() + finally: + sys.stdout = orig_stdout + new_stdout.close() From 768e82a701afaf2b6128d7cbbe2c3355d70d4846 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Mar 2022 07:59:13 -0600 Subject: [PATCH 0486/1155] Add a comment on what ctypesgen is doing. --- python/Makefile.in | 1 + 1 file changed, 1 insertion(+) diff --git a/python/Makefile.in b/python/Makefile.in index 82e647664..ac0d13877 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -21,6 +21,7 @@ $(BIFROST_PYTHON_VERSION_FILE): ../config.mk @echo "__version__ = \"$(LIBBIFROST_MAJOR).$(LIBBIFROST_MINOR).$(LIBBIFROST_PATCH)\"" > $@ define run_ctypesgen + # Build the libbifrost wrapper @PYTHON@ -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -l$1 -I$2 $^ -o $@ # WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p) @SED@ -i.orig -e 's/POINTER(c_char)/c_char_p/g' $@ From 6220e565d959b3707ada7bc1d461397510694f3a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Mar 2022 08:06:26 -0600 Subject: [PATCH 0487/1155] Comment on the Makefiles. --- CHANGELOG | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index cfbe115bf..4db4aa6c7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +0.10.1 + * Cleaned up the Makefile outputs + 0.10.0 * Switched over to an autotools-based build system * Added a .m4 file to help other autotools-based software find Bifrost From 573cce231259de644468822fca84c1e1e0787698 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Mar 2022 08:41:54 -0600 Subject: [PATCH 0488/1155] Formatting. --- src/fileutils.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 4b8376ffe..bbbc07465 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -30,9 +30,9 @@ std::string get_home_dir(void) { const char *homedir; - if ((homedir = getenv("HOME")) == NULL) { - homedir = getpwuid(getuid())->pw_dir; - } + if ((homedir = getenv("HOME")) == NULL) { + homedir = getpwuid(getuid())->pw_dir; + } return std::string(homedir); } From 1833dde5f96dcef0ce501f0c754057d40d930d87 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 23 Mar 2022 18:00:21 -0400 Subject: [PATCH 0489/1155] Configure as a nix flake It provides an overlay for nixpkgs that adds ctypesgen and a configurable bifrost package, that can be overridden with various versions of python3 and cudatoolkit (or without them), and can enable debugging or not. The github workflow uses nix to build a few variations, run non-GPU tests, and update documentation in gh-pages branch. Builds are cached by cachix; upon merge that part may need some keys loaded onto the ledatelescope repo. Maybe needs a blurb in the README before next release. --- .github/workflows/nix.yml | 81 ++++++++++ flake.lock | 79 ++++++++++ flake.nix | 308 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 468 insertions(+) create mode 100644 .github/workflows/nix.yml create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml new file mode 100644 index 000000000..b570a7771 --- /dev/null +++ b/.github/workflows/nix.yml @@ -0,0 +1,81 @@ +--- +name: "Nix Build" +"on": [push, pull_request] +jobs: + build: + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + nixpkgs: + - pinned + - release-21.11 + - release-21.05 + - nixpkgs-unstable + fail-fast: false + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2.4.0 + + - name: Install nix + uses: cachix/install-nix-action@v16 + with: + extra_nix_config: | + access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} + + - name: Link to bifrost binary cache on cachix.org + uses: cachix/cachix-action@v10 + with: + name: bifrost + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + + - name: Lock the version of nixpkgs specified by the matrix + run: | + if "${{ matrix.nixpkgs }}" != "pinned"; then + nix flake lock --override-input nixpkgs \ + "nixpkgs/${{ matrix.nixpkgs }}" + fi + nix flake metadata + + - name: Check for well-formed flake + run: | + nix flake check + + - name: Build for default python3 + run: | + nix build --print-build-logs .#bifrost-py3 + + - name: Build with enable-debug for python3, if pinned nixpkgs + if: matrix.nixpkgs == 'pinned' + run: | + nix build --print-build-logs .#bifrost-py3-debug + + - name: Build for python38, unless nixpkgs-unstable + # For unstable, 3.8 packages are no longer in the build cache + if: matrix.nixpkgs != 'nixpkgs-unstable' + run: | + nix build --print-build-logs .#bifrost-py38 + + - name: Run Python test suite + # Skipped during nix build because it needs network data. + run: | + cd test + bash download_test_data.sh + nix run ..#python3-bifrost -- -m bifrost.telemetry --disable + nix run ..#python3-bifrost -- -m unittest discover + + - name: Build documentation + run: | + nix build --print-build-logs --out-link result-doc .#bifrost-doc + + - name: Deploy documentation to gh-pages + uses: JamesIves/github-pages-deploy-action@v4.2.5 + if: | + matrix.os == 'ubuntu-latest' + && matrix.nixpkgs == 'pinned' + && github.event_name == 'push' + && github.ref == 'refs/heads/nix-flake' + with: + branch: gh-pages + folder: result-doc/share/doc/bifrost/html diff --git a/flake.lock b/flake.lock new file mode 100644 index 000000000..eea74b7c0 --- /dev/null +++ b/flake.lock @@ -0,0 +1,79 @@ +{ + "nodes": { + "ctypesgen": { + "flake": false, + "locked": { + "lastModified": 1645104802, + "narHash": "sha256-iZUJqyt2b1FAQIw5pAu9FUmyhp2Qtsu0aiQ/9QkUW/s=", + "owner": "ctypesgen", + "repo": "ctypesgen", + "rev": "fd495e5edb2f69e5407774f8937a1d62cd33fe55", + "type": "github" + }, + "original": { + "owner": "ctypesgen", + "repo": "ctypesgen", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1619345332, + "narHash": "sha256-qHnQkEp1uklKTpx3MvKtY6xzgcqXDsz5nLilbbuL+3A=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "2ebf2558e5bf978c7fb8ea927dfaed8fefab2e28", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1641947035, + "narHash": "sha256-l4dnwWvh2Yte2I9sAwGhMG/qkvLkfV0v/ssgkZ5KNY4=", + "path": "/nix/store/3ck36g7rh9v9fa924h149pq7h6cx9nzx-source", + "rev": "9acedfd7ef32253237311dc3c78286773dbcb0d6", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1639823344, + "narHash": "sha256-jlsQb2y6A5dB1R0wVPLOfDGM0wLyfYqEJNzMtXuzCXw=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "ff9c0b459ddc4b79c06e19d44251daa8e9cd1746", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "ff9c0b459ddc4b79c06e19d44251daa8e9cd1746", + "type": "github" + } + }, + "root": { + "inputs": { + "ctypesgen": "ctypesgen", + "nixpkgs": "nixpkgs", + "pre-commit-hooks": "pre-commit-hooks" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 000000000..54c519465 --- /dev/null +++ b/flake.nix @@ -0,0 +1,308 @@ +{ + description = + "A stream processing framework for high-throughput applications."; + + inputs.ctypesgen = { + url = "github:ctypesgen/ctypesgen"; + flake = false; + }; + + inputs.pre-commit-hooks = { + url = + "github:cachix/pre-commit-hooks.nix/ff9c0b459ddc4b79c06e19d44251daa8e9cd1746"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + outputs = inputs@{ self, nixpkgs, pre-commit-hooks, ... }: + let + inherit (nixpkgs) lib; + + # Parse the version info in the AC_INIT declaration. + acVersion = lib.head + (builtins.match "AC_INIT\\(\\[bifrost], *\\[([.0-9]+)].*" (lib.head + (lib.filter (lib.strings.hasPrefix "AC_INIT") + (lib.splitString "\n" (lib.readFile ./configure.ac))))); + + # Add a git hash if available; but if repo isn't clean then flake won’t + # provide shortRev and version ends in ".dev". + version = "${acVersion}.dev" + + lib.optionalString (self ? shortRev) "+g${self.shortRev}"; + + getCudaArchs = cudatoolkit: + let + path = if builtins.readDir "${cudatoolkit}/include" ? "nvvm.h" then + "${cudatoolkit}/include/nvvm.h" + else + "${cudatoolkit}/nvvm/include/nvvm.h"; + in lib.concatStringsSep " " (map lib.head (lib.filter (x: x != null) + (map (builtins.match ".*compute_([0-9]+)") + (lib.splitString "\n" (builtins.readFile path))))); + + bifrost = { stdenv, ctags, ncurses, file, enableDebug ? false + , enablePython ? true, python3, enableCuda ? false, cudatoolkit + , util-linuxMinimal, gpuArchs ? getCudaArchs cudatoolkit }: + let + pname = lib.optionalString (!enablePython) "lib" + "bifrost" + + lib.optionalString enablePython + "-py${lib.versions.majorMinor python3.version}" + + lib.optionalString enableCuda + "-cuda${lib.versions.majorMinor cudatoolkit.version}" + + lib.optionalString enableDebug "-debug"; + in stdenv.mkDerivation { + name = "${pname}-${version}"; + inherit version; + src = ./.; + buildInputs = [ ctags ncurses ] ++ lib.optionals enablePython [ + python3 + python3.pkgs.ctypesgen + python3.pkgs.setuptools + python3.pkgs.pip + python3.pkgs.wheel + ] ++ lib.optionals enableCuda [ cudatoolkit util-linuxMinimal ]; + propagatedBuildInputs = lib.optionals enablePython [ + python3.pkgs.contextlib2 + python3.pkgs.graphviz + python3.pkgs.matplotlib + python3.pkgs.numpy + python3.pkgs.pint + python3.pkgs.scipy + python3.pkgs.simplejson + ]; + patchPhase = + # Remove usage of \r and tput; not conducive to build logs. + '' + sed -i -e 's:\\r::g' -e 's:echo -n:echo:' \ + -e 's:\(CLEAR_LINE = \).*:\1:' src/autodep.mk src/Makefile.in + '' + + # libtool wants file command, and refers to it in /usr/bin + '' + sed -i 's:/usr/bin/file:${file}/bin/file:' configure + '' + + # Use pinned ctypesgen, not one from pypi. + '' + sed -i 's/ctypesgen==1.0.2/ctypesgen/' python/setup.py + '' + + # Mimic the process of buildPythonPackage, which explicitly + # creates wheel, then installs with pip. + '' + sed -i -e "s:build @PYBUILDFLAGS@:bdist_wheel:" \ + -e "s:@PYINSTALLFLAGS@ .:${ + lib.concatStringsSep " " [ + "--prefix=${placeholder "out"}" + "--no-index" + "--no-warn-script-location" + "--no-cache" + ] + } dist/*.whl:" \ + python/Makefile.in + ''; + # Had difficulty specifying this with configureFlags, because it + # wants to quote the args and that fails with spaces in gpuArchs. + configurePhase = '' + ./configure --disable-static --prefix="$out" \ + ${lib.optionalString enableDebug "--enable-debug"} \ + ${ + lib.optionalString enableCuda ("--with-cuda-home=${cudatoolkit}" + + " --with-gpu-archs='${gpuArchs}'" + + " --with-nvcc-flags='-Wno-deprecated-gpu-targets'" + + " LDFLAGS=-L${cudatoolkit}/lib/stubs") + } + ''; + preBuild = lib.optionalString enablePython '' + make -C python bifrost/libbifrost_generated.py + sed -i \ + -e "s:^add_library_search_dirs(\[:&'$out/lib':" \ + python/bifrost/libbifrost_generated.py + ''; + makeFlags = + lib.optionals enableCuda [ "CUDA_LIBDIR64=$(CUDA_HOME)/lib" ]; + preInstall = '' + mkdir -p "$out/lib" + ''; + }; + + ctypesgen = + { buildPythonPackage, setuptools-scm, toml, glibc, stdenv, gcc }: + buildPythonPackage rec { + pname = "ctypesgen"; + # Setup tools won’t be able to run git describe to generate the + # version, but we can include the shortRev. + version = "1.0.2.dev+g${inputs.ctypesgen.shortRev}"; + SETUPTOOLS_SCM_PRETEND_VERSION = version; + src = inputs.ctypesgen; + buildInputs = [ setuptools-scm toml ]; + patchPhase = + # Version detection in the absence of ‘git describe’ is broken, + # even with an explicit VERSION file. + '' + sed -i \ + -e 's/\(VERSION = \).*$/\1"${pname}-${version}"/' \ + -e 's/\(VERSION_NUMBER = \).*$/\1"${version}"/' \ + ctypesgen/version.py + '' + + # At runtime, ctypesgen invokes ‘gcc -E’. It won’t be available in + # the darwin stdenv so let's explicitly patch full path to gcc in + # nix store, making gcc a true prerequisite, which it is. There + # are also runs of gcc specified in test suite. + '' + sed -i 's:gcc -E:${gcc}/bin/gcc -E:' ctypesgen/options.py + sed -i 's:"gcc":"${gcc}/bin/gcc":' tests/ctypesgentest.py + '' + + # Some tests explicitly load ‘libm’ and ‘libc’. They won’t be + # found on NixOS unless we patch in the ‘glibc’ path. + lib.optionalString stdenv.isLinux '' + sed -i 's:libm.so.6:${glibc}/lib/libm.so.6:' tests/testsuite.py + sed -i 's:libc.so.6:${glibc}/lib/libc.so.6:' tests/testsuite.py + ''; + checkPhase = "python -m unittest -v tests/testsuite.py"; + }; + + pyOverlay = self: _: { + ctypesgen = self.callPackage ctypesgen { }; + bifrost = self.toPythonModule (self.callPackage bifrost { + enablePython = true; + python3 = self.python; + }); + }; + + bifrost-doc = + { stdenv, python3, ctags, doxygen, docDir ? "/share/doc/bifrost" }: + let pname = "bifrost-doc"; + in stdenv.mkDerivation { + name = "${pname}-${version}"; + inherit version; + src = ./.; + buildInputs = [ + ctags + doxygen + python3 + python3.pkgs.bifrost + python3.pkgs.sphinx + python3.pkgs.breathe + ]; + buildPhase = '' + make doc + make -C docs html + cd docs/build/html + mv _static static + mv _sources sources + find . -type f -exec sed -i \ + -e '/\(href\|src\)=\"\(\.\.\/\)\?_static/ s/_static/static/' \ + -e '/\(href\|src\)=\"\(\.\.\/\)\?_modules/ s/_modules/modules/' \ + -e '/\(href\|src\)=\"\(\.\.\/\)\?_sources/ s/_sources/sources/' \ + -e '/\$\.ajax\(.*\)_sources/ s/_sources/sources/' \ + {} \; + cd ../../.. + ''; + installPhase = '' + mkdir -p "$out${docDir}" + cp -r docs/build/html "$out${docDir}" + ''; + }; + + # Enable pre-configured packages for these systems. + eachSystem = do: + lib.genAttrs [ "x86_64-linux" "x86_64-darwin" ] (system: + do (import nixpkgs { + inherit system; + config.allowUnfree = true; + overlays = [ self.overlay ]; + })); + + # Which python3 packages should be modified by the overlay? + isPython = name: builtins.match "python3[0-9]*" name != null; + pythonAttrs = lib.filterAttrs (name: _: isPython name); + + in { + overlay = final: prev: + { + bifrost = final.callPackage bifrost { }; + bifrost-doc = final.callPackage bifrost-doc { }; + } + # Apply the python overlay to every python package set we find. + // lib.mapAttrs (_: py: py.override { packageOverrides = pyOverlay; }) + (pythonAttrs prev); + + packages = eachSystem (pkgs: + let + shortenPy = lib.replaceStrings [ "thon" ] [ "" ]; + + # Which cuda versions should be target by the packages? Let's just do + # the default 10 and 11. It's easy to generate other point releases + # from the overlay. (Versions prior to 10 are not supported anymore by + # nixpkgs.) + isCuda = name: builtins.match "cudatoolkit(_1[01])" name != null; + shortenCuda = lib.replaceStrings [ "toolkit" "_" ] [ "" "" ]; + cudaAttrs = lib.filterAttrs + (name: pkg: isCuda name && lib.elem pkgs.system pkg.meta.platforms) + pkgs; + + eachBool = f: lib.concatMap f [ true false ]; + eachCuda = f: lib.concatMap f ([ null ] ++ lib.attrNames cudaAttrs); + eachConfig = f: + eachBool (enableDebug: + eachCuda (cuda: + f (lib.optionalString (cuda != null) "-${shortenCuda cuda}" + + lib.optionalString enableDebug "-debug") { + inherit enableDebug; + enableCuda = cuda != null; + cudatoolkit = pkgs.${cuda}; + })); + + # Runnable ctypesgen per python. Though it's just the executable we + # need, it's possible something about ctypes library could change + # between releases. + cgens = lib.mapAttrs' (name: py: { + name = "ctypesgen-${shortenPy name}"; + value = py.pkgs.ctypesgen; + }) (pythonAttrs pkgs); + + # The whole set of bifrost packages, with or without python (and each + # python version), and for each configuration. + bfs = lib.listToAttrs (eachConfig (suffix: config: + [{ + name = "libbifrost${suffix}"; + value = + pkgs.bifrost.override (config // { enablePython = false; }); + }] ++ lib.mapAttrsToList (name: py: { + name = "bifrost-${shortenPy name}${suffix}"; + value = py.pkgs.bifrost.override config; + }) (pythonAttrs pkgs))); + + # Now generate pythons with bifrost packaged. + pys = lib.listToAttrs (eachConfig (suffix: config: + lib.mapAttrsToList (name: py: { + name = "${name}-bifrost${suffix}"; + value = py.withPackages (p: [ (p.bifrost.override config) ]); + }) (pythonAttrs pkgs))); + + in { inherit (pkgs) bifrost-doc; } // cgens // bfs // pys); + + devShell = eachSystem (pkgs: + let + pre-commit = pre-commit-hooks.lib.${pkgs.system}.run { + src = ./.; + hooks.nixfmt.enable = true; + hooks.nix-linter.enable = true; + hooks.yamllint.enable = true; + }; + + in pkgs.mkShell { + inherit (pre-commit) shellHook; + + # Tempting to include bifrost-doc.buildInputs here, but that requires + # bifrost to already be built. + buildInputs = pkgs.bifrost.buildInputs + ++ pkgs.bifrost.propagatedBuildInputs ++ [ + pkgs.black + pkgs.ctags + pkgs.doxygen + pkgs.nixfmt + pkgs.nix-linter + pkgs.python3.pkgs.breathe + pkgs.python3.pkgs.sphinx + pkgs.yamllint + ]; + }); + }; +} From d45e40eaa49c045635851b736ee24488d8eebeb7 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 23 Mar 2022 20:10:26 -0400 Subject: [PATCH 0490/1155] nix: Don't detect gpu-archs from within nix That technique pulled in cudatoolkit too early, even when not building with it (and so it failed on darwin). --- flake.nix | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/flake.nix b/flake.nix index 54c519465..aeeca69e5 100644 --- a/flake.nix +++ b/flake.nix @@ -28,19 +28,9 @@ version = "${acVersion}.dev" + lib.optionalString (self ? shortRev) "+g${self.shortRev}"; - getCudaArchs = cudatoolkit: - let - path = if builtins.readDir "${cudatoolkit}/include" ? "nvvm.h" then - "${cudatoolkit}/include/nvvm.h" - else - "${cudatoolkit}/nvvm/include/nvvm.h"; - in lib.concatStringsSep " " (map lib.head (lib.filter (x: x != null) - (map (builtins.match ".*compute_([0-9]+)") - (lib.splitString "\n" (builtins.readFile path))))); - bifrost = { stdenv, ctags, ncurses, file, enableDebug ? false , enablePython ? true, python3, enableCuda ? false, cudatoolkit - , util-linuxMinimal, gpuArchs ? getCudaArchs cudatoolkit }: + , util-linuxMinimal, gpuArchs ? null }: let pname = lib.optionalString (!enablePython) "lib" + "bifrost" + lib.optionalString enablePython @@ -98,16 +88,22 @@ ''; # Had difficulty specifying this with configureFlags, because it # wants to quote the args and that fails with spaces in gpuArchs. - configurePhase = '' - ./configure --disable-static --prefix="$out" \ - ${lib.optionalString enableDebug "--enable-debug"} \ - ${ - lib.optionalString enableCuda ("--with-cuda-home=${cudatoolkit}" - + " --with-gpu-archs='${gpuArchs}'" - + " --with-nvcc-flags='-Wno-deprecated-gpu-targets'" - + " LDFLAGS=-L${cudatoolkit}/lib/stubs") - } - ''; + configurePhase = + lib.optionalString (enableCuda && gpuArchs == null) '' + GPU_ARCHS="$(${cudatoolkit}/bin/nvcc -h | \ + grep -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | \ + sort | uniq | tr '\n' ' ')" + '' + lib.optionalString (enableCuda && gpuArchs != null) '' + GPU_ARCHS="${gpuArchs}" + '' + lib.concatStringsSep " " + ([ "./configure" "--disable-static" ''--prefix="$out"'' ] + ++ lib.optionals enableDebug [ "--enable-debug" ] + ++ lib.optionals enableCuda [ + "--with-cuda-home=${cudatoolkit}" + ''--with-gpu-archs="$GPU_ARCHS"'' + "--with-nvcc-flags='-Wno-deprecated-gpu-targets'" + "LDFLAGS=-L${cudatoolkit}/lib/stubs" + ]); preBuild = lib.optionalString enablePython '' make -C python bifrost/libbifrost_generated.py sed -i \ From 89f28faf8edad68d9350e6671fc0abef7621b702 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 24 Mar 2022 09:51:34 -0400 Subject: [PATCH 0491/1155] nix: Simplify default GPU architecture specs Just going with ["70" "75"] in default CUDA builds for now. Always possible to override the `gpuArchs` argument. --- flake.nix | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/flake.nix b/flake.nix index aeeca69e5..85ed17fbc 100644 --- a/flake.nix +++ b/flake.nix @@ -28,9 +28,26 @@ version = "${acVersion}.dev" + lib.optionalString (self ? shortRev) "+g${self.shortRev}"; + # Can inspect the cuda version to guess at what architectures would be + # most useful. Take care not to instatiate the cuda package though, which + # would happen if you start inspecting header files or trying to run nvcc. + + defaultGpuArchs = _cudatoolkit: [ "70" "75" ]; + + # At time of writing (2022-03-24): + # PACKAGE VERSION ARCHS + # cudatoolkit │ │ + # ≡ ~_10 │ │ + # ≡ ~_10_2 10.2.89 30 32 35 37 50 52 53 60 61 62 70 72 75 + # cudatoolkit_11 │ │ (deprecated) + # ≡ ~_11_4 11.4.2 │ (35 37 50)52 53 60 61 62 70 72 75 80 86 87 + # cudatoolkit_11_5 11.5.0 │ (35 37 50)52 53 60 61 62 70 72 75 80 86 87 + # │ │*Experimented w/using all supported archs, but + # │ │ had to eliminate 87 because not in cufft lib. + bifrost = { stdenv, ctags, ncurses, file, enableDebug ? false , enablePython ? true, python3, enableCuda ? false, cudatoolkit - , util-linuxMinimal, gpuArchs ? null }: + , util-linuxMinimal, gpuArchs ? defaultGpuArchs cudatoolkit }: let pname = lib.optionalString (!enablePython) "lib" + "bifrost" + lib.optionalString enablePython @@ -88,19 +105,12 @@ ''; # Had difficulty specifying this with configureFlags, because it # wants to quote the args and that fails with spaces in gpuArchs. - configurePhase = - lib.optionalString (enableCuda && gpuArchs == null) '' - GPU_ARCHS="$(${cudatoolkit}/bin/nvcc -h | \ - grep -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | \ - sort | uniq | tr '\n' ' ')" - '' + lib.optionalString (enableCuda && gpuArchs != null) '' - GPU_ARCHS="${gpuArchs}" - '' + lib.concatStringsSep " " + configurePhase = lib.concatStringsSep " " ([ "./configure" "--disable-static" ''--prefix="$out"'' ] ++ lib.optionals enableDebug [ "--enable-debug" ] ++ lib.optionals enableCuda [ "--with-cuda-home=${cudatoolkit}" - ''--with-gpu-archs="$GPU_ARCHS"'' + ''--with-gpu-archs="${lib.concatStringsSep " " gpuArchs}"'' "--with-nvcc-flags='-Wno-deprecated-gpu-targets'" "LDFLAGS=-L${cudatoolkit}/lib/stubs" ]); From 1ed3858f717ae028bbcd8e0373eb8ff09de8b88e Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 24 Mar 2022 09:55:39 -0400 Subject: [PATCH 0492/1155] nix: Anticipate some naming deprecations in latest nix versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit overlay → overlays.default devShell.ARCH → devShells.ARCH.default --- flake.nix | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/flake.nix b/flake.nix index 85ed17fbc..6324aaec6 100644 --- a/flake.nix +++ b/flake.nix @@ -212,7 +212,7 @@ do (import nixpkgs { inherit system; config.allowUnfree = true; - overlays = [ self.overlay ]; + overlays = lib.attrValues self.overlays; })); # Which python3 packages should be modified by the overlay? @@ -220,7 +220,7 @@ pythonAttrs = lib.filterAttrs (name: _: isPython name); in { - overlay = final: prev: + overlays.default = final: prev: { bifrost = final.callPackage bifrost { }; bifrost-doc = final.callPackage bifrost-doc { }; @@ -284,8 +284,8 @@ in { inherit (pkgs) bifrost-doc; } // cgens // bfs // pys); - devShell = eachSystem (pkgs: - let + devShells = eachSystem (pkgs: { + default = let pre-commit = pre-commit-hooks.lib.${pkgs.system}.run { src = ./.; hooks.nixfmt.enable = true; @@ -309,6 +309,7 @@ pkgs.python3.pkgs.sphinx pkgs.yamllint ]; - }); + }; + }); }; } From 479aabd81cc54d8c30242e4c8a984ac0ba6ff35d Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 24 Mar 2022 14:48:34 -0400 Subject: [PATCH 0493/1155] nix: Remove a few unnecessary let bindings --- flake.nix | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/flake.nix b/flake.nix index 6324aaec6..0695308f5 100644 --- a/flake.nix +++ b/flake.nix @@ -48,15 +48,13 @@ bifrost = { stdenv, ctags, ncurses, file, enableDebug ? false , enablePython ? true, python3, enableCuda ? false, cudatoolkit , util-linuxMinimal, gpuArchs ? defaultGpuArchs cudatoolkit }: - let - pname = lib.optionalString (!enablePython) "lib" + "bifrost" + stdenv.mkDerivation { + name = lib.optionalString (!enablePython) "lib" + "bifrost" + lib.optionalString enablePython "-py${lib.versions.majorMinor python3.version}" + lib.optionalString enableCuda "-cuda${lib.versions.majorMinor cudatoolkit.version}" - + lib.optionalString enableDebug "-debug"; - in stdenv.mkDerivation { - name = "${pname}-${version}"; + + lib.optionalString enableDebug "-debug" + "-${version}"; inherit version; src = ./.; buildInputs = [ ctags ncurses ] ++ lib.optionals enablePython [ @@ -173,9 +171,8 @@ bifrost-doc = { stdenv, python3, ctags, doxygen, docDir ? "/share/doc/bifrost" }: - let pname = "bifrost-doc"; - in stdenv.mkDerivation { - name = "${pname}-${version}"; + stdenv.mkDerivation { + name = "bifrost-doc-${version}"; inherit version; src = ./.; buildInputs = [ From f93fdbc743b3514ab53eb7452d2f8283a69057d2 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 25 Mar 2022 16:25:12 -0400 Subject: [PATCH 0494/1155] nix: Drop back to ctypes-1.0.2 instead of master Better for consistency with non-nix build. --- flake.lock | 7 ++++--- flake.nix | 30 ++++++++++++++++++------------ 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index eea74b7c0..51f0349be 100644 --- a/flake.lock +++ b/flake.lock @@ -3,15 +3,16 @@ "ctypesgen": { "flake": false, "locked": { - "lastModified": 1645104802, - "narHash": "sha256-iZUJqyt2b1FAQIw5pAu9FUmyhp2Qtsu0aiQ/9QkUW/s=", + "lastModified": 1575761084, + "narHash": "sha256-0VuIufvB1TYK8EXSFr8EegNxxRxnoHsxEKQX9y7LOdY=", "owner": "ctypesgen", "repo": "ctypesgen", - "rev": "fd495e5edb2f69e5407774f8937a1d62cd33fe55", + "rev": "b7ccd0764ef7d74e9ad5816924950d05b47ecc8c", "type": "github" }, "original": { "owner": "ctypesgen", + "ref": "ctypesgen-1.0.2", "repo": "ctypesgen", "type": "github" } diff --git a/flake.nix b/flake.nix index 0695308f5..97127c6dc 100644 --- a/flake.nix +++ b/flake.nix @@ -3,7 +3,7 @@ "A stream processing framework for high-throughput applications."; inputs.ctypesgen = { - url = "github:ctypesgen/ctypesgen"; + url = "github:ctypesgen/ctypesgen/ctypesgen-1.0.2"; flake = false; }; @@ -114,9 +114,8 @@ ]); preBuild = lib.optionalString enablePython '' make -C python bifrost/libbifrost_generated.py - sed -i \ - -e "s:^add_library_search_dirs(\[:&'$out/lib':" \ - python/bifrost/libbifrost_generated.py + sed "s:\(load_library\)(\"bifrost\"):\1('$out/lib/libbifrost.so'):"\ + -i python/bifrost/libbifrost_generated.py ''; makeFlags = lib.optionals enableCuda [ "CUDA_LIBDIR64=$(CUDA_HOME)/lib" ]; @@ -135,14 +134,21 @@ SETUPTOOLS_SCM_PRETEND_VERSION = version; src = inputs.ctypesgen; buildInputs = [ setuptools-scm toml ]; - patchPhase = + postPatch = # Version detection in the absence of ‘git describe’ is broken, # even with an explicit VERSION file. '' - sed -i \ - -e 's/\(VERSION = \).*$/\1"${pname}-${version}"/' \ + sed -e 's/\(VERSION = \).*$/\1"${pname}-${version}"/' \ -e 's/\(VERSION_NUMBER = \).*$/\1"${version}"/' \ - ctypesgen/version.py + -i ctypesgen/version.py + '' + + # Test suite invokes ‘run.py’, replace that with actual script. + '' + sed -e "s:\(script = \).*:\1'${ + placeholder "out" + }/bin/ctypesgen':" \ + -e "s:run\.py:ctypesgen:" \ + -i ctypesgen/test/testsuite.py '' + # At runtime, ctypesgen invokes ‘gcc -E’. It won’t be available in # the darwin stdenv so let's explicitly patch full path to gcc in @@ -150,15 +156,15 @@ # are also runs of gcc specified in test suite. '' sed -i 's:gcc -E:${gcc}/bin/gcc -E:' ctypesgen/options.py - sed -i 's:"gcc":"${gcc}/bin/gcc":' tests/ctypesgentest.py '' + # Some tests explicitly load ‘libm’ and ‘libc’. They won’t be # found on NixOS unless we patch in the ‘glibc’ path. lib.optionalString stdenv.isLinux '' - sed -i 's:libm.so.6:${glibc}/lib/libm.so.6:' tests/testsuite.py - sed -i 's:libc.so.6:${glibc}/lib/libc.so.6:' tests/testsuite.py + sed -e 's:libm.so.6:${glibc}/lib/&:' \ + -e 's:libc.so.6:${glibc}/lib/&:' \ + -i ctypesgen/test/testsuite.py ''; - checkPhase = "python -m unittest -v tests/testsuite.py"; + checkPhase = "python ctypesgen/test/testsuite.py"; }; pyOverlay = self: _: { From b38fc6ccb65bc82765f78834b679f97ecaf21f74 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 25 Mar 2022 20:31:21 -0400 Subject: [PATCH 0495/1155] nix: Oops, linuxism in library name --- flake.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 97127c6dc..7e482e9c0 100644 --- a/flake.nix +++ b/flake.nix @@ -114,9 +114,13 @@ ]); preBuild = lib.optionalString enablePython '' make -C python bifrost/libbifrost_generated.py - sed "s:\(load_library\)(\"bifrost\"):\1('$out/lib/libbifrost.so'):"\ + sed -e "s:^add_library_search_dirs(\[:&'$out/lib':" \ + -e 's:name_formats = \["%s":&,"lib%s","lib%s.so":' \ -i python/bifrost/libbifrost_generated.py ''; + # This can be a helpful addition to above sed; prints each path + # tried when loading library: + # -e "s:return self\.Lookup(path):print(path); &:" \ makeFlags = lib.optionals enableCuda [ "CUDA_LIBDIR64=$(CUDA_HOME)/lib" ]; preInstall = '' From f938259432f85457631d1bb49c58c901d19ebb29 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 28 Mar 2022 12:47:45 -0400 Subject: [PATCH 0496/1155] nix: Remove seds for CLEAR_LINE and \r Following merge of PR #169 --- flake.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/flake.nix b/flake.nix index 7e482e9c0..147c5b5c6 100644 --- a/flake.nix +++ b/flake.nix @@ -74,11 +74,6 @@ python3.pkgs.simplejson ]; patchPhase = - # Remove usage of \r and tput; not conducive to build logs. - '' - sed -i -e 's:\\r::g' -e 's:echo -n:echo:' \ - -e 's:\(CLEAR_LINE = \).*:\1:' src/autodep.mk src/Makefile.in - '' + # libtool wants file command, and refers to it in /usr/bin '' sed -i 's:/usr/bin/file:${file}/bin/file:' configure From eae62fa7ebea705586bba69ffcf85dcf4d52e949 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 28 Mar 2022 12:52:18 -0400 Subject: [PATCH 0497/1155] nix: Add comment about gh-pages deploy in nix.yml --- .github/workflows/nix.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index b570a7771..227a72b49 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -71,6 +71,9 @@ jobs: - name: Deploy documentation to gh-pages uses: JamesIves/github-pages-deploy-action@v4.2.5 + # Change github.ref below to master after #162 merged. Might + # only deploy if changes in doc/ folder? (But some doc pages + # generated from code, so maybe should reflect code changes.) if: | matrix.os == 'ubuntu-latest' && matrix.nixpkgs == 'pinned' From ced511763df25bc104732d5ae11a94bc718ffec3 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 28 Mar 2022 12:58:16 -0400 Subject: [PATCH 0498/1155] Changelog entry mentioning nix build --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 4db4aa6c7..e2a6ae44f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,6 @@ 0.10.1 * Cleaned up the Makefile outputs + * Added support for configurable, reproducible building with nix 0.10.0 * Switched over to an autotools-based build system From 8f730ce6bc6706dbcd593983c3f1809c2ac5d3c0 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 28 Mar 2022 13:18:01 -0400 Subject: [PATCH 0499/1155] In Socket.hpp, prevent warnings about sock_type comparison It looks like we're trying to use `enum sock_type` to impose a more limited type on the `int` specified by `::socket`. But it wasn't all the way supported, because the constructor took a general `int` (doesn't seem to be used that way within bifrost) and there were several comparisons between `SOCK_STREAM` (respectively `SOCK_DGRAM`) integer constants and enum-enabled `BF_SOCK_STREAM` (`BF_SOCK_DGRAM`). So this takes that goal further, using the enum version only. An alternative though (in case some other client code is using a general integer for other socket types) is just to eliminate `enum sock_type` and (if necessary) throw an exception if passed a `SOCK_*` constant other than those we support. The warnings were... ``` In file included from address.cpp:30: Socket.hpp: In member function 'void Socket::bind(sockaddr_storage, int)': Socket.hpp:584:12: warning: comparison between 'enum Socket::sock_type' and 'enum __socket_type' [8;; https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wenum-compare -Wenum-compare8;;] 584 | if( _type == SOCK_STREAM ) { | ^ Socket.hpp:584:12: warning: comparison between types 'Socket::sock_type' and '__socket_type' [ 8;; https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wsign-compare -Wsign-compare8;;] Socket.hpp: In member function 'void Socket::connect(sockaddr_storage)': Socket.hpp:596:26: warning: comparison between 'enum Socket::sock_type' and 'enum __socket_type' [8;; https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wenum-compare -Wenum-compare8;;] 596 | _type == SOCK_DGRAM && | ^ Socket.hpp:596:26: warning: comparison between types 'Socket::sock_type' and '__socket_type' [ 8;; https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wsign-compare -Wsign-compare8;;] ``` --- src/Socket.hpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index bbd5ba69b..f6088601c 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -282,8 +282,8 @@ class Socket { // Manage an existing socket (usually one returned by Socket::accept()) // TODO: With C++11 this could return by value (moved), which would be nicer inline static Socket* manage(int fd) { return new Socket(fd, ManageTag()); } - inline explicit Socket(/*sock_type*/int type=SOCK_DGRAM) - : _fd(-1), _type((sock_type)type), _family(AF_UNSPEC), + inline explicit Socket(sock_type type=BF_SOCK_DGRAM) + : _fd(-1), _type(type), _family(AF_UNSPEC), _mode(Socket::MODE_CLOSED) {} virtual ~Socket() { this->close(); } @@ -552,7 +552,7 @@ std::string Socket::address_string(sockaddr_storage addr) { } } int Socket::discover_mtu(sockaddr_storage remote_address) { - Socket s(SOCK_DGRAM); + Socket s(BF_SOCK_DGRAM); s.connect(remote_address); #if defined __APPLE__ && __APPLE__ return ::get_mtu(s.get_fd()); @@ -581,7 +581,7 @@ void Socket::bind(sockaddr_storage local_address, check_error(::bind(_fd, (struct sockaddr*)&local_address, sizeof(local_address)), "bind socket"); - if( _type == SOCK_STREAM ) { + if( _type == BF_SOCK_STREAM ) { check_error(::listen(_fd, max_conn_queue), "set socket to listen"); _mode = Socket::MODE_LISTENING; @@ -593,7 +593,7 @@ void Socket::bind(sockaddr_storage local_address, // TODO: Add timeout support? Bit of a pain to implement. void Socket::connect(sockaddr_storage remote_address) { bool can_reuse = (_fd != -1 && - _type == SOCK_DGRAM && + _type == BF_SOCK_DGRAM && (remote_address.ss_family == AF_UNSPEC || remote_address.ss_family == _family)); if( !can_reuse ) { From 592223c3f2bb0f05d8d71e02cef7f666ac027270 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Mar 2022 11:59:28 -0600 Subject: [PATCH 0500/1155] Simple test suites for CuPy and PyCUDA. --- test/test_interpop.py | 120 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 test/test_interpop.py diff --git a/test/test_interpop.py b/test/test_interpop.py new file mode 100644 index 000000000..fc1f6f10e --- /dev/null +++ b/test/test_interpop.py @@ -0,0 +1,120 @@ + +# Copyright (c) 2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2022, The University of New Mexico. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of The Bifrost Authors nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import unittest +import numpy as np +import bifrost as bf + +from bifrost.libbifrost_generated import BF_CUDA_ENABLED + +try: + import cupy as cp + HAVE_CUPY = True +except ImportError: + HAVE_CUPY = False + +try: + import pycuda.driver as cuda + import pycuda.autoinit + import pycuda.gpuarray + HAVE_PYCUDA = True +except ImportError: + HAVE_PYCUDA = False + +@unittest.skipUnless(BF_CUDA_ENABLED and HAVE_CUPY, "requires GPU support and cupy") +class TestCuPy(unittest.TestCase): + @staticmethod + def create_data(): + data = np.random.rand(100,1000) + return data.astype(np.float32) + + def test_as_cupy(self): + data = self.create_data() + + bf_data = bf.ndarray(data, space='cuda') + cp_data = bf_data.as_cupy() + np_data = cp.asnumpy(cp_data) + np.testing.assert_allclose(np_data, data) + def test_from_cupy(self): + data = self.create_data() + + cp_data = cp.asarray(data) + bf_data = bf.ndarray(cp_data) + np_data = bf_data.copy(space='system') + np.testing.assert_allclose(np_data, data) + + def test_cupy_stream(self): + data = self.create_data() + + orig_stream = bf.device.get_stream() + with cp.cuda.Stream() as stream: + bf.device.set_stream(stream.ptr) + self.assertEqual(bf.device.get_stream(), stream.ptr) + + bf_data = bf.ndarray(data, space='cuda') + bf.map('a = a + 2', {'a': bf_data}) + cp_data = bf_data.as_cupy() + cp_data *= 4 + np_data = cp.asnumpy(cp_data) + bf.device.set_stream(orig_stream) + np.testing.assert_allclose(np_data, (data+2)*4) + def test_cupy_external_stream(self): + data = self.create_data() + + stream = bf.device.get_stream() + with cp.cuda.ExternalStream(stream): + self.assertEqual(cp.cuda.get_current_stream().ptr, stream) + + bf_data = bf.ndarray(data, space='cuda') + bf.map('a = a + 2', {'a': bf_data}) + cp_data = bf_data.as_cupy() + cp_data *= 4 + np_data = cp.asnumpy(cp_data) + np.testing.assert_allclose(np_data, (data+2)*4) + +@unittest.skipUnless(BF_CUDA_ENABLED and HAVE_PYCUDA, "requires GPU support and cupy") +class TestPyCUDA(unittest.TestCase): + @staticmethod + def create_data(): + data = np.random.rand(100,1000) + return data.astype(np.float32) + + def test_as_gpuarray(self): + data = self.create_data() + + bf_data = bf.ndarray(data, space='cuda') + pc_data = bf_data.as_GPUArray() + np_data = pc_data.get() + np.testing.assert_allclose(np_data, data) + def test_from_gpuarray(self): + data = self.create_data() + + pc_data = pycuda.gpuarray.to_gpu(data) + bf_data = bf.ndarray(pc_data) + np_data = bf_data.copy(space='system') + np.testing.assert_allclose(np_data, data) From 5e05d5b1a75b7bb95e435e298cd5fd3df570cc99 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Mar 2022 12:54:22 -0600 Subject: [PATCH 0501/1155] Add PyCUDA steam test, plus lots of cleanup. --- test/test_interpop.py | 54 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/test/test_interpop.py b/test/test_interpop.py index fc1f6f10e..9fab4a8f0 100644 --- a/test/test_interpop.py +++ b/test/test_interpop.py @@ -42,10 +42,28 @@ import pycuda.driver as cuda import pycuda.autoinit import pycuda.gpuarray + import pycuda.driver HAVE_PYCUDA = True except ImportError: HAVE_PYCUDA = False +class BifrostStreamManager(object): + def __init__(self, stream): + self._stream = stream + + def __enter__(self): + self._orig_stream = bf.device.get_stream() + stream = getattr(self._stream, 'ptr', None) + if stream is None: + stream = getattr(self._stream, 'handle', None) + if stream is None: + stream = self._stream + bf.device.set_stream(stream) + return self + + def __exit__(self, type, value, tb): + bf.device.set_stream(self._orig_stream) + @unittest.skipUnless(BF_CUDA_ENABLED and HAVE_CUPY, "requires GPU support and cupy") class TestCuPy(unittest.TestCase): @staticmethod @@ -68,22 +86,21 @@ def test_from_cupy(self): np_data = bf_data.copy(space='system') np.testing.assert_allclose(np_data, data) - def test_cupy_stream(self): + def test_stream(self): data = self.create_data() orig_stream = bf.device.get_stream() with cp.cuda.Stream() as stream: - bf.device.set_stream(stream.ptr) - self.assertEqual(bf.device.get_stream(), stream.ptr) - - bf_data = bf.ndarray(data, space='cuda') - bf.map('a = a + 2', {'a': bf_data}) - cp_data = bf_data.as_cupy() - cp_data *= 4 - np_data = cp.asnumpy(cp_data) - bf.device.set_stream(orig_stream) + with BifrostStreamManager(stream): + self.assertEqual(bf.device.get_stream(), stream.ptr) + + bf_data = bf.ndarray(data, space='cuda') + bf.map('a = a + 2', {'a': bf_data}) + cp_data = bf_data.as_cupy() + cp_data *= 4 + np_data = cp.asnumpy(cp_data) np.testing.assert_allclose(np_data, (data+2)*4) - def test_cupy_external_stream(self): + def test_external_stream(self): data = self.create_data() stream = bf.device.get_stream() @@ -118,3 +135,18 @@ def test_from_gpuarray(self): bf_data = bf.ndarray(pc_data) np_data = bf_data.copy(space='system') np.testing.assert_allclose(np_data, data) + + def test_stream(self): + data = self.create_data() + + orig_stream = bf.device.get_stream() + stream = pycuda.driver.Stream() + with BifrostStreamManager(stream): + self.assertEqual(bf.device.get_stream(), stream.handle) + + bf_data = bf.ndarray(data, space='cuda') + bf.map('a = a + 2', {'a': bf_data}) + cp_data = bf_data.as_cupy() + cp_data *= 4 + np_data = cp.asnumpy(cp_data) + np.testing.assert_allclose(np_data, (data+2)*4) From f64ee68b4ed8956baefa6a391d63eb2f7c05270c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 08:32:21 -0600 Subject: [PATCH 0502/1155] Move BifrostStreamManager into bifrost.device as ExternalStream to make it more clear what it is for. --- python/bifrost/device.py | 34 ++++++++++++++++++++++++++++++++-- test/test_interpop.py | 23 ++--------------------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/python/bifrost/device.py b/python/bifrost/device.py index b69045652..3af0bc497 100644 --- a/python/bifrost/device.py +++ b/python/bifrost/device.py @@ -49,17 +49,47 @@ def get_device(): return _get(_bf.bfDeviceGet) def set_stream(stream): - """Set the CUDA stream to the provided ctypes.c_ulong instance.""" + """Set the CUDA stream to the provided stream handle""" stream = c_ulong(stream) _check(_bf.bfStreamSet(c_pointer(stream))) return True def get_stream(): - """Get the current CUDA stream and return it as a ctypes.c_ulong instance.""" + """Get the current CUDA stream and return its address""" stream = c_ulong(0) _check(_bf.bfStreamGet(c_pointer(stream))) return stream.value +class ExternalStream(object): + """Context manager to use a stream created by outside of Bifrost""" + def __init__(stream): + self._stream = stream + def __del__(self): + try: + set_stream(self._orig_stream) + except AttributeError: + pass + def use(self): + """Make the external stream the default stream. The original Bifrost + stream will be restored when this object is deleted. + + To temporirly switch streams use the 'with' statement.""" + self._orig_stream = get_stream() + # cupy stream? + stream = getattr(self._stream, 'ptr', None) + if stream is None: + # pycuda stream? + stream = getattr(self._stream, 'handle', None) + if stream is None: + stream = self._stream + set_stream(stream) + def __enter__(self): + self.use() + return self + def __exit__(self, type, value, tb): + set_stream(self._orig_stream) + del self._orig_stream + def stream_synchronize(): _check(_bf.bfStreamSynchronize()) diff --git a/test/test_interpop.py b/test/test_interpop.py index 9fab4a8f0..d3f26dc35 100644 --- a/test/test_interpop.py +++ b/test/test_interpop.py @@ -47,23 +47,6 @@ except ImportError: HAVE_PYCUDA = False -class BifrostStreamManager(object): - def __init__(self, stream): - self._stream = stream - - def __enter__(self): - self._orig_stream = bf.device.get_stream() - stream = getattr(self._stream, 'ptr', None) - if stream is None: - stream = getattr(self._stream, 'handle', None) - if stream is None: - stream = self._stream - bf.device.set_stream(stream) - return self - - def __exit__(self, type, value, tb): - bf.device.set_stream(self._orig_stream) - @unittest.skipUnless(BF_CUDA_ENABLED and HAVE_CUPY, "requires GPU support and cupy") class TestCuPy(unittest.TestCase): @staticmethod @@ -89,9 +72,8 @@ def test_from_cupy(self): def test_stream(self): data = self.create_data() - orig_stream = bf.device.get_stream() with cp.cuda.Stream() as stream: - with BifrostStreamManager(stream): + with bf.device.ExternalStream(stream): self.assertEqual(bf.device.get_stream(), stream.ptr) bf_data = bf.ndarray(data, space='cuda') @@ -139,9 +121,8 @@ def test_from_gpuarray(self): def test_stream(self): data = self.create_data() - orig_stream = bf.device.get_stream() stream = pycuda.driver.Stream() - with BifrostStreamManager(stream): + with bf.device.ExternalStream(stream): self.assertEqual(bf.device.get_stream(), stream.handle) bf_data = bf.ndarray(data, space='cuda') From cef1d7d51a0b0f6a967c93be720c5dc28ca9363f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 08:33:44 -0600 Subject: [PATCH 0503/1155] Ugh. --- python/bifrost/device.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/device.py b/python/bifrost/device.py index 3af0bc497..20a648a83 100644 --- a/python/bifrost/device.py +++ b/python/bifrost/device.py @@ -62,7 +62,7 @@ def get_stream(): class ExternalStream(object): """Context manager to use a stream created by outside of Bifrost""" - def __init__(stream): + def __init__(self, stream): self._stream = stream def __del__(self): try: From 7392a4abc27b4262e8415f8380184c7922ef5a1e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 08:59:12 -0600 Subject: [PATCH 0504/1155] Updated for the Python stream work. --- CHANGELOG | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index cfbe115bf..c19962d24 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +0.10.1 + * Added set_stream and get_stream to bifrost.device to help control which CUDA stream is used + * Added bifrost.device.ExternalStream as a context manager to help with mixing Bifrost and cupy/pycuda + 0.10.0 * Switched over to an autotools-based build system * Added a .m4 file to help other autotools-based software find Bifrost From 38bfbecabf6944d810a2234ef18c5a56b1a72489 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 29 Mar 2022 12:28:32 -0400 Subject: [PATCH 0505/1155] Redeploy gh-pages on updates to master branch. --- .github/workflows/nix.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 227a72b49..14b8decbc 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -71,14 +71,13 @@ jobs: - name: Deploy documentation to gh-pages uses: JamesIves/github-pages-deploy-action@v4.2.5 - # Change github.ref below to master after #162 merged. Might - # only deploy if changes in doc/ folder? (But some doc pages - # generated from code, so maybe should reflect code changes.) + # Maybe only deploy if changes in doc/ folder? (But some doc + # pages generated from code, so should reflect code changes?) if: | matrix.os == 'ubuntu-latest' && matrix.nixpkgs == 'pinned' && github.event_name == 'push' - && github.ref == 'refs/heads/nix-flake' + && github.ref == 'refs/heads/master' with: branch: gh-pages folder: result-doc/share/doc/bifrost/html From 007d968fd4184bfd1bb99eb84f67e7d9ed719a7c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 10:38:50 -0600 Subject: [PATCH 0506/1155] Check for python3 if python isn't found. --- configure | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 4 ++++ 2 files changed, 59 insertions(+) diff --git a/configure b/configure index bda1a6ca2..6a970cacf 100755 --- a/configure +++ b/configure @@ -704,6 +704,7 @@ HAVE_DOCKER DOCKER PYINSTALLFLAGS PYBUILDFLAGS +PYTHON3 PYTHON HAVE_PYTHON HAVE_MAP_CACHE @@ -20126,6 +20127,60 @@ fi + if test x${PYTHON} = xno +then : + # Extract the first word of "python3", so it can be a program name with args. +set dummy python3; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PYTHON3 in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON3="$PYTHON3" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON3="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PYTHON3" && ac_cv_path_PYTHON3="no" + ;; +esac +fi +PYTHON3=$ac_cv_path_PYTHON3 +if test -n "$PYTHON3"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON3" >&5 +printf "%s\n" "$PYTHON3" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + if test x${PYTHON3} != xno +then : + PYTHON=$PYTHON3 + +fi +fi if test x${PYTHON} != xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 diff --git a/configure.ac b/configure.ac index fd515906a..efd800da2 100644 --- a/configure.ac +++ b/configure.ac @@ -227,6 +227,10 @@ AC_ARG_ENABLE([python], AC_SUBST([HAVE_PYTHON], [0]) AS_IF([test x$enable_python != xno], [AX_WITH_PROG(PYTHON, python, no, $PATH) + AS_IF([test x${PYTHON} = xno], + [AC_PATH_PROG(PYTHON3, python3, no, $PATH) + AS_IF([test x${PYTHON3} != xno], + [AC_SUBST([PYTHON], [$PYTHON3])])]) AS_IF([test x${PYTHON} != xno], [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) AS_IF([! ${PYTHON} -c "import ctypesgen" 2>/dev/null], From 12a6d7a764d41f47d8c934b336b426e5bd7b9249 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 11:29:51 -0600 Subject: [PATCH 0507/1155] Fix library names in configure. --- configure | 38 +++++++++++++++++++------------------- configure.ac | 6 +++--- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/configure b/configure index c38069fd8..91bc65f0d 100755 --- a/configure +++ b/configure @@ -19303,14 +19303,14 @@ HAVE_VERBS=0 if test x$enable_verbs != xno then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ibv_query_device in -lverbs" >&5 -printf %s "checking for ibv_query_device in -lverbs... " >&6; } -if test ${ac_cv_lib_verbs_ibv_query_device+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ibv_query_device in -libverbs" >&5 +printf %s "checking for ibv_query_device in -libverbs... " >&6; } +if test ${ac_cv_lib_ibverbs_ibv_query_device+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS -LIBS="-lverbs $LIBS" +LIBS="-libverbs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19327,21 +19327,21 @@ return conftest::ibv_query_device (); _ACEOF if ac_fn_cxx_try_link "$LINENO" then : - ac_cv_lib_verbs_ibv_query_device=yes + ac_cv_lib_ibverbs_ibv_query_device=yes else $as_nop - ac_cv_lib_verbs_ibv_query_device=no + ac_cv_lib_ibverbs_ibv_query_device=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_verbs_ibv_query_device" >&5 -printf "%s\n" "$ac_cv_lib_verbs_ibv_query_device" >&6; } -if test "x$ac_cv_lib_verbs_ibv_query_device" = xyes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ibverbs_ibv_query_device" >&5 +printf "%s\n" "$ac_cv_lib_ibverbs_ibv_query_device" >&6; } +if test "x$ac_cv_lib_ibverbs_ibv_query_device" = xyes then : HAVE_VERBS=1 - LIBS="$LIBS -lverbs" + LIBS="$LIBS -libverbs" fi fi @@ -19362,14 +19362,14 @@ HAVE_RDMA=0 if test x$enable_rdma != xno then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rdma_get_devices in -lrdma" >&5 -printf %s "checking for rdma_get_devices in -lrdma... " >&6; } -if test ${ac_cv_lib_rdma_rdma_get_devices+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rdma_get_devices in -lrdmacm" >&5 +printf %s "checking for rdma_get_devices in -lrdmacm... " >&6; } +if test ${ac_cv_lib_rdmacm_rdma_get_devices+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS -LIBS="-lrdma $LIBS" +LIBS="-lrdmacm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19386,17 +19386,17 @@ return conftest::rdma_get_devices (); _ACEOF if ac_fn_cxx_try_link "$LINENO" then : - ac_cv_lib_rdma_rdma_get_devices=yes + ac_cv_lib_rdmacm_rdma_get_devices=yes else $as_nop - ac_cv_lib_rdma_rdma_get_devices=no + ac_cv_lib_rdmacm_rdma_get_devices=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rdma_rdma_get_devices" >&5 -printf "%s\n" "$ac_cv_lib_rdma_rdma_get_devices" >&6; } -if test "x$ac_cv_lib_rdma_rdma_get_devices" = xyes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rdmacm_rdma_get_devices" >&5 +printf "%s\n" "$ac_cv_lib_rdmacm_rdma_get_devices" >&6; } +if test "x$ac_cv_lib_rdmacm_rdma_get_devices" = xyes then : HAVE_RDMA=1 diff --git a/configure.ac b/configure.ac index ffc95f4dd..c51d966ed 100644 --- a/configure.ac +++ b/configure.ac @@ -141,9 +141,9 @@ AC_ARG_ENABLE([verbs], [enable_verbs=no]) AC_SUBST([HAVE_VERBS], [0]) AS_IF([test x$enable_verbs != xno], - [AC_CHECK_LIB([verbs], [ibv_query_device], + [AC_CHECK_LIB([ibverbs], [ibv_query_device], [AC_SUBST([HAVE_VERBS], [1]) - LIBS="$LIBS -lverbs"])]) + LIBS="$LIBS -libverbs"])]) # # RDMA @@ -156,7 +156,7 @@ AC_ARG_ENABLE([rdma], [enable_rdma=no]) AC_SUBST([HAVE_RDMA], [0]) AS_IF([test x$enable_rdma != xno], - [AC_CHECK_LIB([rdma], [rdma_get_devices], + [AC_CHECK_LIB([rdmacm], [rdma_get_devices], [AC_SUBST([HAVE_RDMA], [1]) LIBS="$LIBS -lrdmacm"])]) From 509e7821ca5a7506ce05d53e80e86ccf267a3494 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 12:42:20 -0600 Subject: [PATCH 0508/1155] Add in missing object. --- src/Makefile.in | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Makefile.in b/src/Makefile.in index c06001690..ff1609bb5 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -45,6 +45,7 @@ ifeq ($(HAVE_RECVMSG),1) LIBBIFROST_OBJS += \ address.o \ udp_socket.o \ + hw_locality.o \ packet_capture.o \ packet_writer.o endif From 8585bdd9270742b52cd49611222d68a4e00c24ba Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 12:46:09 -0600 Subject: [PATCH 0509/1155] Use config.h. --- src/hw_locality.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hw_locality.hpp b/src/hw_locality.hpp index e0245f666..d70437719 100644 --- a/src/hw_locality.hpp +++ b/src/hw_locality.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -29,6 +29,7 @@ #pragma once #include +#include #if BF_HWLOC_ENABLED #include From 120ca755c3ea8a8d04440e94879dfde52a7eff58 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 14:42:43 -0600 Subject: [PATCH 0510/1155] Update for libhwloc 2. --- src/hw_locality.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/hw_locality.cpp b/src/hw_locality.cpp index 85739c002..0e4d97427 100644 --- a/src/hw_locality.cpp +++ b/src/hw_locality.cpp @@ -27,6 +27,7 @@ */ #include "hw_locality.hpp" +#include #if BF_HWLOC_ENABLED int HardwareLocality::bind_memory_to_core(int core) { @@ -35,7 +36,14 @@ int HardwareLocality::bind_memory_to_core(int core) { int ret = 0; if( 0 <= core && core < ncore ) { hwloc_obj_t obj = hwloc_get_obj_by_depth(_topo, core_depth, core); +#if HWLOC_API_VERSION >= 0x00020000 + hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->cpuset); + if( !hwloc_bitmap_intersects(cpuset, hwloc_topology_get_allowed_cpuset(_topo)) ) { + throw std::runtime_error("requested core is not in the list of allowed cores"); + } +#else hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->allowed_cpuset); +#endif hwloc_bitmap_singlify(cpuset); // Avoid hyper-threads hwloc_membind_policy_t policy = HWLOC_MEMBIND_BIND; hwloc_membind_flags_t flags = HWLOC_MEMBIND_THREAD; From 6fa61061c721533e083e74fa573a182439ba44c2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 15:02:30 -0600 Subject: [PATCH 0511/1155] Also catch cudaMemoryTypeUnregistered in bfGetSpace(). --- src/memory.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/memory.cpp b/src/memory.cpp index 10f68335f..8ca29cdc3 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -63,14 +63,15 @@ BFstatus bfGetSpace(const void* ptr, BFspace* space) { #if defined(CUDA_VERSION) && CUDA_VERSION >= 10000 } else { switch( ptr_attrs.type ) { - case cudaMemoryTypeHost: *space = BF_SPACE_SYSTEM; break; - case cudaMemoryTypeDevice: *space = BF_SPACE_CUDA; break; - case cudaMemoryTypeManaged: *space = BF_SPACE_CUDA_MANAGED; break; - default: { - // This should never be reached - BF_FAIL("Valid memoryType", BF_STATUS_INTERNAL_ERROR); - } - } + case cudaMemoryTypeUnregistered: // fall-through + case cudaMemoryTypeHost: *space = BF_SPACE_SYSTEM; break; + case cudaMemoryTypeDevice: *space = BF_SPACE_CUDA; break; + case cudaMemoryTypeManaged: *space = BF_SPACE_CUDA_MANAGED; break; + default: { + // This should never be reached + BF_FAIL("Valid memoryType", BF_STATUS_INTERNAL_ERROR); + } + } } #else } else if( ptr_attrs.isManaged ) { From 0938ee897a8c543cd91bd999172df939791fb1ab Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 15:05:45 -0600 Subject: [PATCH 0512/1155] Catch by reference. --- src/ib_verbs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 9942cba9d..fbd200541 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -994,7 +994,7 @@ class Verbs { while( _verbs.pkt_batch == NULL ) { try { _verbs.pkt_batch = this->receive(); - } catch(Verbs::Error) { + } catch(Verbs::Error const&) { _verbs.pkt = NULL; errno = EAGAIN; return -1; From 9212dd26dcfeb14b45a535accc61a3e56186faf6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 29 Mar 2022 16:18:54 -0600 Subject: [PATCH 0513/1155] I know it is only 16 bytes long. --- src/ib_verbs.hpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index fbd200541..0fc139d7f 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -185,7 +185,10 @@ class Verbs { if( strncmp(&(line[0]), "lo", 2) == 0 ) { is_lo = 1; } + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wstringop-truncation" strncpy(name, &(line[0]), IFNAMSIZ); + #pragma GCC diagnostic pop } pclose(fp); @@ -197,7 +200,10 @@ class Verbs { if( line[strlen(line)-1] == '\n' ) { line[strlen(line)-1] = '\0'; } + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wstringop-truncation" strncpy(name, &(line[0]), IFNAMSIZ); + #pragma GCC diagnostic pop } pclose(fp); } From 2c835b71410f99c799556f6221a67bf0ad9391e5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 30 Mar 2022 07:39:24 -0600 Subject: [PATCH 0514/1155] Test for C++17 support. --- configure | 884 ++++++++++++++++++++++++++++++++++++++++++++++++++- configure.ac | 23 +- 2 files changed, 892 insertions(+), 15 deletions(-) diff --git a/configure b/configure index 6a970cacf..0b1ef295a 100755 --- a/configure +++ b/configure @@ -735,6 +735,7 @@ LIBOBJS HAVE_RECVMSG HAVE_CXX11 HAVE_CXX14 +HAVE_CXX17 SO_EXT CTAGS SET_MAKE @@ -17660,7 +17661,871 @@ _ACEOF ;; esac - ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false + ax_cxx_compile_alternatives="17 1z" ax_cxx_compile_cxx17_required=false + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + + + + + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx17_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features with $switch" >&5 +printf %s "checking whether $CXX supports C++17 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; + + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture + { + + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + + } + + namespace test_digit_separators + { + + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L + + + + +// If the compiler admits that it is not ready for C++17, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201703L + +#error "This is not a C++17 compiler" + +#else + +#include +#include +#include + +namespace cxx17 +{ + + namespace test_constexpr_lambdas + { + + constexpr int foo = [](){return 42;}(); + + } + + namespace test::nested_namespace::definitions + { + + } + + namespace test_fold_expression + { + + template + int multiply(Args... args) + { + return (args * ... * 1); + } + + template + bool all(Args... args) + { + return (args && ...); + } + + } + + namespace test_extended_static_assert + { + + static_assert (true); + + } + + namespace test_auto_brace_init_list + { + + auto foo = {5}; + auto bar {5}; + + static_assert(std::is_same, decltype(foo)>::value); + static_assert(std::is_same::value); + } + + namespace test_typename_in_template_template_parameter + { + + template typename X> struct D; + + } + + namespace test_fallthrough_nodiscard_maybe_unused_attributes + { + + int f1() + { + return 42; + } + + [[nodiscard]] int f2() + { + [[maybe_unused]] auto unused = f1(); + + switch (f1()) + { + case 17: + f1(); + [[fallthrough]]; + case 42: + f1(); + } + return f1(); + } + + } + + namespace test_extended_aggregate_initialization + { + + struct base1 + { + int b1, b2 = 42; + }; + + struct base2 + { + base2() { + b3 = 42; + } + int b3; + }; + + struct derived : base1, base2 + { + int d; + }; + + derived d1 {{1, 2}, {}, 4}; // full initialization + derived d2 {{}, {}, 4}; // value-initialized bases + + } + + namespace test_general_range_based_for_loop + { + + struct iter + { + int i; + + int& operator* () + { + return i; + } + + const int& operator* () const + { + return i; + } + + iter& operator++() + { + ++i; + return *this; + } + }; + + struct sentinel + { + int i; + }; + + bool operator== (const iter& i, const sentinel& s) + { + return i.i == s.i; + } + + bool operator!= (const iter& i, const sentinel& s) + { + return !(i == s); + } + + struct range + { + iter begin() const + { + return {0}; + } + + sentinel end() const + { + return {5}; + } + }; + + void f() + { + range r {}; + + for (auto i : r) + { + [[maybe_unused]] auto v = i; + } + } + + } + + namespace test_lambda_capture_asterisk_this_by_value + { + + struct t + { + int i; + int foo() + { + return [*this]() + { + return i; + }(); + } + }; + + } + + namespace test_enum_class_construction + { + + enum class byte : unsigned char + {}; + + byte foo {42}; + + } + + namespace test_constexpr_if + { + + template + int f () + { + if constexpr(cond) + { + return 13; + } + else + { + return 42; + } + } + + } + + namespace test_selection_statement_with_initializer + { + + int f() + { + return 13; + } + + int f2() + { + if (auto i = f(); i > 0) + { + return 3; + } + + switch (auto i = f(); i + 4) + { + case 17: + return 2; + + default: + return 1; + } + } + + } + + namespace test_template_argument_deduction_for_class_templates + { + + template + struct pair + { + pair (T1 p1, T2 p2) + : m1 {p1}, + m2 {p2} + {} + + T1 m1; + T2 m2; + }; + + void f() + { + [[maybe_unused]] auto p = pair{13, 42u}; + } + + } + + namespace test_non_type_auto_template_parameters + { + + template + struct B + {}; + + B<5> b1; + B<'a'> b2; + + } + + namespace test_structured_bindings + { + + int arr[2] = { 1, 2 }; + std::pair pr = { 1, 2 }; + + auto f1() -> int(&)[2] + { + return arr; + } + + auto f2() -> std::pair& + { + return pr; + } + + struct S + { + int x1 : 2; + volatile double y1; + }; + + S f3() + { + return {}; + } + + auto [ x1, y1 ] = f1(); + auto& [ xr1, yr1 ] = f1(); + auto [ x2, y2 ] = f2(); + auto& [ xr2, yr2 ] = f2(); + const auto [ x3, y3 ] = f3(); + + } + + namespace test_exception_spec_type_system + { + + struct Good {}; + struct Bad {}; + + void g1() noexcept; + void g2(); + + template + Bad + f(T*, T*); + + template + Good + f(T1*, T2*); + + static_assert (std::is_same_v); + + } + + namespace test_inline_variables + { + + template void f(T) + {} + + template inline T g(T) + { + return T{}; + } + + template<> inline void f<>(int) + {} + + template<> int g<>(int) + { + return 5; + } + + } + +} // namespace cxx17 + +#endif // __cplusplus < 201703L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + eval $cachevar=yes +else $as_nop + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx17_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++17 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX17=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++17 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++17 support was found" >&6;} + else + HAVE_CXX17=1 + +printf "%s\n" "#define HAVE_CXX17 1" >>confdefs.h + + fi + + +if test x$HAVE_CXX17 != x1 +then : + ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -18144,7 +19009,7 @@ printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h fi -if test x$HAVE_CXX14 != x1 + if test x$HAVE_CXX14 != x1 then : ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true ac_ext=cpp @@ -18510,6 +19375,7 @@ printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h fi +fi fi ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes @@ -22491,16 +23357,22 @@ PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. '{print $3}'` # -# C++14/C++11 toggling +# C++17/C++14/C++11 toggling # -if test x$HAVE_CXX14 = x1 +if test x$HAVE_CXX17 = x1 +then : + CXXFLAGS="-std=c++17 $CXXFLAGS" + NVCCFLAGS="-std=c++17 $NVCCFLAGS" +else $as_nop + if test x$HAVE_CXX14 = x1 then : CXXFLAGS="-std=c++14 $CXXFLAGS" - NVCCFLAGS="-std=c++14 $NVCCFLAGS" + NVCCFLAGS="-std=c++14 $NVCCFLAGS" else $as_nop CXXFLAGS="-std=c++11 $CXXFLAGS" - NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS" + NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS" +fi fi # diff --git a/configure.ac b/configure.ac index efd800da2..dbaa3ad86 100644 --- a/configure.ac +++ b/configure.ac @@ -39,9 +39,11 @@ AC_SUBST(SO_EXT, $shrext_cmds) # AC_C_INLINE -AX_CXX_COMPILE_STDCXX(14, noext, optional) -AS_IF([test x$HAVE_CXX14 != x1], - [AX_CXX_COMPILE_STDCXX(11, noext, mandatory)]) +AX_CXX_COMPILE_STDCXX(17, noext, optional) +AS_IF([test x$HAVE_CXX17 != x1], + [AX_CXX_COMPILE_STDCXX(14, noext, optional) + AS_IF([test x$HAVE_CXX14 != x1], + [AX_CXX_COMPILE_STDCXX(11, noext, mandatory)])]) AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) @@ -284,14 +286,17 @@ AC_SUBST([PACKAGE_VERSION_MINOR], [`echo $PACKAGE_VERSION | $AWK -F. '{print $2} AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. '{print $3}'`]) # -# C++14/C++11 toggling +# C++17/C++14/C++11 toggling # -AS_IF([test x$HAVE_CXX14 = x1], - [CXXFLAGS="-std=c++14 $CXXFLAGS" - NVCCFLAGS="-std=c++14 $NVCCFLAGS"], - [CXXFLAGS="-std=c++11 $CXXFLAGS" - NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS"]) +AS_IF([test x$HAVE_CXX17 = x1], + [CXXFLAGS="-std=c++17 $CXXFLAGS" + NVCCFLAGS="-std=c++17 $NVCCFLAGS"], + [AS_IF([test x$HAVE_CXX14 = x1], + [CXXFLAGS="-std=c++14 $CXXFLAGS" + NVCCFLAGS="-std=c++14 $NVCCFLAGS"], + [CXXFLAGS="-std=c++11 $CXXFLAGS" + NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS"])]) # # Linking flags From d13c2a6d3851ac338f84ab8a1960e430504196a7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 30 Mar 2022 08:36:15 -0600 Subject: [PATCH 0515/1155] Use std::filesystem if we have a C++17 compiler. --- src/fileutils.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index bbbc07465..b83822a80 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -28,6 +28,11 @@ #include "fileutils.hpp" +#if __cplusplus >= 201703L +#include +#include +#endif + std::string get_home_dir(void) { const char *homedir; if ((homedir = getenv("HOME")) == NULL) { @@ -42,31 +47,69 @@ std::string get_home_dir(void) { files. Might eventually implement these with C++/boost filesystem library. */ void make_dir(std::string path, int perms) { +#if __cplusplus >= 201703L + std::filesystem::create_directory(path); + std::filesystem::permissions(path, \ + (std::filesystem::perms) perms, \ + std::filesystem::perm_options::replace); +#else if( std::system(("mkdir -p -m "+std::to_string(perms)+" "+path).c_str()) ) { throw std::runtime_error("Failed to create path: "+path); } +#endif } void remove_files_recursively(std::string path) { +#if __cplusplus >= 201703L + std::filesystem::remove_all(path); +#else if( std::system(("rm -rf "+path).c_str()) ) { throw std::runtime_error("Failed to remove all: "+path); } +#endif } void remove_dir(std::string path) { +#if __cplusplus >= 201703L + std::filesystem::remove(path); +#else if( std::system(("rmdir "+path+" 2> /dev/null").c_str()) ) { throw std::runtime_error("Failed to remove dir: "+path); } +#endif } void remove_file_glob(std::string path) { // Often, PATH contains wildcard, so this can't just be unlink system call. +#if __cplusplus >= 201703L + // Convert the shell-style wildcards into a POSIX regex + // TODO: expand this to support more complicated expressions + std::regex special_re("\\.", std::regex::basic); + path = std::regex_replace(path, special_re, "\\$&"); + std::regex wildcard_re("\\*", std::regex::basic); + path = std::regex_replace(path, wildcard_re, ".$&"); + std::regex r(path, std::regex::basic); + + // Iterate through the directory's contents and remove the matches + std::filesystem::path ipath = path; + for(auto const& entry : std::filesystem::directory_iterator{ipath.parent_path()}) { + std::filesystem::path epath = entry.path(); + if( std::regex_match(epath.string(), r) ) { + std::filesystem::remove(epath); + } + } +#else if( std::system(("rm -f "+path).c_str()) ) { throw std::runtime_error("Failed to remove file: "+path); } +#endif } bool file_exists(std::string path) { +#if __cplusplus >= 201703L + return std::filesystem::exists(path); +#else struct stat s; return !(stat(path.c_str(), &s) == -1 && errno == ENOENT); +#endif } bool process_exists(pid_t pid) { #if defined(__APPLE__) && __APPLE__ @@ -99,15 +142,18 @@ bool process_exists(pid_t pid) { } return (bool) found; #else - struct stat s; - return !(stat(("/proc/"+std::to_string(pid)).c_str(), &s) == -1 - && errno == ENOENT); + return file_exists("/proc/"+std::to_string(pid)); #endif } std::string get_dirname(std::string filename) { +#if __cplusplus >= 201703L + std::filesystem::path path = filename; + return (path.parent_path()).to_string(); +#else // TODO: This is crude, but works for our proclog use-case return filename.substr(0, filename.find_last_of("/")); +#endif } /* NOTE: In case of abnormal exit (such as segmentation fault or other signal), From 6bfbf44a0457aa426721182f9d2ab9eb78bdb01a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 30 Mar 2022 09:48:22 -0600 Subject: [PATCH 0516/1155] Just 'string()'. --- src/fileutils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index b83822a80..d8b194a8f 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -149,7 +149,7 @@ bool process_exists(pid_t pid) { std::string get_dirname(std::string filename) { #if __cplusplus >= 201703L std::filesystem::path path = filename; - return (path.parent_path()).to_string(); + return (path.parent_path()).string(); #else // TODO: This is crude, but works for our proclog use-case return filename.substr(0, filename.find_last_of("/")); From 86908d83b1078baa069d5847562189b420b454fd Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 30 Mar 2022 09:59:54 -0600 Subject: [PATCH 0517/1155] Create all missing parent directories as well. --- src/fileutils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index d8b194a8f..265d27ede 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -48,7 +48,7 @@ std::string get_home_dir(void) { void make_dir(std::string path, int perms) { #if __cplusplus >= 201703L - std::filesystem::create_directory(path); + std::filesystem::create_directories(path); std::filesystem::permissions(path, \ (std::filesystem::perms) perms, \ std::filesystem::perm_options::replace); From 6fcc3844c85927c92d3517cb78ad20ce49064aa3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 30 Mar 2022 10:07:06 -0600 Subject: [PATCH 0518/1155] Is it a permissions thing? --- src/fileutils.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 265d27ede..771a59185 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -48,8 +48,12 @@ std::string get_home_dir(void) { void make_dir(std::string path, int perms) { #if __cplusplus >= 201703L - std::filesystem::create_directories(path); - std::filesystem::permissions(path, \ + std::filesystem::path ipath = path; + if( !std::filesystem.exists(ipath.parent_path()) ) { + make_dir((ipath.parent_path()).string(), perms) + } + std::filesystem::create_directory(ipath); + std::filesystem::permissions(ipath, \ (std::filesystem::perms) perms, \ std::filesystem::perm_options::replace); #else From b066cf46bad88aaa01d54e3d7da53e70b776d2b6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 30 Mar 2022 10:25:32 -0600 Subject: [PATCH 0519/1155] Not the permissions problem that I thought it was. --- src/fileutils.cpp | 8 ++------ src/fileutils.hpp | 2 +- src/proclog.cpp | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 771a59185..265d27ede 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -48,12 +48,8 @@ std::string get_home_dir(void) { void make_dir(std::string path, int perms) { #if __cplusplus >= 201703L - std::filesystem::path ipath = path; - if( !std::filesystem.exists(ipath.parent_path()) ) { - make_dir((ipath.parent_path()).string(), perms) - } - std::filesystem::create_directory(ipath); - std::filesystem::permissions(ipath, \ + std::filesystem::create_directories(path); + std::filesystem::permissions(path, \ (std::filesystem::perms) perms, \ std::filesystem::perm_options::replace); #else diff --git a/src/fileutils.hpp b/src/fileutils.hpp index cdb72f116..f4beb2ff5 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -40,7 +40,7 @@ #endif std::string get_home_dir(void); -void make_dir(std::string path, int perms=775); +void make_dir(std::string path, int perms=0775); void remove_files_recursively(std::string path); void remove_dir(std::string path); void remove_file_glob(std::string path); diff --git a/src/proclog.cpp b/src/proclog.cpp index 1e888f71f..e37d4f5c5 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -73,7 +73,7 @@ class ProcLogMgr { ProcLogMgr() : _logdir(std::string(base_logdir) + "/" + std::to_string(getpid())) { this->try_base_logdir_cleanup(); - make_dir(base_logdir, 777); + make_dir(base_logdir, 0777); make_dir(_logdir); } ~ProcLogMgr() { From ab690ec57e149d7cb66893ab34029e5106e34131 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 30 Mar 2022 11:04:04 -0600 Subject: [PATCH 0520/1155] Note update. --- src/fileutils.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 265d27ede..f342bab16 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -41,10 +41,10 @@ std::string get_home_dir(void) { return std::string(homedir); } -/* NOTE: For convenience, these functions build a shell command and pass it to - system(). The PATH argument is not shell-quoted or otherwise sanitized, so - only use with program constants, not with data from command line or config - files. Might eventually implement these with C++/boost filesystem library. */ +/* NOTE: For convenience on systems with compilers without C++17 support, these + functions build a shell command and pass it to system(). The PATH argument is + not shell-quoted or otherwise sanitized, so only use with program constants, + not with data from command line or config files. */ void make_dir(std::string path, int perms) { #if __cplusplus >= 201703L From 908f35f335dd30c7d9e2fe8bdc9e59858f6b20e5 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 31 Mar 2022 10:25:06 -0400 Subject: [PATCH 0521/1155] In Socket.hpp, remove enum sock_type in favor of simple int --- src/Socket.hpp | 21 ++++++++++----------- src/udp_socket.cpp | 2 +- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index f6088601c..76c11f27e 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -275,16 +275,15 @@ class Socket { #endif DEFAULT_MAX_CONN_QUEUE = 128 }; - enum sock_type { - BF_SOCK_DGRAM = SOCK_DGRAM, - BF_SOCK_STREAM = SOCK_STREAM - }; // Manage an existing socket (usually one returned by Socket::accept()) // TODO: With C++11 this could return by value (moved), which would be nicer inline static Socket* manage(int fd) { return new Socket(fd, ManageTag()); } - inline explicit Socket(sock_type type=BF_SOCK_DGRAM) + inline explicit Socket(int type=SOCK_DGRAM) : _fd(-1), _type(type), _family(AF_UNSPEC), - _mode(Socket::MODE_CLOSED) {} + _mode(Socket::MODE_CLOSED) { + BF_ASSERT_EXCEPTION(type == SOCK_DGRAM || type == SOCK_STREAM, + BF_STATUS_INVALID_ARGUMENT); + } virtual ~Socket() { this->close(); } #if __cplusplus >= 201103L @@ -434,7 +433,7 @@ class Socket { sockaddr* address, sa_family_t family=AF_UNSPEC); int _fd; - sock_type _type; + int _type; sa_family_t _family; enum { MODE_CLOSED, @@ -552,7 +551,7 @@ std::string Socket::address_string(sockaddr_storage addr) { } } int Socket::discover_mtu(sockaddr_storage remote_address) { - Socket s(BF_SOCK_DGRAM); + Socket s(SOCK_DGRAM); s.connect(remote_address); #if defined __APPLE__ && __APPLE__ return ::get_mtu(s.get_fd()); @@ -581,7 +580,7 @@ void Socket::bind(sockaddr_storage local_address, check_error(::bind(_fd, (struct sockaddr*)&local_address, sizeof(local_address)), "bind socket"); - if( _type == BF_SOCK_STREAM ) { + if( _type == SOCK_STREAM ) { check_error(::listen(_fd, max_conn_queue), "set socket to listen"); _mode = Socket::MODE_LISTENING; @@ -593,7 +592,7 @@ void Socket::bind(sockaddr_storage local_address, // TODO: Add timeout support? Bit of a pain to implement. void Socket::connect(sockaddr_storage remote_address) { bool can_reuse = (_fd != -1 && - _type == BF_SOCK_DGRAM && + _type == SOCK_DGRAM && (remote_address.ss_family == AF_UNSPEC || remote_address.ss_family == _family)); if( !can_reuse ) { @@ -948,7 +947,7 @@ void Socket::swap(Socket& s) { std::swap(_iovecs, s._iovecs); } Socket::Socket(int fd, ManageTag ) : _fd(fd) { - _type = this->get_option(SO_TYPE); + _type = this->get_option(SO_TYPE); #if defined __APPLE__ && __APPLE__ _family = get_family(fd); #else diff --git a/src/udp_socket.cpp b/src/udp_socket.cpp index c07410e09..25b952a5e 100644 --- a/src/udp_socket.cpp +++ b/src/udp_socket.cpp @@ -32,7 +32,7 @@ #include struct BFudpsocket_impl : public Socket { - BFudpsocket_impl() : Socket(BF_SOCK_DGRAM) {} + BFudpsocket_impl() : Socket(SOCK_DGRAM) {} }; BFstatus bfUdpSocketCreate(BFudpsocket* obj) { From b6f882263fffc8d35f2264c9b7577b10011339be Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 31 Mar 2022 11:09:38 -0400 Subject: [PATCH 0522/1155] Socket.hpp: fix alignment From the tabs-vs-spaces-department. --- src/Socket.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 76c11f27e..50bdedabc 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -282,7 +282,7 @@ class Socket { : _fd(-1), _type(type), _family(AF_UNSPEC), _mode(Socket::MODE_CLOSED) { BF_ASSERT_EXCEPTION(type == SOCK_DGRAM || type == SOCK_STREAM, - BF_STATUS_INVALID_ARGUMENT); + BF_STATUS_INVALID_ARGUMENT); } virtual ~Socket() { this->close(); } From fbeaebe29240f9f25846b7dc2ad01098b4714e96 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 31 Mar 2022 10:48:06 -0600 Subject: [PATCH 0523/1155] Cleanup comment. --- src/udp_socket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/udp_socket.cpp b/src/udp_socket.cpp index 25b952a5e..32d83125d 100644 --- a/src/udp_socket.cpp +++ b/src/udp_socket.cpp @@ -37,7 +37,7 @@ struct BFudpsocket_impl : public Socket { BFstatus bfUdpSocketCreate(BFudpsocket* obj) { BF_ASSERT(obj, BF_STATUS_INVALID_POINTER); - BF_TRY_RETURN_ELSE(*obj = (BFudpsocket)new BFudpsocket_impl(),//BFudpsocket_impl::BF_SOCK_DGRAM), + BF_TRY_RETURN_ELSE(*obj = (BFudpsocket)new BFudpsocket_impl(),//SOCK_DGRAM), *obj = 0); } BFstatus bfUdpSocketDestroy(BFudpsocket obj) { From 17fa4c4cda50e1e5c8b5cf15245d1d0e29bcfd5b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 31 Mar 2022 10:49:05 -0600 Subject: [PATCH 0524/1155] Switch to 'throw Socket::Error(...' on a bad type in case assert.hpp wasn't included before Socket.hpp. --- src/Socket.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 50bdedabc..276ad98c3 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -281,8 +281,9 @@ class Socket { inline explicit Socket(int type=SOCK_DGRAM) : _fd(-1), _type(type), _family(AF_UNSPEC), _mode(Socket::MODE_CLOSED) { - BF_ASSERT_EXCEPTION(type == SOCK_DGRAM || type == SOCK_STREAM, - BF_STATUS_INVALID_ARGUMENT); + if( !(type == SOCK_DGRAM || type == SOCK_STREAM) ) { + throw Socket::Error("Invalid socket type"); + } } virtual ~Socket() { this->close(); } From f6980d065c60de53d9cb1fa6872a0f448d775092 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 31 Mar 2022 11:06:14 -0600 Subject: [PATCH 0525/1155] We already require C++11. --- src/Socket.hpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 276ad98c3..95bb7e65c 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -246,9 +246,7 @@ class Socket { // Not copy-assignable Socket(Socket const& ); Socket& operator=(Socket const& ); -#if __cplusplus >= 201103L inline void replace(Socket& s); -#endif // Manage an existing socket descriptor // Note: Accessible only via the named constructor Socket::manage struct ManageTag {}; @@ -287,11 +285,9 @@ class Socket { } virtual ~Socket() { this->close(); } -#if __cplusplus >= 201103L // Move semantics inline Socket(Socket&& s) { this->replace(s); } inline Socket& operator=(Socket&& s) { this->close(); this->replace(s); return *this; } -#endif inline void swap(Socket& s); // Address generator // Note: Supports UNIX paths, IPv4 and IPv6 addrs, interfaces and hostnames @@ -925,7 +921,6 @@ int Socket::addr_from_interface(const char* ifname, ::freeifaddrs(ifaddr); return found; } -#if __cplusplus >= 201103L void Socket::replace(Socket& s) { _fd = s._fd; s._fd = -1; _type = std::move(s._type); @@ -936,7 +931,6 @@ void Socket::replace(Socket& s) { _msgs = std::move(s._msgs); _iovecs = std::move(s._iovecs); } -#endif void Socket::swap(Socket& s) { std::swap(_fd, s._fd); std::swap(_type, s._type); From f763a31ca220dc4ab07c4d5a3bf483145ac11728 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 31 Mar 2022 13:53:16 -0600 Subject: [PATCH 0526/1155] Again with the whitespace. --- src/Socket.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 95bb7e65c..b91b0b657 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -280,8 +280,8 @@ class Socket { : _fd(-1), _type(type), _family(AF_UNSPEC), _mode(Socket::MODE_CLOSED) { if( !(type == SOCK_DGRAM || type == SOCK_STREAM) ) { - throw Socket::Error("Invalid socket type"); - } + throw Socket::Error("Invalid socket type"); + } } virtual ~Socket() { this->close(); } From 36b5035ab0a33680f0a1dee8ee3b65b519d81fd3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 31 Mar 2022 18:32:40 -0600 Subject: [PATCH 0527/1155] We already require C++11. --- src/cuda.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/cuda.hpp b/src/cuda.hpp index 37a5f07fe..c0e08f651 100644 --- a/src/cuda.hpp +++ b/src/cuda.hpp @@ -175,14 +175,12 @@ class CUDAKernel { smem, stream, &arg_ptrs[0], NULL); } -#if __cplusplus >= 201103L template inline CUresult launch(dim3 grid, dim3 block, unsigned int smem, CUstream stream, Args... args) { return this->launch(grid, block, smem, stream, {(void*)&args...}); } -#endif }; From 89e497823f58ecbbfdd660816d9f0e82155ff99b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 31 Mar 2022 19:47:38 -0600 Subject: [PATCH 0528/1155] Removed unused imports. --- python/bifrost/telemetry/__main__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/python/bifrost/telemetry/__main__.py b/python/bifrost/telemetry/__main__.py index 7feb9e2ae..7cf635575 100644 --- a/python/bifrost/telemetry/__main__.py +++ b/python/bifrost/telemetry/__main__.py @@ -29,8 +29,6 @@ # Python2 compatibility from __future__ import print_function, division, absolute_import -import os -import sys import argparse from bifrost import telemetry From 24e1313d97591ca8e953ec53218d211bf42e5526 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 1 Apr 2022 10:11:35 -0600 Subject: [PATCH 0529/1155] Add in a self-hosted runner. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 38d739fe6..c544e7c1d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,7 +5,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-latest] + os: [self-hosted, ubuntu-latest, macos-latest] python-version: ['2.7', '3.6', '3.8'] fail-fast: false steps: From 325d655921cb90db12e04f7066945c24235f7e70 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 1 Apr 2022 10:15:04 -0600 Subject: [PATCH 0530/1155] Also install the ubuntu software on self-hosted. --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c544e7c1d..cc4ea7a88 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,7 +10,7 @@ jobs: fail-fast: false steps: - name: "Software Install - Ubuntu" - if: ${{ matrix.os == 'ubuntu-latest' }} + if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'self-hosted' }} run: | sudo apt-get install -y \ build-essential \ @@ -63,7 +63,7 @@ jobs: coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover coverage xml - name: "Upload Coverage" - if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == '3.8' }} + if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} uses: codecov/codecov-action@v2 with: directory: ./test/ From 17094e1cd08ad43243d3a647b0eee3f6d7e575dc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 1 Apr 2022 11:20:00 -0600 Subject: [PATCH 0531/1155] Try a 'make clean' at the end. --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cc4ea7a88..cdac58964 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -69,3 +69,6 @@ jobs: directory: ./test/ fail_ci_if_error: false verbose: true + - name: "Cleanup" + run: | + sudo make clean From 9b45062a53ee7bf86278e460b59013ab7f01b523 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 1 Apr 2022 11:58:33 -0600 Subject: [PATCH 0532/1155] Always run the cleanup. --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cdac58964..48d0deac6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -70,5 +70,6 @@ jobs: fail_ci_if_error: false verbose: true - name: "Cleanup" + if: always() run: | sudo make clean From 414c0aa479357fa8fce2bc4f508de57f2de19c24 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 1 Apr 2022 12:10:59 -0600 Subject: [PATCH 0533/1155] More cleanup. --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 48d0deac6..a73426f8a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -73,3 +73,4 @@ jobs: if: always() run: | sudo make clean + sudo rm -rf python/bifrost.egg-info From 73397ff75eacba187b34f747e331630261c45aea Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 1 Apr 2022 12:38:58 -0600 Subject: [PATCH 0534/1155] Preserve the environment. --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a73426f8a..a41d9b0c5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -51,7 +51,7 @@ jobs: run: | ./configure make -j all - sudo make install + sudo -E make install - name: Test env: LD_LIBRARY_PATH: /usr/local/lib:${LD_LIBRARY_PATH} @@ -72,5 +72,5 @@ jobs: - name: "Cleanup" if: always() run: | - sudo make clean - sudo rm -rf python/bifrost.egg-info + sudo -E make clean + sudo -E rm -rf python/bifrost.egg-info From 5a838cd41757b5bb2c025a06694adb4f798c6f27 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 1 Apr 2022 12:54:17 -0600 Subject: [PATCH 0535/1155] Install cupy and pycuda for Python3.6+. --- .github/workflows/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a41d9b0c5..2ff967211 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -47,6 +47,11 @@ jobs: graphviz \ ctypesgen==1.0.2 \ coverage + - name: "Software Install - Python, part 2" + if: ${{ matrix.os == 'self-hosted' && matrix.python-version != '2.7' }} + run: python -m pip install \ + cupy \ + pycuda - name: "Build and Install" run: | ./configure From 3a078a6a69f59b38141ba54d53a5f3aef608196e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 2 Apr 2022 08:26:13 -0600 Subject: [PATCH 0536/1155] Don't preserve the environment or cleanup. --- .github/workflows/main.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2ff967211..19dba28fd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -56,7 +56,7 @@ jobs: run: | ./configure make -j all - sudo -E make install + sudo make install - name: Test env: LD_LIBRARY_PATH: /usr/local/lib:${LD_LIBRARY_PATH} @@ -74,8 +74,3 @@ jobs: directory: ./test/ fail_ci_if_error: false verbose: true - - name: "Cleanup" - if: always() - run: | - sudo -E make clean - sudo -E rm -rf python/bifrost.egg-info From 8d24ec1d482e28bec3b617cd37f1498583d52579 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 2 Apr 2022 08:37:24 -0600 Subject: [PATCH 0537/1155] No braces. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 19dba28fd..18335853f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -59,7 +59,7 @@ jobs: sudo make install - name: Test env: - LD_LIBRARY_PATH: /usr/local/lib:${LD_LIBRARY_PATH} + LD_LIBRARY_PATH: /usr/local/lib:$LD_LIBRARY_PATH run: | python -m pip install scipy cd test From 76b4cd05b80d64b15c93f806cfd64e741e099450 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 2 Apr 2022 09:06:08 -0600 Subject: [PATCH 0538/1155] Is it this? --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 18335853f..4a49efeff 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -59,7 +59,7 @@ jobs: sudo make install - name: Test env: - LD_LIBRARY_PATH: /usr/local/lib:$LD_LIBRARY_PATH + LD_LIBRARY_PATH: /usr/local/lib:${{ env.LD_LIBRARY_PATH }} run: | python -m pip install scipy cd test From 2689754978bcc1fdcbe3dfa2b0d619c544f914c5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 5 Apr 2022 12:45:47 -0600 Subject: [PATCH 0539/1155] Added a test for the underlying issue in #172. --- test/test_ndarray.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index 26ef7e209..bcd578674 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -28,6 +28,7 @@ import unittest import numpy as np import bifrost as bf +import ctypes from bifrost.libbifrost_generated import BF_CUDA_ENABLED @@ -47,6 +48,19 @@ def test_space_copy(self): c = bf.ndarray(self.known_vals, dtype='f32') c = c.copy(space='cuda').copy(space='cuda_host').copy(space='system') np.testing.assert_equal(c, self.known_array) + def test_contiguous_copy(self): + a = np.random.rand(2,3,4,5) + a = a.astype(np.float64) + b = a.transpose(0,3,2,1).copy() + c = bf.zeros(a.shape, dtype=a.dtype, space='system') + c[...] = a + d = c.transpose(0,3,2,1).copy() + # Use ctypes to directly access the memory + b_data = ctypes.cast(b.ctypes.data, ctypes.POINTER(ctypes.c_double)) + b_data = np.array([b_data[i] for i in range(b.size)]) + d_data = ctypes.cast(d.ctypes.data, ctypes.POINTER(ctypes.c_double)) + d_data = np.array([d_data[i] for i in range(d.size)]) + np.testing.assert_equal(d_data, b_data) def test_view(self): d = bf.ndarray(self.known_vals, dtype='f32') d = d.view(dtype='cf32') From 20f3573573729477b5cfca9db9289e226f90716c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 5 Apr 2022 15:50:09 -0600 Subject: [PATCH 0540/1155] Added in the packet capture work. --- ROADMAP.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ROADMAP.md b/ROADMAP.md index 0489e81f9..4fa1afc9c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -11,16 +11,19 @@ stated, the items on this page have not yet been developed. * Harmonic summing, folding * Calibration and imaging algorithms * Gridding/degridding, compressive sensing, CLEAN - * IO (source/sink) blocks for additional astronomy/audio/generic file formats + * I/O (source/sink) blocks for additional astronomy/audio/generic file formats ## Pipeline features + * Method of sending data between different servers * Remote control mechanisms * Pipeline status and performance monitoring * Streaming data visualisation ## Backend features + * Improved packet capture/transmission framework + * Support for InfiniBand verbs * CPU backends for existing CUDA-only algorithms * Support for inter-process shared memory rings * Optimisations for low-latency applications From b6a7fd63d60c39a487c4f388df60246a4c8ae3b5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 5 Apr 2022 18:22:17 -0600 Subject: [PATCH 0541/1155] Throw an error if bifrost.ndarray.copy() is used on an array that is not C contiguous. --- python/bifrost/ndarray.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index f4ef3d369..f0e2b8918 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -388,6 +388,8 @@ def copy(self, space=None, order='C'): raise NotImplementedError('Only order="C" is supported') if space is None: space = self.bf.space + if not self.flags['C_CONTIGUOUS']: + raise NotImplementedError('Only C contiguous arrays are supported') # Note: This makes an actual copy as long as space is not None return ndarray(self, space=space) def _key_returns_scalar(self, key): From c7db268b9cdcecbd24701ff713c3c51aa450ee72 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 5 Apr 2022 18:43:08 -0600 Subject: [PATCH 0542/1155] Use numpy.ndarray.copy() when we can. --- python/bifrost/ndarray.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index f0e2b8918..6b4b9befb 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -389,7 +389,28 @@ def copy(self, space=None, order='C'): if space is None: space = self.bf.space if not self.flags['C_CONTIGUOUS']: - raise NotImplementedError('Only C contiguous arrays are supported') + # Deal with arrays that need to have their layouts changed + if space_accessible(space, ['system']): + ## For arrays that can be accessed from the system space, use + ## numpy.ndarray.copy() to do the heavy lifting + if space == 'cuda_managed': + # TODO: Decide where/when these need to be called + device.stream_synchronize() + temp = np.array(self) + return ndarray(temp.copy(order=order), space=space) + else: + # TODO: Is this as robust as numpy.ndarray.copy()? + """ + ## For arrays that can be access from CUDA, use bifrost.tranpose + ## to do the heavy lifting + permute = np.argsort(self.strides)[::-1] + temp = ndarray(self.shape, dtype=self.dtype, space=space) + array_type = ctypes.c_int * self.ndim + axes_array = array_type(*permute) + _check(_bf.bfTranspose(self.as_BFarray(), temp.as_BFarray(), axes_array)) + return temp + """ + raise NotImplementedError('For %s only C contiguous arrays are supported' % space) # Note: This makes an actual copy as long as space is not None return ndarray(self, space=space) def _key_returns_scalar(self, key): From c3a81632d255d89e5269289f91a57fa93652f178 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 5 Apr 2022 19:19:23 -0600 Subject: [PATCH 0543/1155] Another attempt to use numpy.ndarray.copy(). --- python/bifrost/ndarray.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 6b4b9befb..6e3e9bdfb 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -394,10 +394,12 @@ def copy(self, space=None, order='C'): ## For arrays that can be accessed from the system space, use ## numpy.ndarray.copy() to do the heavy lifting if space == 'cuda_managed': - # TODO: Decide where/when these need to be called + ## TODO: Decide where/when these need to be called device.stream_synchronize() - temp = np.array(self) - return ndarray(temp.copy(order=order), space=space) + ## This actually makes two copies and throws one away + temp = ndarray(shape=self.shape, dtype=self.dtype, space=space) + temp[...] = np.array(self).copy() + return temp else: # TODO: Is this as robust as numpy.ndarray.copy()? """ From 4c256f8e010cc01865f0dbe095b381557fae472a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 5 Apr 2022 19:29:05 -0600 Subject: [PATCH 0544/1155] It's not that easy. Plus, more granularity on the test skipping. --- python/bifrost/ndarray.py | 24 +----------------------- test/test_ndarray.py | 7 ++++++- 2 files changed, 7 insertions(+), 24 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 6e3e9bdfb..0c671d04b 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -390,29 +390,7 @@ def copy(self, space=None, order='C'): space = self.bf.space if not self.flags['C_CONTIGUOUS']: # Deal with arrays that need to have their layouts changed - if space_accessible(space, ['system']): - ## For arrays that can be accessed from the system space, use - ## numpy.ndarray.copy() to do the heavy lifting - if space == 'cuda_managed': - ## TODO: Decide where/when these need to be called - device.stream_synchronize() - ## This actually makes two copies and throws one away - temp = ndarray(shape=self.shape, dtype=self.dtype, space=space) - temp[...] = np.array(self).copy() - return temp - else: - # TODO: Is this as robust as numpy.ndarray.copy()? - """ - ## For arrays that can be access from CUDA, use bifrost.tranpose - ## to do the heavy lifting - permute = np.argsort(self.strides)[::-1] - temp = ndarray(self.shape, dtype=self.dtype, space=space) - array_type = ctypes.c_int * self.ndim - axes_array = array_type(*permute) - _check(_bf.bfTranspose(self.as_BFarray(), temp.as_BFarray(), axes_array)) - return temp - """ - raise NotImplementedError('For %s only C contiguous arrays are supported' % space) + raise NotImplementedError('Only C contiguous arrays are supported') # Note: This makes an actual copy as long as space is not None return ndarray(self, space=space) def _key_returns_scalar(self, key): diff --git a/test/test_ndarray.py b/test/test_ndarray.py index bcd578674..ed661de1c 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -32,7 +32,6 @@ from bifrost.libbifrost_generated import BF_CUDA_ENABLED -@unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class NDArrayTest(unittest.TestCase): def setUp(self): self.known_vals = [[0,1],[2,3],[4,5]] @@ -44,6 +43,7 @@ def test_assign(self): b = bf.ndarray(shape=(3,2), dtype='f32') b[...] = self.known_array np.testing.assert_equal(b, self.known_array) + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") def test_space_copy(self): c = bf.ndarray(self.known_vals, dtype='f32') c = c.copy(space='cuda').copy(space='cuda_host').copy(space='system') @@ -65,9 +65,11 @@ def test_view(self): d = bf.ndarray(self.known_vals, dtype='f32') d = d.view(dtype='cf32') np.testing.assert_equal(d, np.array([[0 + 1j], [2 + 3j], [4 + 5j]])) + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") def test_str(self): e = bf.ndarray(self.known_vals, dtype='f32', space='cuda') self.assertEqual(str(e), str(self.known_array)) + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") def test_repr(self): f = bf.ndarray(self.known_vals, dtype='f32', space='cuda') repr_f = repr(f) @@ -79,18 +81,21 @@ def test_repr(self): repr_f = repr_f.replace(' ', '') repr_k = repr_k.replace(' ', '') self.assertEqual(repr_f, repr_k) + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") def test_zeros_like(self): g = bf.ndarray(self.known_vals, dtype='f32', space='cuda') g = bf.zeros_like(g) g = g.copy('system') known = np.zeros_like(self.known_array) np.testing.assert_equal(g, known) + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") def test_getitem(self): g = bf.ndarray(self.known_vals, space='cuda') np.testing.assert_equal(g[0].copy('system'), self.known_array[0]) np.testing.assert_equal(g[(0,)].copy('system'), self.known_array[(0,)]) np.testing.assert_equal(int(g[0,0]), self.known_array[0,0]) np.testing.assert_equal(g[:1,1:].copy('system'), self.known_array[:1,1:]) + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") def test_setitem(self): g = bf.zeros_like(self.known_vals, space='cuda') g[...] = self.known_vals From 10a23223181af58f8addc66d0c417ea4d0791b6e Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 5 Apr 2022 21:58:30 -0400 Subject: [PATCH 0545/1155] nix: use gccStdenv for consistency across linux/darwin Otherwise stdenv on darwin uses clang, and we had some trouble linking the c++17 filesystem stuff there. (Maybe it's just a flag that's missing, but I haven't figured it out yet.) Similar errors were reported for a different nix package, and they resolved using `gccStdenv` too: https://github.com/NixOS/nixpkgs/pull/101231 --- flake.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 147c5b5c6..fe3539f83 100644 --- a/flake.nix +++ b/flake.nix @@ -45,10 +45,10 @@ # │ │*Experimented w/using all supported archs, but # │ │ had to eliminate 87 because not in cufft lib. - bifrost = { stdenv, ctags, ncurses, file, enableDebug ? false + bifrost = { gccStdenv, ctags, ncurses, file, enableDebug ? false , enablePython ? true, python3, enableCuda ? false, cudatoolkit , util-linuxMinimal, gpuArchs ? defaultGpuArchs cudatoolkit }: - stdenv.mkDerivation { + gccStdenv.mkDerivation { name = lib.optionalString (!enablePython) "lib" + "bifrost" + lib.optionalString enablePython "-py${lib.versions.majorMinor python3.version}" From 9380bc45fd3ef73a34e5d1b71f8a7143c50741bf Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Apr 2022 12:32:11 -0600 Subject: [PATCH 0546/1155] Removed the old jenkins file. --- test/jenkins.sh | 6 ------ 1 file changed, 6 deletions(-) delete mode 100755 test/jenkins.sh diff --git a/test/jenkins.sh b/test/jenkins.sh deleted file mode 100755 index 42cb951ce..000000000 --- a/test/jenkins.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# This file runs CPU and GPU tests for jenkins -./download_test_data.sh -export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} -python -c "from bifrost import telemetry; telemetry.disable()" -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover From 91e019e7a69843d5b1aceeac20932e35a9b8d5a6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Apr 2022 12:49:17 -0600 Subject: [PATCH 0547/1155] Crude fix for #172. --- test/test_romein.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/test/test_romein.py b/test/test_romein.py index c764eb3b9..c9255ff5f 100644 --- a/test/test_romein.py +++ b/test/test_romein.py @@ -151,9 +151,15 @@ def run_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, polmajo # Transpose for non pol-major kernels if not polmajor: + data=np.array(data) data=data.transpose((0,1,3,2)).copy() + data=bf.ndarray(data) + locs=np.array(locs) locs=locs.transpose((0,1,2,4,3)).copy() - illum=illum.transpose((0,1,3,2,4,5)).copy() + locs=bf.ndarray(locs) + illum=np.array(illum) + illum=illum.transpose((0,1,3,2,4,5)).copy() + illum=bf.ndarray(illum) grid = grid.copy(space='cuda') data = data.copy(space='cuda') @@ -295,5 +301,3 @@ def test_set_positions_pm(self): self.run_positions_test(grid_size=64, illum_size=3, data_size=256, ntime=8, npol=3, nchan=2,polmajor=True) def test_set_positions(self): self.run_positions_test(grid_size=64, illum_size=3, data_size=256, ntime=8, npol=3, nchan=2,polmajor=False) - - From 8d01814b8a5cea02cb342bd9be0d74d14adcba88 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Apr 2022 12:59:07 -0600 Subject: [PATCH 0548/1155] Fix the crude fix. --- test/test_romein.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/test/test_romein.py b/test/test_romein.py index c9255ff5f..26ae3e77a 100644 --- a/test/test_romein.py +++ b/test/test_romein.py @@ -151,16 +151,16 @@ def run_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, polmajo # Transpose for non pol-major kernels if not polmajor: - data=np.array(data) + data=numpy.array(data) data=data.transpose((0,1,3,2)).copy() data=bf.ndarray(data) - locs=np.array(locs) + locs=numpy.array(locs) locs=locs.transpose((0,1,2,4,3)).copy() locs=bf.ndarray(locs) - illum=np.array(illum) + illum=numpy.array(illum) illum=illum.transpose((0,1,3,2,4,5)).copy() illum=bf.ndarray(illum) - + grid = grid.copy(space='cuda') data = data.copy(space='cuda') illum = illum.copy(space='cuda') @@ -199,10 +199,16 @@ def run_kernel_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, # Transpose for non pol-major kernels if not polmajor: + data=numpy.array(data) data=data.transpose((0,1,3,2)).copy() + data=bf.ndarray(data) + locs=numpy.array(locs) locs=locs.transpose((0,1,2,4,3)).copy() - illum=illum.transpose((0,1,3,2,4,5)).copy() - + locs=bf.ndarray(locs) + illum=numpy.array(illum) + illum=illum.transpose((0,1,3,2,4,5)).copy() + illum=bf.ndarray(illum) + grid = grid.copy(space='cuda') data = data.copy(space='cuda') illum = illum.copy(space='cuda') @@ -245,10 +251,16 @@ def run_positions_test(self, grid_size, illum_size, data_size, ntime, npol, ncha # Transpose for non pol-major kernels if not polmajor: + data=numpy.array(data) data=data.transpose((0,1,3,2)).copy() + data=bf.ndarray(data) + locs=numpy.array(locs) locs=locs.transpose((0,1,2,4,3)).copy() - illum=illum.transpose((0,1,3,2,4,5)).copy() - + locs=bf.ndarray(locs) + illum=numpy.array(illum) + illum=illum.transpose((0,1,3,2,4,5)).copy() + illum=bf.ndarray(illum) + grid = grid.copy(space='cuda') data = data.copy(space='cuda') illum = illum.copy(space='cuda') From 3b747ab7c50b3a373f6229e071e43d4ba4b89a20 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Apr 2022 13:00:50 -0600 Subject: [PATCH 0549/1155] Fix the fix to the crude fix. --- test/test_romein.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/test_romein.py b/test/test_romein.py index 26ae3e77a..039b249f6 100644 --- a/test/test_romein.py +++ b/test/test_romein.py @@ -153,13 +153,13 @@ def run_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, polmajo if not polmajor: data=numpy.array(data) data=data.transpose((0,1,3,2)).copy() - data=bf.ndarray(data) + data=bifrost.ndarray(data) locs=numpy.array(locs) locs=locs.transpose((0,1,2,4,3)).copy() - locs=bf.ndarray(locs) + locs=bifrost.ndarray(locs) illum=numpy.array(illum) illum=illum.transpose((0,1,3,2,4,5)).copy() - illum=bf.ndarray(illum) + illum=bifrost.ndarray(illum) grid = grid.copy(space='cuda') data = data.copy(space='cuda') @@ -201,13 +201,13 @@ def run_kernel_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, if not polmajor: data=numpy.array(data) data=data.transpose((0,1,3,2)).copy() - data=bf.ndarray(data) + data=bifrost.ndarray(data) locs=numpy.array(locs) locs=locs.transpose((0,1,2,4,3)).copy() - locs=bf.ndarray(locs) + locs=bifrost.ndarray(locs) illum=numpy.array(illum) illum=illum.transpose((0,1,3,2,4,5)).copy() - illum=bf.ndarray(illum) + illum=bifrost.ndarray(illum) grid = grid.copy(space='cuda') data = data.copy(space='cuda') @@ -253,13 +253,13 @@ def run_positions_test(self, grid_size, illum_size, data_size, ntime, npol, ncha if not polmajor: data=numpy.array(data) data=data.transpose((0,1,3,2)).copy() - data=bf.ndarray(data) + data=bifrost.ndarray(data) locs=numpy.array(locs) locs=locs.transpose((0,1,2,4,3)).copy() - locs=bf.ndarray(locs) + locs=bifrost.ndarray(locs) illum=numpy.array(illum) illum=illum.transpose((0,1,3,2,4,5)).copy() - illum=bf.ndarray(illum) + illum=bifrost.ndarray(illum) grid = grid.copy(space='cuda') data = data.copy(space='cuda') From 0fb47d524a6d606175af8be4753cd9c911f8ed7b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Apr 2022 19:59:59 -0600 Subject: [PATCH 0550/1155] Could this be a (the?) answer to the 'not C contiguous' question? --- python/bifrost/ndarray.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 0c671d04b..676aad98e 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -390,7 +390,31 @@ def copy(self, space=None, order='C'): space = self.bf.space if not self.flags['C_CONTIGUOUS']: # Deal with arrays that need to have their layouts changed - raise NotImplementedError('Only C contiguous arrays are supported') + # TODO: Is there a better way to handle this? + if space_accessible(self.bf.space, ['system']): + ## For arrays that can be accessed from the system space, use + ## numpy.ndarray.copy() to do the heavy lifting + if space == 'cuda_managed': + ## TODO: Decide where/when these need to be called + device.stream_synchronize() + ## This actually makes two copies and throws one away + temp = ndarray(shape=self.shape, dtype=self.dtype, space=self.bf.space) + temp[...] = np.array(self).copy() + if self.bf.space != space: + return temp.copy(space=space) + return temp + else: + ## For arrays that can be access from CUDA, use bifrost.tranpose + ## to do the heavy lifting + permute = np.argsort(self.strides)[::-1] + shape = [self.shape[p] for p in permute] + temp = ndarray(shape=shape, dtype=self.dtype, space=self.bf.space) + array_type = ctypes.c_int * self.ndim + axes_array = array_type(*permute) + _check(_bf.bfTranspose(self.as_BFarray(), temp.as_BFarray(), axes_array)) + if self.bf.space != space: + return temp.copy(space=space) + return temp # Note: This makes an actual copy as long as space is not None return ndarray(self, space=space) def _key_returns_scalar(self, key): From 17860a47bafa82eb6ba3b4a08033681d069167b0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Apr 2022 20:30:39 -0600 Subject: [PATCH 0551/1155] Swap input order. --- test/test_map.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_map.py b/test/test_map.py index 992107a1a..749edcb36 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -31,9 +31,9 @@ import numpy as np import bifrost as bf try: - from io import StringIO -except ImportError: from StringIO import StringIO +except ImportError: + from io import StringIO from bifrost.libbifrost_generated import BF_CUDA_ENABLED From 0353323fe283f8aef0eb7aa855066e7cd31185b3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Apr 2022 07:54:01 -0600 Subject: [PATCH 0552/1155] Revert the test_romein changes. --- test/test_romein.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/test/test_romein.py b/test/test_romein.py index 039b249f6..25030be5d 100644 --- a/test/test_romein.py +++ b/test/test_romein.py @@ -151,15 +151,9 @@ def run_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, polmajo # Transpose for non pol-major kernels if not polmajor: - data=numpy.array(data) data=data.transpose((0,1,3,2)).copy() - data=bifrost.ndarray(data) - locs=numpy.array(locs) locs=locs.transpose((0,1,2,4,3)).copy() - locs=bifrost.ndarray(locs) - illum=numpy.array(illum) illum=illum.transpose((0,1,3,2,4,5)).copy() - illum=bifrost.ndarray(illum) grid = grid.copy(space='cuda') data = data.copy(space='cuda') @@ -199,15 +193,9 @@ def run_kernel_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, # Transpose for non pol-major kernels if not polmajor: - data=numpy.array(data) data=data.transpose((0,1,3,2)).copy() - data=bifrost.ndarray(data) - locs=numpy.array(locs) locs=locs.transpose((0,1,2,4,3)).copy() - locs=bifrost.ndarray(locs) - illum=numpy.array(illum) illum=illum.transpose((0,1,3,2,4,5)).copy() - illum=bifrost.ndarray(illum) grid = grid.copy(space='cuda') data = data.copy(space='cuda') @@ -251,15 +239,9 @@ def run_positions_test(self, grid_size, illum_size, data_size, ntime, npol, ncha # Transpose for non pol-major kernels if not polmajor: - data=numpy.array(data) data=data.transpose((0,1,3,2)).copy() - data=bifrost.ndarray(data) - locs=numpy.array(locs) locs=locs.transpose((0,1,2,4,3)).copy() - locs=bifrost.ndarray(locs) - illum=numpy.array(illum) illum=illum.transpose((0,1,3,2,4,5)).copy() - illum=bifrost.ndarray(illum) grid = grid.copy(space='cuda') data = data.copy(space='cuda') From 14fdb0c79ccd4c04b7750e70c41c671c155d2ca6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Apr 2022 10:48:05 -0600 Subject: [PATCH 0553/1155] Test suite cleanup. --- test/test_romein.py | 110 ++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 61 deletions(-) diff --git a/test/test_romein.py b/test/test_romein.py index 25030be5d..bdac0ac48 100644 --- a/test/test_romein.py +++ b/test/test_romein.py @@ -1,5 +1,5 @@ -# Copyright (c) 2018, The Bifrost Authors. All rights reserved. +# Copyright (c) 2018-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -62,52 +62,48 @@ def naive_romein(self, unpack(data, data_unpacked) data = data_unpacked - #Excruciatingly slow, but it's just for testing purposes... - #Could probably use a blas based function for simplicity. - grid = numpy.zeros(shape=grid_shape,dtype=dtype) - for t in numpy.arange(ntime): - for c in numpy.arange(nchan): - for p in numpy.arange(npol): - for d in numpy.arange(ndata): - datapoint = data[t,c,p,d] - if data.dtype != dtype: - try: - datapoint = dtype(datapoint[0]+1j*datapoint[1]) - except IndexError: - datapoint = dtype(datapoint) - - #if(d==128): - # print(datapoint) - x_s = xlocs[t,c,p,d] - y_s = ylocs[t,c,p,d] - for y in numpy.arange(y_s,y_s+illum.shape[4]): - for x in numpy.arange(x_s,x_s+illum.shape[5]): - illump = illum[t,c,p,d,y-y_s,x-x_s] - grid[t,c,p,y,x] += datapoint * illump + # Create the output grid + grid = bifrost.zeros(shape=grid_shape,dtype=dtype) + + # Combine axes + xlocs_flat = xlocs.reshape(-1,ndata) + ylocs_flat = ylocs.reshape(-1,ndata) + data_flat = data.reshape(-1,ndata) + grid_flat = grid.reshape(-1,grid.shape[-2],grid.shape[-1]) + illum_flat = illum.reshape(-1,ndata,illum.shape[-2],illum.shape[-1]) + + # Excruciatingly slow, but it's just for testing purposes... + # Could probably use a blas based function for simplicity. + for tcp in range(data_flat.shape[0]): + for d in range(ndata): + datapoint = data_flat[tcp,d] + if data.dtype != dtype: + try: + datapoint = dtype(datapoint[0]+1j*datapoint[1]) + except IndexError: + datapoint = dtype(datapoint) + + #if(d==128): + # print(datapoint) + x_s = xlocs_flat[tcp,d] + y_s = ylocs_flat[tcp,d] + for y in range(y_s,y_s+illum_flat.shape[-2]): + for x in range(x_s,x_s+illum_flat.shape[-1]): + illump = illum_flat[tcp,d,y-y_s,x-x_s] + grid_flat[tcp,y,x] += datapoint * illump return grid def _create_illum(self, illum_size, data_size, ntime, npol, nchan, dtype=numpy.complex64): illum_shape = (ntime,nchan,npol,data_size,illum_size,illum_size) - illum = numpy.ones(shape=illum_shape,dtype=dtype) - illum = numpy.copy(illum,order='C') - illum = bifrost.ndarray(illum) + illum = bifrost.zeros(shape=illum_shape,dtype=dtype) + illum += 1 return illum def _create_locs(self, data_size, ntime, nchan, npol, loc_min, loc_max): ishape = (ntime,nchan,npol,data_size) - xlocs = numpy.random.uniform(loc_min, loc_max, size=ishape) - ylocs = numpy.random.uniform(loc_min, loc_max, size=ishape) - zlocs = numpy.random.uniform(loc_min, loc_max, size=ishape) - xlocs = numpy.copy(xlocs.astype(numpy.int32),order='C') - ylocs = numpy.copy(ylocs.astype(numpy.int32),order='C') - zlocs = numpy.copy(zlocs.astype(numpy.int32),order='C') - xlocs = bifrost.ndarray(xlocs) - ylocs = bifrost.ndarray(ylocs) - zlocs = bifrost.ndarray(zlocs) - locs = numpy.stack((xlocs, ylocs, zlocs)) - #locs = numpy.transpose(locs,(1,2,3,4,0)) + locs = numpy.random.uniform(loc_min, loc_max, size=(3,)+ishape) locs = numpy.copy(locs.astype(numpy.int32),order='C') locs = bifrost.ndarray(locs) @@ -115,12 +111,10 @@ def _create_locs(self, data_size, ntime, nchan, npol, loc_min, loc_max): def _create_data(self, data_size, ntime, nchan, npol, dtype=numpy.complex64): ishape = (ntime,nchan,npol,data_size) - data = numpy.zeros(shape=ishape,dtype=numpy.complex64) - data_i = numpy.zeros(shape=(ntime,nchan,npol,data_size,2), dtype=numpy.complex64) - data_i[:,:,:,:,0] = numpy.random.normal(0,1.0,size=(ntime,nchan,npol,data_size)) - data_i[:,:,:,:,1] = numpy.random.normal(0,1.0,size=(ntime,nchan,npol,data_size)) - data = 7*numpy.copy(data,order='C') - data = bifrost.ndarray(data_i[...,0] + 1j * data_i[...,1]) + data = bifrost.zeros(shape=ishape,dtype=numpy.complex64) + data.real[...] = numpy.random.normal(0,1.0,size=ishape) + data.imag[...] = numpy.random.normal(0,1.0,size=ishape) + data *= 7 if dtype not in (numpy.complex64, 'cf32'): data_quantized = bifrost.ndarray(shape=data.shape, dtype=dtype) quantize(data, data_quantized) @@ -135,9 +129,7 @@ def run_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, polmajo illum_shape = (ntime,nchan,npol,data_size,illum_size,illum_size) # Create grid and illumination pattern - grid = numpy.zeros(shape=gridshape,dtype=otype) - grid = numpy.copy(grid,order='C') - grid = bifrost.ndarray(grid) + grid = bifrost.zeros(shape=gridshape,dtype=otype) illum = self._create_illum(illum_size, data_size, ntime, npol, nchan, dtype=otype) # Create data @@ -151,9 +143,9 @@ def run_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, polmajo # Transpose for non pol-major kernels if not polmajor: - data=data.transpose((0,1,3,2)).copy() - locs=locs.transpose((0,1,2,4,3)).copy() - illum=illum.transpose((0,1,3,2,4,5)).copy() + data = data.transpose((0,1,3,2)).copy() + locs = locs.transpose((0,1,2,4,3)).copy() + illum = illum.transpose((0,1,3,2,4,5)).copy() grid = grid.copy(space='cuda') data = data.copy(space='cuda') @@ -177,9 +169,7 @@ def run_kernel_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, illum_shape = (ntime,nchan,npol,data_size,illum_size,illum_size) # Create grid and illumination pattern - grid = numpy.zeros(shape=gridshape,dtype=numpy.complex64) - grid = numpy.copy(grid,order='C') - grid = bifrost.ndarray(grid) + grid = bifrost.zeros(shape=gridshape,dtype=numpy.complex64) illum = self._create_illum(illum_size, data_size, ntime, npol, nchan) # Create data @@ -193,9 +183,9 @@ def run_kernel_test(self, grid_size, illum_size, data_size, ntime, npol, nchan, # Transpose for non pol-major kernels if not polmajor: - data=data.transpose((0,1,3,2)).copy() - locs=locs.transpose((0,1,2,4,3)).copy() - illum=illum.transpose((0,1,3,2,4,5)).copy() + data = data.transpose((0,1,3,2)).copy() + locs = locs.transpose((0,1,2,4,3)).copy() + illum = illum.transpose((0,1,3,2,4,5)).copy() grid = grid.copy(space='cuda') data = data.copy(space='cuda') @@ -223,9 +213,7 @@ def run_positions_test(self, grid_size, illum_size, data_size, ntime, npol, ncha illum_shape = (ntime,nchan,npol,data_size,illum_size,illum_size) # Create grid and illumination pattern - grid = numpy.zeros(shape=gridshape,dtype=numpy.complex64) - grid = numpy.copy(grid,order='C') - grid = bifrost.ndarray(grid) + grid = bifrost.zeros(shape=gridshape,dtype=numpy.complex64) illum = self._create_illum(illum_size, data_size, ntime, npol, nchan) # Create data @@ -239,9 +227,9 @@ def run_positions_test(self, grid_size, illum_size, data_size, ntime, npol, ncha # Transpose for non pol-major kernels if not polmajor: - data=data.transpose((0,1,3,2)).copy() - locs=locs.transpose((0,1,2,4,3)).copy() - illum=illum.transpose((0,1,3,2,4,5)).copy() + data = data.transpose((0,1,3,2)).copy() + locs = locs.transpose((0,1,2,4,3)).copy() + illum = illum.transpose((0,1,3,2,4,5)).copy() grid = grid.copy(space='cuda') data = data.copy(space='cuda') From 9b50960661427f6d118ea774c7f5ab30091468bc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Apr 2022 10:49:02 -0600 Subject: [PATCH 0554/1155] Also test teh contiguous copy in the CUDA space. --- test/test_ndarray.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index ed661de1c..0eb9755d8 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -48,19 +48,25 @@ def test_space_copy(self): c = bf.ndarray(self.known_vals, dtype='f32') c = c.copy(space='cuda').copy(space='cuda_host').copy(space='system') np.testing.assert_equal(c, self.known_array) - def test_contiguous_copy(self): + def run_contiguous_copy(self, space='system'): a = np.random.rand(2,3,4,5) a = a.astype(np.float64) b = a.transpose(0,3,2,1).copy() c = bf.zeros(a.shape, dtype=a.dtype, space='system') c[...] = a - d = c.transpose(0,3,2,1).copy() + c = c.copy(space=space) + d = c.transpose(0,3,2,1).copy(space='system') # Use ctypes to directly access the memory b_data = ctypes.cast(b.ctypes.data, ctypes.POINTER(ctypes.c_double)) b_data = np.array([b_data[i] for i in range(b.size)]) d_data = ctypes.cast(d.ctypes.data, ctypes.POINTER(ctypes.c_double)) d_data = np.array([d_data[i] for i in range(d.size)]) np.testing.assert_equal(d_data, b_data) + def test_contiguous_copy(self): + self.run_contiguous_copy() + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") + def test_space_contiguous_copy(self): + self.run_contiguous_copy(space='cuda') def test_view(self): d = bf.ndarray(self.known_vals, dtype='f32') d = d.view(dtype='cf32') From 5990366db821207fba9afe8ce7678462ec70c652 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Apr 2022 10:49:34 -0600 Subject: [PATCH 0555/1155] Fix the contiguous copy in the CUDA space. --- python/bifrost/ndarray.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 676aad98e..aaff6d457 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -401,19 +401,28 @@ def copy(self, space=None, order='C'): temp = ndarray(shape=self.shape, dtype=self.dtype, space=self.bf.space) temp[...] = np.array(self).copy() if self.bf.space != space: - return temp.copy(space=space) + return ndarray(temp, space=space) return temp else: - ## For arrays that can be access from CUDA, use bifrost.tranpose + ## For arrays that can be access from CUDA, use bifrost.transpose ## to do the heavy lifting + ### Figure out the correct axis order for C permute = np.argsort(self.strides)[::-1] - shape = [self.shape[p] for p in permute] - temp = ndarray(shape=shape, dtype=self.dtype, space=self.bf.space) + c_shape = [self.shape[p] for p in permute] + ### Make a BFarray wrapper for self so we can reset shape/strides + ### to what they should be for a C ordered array + self_corder = self.as_BFarray() + shape_type = ctypes.c_long*_bf.BF_MAX_DIMS + self_corder.shape = shape_type(*c_shape) + self_corder.strides = shape_type(*[self.strides[p] for p in permute]) + ### Make a temporary array with the right shape that will be C ordered + temp = ndarray(shape=self.shape, dtype=self.dtype, space=self.bf.space) + ### Run the transpose using the BFarray wrapper and the temporary array array_type = ctypes.c_int * self.ndim axes_array = array_type(*permute) - _check(_bf.bfTranspose(self.as_BFarray(), temp.as_BFarray(), axes_array)) + _check(_bf.bfTranspose(self_corder, temp.as_BFarray(), axes_array)) if self.bf.space != space: - return temp.copy(space=space) + return ndarray(temp, space=space) return temp # Note: This makes an actual copy as long as space is not None return ndarray(self, space=space) From 193778a2046ec1b2aff343de18a8c66d72475dbf Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Apr 2022 10:49:50 -0600 Subject: [PATCH 0556/1155] Updated for #174. --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index aeb04651a..41701c1df 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ * Cleaned up the Makefile outputs * Added a disk cache for bifrost.map calls * Added support for configurable, reproducible builds with nix + * Fix a problem in bifrost.ndarray.copy with arrays that are not C contiguous 0.10.0 * Switched over to an autotools-based build system From 1c54faf8e156a301e3ad9424b3bf6fe3dd1abcb5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Apr 2022 11:25:08 -0600 Subject: [PATCH 0557/1155] Try skip-duplicate-actions. --- .github/workflows/main.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4a49efeff..c9dece708 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,7 +1,18 @@ name: "Build and Test" on: [push, pull_request] jobs: + pre_build: + runs-on: ubuntu-latest + outputs: + should_skip: ${{ steps.skip_check.outputs.should_skip }} + steps: + - id: skip_check + uses: fkirc/skip-duplicate-actions@v3.4.1 + with: + concurrent_skipping: 'same_content' build: + needs: pre_build + if: ${{ needs.pre_job.outputs.should_skip != 'true' }} runs-on: ${{ matrix.os }} strategy: matrix: From 2099f0b675438aff6b9d2080db587b0867967b91 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Apr 2022 11:28:58 -0600 Subject: [PATCH 0558/1155] Typo in the skipping control. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c9dece708..0067d0025 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,7 +12,7 @@ jobs: concurrent_skipping: 'same_content' build: needs: pre_build - if: ${{ needs.pre_job.outputs.should_skip != 'true' }} + if: ${{ needs.pre_build.outputs.should_skip != 'true' }} runs-on: ${{ matrix.os }} strategy: matrix: From 1ba320e0e367f0037ac39b36eb1036550ad13cd4 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 7 Apr 2022 13:34:11 -0400 Subject: [PATCH 0559/1155] A small test suite for C++ side, run from python This is expected to fail due to bug in remove_file_glob when paths have dots (or something), but I'm about to simplify that code to resolve the issue. --- src/Makefile.in | 1 + src/bifrost/testsuite.h | 10 +++ src/testsuite.cpp | 189 ++++++++++++++++++++++++++++++++++++++++ test/test_library.py | 7 ++ 4 files changed, 207 insertions(+) create mode 100644 src/bifrost/testsuite.h create mode 100644 src/testsuite.cpp create mode 100644 test/test_library.py diff --git a/src/Makefile.in b/src/Makefile.in index 9209b75dc..5ac5189a1 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -33,6 +33,7 @@ LIBBIFROST_OBJS = \ affinity.o \ cuda.o \ fileutils.o \ + testsuite.o \ ring.o \ ring_impl.o \ array.o \ diff --git a/src/bifrost/testsuite.h b/src/bifrost/testsuite.h new file mode 100644 index 000000000..2ad2bb0b3 --- /dev/null +++ b/src/bifrost/testsuite.h @@ -0,0 +1,10 @@ +#pragma once +#ifdef __cplusplus +extern "C" { +#endif + +int bfTestSuite(); + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/src/testsuite.cpp b/src/testsuite.cpp new file mode 100644 index 000000000..0071926d6 --- /dev/null +++ b/src/testsuite.cpp @@ -0,0 +1,189 @@ +/* -*- indent-tabs-mode:nil -*- + * Copyright (c) 2022, The Bifrost Authors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include + +#include // For getpid +#include // For getpid +#include +#include +#include +#include + +using namespace std; + +// General output format, used for tracing and error reporting. +#define TPRINT(level, arg) \ + (cout << "testsuite: " << level << ": " \ + << __FUNCTION__ << ": " << arg << " @" << __LINE__ << '\n') + +// Tracing for debug builds only. +#if BF_DEBUG_ENABLED +#define TDEBUG(arg) TPRINT("DEBUG", arg) +#else +#define TDEBUG(arg) {} +#endif + +// Final result of a test: use the inversion like exit() where 0 means success, +// so we can add to count the failures. +typedef enum { OK = 0, FAIL = 1 } TestResult; + +ostream& operator << (ostream& out, TestResult r) { + return out << (r == OK? "ok" : "FAIL"); +} + +// Assertions output on failure, whether or not debug build. +#define ASSERT(pred, mesg) \ + if(!(pred)) { TPRINT("ERROR", mesg); return FAIL; } + +#define ASSERT_PATH_EXISTS(path) \ + ASSERT(file_exists(path), "Path does not exist: " << path) + +#define ASSERT_PATH_NOT_EXISTS(path) \ + ASSERT(!file_exists(path), "Path exists: " << path) + +// Create a temporary directory for any file tests, then clean it up after. +struct TestDir { + char* path = NULL; + TestDir(); + ~TestDir(); + const string filename(const string& name) { + return string(path) + '/' + name; + } +}; + +TestDir::TestDir() { + // Find a temporary directory, either $TMPDIR or /tmp + const char *tmpdir = getenv("TMPDIR"); + if(tmpdir == NULL) { + tmpdir = "/tmp"; + } + // Buffer that mkdtemp can modify; it cannot use a string constant. + unsigned tmpdirLen = strlen(tmpdir); + path = new char [tmpdirLen + 40]; + strcpy(path, tmpdir); + if(tmpdir[tmpdirLen-1] != '/') { // Add a slash if needed + strcat(path, "/"); // (TMPDIR on Mac may already end in slash?) + } + strcat(path, "bifrost-testsuite.XXXXXX"); + if(mkdtemp(path) == NULL) { + throw runtime_error(string("mkdtemp failure creating ") + path); + } + TDEBUG("created " << path); +} + +TestDir::~TestDir() { + TDEBUG("removing " << path); + remove_files_recursively(path); + delete [] path; +} + +static TestResult test_this_process_exists() { + pid_t pid = getpid(); + ASSERT(process_exists(pid), "my PID " << pid << " not found."); + return OK; +} + +static TestResult test_make_then_remove_dir() { + TestDir tmp; + string dir = tmp.filename("w0w.d"); + + TDEBUG("make_dir" << dir); + make_dir(dir); + ASSERT_PATH_EXISTS(dir); + + TDEBUG("remove_dir" << dir); + remove_dir(dir); + ASSERT_PATH_NOT_EXISTS(dir); + + return OK; +} + +static TestResult test_create_then_remove_file() { + TestDir tmp; + string fname = tmp.filename("rain.b0w"); + + TDEBUG("touch " << fname); + ofstream file (fname); + file.close(); + ASSERT_PATH_EXISTS(fname); + + TDEBUG("remove_file_glob " << fname); + remove_file_glob(fname); + ASSERT_PATH_NOT_EXISTS(fname); + + return OK; +} + +static TestResult test_remove_files_by_extension() { + TestDir tmp; + // We'll glob-delete the .bak files and leave the rest. + vector names = + { "cheez.bak", "Floop.3.bak", + "cheez.txt", "zan.tex", "bobak", "lib.baks" + }; + + for(unsigned i = 0; i < names.size(); i++) { + names.at(i) = tmp.filename(names.at(i)); + TDEBUG("touch " << names.at(i)); + ofstream file(names.at(i)); + file.close(); + ASSERT_PATH_EXISTS(names.at(i)); + } + + string wild = tmp.filename("*.bak"); + TDEBUG("removing " << wild); + remove_file_glob(wild); + + ASSERT_PATH_NOT_EXISTS(names.at(0)); + ASSERT_PATH_NOT_EXISTS(names.at(1)); + + ASSERT_PATH_EXISTS(names.at(2)); + ASSERT_PATH_EXISTS(names.at(3)); + ASSERT_PATH_EXISTS(names.at(4)); + ASSERT_PATH_EXISTS(names.at(5)); + return OK; +} + +int bfTestSuite() { + int numFails = 0; + + numFails += test_this_process_exists(); + numFails += test_make_then_remove_dir(); + numFails += test_create_then_remove_file(); + numFails += test_remove_files_by_extension(); + + switch(numFails) { + case 0: TDEBUG("success"); break; + case 1: TDEBUG("1 failure"); break; + default: TDEBUG(numFails << " failures"); + } + return numFails; +} diff --git a/test/test_library.py b/test/test_library.py new file mode 100644 index 000000000..8334c4084 --- /dev/null +++ b/test/test_library.py @@ -0,0 +1,7 @@ +import unittest + +from bifrost.libbifrost_generated import bfTestSuite + +class TestLibrary(unittest.TestCase): + def test_library(self): + self.assertEqual(bfTestSuite(), 0) From 14f3d2c892ae710498459b6cdfbd20a2e156f438 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Apr 2022 13:11:25 -0600 Subject: [PATCH 0560/1155] What about this? --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0067d0025..4dfa5edeb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,6 +10,8 @@ jobs: uses: fkirc/skip-duplicate-actions@v3.4.1 with: concurrent_skipping: 'same_content' + skip_after_successful_duplicate: 'true' + do_not_skip: '["pull_request", "workflow_dispatch", "schedule"]' build: needs: pre_build if: ${{ needs.pre_build.outputs.should_skip != 'true' }} From 1ad13bb0bae1b65969d34ead6b2c23ba2168bb5d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Apr 2022 13:17:09 -0600 Subject: [PATCH 0561/1155] Also skip on the nix build. --- .github/workflows/nix.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 14b8decbc..2fc30964c 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -2,7 +2,20 @@ name: "Nix Build" "on": [push, pull_request] jobs: + pre_build: + runs-on: ubuntu-latest + outputs: + should_skip: ${{ steps.skip_check.outputs.should_skip }} + steps: + - id: skip_check + uses: fkirc/skip-duplicate-actions@v3.4.1 + with: + concurrent_skipping: 'same_content' + skip_after_successful_duplicate: 'true' + do_not_skip: '["pull_request", "workflow_dispatch", "schedule"]' build: + needs: pre_build + if: ${{ needs.pre_build.outputs.should_skip != 'true' }} strategy: matrix: os: From e074021edc0e630dffeedb668f6b10b80159f2a4 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 7 Apr 2022 17:09:40 -0400 Subject: [PATCH 0562/1155] Some fixes and simplifications of fileutils, drop I think this should pass tests. Took the opportunity to untabify within a few regions that were already being changed... but don't want to mix a global untabify with meaningful changes. --- src/fileutils.cpp | 109 +++++++++++++++++++++++++++++----------------- src/fileutils.hpp | 3 +- src/map.cpp | 20 ++++----- src/proclog.cpp | 2 +- src/testsuite.cpp | 61 ++++++++++++++++---------- 5 files changed, 121 insertions(+), 74 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index f342bab16..ddec851c3 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -27,9 +27,16 @@ */ #include "fileutils.hpp" +#include -#if __cplusplus >= 201703L -#include +/* Set this constant to 1 to force usage of or 0 to force usage of + older POSIX methods such as system, unlink, etc. Leave it unset to detect + based on -std=c++17. */ +#ifndef BF_USE_CXX_FILESYSTEM +# define BF_USE_CXX_FILESYSTEM (__cplusplus >= 201703L) +#endif + +#if BF_USE_CXX_FILESYSTEM #include #endif @@ -47,19 +54,20 @@ std::string get_home_dir(void) { not with data from command line or config files. */ void make_dir(std::string path, int perms) { -#if __cplusplus >= 201703L - std::filesystem::create_directories(path); - std::filesystem::permissions(path, \ - (std::filesystem::perms) perms, \ - std::filesystem::perm_options::replace); +#if BF_USE_CXX_FILESYSTEM + std::filesystem::create_directories(path); + std::filesystem::permissions(path, (std::filesystem::perms) perms, + std::filesystem::perm_options::replace); #else - if( std::system(("mkdir -p -m "+std::to_string(perms)+" "+path).c_str()) ) { - throw std::runtime_error("Failed to create path: "+path); - } + std::ostringstream cmd; + cmd << "mkdir -p -m " << std::oct << perms << ' ' << path; + if( std::system(cmd.str().c_str()) ) { + throw std::runtime_error("Failed to create path: "+path); + } #endif } void remove_files_recursively(std::string path) { -#if __cplusplus >= 201703L +#if BF_USE_CXX_FILESYSTEM std::filesystem::remove_all(path); #else if( std::system(("rm -rf "+path).c_str()) ) { @@ -68,42 +76,65 @@ void remove_files_recursively(std::string path) { #endif } void remove_dir(std::string path) { -#if __cplusplus >= 201703L +#if BF_USE_CXX_FILESYSTEM std::filesystem::remove(path); #else - if( std::system(("rmdir "+path+" 2> /dev/null").c_str()) ) { - throw std::runtime_error("Failed to remove dir: "+path); - } + if(rmdir(path.c_str()) != 0) { + throw std::runtime_error("Failed to remove dir: "+path); + } #endif } -void remove_file_glob(std::string path) { - // Often, PATH contains wildcard, so this can't just be unlink system call. -#if __cplusplus >= 201703L - // Convert the shell-style wildcards into a POSIX regex - // TODO: expand this to support more complicated expressions - std::regex special_re("\\.", std::regex::basic); - path = std::regex_replace(path, special_re, "\\$&"); - std::regex wildcard_re("\\*", std::regex::basic); - path = std::regex_replace(path, wildcard_re, ".$&"); - std::regex r(path, std::regex::basic); - - // Iterate through the directory's contents and remove the matches - std::filesystem::path ipath = path; - for(auto const& entry : std::filesystem::directory_iterator{ipath.parent_path()}) { - std::filesystem::path epath = entry.path(); - if( std::regex_match(epath.string(), r) ) { - std::filesystem::remove(epath); - } - } +void remove_file(std::string path) { +#if BF_USE_CXX_FILESYSTEM + std::filesystem::remove(path); #else - if( std::system(("rm -f "+path).c_str()) ) { - throw std::runtime_error("Failed to remove file: "+path); - } + if(unlink(path.c_str()) != 0) { + // Previously this was an 'rm -f', which is silent on non-existent path. + if(errno != ENOENT) { + throw std::runtime_error("Failed to remove file: "+path); + } + } +#endif +} + + +// ends_with will be available in C++20; this is suggested as alternative +// at https://stackoverflow.com/questions/874134 +static bool ends_with (std::string const &fullString, std::string const &ending) { + if (fullString.length() >= ending.length()) { + return (0 == fullString.compare(fullString.length() - ending.length(), + ending.length(), ending)); + } else { + return false; + } +} + +void remove_files_with_suffix(std::string dir, std::string suffix) { + if(dir.empty()) { + throw std::runtime_error("Empty DIR argument"); + } + if(suffix.empty()) { + throw std::runtime_error("Empty SUFFIX argument"); + } +#if BF_USE_CXX_FILESYSTEM + // Iterate through the directory's contents and remove the matches + std::filesystem::path path = dir; + for(auto const& entry : std::filesystem::directory_iterator{dir}) { + std::filesystem::path epath = entry.path(); + if( ends_with(epath.string(), suffix) ) { + std::filesystem::remove(epath); + } + } +#else + std::string wild = dir + "/*" + suffix; + if( std::system(("rm -f "+wild).c_str()) ) { + throw std::runtime_error("Failed to remove files: "+wild); + } #endif } bool file_exists(std::string path) { -#if __cplusplus >= 201703L +#if BF_USE_CXX_FILESYSTEM return std::filesystem::exists(path); #else struct stat s; @@ -147,7 +178,7 @@ bool process_exists(pid_t pid) { } std::string get_dirname(std::string filename) { -#if __cplusplus >= 201703L +#if BF_USE_CXX_FILESYSTEM std::filesystem::path path = filename; return (path.parent_path()).string(); #else diff --git a/src/fileutils.hpp b/src/fileutils.hpp index f4beb2ff5..3b02754a8 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -43,7 +43,8 @@ std::string get_home_dir(void); void make_dir(std::string path, int perms=0775); void remove_files_recursively(std::string path); void remove_dir(std::string path); -void remove_file_glob(std::string path); +void remove_file(std::string path); +void remove_files_with_suffix(std::string dir, std::string suffix); bool file_exists(std::string path); bool process_exists(pid_t pid); diff --git a/src/map.cpp b/src/map.cpp index 454d67a99..ca116e5db 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -453,9 +453,9 @@ class DiskCacheMgr { if( !status ) { try { - remove_file_glob(_cachedir + "*.inf"); - remove_file_glob(_cachedir + "*.ptx"); - remove_file_glob(_cachedir + BF_MAP_KERNEL_DISK_CACHE_VERSION_FILE); + remove_files_with_suffix(_cachedir, ".inf"); + remove_files_with_suffix(_cachedir, ".ptx"); + remove_file(_cachedir + BF_MAP_KERNEL_DISK_CACHE_VERSION_FILE); } catch( std::exception const& ) {} } } @@ -575,13 +575,13 @@ class DiskCacheMgr { void clear_cache() { // Do this with a file lock to avoid interference from other processes LockFile lock(_cachedir + ".lock"); - - try { - remove_file_glob(_cachedir + "*.inf"); - remove_file_glob(_cachedir + "*.ptx"); - } catch( std::exception const& ) {} - } - + + try { + remove_files_with_suffix(_cachedir, ".inf"); + remove_files_with_suffix(_cachedir, ".ptx"); + } catch( std::exception const& ) {} + } + DiskCacheMgr() : _cachedir(get_home_dir()+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), _loaded(false) { diff --git a/src/proclog.cpp b/src/proclog.cpp index e37d4f5c5..94159686b 100644 --- a/src/proclog.cpp +++ b/src/proclog.cpp @@ -129,7 +129,7 @@ class ProcLogMgr { } void destroy_log(std::string filename) { std::lock_guard lock(_mutex); - remove_file_glob(filename); + remove_file(filename); _logs.erase(filename); } void update_log_s(std::string filename, const char* str) { diff --git a/src/testsuite.cpp b/src/testsuite.cpp index 0071926d6..3f981eae0 100644 --- a/src/testsuite.cpp +++ b/src/testsuite.cpp @@ -74,9 +74,8 @@ struct TestDir { char* path = NULL; TestDir(); ~TestDir(); - const string filename(const string& name) { - return string(path) + '/' + name; - } + const string mkFileName(const string& baseName); + const string mkFile(const string& baseName); }; TestDir::TestDir() { @@ -89,8 +88,9 @@ TestDir::TestDir() { unsigned tmpdirLen = strlen(tmpdir); path = new char [tmpdirLen + 40]; strcpy(path, tmpdir); - if(tmpdir[tmpdirLen-1] != '/') { // Add a slash if needed - strcat(path, "/"); // (TMPDIR on Mac may already end in slash?) + // Add a slash if needed (TMPDIR on Mac may already end in slash?) + if(tmpdir[tmpdirLen-1] != '/') { + strcat(path, "/"); } strcat(path, "bifrost-testsuite.XXXXXX"); if(mkdtemp(path) == NULL) { @@ -105,21 +105,41 @@ TestDir::~TestDir() { delete [] path; } +const string TestDir::mkFileName(const string& baseName) { + return string(path) + '/' + baseName; +} + +const string TestDir::mkFile(const string& baseName) { + string fname = mkFileName(baseName); + ofstream file (fname); + file.close(); + return fname; +} + static TestResult test_this_process_exists() { pid_t pid = getpid(); ASSERT(process_exists(pid), "my PID " << pid << " not found."); return OK; } +static TestResult test_dir() { + string path; + { TestDir tmp; + path = tmp.path; + ASSERT_PATH_EXISTS(path); + } + ASSERT_PATH_NOT_EXISTS(path); + return OK; +} + static TestResult test_make_then_remove_dir() { TestDir tmp; - string dir = tmp.filename("w0w.d"); - - TDEBUG("make_dir" << dir); + string dir = tmp.mkFileName("w0w.d"); + TDEBUG("make_dir " << dir); make_dir(dir); ASSERT_PATH_EXISTS(dir); - TDEBUG("remove_dir" << dir); + TDEBUG("remove_dir " << dir); remove_dir(dir); ASSERT_PATH_NOT_EXISTS(dir); @@ -128,15 +148,12 @@ static TestResult test_make_then_remove_dir() { static TestResult test_create_then_remove_file() { TestDir tmp; - string fname = tmp.filename("rain.b0w"); - - TDEBUG("touch " << fname); - ofstream file (fname); - file.close(); + string fname = tmp.mkFile("rain.b0w"); + TDEBUG("mkFile " << fname); ASSERT_PATH_EXISTS(fname); - TDEBUG("remove_file_glob " << fname); - remove_file_glob(fname); + TDEBUG("remove_file " << fname); + remove_file(fname); ASSERT_PATH_NOT_EXISTS(fname); return OK; @@ -151,16 +168,13 @@ static TestResult test_remove_files_by_extension() { }; for(unsigned i = 0; i < names.size(); i++) { - names.at(i) = tmp.filename(names.at(i)); - TDEBUG("touch " << names.at(i)); - ofstream file(names.at(i)); - file.close(); + names.at(i) = tmp.mkFile(names.at(i)); + TDEBUG("mkFile " << names.at(i)); ASSERT_PATH_EXISTS(names.at(i)); } - string wild = tmp.filename("*.bak"); - TDEBUG("removing " << wild); - remove_file_glob(wild); + TDEBUG("removing *.bak"); + remove_files_with_suffix(tmp.path, ".bak"); ASSERT_PATH_NOT_EXISTS(names.at(0)); ASSERT_PATH_NOT_EXISTS(names.at(1)); @@ -176,6 +190,7 @@ int bfTestSuite() { int numFails = 0; numFails += test_this_process_exists(); + numFails += test_dir(); numFails += test_make_then_remove_dir(); numFails += test_create_then_remove_file(); numFails += test_remove_files_by_extension(); From 6775985ee38d447cebf3ac71c579c9a0a8376e37 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Apr 2022 17:28:35 -0600 Subject: [PATCH 0563/1155] Only test Python3.8 on macos. --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4dfa5edeb..45a40d4b6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,6 +20,9 @@ jobs: matrix: os: [self-hosted, ubuntu-latest, macos-latest] python-version: ['2.7', '3.6', '3.8'] + exclude: + - os: macos-latest + python-version: ['2.7', '3.6'] fail-fast: false steps: - name: "Software Install - Ubuntu" From af464e2547fef03ad12d7d1cd0bb58bbb2ad721e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Apr 2022 17:30:07 -0600 Subject: [PATCH 0564/1155] Indent. --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 45a40d4b6..be991ebec 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,9 +20,9 @@ jobs: matrix: os: [self-hosted, ubuntu-latest, macos-latest] python-version: ['2.7', '3.6', '3.8'] - exclude: - - os: macos-latest - python-version: ['2.7', '3.6'] + exclude: + - os: macos-latest + python-version: ['2.7', '3.6'] fail-fast: false steps: - name: "Software Install - Ubuntu" From f02e2a739884ed29104e31634da9b66364de8305 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Apr 2022 17:32:17 -0600 Subject: [PATCH 0565/1155] Try splitting up the 'exclude' into two lines. --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index be991ebec..b4f284dd3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,9 @@ jobs: python-version: ['2.7', '3.6', '3.8'] exclude: - os: macos-latest - python-version: ['2.7', '3.6'] + python-version: 2.7 + - os: macos-latest + python-version: 3.6 fail-fast: false steps: - name: "Software Install - Ubuntu" From af08c5750b5b4c2c3eddf10d5202e1ababd2ad15 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Apr 2022 20:48:00 -0600 Subject: [PATCH 0566/1155] More specific exception handling. --- python/bifrost/blocks/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/blocks/__init__.py b/python/bifrost/blocks/__init__.py index 03cf2600a..e14ed0edf 100644 --- a/python/bifrost/blocks/__init__.py +++ b/python/bifrost/blocks/__init__.py @@ -53,10 +53,10 @@ try: # Avoid error if portaudio library not installed from bifrost.blocks.audio import read_audio, AudioSourceBlock -except: +except ImportError: pass try: # Avoid error if psrdada library not installed from bifrost.blocks.psrdada import read_psrdada_buffer, PsrDadaSourceBlock -except: +except ImportError: pass From c2f16015df339cc158cc7d6e48f1d4f8760224b4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Apr 2022 20:48:41 -0600 Subject: [PATCH 0567/1155] Make the signature of close() consistent. --- python/bifrost/psrdada.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/psrdada.py b/python/bifrost/psrdada.py index c065558da..bca88e19c 100644 --- a/python/bifrost/psrdada.py +++ b/python/bifrost/psrdada.py @@ -124,7 +124,7 @@ def next(self): return self.__next__() def open(self): raise NotImplementedError() - def close(self): + def close(self, nbyte): raise NotImplementedError() class IpcBaseIO(IpcBaseBuf): From 43fb468fa3a9977b5faff3abd0c8c351040899a0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Apr 2022 20:49:04 -0600 Subject: [PATCH 0568/1155] Removed unused variable. --- python/bifrost/blocks/serialize.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/bifrost/blocks/serialize.py b/python/bifrost/blocks/serialize.py index 34a5c756f..4bab53fac 100644 --- a/python/bifrost/blocks/serialize.py +++ b/python/bifrost/blocks/serialize.py @@ -127,7 +127,6 @@ def __init__(self, filenames, gulp_nframe, *args, **kwargs): def create_reader(self, sourcename): return BifrostReader(sourcename) def on_sequence(self, ireader, sourcename): - hdr = ireader.header return [ireader.header] def on_data(self, reader, ospans): ospan = ospans[0] From d73aefaf49809d162d858df96c244aba64edf21f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Apr 2022 20:59:31 -0600 Subject: [PATCH 0569/1155] Convert to if...else since that is what it really is. --- python/bifrost/sigproc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index 8ce07980f..cfbd2f21f 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -378,12 +378,12 @@ def read_data(self, start=None, end=None): if start is not None: if start < 0: read_start = (nframe + start) * self.nifs * self.nchans - elif start >= 0: + else: read_start = start * self.nifs * self.nchans if end is not None: if end < 0: end_read = (nframe + end) * self.nifs * self.nchans - elif end >= 0: + else: end_read = end * self.nifs * self.nchans self.file_object.seek(read_start, os.SEEK_CUR) nbytes_to_read = end_read - read_start From 386d1cf9d48ffdb9988d64b153352dfe27dcd67d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Apr 2022 21:47:19 -0600 Subject: [PATCH 0570/1155] Two possible errors. --- python/bifrost/blocks/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/blocks/__init__.py b/python/bifrost/blocks/__init__.py index e14ed0edf..b878d6a43 100644 --- a/python/bifrost/blocks/__init__.py +++ b/python/bifrost/blocks/__init__.py @@ -53,10 +53,10 @@ try: # Avoid error if portaudio library not installed from bifrost.blocks.audio import read_audio, AudioSourceBlock -except ImportError: +except (ImportError, OSError): pass try: # Avoid error if psrdada library not installed from bifrost.blocks.psrdada import read_psrdada_buffer, PsrDadaSourceBlock -except ImportError: +except (ImportError, OSError): pass From 4c6ed4ac62a3548febff62c1543a04609f4b533c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Apr 2022 07:08:01 -0600 Subject: [PATCH 0571/1155] Removed unused variable. --- python/bifrost/blocks/accumulate.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/bifrost/blocks/accumulate.py b/python/bifrost/blocks/accumulate.py index 00df19257..734fe9d34 100644 --- a/python/bifrost/blocks/accumulate.py +++ b/python/bifrost/blocks/accumulate.py @@ -53,7 +53,6 @@ def define_valid_input_spaces(self): return ('cuda',) def on_sequence(self, iseq): ihdr = iseq.header - itensor = ihdr['_tensor'] ohdr = deepcopy(ihdr) otensor = ohdr['_tensor'] if 'scales' in otensor: From 3e46223550aafc6f7aa568e112c3a83f37382f87 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Apr 2022 07:08:33 -0600 Subject: [PATCH 0572/1155] Cleanup to removed unused code/commented out code. --- python/bifrost/ring.py | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/python/bifrost/ring.py b/python/bifrost/ring.py index 5498750d5..e4335e1f6 100644 --- a/python/bifrost/ring.py +++ b/python/bifrost/ring.py @@ -325,31 +325,15 @@ def data_view(self, dtype=np.uint8, shape=-1): # # Could also try writing a custom GPUArray implem for this purpose # return data_ptr span_size = self.size - stride = self.stride - #nringlet = self.sequence.nringlet nringlet = self.nringlet #print("******", span_size, stride, nringlet) #BufferType = c_byte*(span_size*self.stride) # TODO: We should really map the actual ring memory space and index # it with offset rather than mapping from the current pointer. - BufferType = ctypes.c_byte * (nringlet * stride) - data_buffer_ptr = ctypes.cast(data_ptr, ctypes.POINTER(BufferType)) - data_buffer = data_buffer_ptr.contents - #print(len(data_buffer), (nringlet, span_size), (self.stride, 1)) _shape = (nringlet, span_size // itemsize) strides = (self.stride, itemsize) if nringlet > 1 else None - #space = self.sequence.ring.space space = self.ring.space - """ - if space != 'cuda': - data_array = np.ndarray(shape=_shape, strides=strides, - buffer=data_buffer, dtype=dtype) - else: - data_array = GPUArray(shape=_shape, strides=strides, - buffer=data_ptr, dtype=dtype) - data_array.flags['SPACE'] = space - """ - + data_array = ndarray(shape=_shape, strides=strides, buffer=data_ptr, dtype=dtype, space=space) From d02fed4fda047ee6fc881a7d8567035c8fe08d15 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Apr 2022 07:34:16 -0600 Subject: [PATCH 0573/1155] Block import cleanup. --- python/bifrost/blocks/accumulate.py | 4 ++-- python/bifrost/blocks/convert_visibilities.py | 8 ++++---- python/bifrost/blocks/detect.py | 6 +++--- python/bifrost/blocks/fftshift.py | 4 ++-- python/bifrost/blocks/quantize.py | 4 ++-- python/bifrost/blocks/reduce.py | 4 ++-- python/bifrost/blocks/reverse.py | 4 ++-- python/bifrost/blocks/transpose.py | 8 ++++---- python/bifrost/blocks/unpack.py | 4 ++-- 9 files changed, 23 insertions(+), 23 deletions(-) diff --git a/python/bifrost/blocks/accumulate.py b/python/bifrost/blocks/accumulate.py index 734fe9d34..2d871af19 100644 --- a/python/bifrost/blocks/accumulate.py +++ b/python/bifrost/blocks/accumulate.py @@ -32,7 +32,7 @@ from __future__ import absolute_import -import bifrost as bf +from bifrost import map as bf_map from bifrost.pipeline import TransformBlock from copy import deepcopy @@ -66,7 +66,7 @@ def on_data(self, ispan, ospan): idata = ispan.data odata = ospan.data beta = 0. if self.frame_count == 0 else 1. - bf.map("b = beta * b + (b_type)a", {'a': idata, 'b': odata, 'beta': beta}) + bf_map("b = beta * b + (b_type)a", {'a': idata, 'b': odata, 'beta': beta}) self.frame_count += 1 if self.frame_count == self.nframe: ncommit = 1 diff --git a/python/bifrost/blocks/convert_visibilities.py b/python/bifrost/blocks/convert_visibilities.py index 495b8e863..10c2de149 100644 --- a/python/bifrost/blocks/convert_visibilities.py +++ b/python/bifrost/blocks/convert_visibilities.py @@ -27,9 +27,9 @@ from __future__ import absolute_import +from bifrost import map as bf_map from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType -import bifrost as bf from copy import deepcopy from math import sqrt @@ -98,7 +98,7 @@ def on_data(self, ispan, ospan): del shape_nopols[3] idata = idata.view(itype.as_vector(2)) odata = odata.view(otype.as_vector(2)) - bf.map( + bf_map( ''' bool in_lower_triangle = (i > j); if( in_lower_triangle ) { @@ -125,7 +125,7 @@ def on_data(self, ispan, ospan): idata = idata.view(itype.as_vector(2)) odata = odata.view(otype.as_vector(4)) # TODO: Support L/R as well as X/Y pols - bf.map(''' + bf_map(''' // TODO: This only works up to 2048 in single-precision #define project_triangular(i, j) ((i)*((i)+1)/2 + (j)) int i = int((sqrt(8.f*(b)+1)-1)/2); @@ -152,7 +152,7 @@ def on_data(self, ispan, ospan): del oshape_nopols[3] idata = idata.view(itype.as_vector(4)) odata = odata.view(otype.as_vector(2)) - bf.map(''' + bf_map(''' bool in_upper_triangle = (i < j); auto b = in_upper_triangle ? j*(j+1)/2 + i : i*(i+1)/2 + j; auto IQUV = idata(t,b,c,0); diff --git a/python/bifrost/blocks/detect.py b/python/bifrost/blocks/detect.py index 6bb183d3a..1bf9ae8ba 100644 --- a/python/bifrost/blocks/detect.py +++ b/python/bifrost/blocks/detect.py @@ -31,7 +31,7 @@ if sys.version_info < (3,): range = xrange -import bifrost as bf +from bifrost import map as bf_map from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType @@ -87,7 +87,7 @@ def on_data(self, ispan, ospan): idata = ispan.data odata = ospan.data if self.npol == 1: - bf.map("b = Complex(a).mag2()", {'a': idata, 'b': odata}) + bf_map("b = Complex(a).mag2()", {'a': idata, 'b': odata}) else: shape = idata.shape[:self.axis] + idata.shape[self.axis + 1:] inds = ['i%i' % i for i in range(idata.ndim)] @@ -115,7 +115,7 @@ def on_data(self, ispan, ospan): b(%s) = -2*xy.imag; """ % (inds_[0], inds_[1], inds_[0], inds_[1], inds_[2], inds_[3]) - bf.map(func, shape=shape, axis_names=inds, + bf_map(func, shape=shape, axis_names=inds, data={'a': ispan.data, 'b': ospan.data}) def detect(iring, mode, axis=None, *args, **kwargs): diff --git a/python/bifrost/blocks/fftshift.py b/python/bifrost/blocks/fftshift.py index 296b880fc..d4e90f3c5 100644 --- a/python/bifrost/blocks/fftshift.py +++ b/python/bifrost/blocks/fftshift.py @@ -31,7 +31,7 @@ if sys.version_info < (3,): range = xrange -import bifrost as bf +from bifrost import map as bf_map from bifrost.pipeline import TransformBlock from copy import deepcopy @@ -82,7 +82,7 @@ def on_data(self, ispan, ospan): else: inds[ax] += '-a.shape(%i)/2' % ax inds = ','.join(inds) - bf.map("b = a(%s)" % inds, shape=shape, axis_names=ind_names, + bf_map("b = a(%s)" % inds, shape=shape, axis_names=ind_names, data={'a': idata, 'b': odata}) def fftshift(iring, axes, inverse=False, *args, **kwargs): diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index f74f9b21a..75379b1ad 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -27,7 +27,7 @@ from __future__ import absolute_import -import bifrost as bf +from bifrost import quantize as bf_quantize from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType @@ -61,7 +61,7 @@ def on_sequence(self, iseq): def on_data(self, ispan, ospan): idata = ispan.data odata = ospan.data - bf.quantize(idata, odata, self.scale) + bf_quantize(idata, odata, self.scale) def quantize(iring, dtype, scale=1., *args, **kwargs): """Apply a requantization of bit depth for the data. diff --git a/python/bifrost/blocks/reduce.py b/python/bifrost/blocks/reduce.py index 1351ce5df..bf6040a73 100644 --- a/python/bifrost/blocks/reduce.py +++ b/python/bifrost/blocks/reduce.py @@ -30,8 +30,8 @@ from __future__ import absolute_import +from bifrost import reduce as bf_reduce from bifrost.pipeline import TransformBlock -import bifrost as bf from copy import deepcopy @@ -82,7 +82,7 @@ def define_output_nframes(self, input_nframe): return output_nframe def on_data(self, ispan, ospan): idata, odata = ispan.data, ospan.data - bf.reduce(idata, odata, self.op) + bf_reduce(idata, odata, self.op) # TODO: Support system space using Numpy #ishape = list(idata.shape) diff --git a/python/bifrost/blocks/reverse.py b/python/bifrost/blocks/reverse.py index 1583aa230..c8b6fc85b 100644 --- a/python/bifrost/blocks/reverse.py +++ b/python/bifrost/blocks/reverse.py @@ -31,7 +31,7 @@ if sys.version_info < (3,): range = xrange -import bifrost as bf +from bifrost import map as bf_map from bifrost.pipeline import TransformBlock from copy import deepcopy @@ -76,7 +76,7 @@ def on_data(self, ispan, ospan): for ax in self.axes: inds[ax] = '-' + inds[ax] inds = ','.join(inds) - bf.map("b = a(%s)" % inds, shape=shape, axis_names=ind_names, + bf_map("b = a(%s)" % inds, shape=shape, axis_names=ind_names, data={'a': idata, 'b': odata}) def reverse(iring, axes, *args, **kwargs): diff --git a/python/bifrost/blocks/transpose.py b/python/bifrost/blocks/transpose.py index ac7d6877b..8ceb8dc9f 100644 --- a/python/bifrost/blocks/transpose.py +++ b/python/bifrost/blocks/transpose.py @@ -26,9 +26,9 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import absolute_import - +from bifrost import transpose as bf_transpose +from bifrost.memory import space_accessible from bifrost.pipeline import TransformBlock -import bifrost as bf from copy import deepcopy import numpy as np @@ -72,8 +72,8 @@ def on_sequence(self, iseq): return ohdr def on_data(self, ispan, ospan): # TODO: bf.memory.transpose should support system space too - if bf.memory.space_accessible(self.space, ['cuda']): - bf.transpose(ospan.data, ispan.data, self.axes) + if space_accessible(self.space, ['cuda']): + bf_transpose(ospan.data, ispan.data, self.axes) else: ospan.data[...] = np.transpose(ispan.data, self.axes) diff --git a/python/bifrost/blocks/unpack.py b/python/bifrost/blocks/unpack.py index 9df7aa984..a8ffd9dad 100644 --- a/python/bifrost/blocks/unpack.py +++ b/python/bifrost/blocks/unpack.py @@ -27,7 +27,7 @@ from __future__ import absolute_import -import bifrost as bf +from bifrost import unpack as bf_unpack from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType @@ -61,7 +61,7 @@ def on_sequence(self, iseq): def on_data(self, ispan, ospan): idata = ispan.data odata = ospan.data - bf.unpack(idata, odata, self.align_msb) + bf_unpack(idata, odata, self.align_msb) def unpack(iring, dtype, *args, **kwargs): """Unpack data to a larger data type. From eedb6237a9b5eb3baab6b1df0f179fabbd96a2b2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 9 Apr 2022 07:39:48 -0600 Subject: [PATCH 0574/1155] Name fix. --- python/bifrost/pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index a26a87d4c..96bd6614a 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -417,7 +417,7 @@ def reserve_spans(self, exit_stack, oseqs, igulp_nframes=[]): def commit_spans(self, ospans, ostrides_actual, ogulp_overlaps): # Allow returning None to indicate complete consumption if ostrides_actual is None: - ostrides = [None] * len(ospans) + ostrides_actual = [None] * len(ospans) # Note: If ospan.nframe < ogulp_overlap, no frames will be committed ostrides = [ostride if ostride is not None else max(ospan.nframe - ogulp_overlap, 0) From 237dbcf9cb403f790893ef553a323e9df27bca4d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Apr 2022 12:49:33 -0600 Subject: [PATCH 0575/1155] Only skip Python2.7 on macos. --- .github/workflows/main.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b4f284dd3..48fe59629 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,8 +23,6 @@ jobs: exclude: - os: macos-latest python-version: 2.7 - - os: macos-latest - python-version: 3.6 fail-fast: false steps: - name: "Software Install - Ubuntu" From 44bed5af23478845dd86e437255b7ea067819002 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Apr 2022 13:56:58 -0600 Subject: [PATCH 0576/1155] More import fixes. --- python/bifrost/blocks/accumulate.py | 2 +- python/bifrost/blocks/convert_visibilities.py | 2 +- python/bifrost/blocks/detect.py | 2 +- python/bifrost/blocks/fftshift.py | 2 +- python/bifrost/blocks/quantize.py | 2 +- python/bifrost/blocks/reduce.py | 2 +- python/bifrost/blocks/reverse.py | 2 +- python/bifrost/blocks/transpose.py | 2 +- python/bifrost/blocks/unpack.py | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/python/bifrost/blocks/accumulate.py b/python/bifrost/blocks/accumulate.py index 2d871af19..c405f5c64 100644 --- a/python/bifrost/blocks/accumulate.py +++ b/python/bifrost/blocks/accumulate.py @@ -32,7 +32,7 @@ from __future__ import absolute_import -from bifrost import map as bf_map +from bifrost.map import map as bf_map from bifrost.pipeline import TransformBlock from copy import deepcopy diff --git a/python/bifrost/blocks/convert_visibilities.py b/python/bifrost/blocks/convert_visibilities.py index 10c2de149..079d351f8 100644 --- a/python/bifrost/blocks/convert_visibilities.py +++ b/python/bifrost/blocks/convert_visibilities.py @@ -27,7 +27,7 @@ from __future__ import absolute_import -from bifrost import map as bf_map +from bifrost.map import map as bf_map from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType diff --git a/python/bifrost/blocks/detect.py b/python/bifrost/blocks/detect.py index 1bf9ae8ba..4ac1a81ab 100644 --- a/python/bifrost/blocks/detect.py +++ b/python/bifrost/blocks/detect.py @@ -31,7 +31,7 @@ if sys.version_info < (3,): range = xrange -from bifrost import map as bf_map +from bifrost.map import map as bf_map from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType diff --git a/python/bifrost/blocks/fftshift.py b/python/bifrost/blocks/fftshift.py index d4e90f3c5..3a0a19b3a 100644 --- a/python/bifrost/blocks/fftshift.py +++ b/python/bifrost/blocks/fftshift.py @@ -31,7 +31,7 @@ if sys.version_info < (3,): range = xrange -from bifrost import map as bf_map +from bifrost.map import map as bf_map from bifrost.pipeline import TransformBlock from copy import deepcopy diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index 75379b1ad..309c3950d 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -27,7 +27,7 @@ from __future__ import absolute_import -from bifrost import quantize as bf_quantize +from bifrost.quantize import quantize as bf_quantize from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType diff --git a/python/bifrost/blocks/reduce.py b/python/bifrost/blocks/reduce.py index bf6040a73..51ff2b001 100644 --- a/python/bifrost/blocks/reduce.py +++ b/python/bifrost/blocks/reduce.py @@ -30,7 +30,7 @@ from __future__ import absolute_import -from bifrost import reduce as bf_reduce +from bifrost.reduce import reduce as bf_reduce from bifrost.pipeline import TransformBlock from copy import deepcopy diff --git a/python/bifrost/blocks/reverse.py b/python/bifrost/blocks/reverse.py index c8b6fc85b..cb088dd6f 100644 --- a/python/bifrost/blocks/reverse.py +++ b/python/bifrost/blocks/reverse.py @@ -31,7 +31,7 @@ if sys.version_info < (3,): range = xrange -from bifrost import map as bf_map +from bifrost.map import map as bf_map from bifrost.pipeline import TransformBlock from copy import deepcopy diff --git a/python/bifrost/blocks/transpose.py b/python/bifrost/blocks/transpose.py index 8ceb8dc9f..f1ffc8909 100644 --- a/python/bifrost/blocks/transpose.py +++ b/python/bifrost/blocks/transpose.py @@ -26,7 +26,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import absolute_import -from bifrost import transpose as bf_transpose +from bifrost.transpose import transpose as bf_transpose from bifrost.memory import space_accessible from bifrost.pipeline import TransformBlock diff --git a/python/bifrost/blocks/unpack.py b/python/bifrost/blocks/unpack.py index a8ffd9dad..ac9645cf8 100644 --- a/python/bifrost/blocks/unpack.py +++ b/python/bifrost/blocks/unpack.py @@ -27,7 +27,7 @@ from __future__ import absolute_import -from bifrost import unpack as bf_unpack +from bifrost.unpack import unpack as bf_unpack from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType From afe65bef26bb079ed8db43ab836c01e25482fdb4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Apr 2022 09:59:30 -0600 Subject: [PATCH 0577/1155] Separately check for which CXX standards CUDA supports. --- config/cuda.m4 | 25 ++++++++++++++++++++++ configure | 57 ++++++++++++++++++++++++++++++++++++++++++++++++-- configure.ac | 10 +++++++-- 3 files changed, 88 insertions(+), 4 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 23c1cec46..be1cc4858 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -16,6 +16,9 @@ AC_DEFUN([AX_CHECK_CUDA], AC_SUBST([HAVE_CUDA], [0]) AC_SUBST([CUDA_VERSION], [0]) + AC_SUBST([CUDA_HAVE_CXX17], [0]) + AC_SUBST([CUDA_HAVE_CXX14], [0]) + AC_SUBST([CUDA_HAVE_CXX11], [0]) AC_SUBST([GPU_MIN_ARCH], [0]) AC_SUBST([GPU_MAX_ARCH], [0]) if test "$enable_cuda" != "no"; then @@ -66,6 +69,28 @@ AC_DEFUN([AX_CHECK_CUDA], LIBS="$LIBS_save" fi + if test "$HAVE_CUDA" = "1"; then + AC_MSG_CHECKING([for CUDA CXX standard support]) + + CUDA_STDCXX=$( ${NVCC} --help | ${GREP} -Po -e "--std.*}" | ${SED} 's/.*|//;s/}//;' ) + if test "$CUDA_STDCXX" = "c++17"; then + AC_MSG_RESULT(C++17) + AC_SUBST([CUDA_HAVE_CXX17], [1]) + else + if test "$CUDA_STDCXX" = "c++14"; then + AC_MSG_RESULT(C++14) + AC_SUBST([CUDA_HAVE_CXX14], [1]) + else + if test "$CUDA_STDCXX" = "c++11"; then + AC_MSG_RESULT(C++11) + AC_SUBST([CUDA_HAVE_CXX11], [1]) + else + AC_MSG_ERROR(nvcc does not support at least C++11) + fi + fi + fi + fi + AC_ARG_WITH([nvcc_flags], [AS_HELP_STRING([--with-nvcc-flags], [flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"')])], diff --git a/configure b/configure index 0b1ef295a..1ab37e167 100755 --- a/configure +++ b/configure @@ -723,6 +723,9 @@ NVPRUNE NVCC GPU_MAX_ARCH GPU_MIN_ARCH +CUDA_HAVE_CXX11 +CUDA_HAVE_CXX14 +CUDA_HAVE_CXX17 CUDA_VERSION HAVE_CUDA CUDA_HOME @@ -20183,6 +20186,12 @@ fi CUDA_VERSION=0 + CUDA_HAVE_CXX17=0 + + CUDA_HAVE_CXX14=0 + + CUDA_HAVE_CXX11=0 + GPU_MIN_ARCH=0 GPU_MAX_ARCH=0 @@ -20410,6 +20419,35 @@ printf "%s\n" "no" >&6; } LIBS="$LIBS_save" fi + if test "$HAVE_CUDA" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CUDA CXX standard support" >&5 +printf %s "checking for CUDA CXX standard support... " >&6; } + + CUDA_STDCXX=$( ${NVCC} --help | ${GREP} -Po -e "--std.*}" | ${SED} 's/.*|//;s/}//;' ) + if test "$CUDA_STDCXX" = "c++17"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: C++17" >&5 +printf "%s\n" "C++17" >&6; } + CUDA_HAVE_CXX17=1 + + else + if test "$CUDA_STDCXX" = "c++14"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: C++14" >&5 +printf "%s\n" "C++14" >&6; } + CUDA_HAVE_CXX14=1 + + else + if test "$CUDA_STDCXX" = "c++11"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: C++11" >&5 +printf "%s\n" "C++11" >&6; } + CUDA_HAVE_CXX11=1 + + else + as_fn_error $? "nvcc does not support at least C++11" "$LINENO" 5 + fi + fi + fi + fi + # Check whether --with-nvcc_flags was given. if test ${with_nvcc_flags+y} @@ -23363,12 +23401,27 @@ PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. '{print $3}'` if test x$HAVE_CXX17 = x1 then : CXXFLAGS="-std=c++17 $CXXFLAGS" - NVCCFLAGS="-std=c++17 $NVCCFLAGS" + if test x$CUDA_HAVE_CXX17 = x1 +then : + NVCCFLAGS="-std=c++17 $NVCCFLAGS" +else $as_nop + if test x$CUDA_HAVE_CXX14 = x1 +then : + NVCCFLAGS="-std=c++14 $NVCCFLAGS" +else $as_nop + NVCCFLAGS="-std=c++11 $NVCCFLAGS" +fi +fi else $as_nop if test x$HAVE_CXX14 = x1 then : CXXFLAGS="-std=c++14 $CXXFLAGS" - NVCCFLAGS="-std=c++14 $NVCCFLAGS" + if test x$CUDA_HAVE_CXX14 = x1 +then : + NVCCFLAGS="-std=c++14 $NVCCFLAGS" +else $as_nop + NVCCFLAGS="-std=c++11 $NVCCFLAGS" +fi else $as_nop CXXFLAGS="-std=c++11 $CXXFLAGS" NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS" diff --git a/configure.ac b/configure.ac index dbaa3ad86..ff010813d 100644 --- a/configure.ac +++ b/configure.ac @@ -291,10 +291,16 @@ AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. '{print $3} AS_IF([test x$HAVE_CXX17 = x1], [CXXFLAGS="-std=c++17 $CXXFLAGS" - NVCCFLAGS="-std=c++17 $NVCCFLAGS"], + AS_IF([test x$CUDA_HAVE_CXX17 = x1], + [NVCCFLAGS="-std=c++17 $NVCCFLAGS"], + [AS_IF([test x$CUDA_HAVE_CXX14 = x1], + [NVCCFLAGS="-std=c++14 $NVCCFLAGS"], + [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])])], [AS_IF([test x$HAVE_CXX14 = x1], [CXXFLAGS="-std=c++14 $CXXFLAGS" - NVCCFLAGS="-std=c++14 $NVCCFLAGS"], + AS_IF([test x$CUDA_HAVE_CXX14 = x1], + [NVCCFLAGS="-std=c++14 $NVCCFLAGS"], + [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])], [CXXFLAGS="-std=c++11 $CXXFLAGS" NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS"])]) From 5b67b03af2a30ddf357bdbcf939e01ee33bb20d2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Apr 2022 10:12:45 -0600 Subject: [PATCH 0578/1155] Added a variable to control which CXX standard bifrost.map() uses. --- configure | 9 +++++++++ configure.ac | 10 +++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 1ab37e167..4eac0f422 100755 --- a/configure +++ b/configure @@ -658,6 +658,7 @@ ac_includes_default="\ ac_header_c_list= ac_subst_vars='OPTIONS LTLIBOBJS +MAP_KERNEL_STDCXX PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR PACKAGE_VERSION_MAJOR @@ -23398,16 +23399,22 @@ PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. '{print $3}'` # C++17/C++14/C++11 toggling # +MAP_KERNEL_STDCXX=c++11 + if test x$HAVE_CXX17 = x1 then : CXXFLAGS="-std=c++17 $CXXFLAGS" if test x$CUDA_HAVE_CXX17 = x1 then : NVCCFLAGS="-std=c++17 $NVCCFLAGS" + MAP_KERNEL_STDCXX=c++17 + else $as_nop if test x$CUDA_HAVE_CXX14 = x1 then : NVCCFLAGS="-std=c++14 $NVCCFLAGS" + MAP_KERNEL_STDCXX=c++14 + else $as_nop NVCCFLAGS="-std=c++11 $NVCCFLAGS" fi @@ -23419,6 +23426,8 @@ then : if test x$CUDA_HAVE_CXX14 = x1 then : NVCCFLAGS="-std=c++14 $NVCCFLAGS" + MAP_KERNEL_STDCXX=c++14 + else $as_nop NVCCFLAGS="-std=c++11 $NVCCFLAGS" fi diff --git a/configure.ac b/configure.ac index ff010813d..fd9bb581e 100644 --- a/configure.ac +++ b/configure.ac @@ -289,17 +289,21 @@ AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. '{print $3} # C++17/C++14/C++11 toggling # +AC_SUBST([MAP_KERNEL_STDCXX], [c++11]) AS_IF([test x$HAVE_CXX17 = x1], [CXXFLAGS="-std=c++17 $CXXFLAGS" AS_IF([test x$CUDA_HAVE_CXX17 = x1], - [NVCCFLAGS="-std=c++17 $NVCCFLAGS"], + [NVCCFLAGS="-std=c++17 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++17])], [AS_IF([test x$CUDA_HAVE_CXX14 = x1], - [NVCCFLAGS="-std=c++14 $NVCCFLAGS"], + [NVCCFLAGS="-std=c++14 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])])], [AS_IF([test x$HAVE_CXX14 = x1], [CXXFLAGS="-std=c++14 $CXXFLAGS" AS_IF([test x$CUDA_HAVE_CXX14 = x1], - [NVCCFLAGS="-std=c++14 $NVCCFLAGS"], + [NVCCFLAGS="-std=c++14 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])], [CXXFLAGS="-std=c++11 $CXXFLAGS" NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS"])]) From 545ba9cf2608d34a7b248eac6b8ae95fb9c52d9c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Apr 2022 10:21:40 -0600 Subject: [PATCH 0579/1155] Update how nvrtc is run in map.cpp to match how Bifrost was configured. --- src/bifrost/config.h.in | 1 + src/map.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 66ef807fb..d2909456d 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -49,6 +49,7 @@ extern "C" { #define BF_GPU_MAX_ARCH @GPU_MAX_ARCH@ #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ +#define BF_MAP_KERNEL_STDCXX "@MAP_KERNEL_STDCXX@" #define BF_MAP_KERNEL_DISK_CACHE @HAVE_MAP_CACHE@ #define BF_MAP_KERNEL_DISK_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) diff --git a/src/map.cpp b/src/map.cpp index ca116e5db..ca6a30cd6 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -335,7 +335,13 @@ BFstatus build_map_kernel(int* external_ndim, program_name, nheader, header_codes, header_names) ); std::vector options; - options.push_back("--std=c++11"); + std::stringstream cs_ss; +#if defined(BF_MAP_KERNEL_STDCXX) + cs_ss << BF_MAP_KERNEL_STDCXX; +#else + cs_ss << "c++11"; +#endif + options.push_back("--std="+cs_ss.str()); options.push_back("--device-as-default-execution-space"); options.push_back("--use_fast_math"); std::stringstream cc_ss; From d748a9a971cc9ea011e346e58ecaf0ad1c3d8705 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 12 Apr 2022 10:37:19 -0600 Subject: [PATCH 0580/1155] Compilers will lie to you. --- src/fileutils.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index ddec851c3..3cd1dce09 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -33,7 +33,10 @@ older POSIX methods such as system, unlink, etc. Leave it unset to detect based on -std=c++17. */ #ifndef BF_USE_CXX_FILESYSTEM -# define BF_USE_CXX_FILESYSTEM (__cplusplus >= 201703L) +#ifndef __cpp_lib_filesystem +# define __cpp_lib_filesystem 0 +#endif +# define BF_USE_CXX_FILESYSTEM (__cplusplus >= 201703L && __cpp_lib_filesystem) #endif #if BF_USE_CXX_FILESYSTEM @@ -97,7 +100,8 @@ void remove_file(std::string path) { #endif } - +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" // ends_with will be available in C++20; this is suggested as alternative // at https://stackoverflow.com/questions/874134 static bool ends_with (std::string const &fullString, std::string const &ending) { @@ -108,6 +112,7 @@ static bool ends_with (std::string const &fullString, std::string const &ending) return false; } } +#pragma GCC diagnostic pop void remove_files_with_suffix(std::string dir, std::string suffix) { if(dir.empty()) { From 45b4bf7669c579de14894153f66dbd11bf67c0a2 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 12 Apr 2022 14:56:50 -0400 Subject: [PATCH 0581/1155] My contribution to reducing the build burden? It may be neat that we can ensure it works with different releases of nixpkgs, and survey the horizon of nix-unstable. But any errors that pop up there (but not in pinned) are probably not our issue. Compiling against carefully selected variations of python and C++ might be more productive. --- .github/workflows/nix.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 2fc30964c..b10b9b86c 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -23,9 +23,9 @@ jobs: - macos-latest nixpkgs: - pinned - - release-21.11 - - release-21.05 - - nixpkgs-unstable + # - release-21.11 + # - release-21.05 + # - nixpkgs-unstable fail-fast: false runs-on: ${{ matrix.os }} steps: From 6074d0ed78d0ece1476c1b234f79394af95b4055 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Apr 2022 11:43:19 -0600 Subject: [PATCH 0582/1155] Added horizontal scrolling to the command entry. --- CHANGELOG | 1 + tools/like_bmon.py | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index aeb04651a..deb169915 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ * Cleaned up the Makefile outputs * Added a disk cache for bifrost.map calls * Added support for configurable, reproducible builds with nix + * Added horizontal scrolling for long command names to like_bmon.py 0.10.0 * Switched over to an autotools-based build system diff --git a/tools/like_bmon.py b/tools/like_bmon.py index f81b95019..e4c99dea4 100755 --- a/tools/like_bmon.py +++ b/tools/like_bmon.py @@ -1,7 +1,7 @@ #!/usr/bin/env python -# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2022, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -248,6 +248,7 @@ def main(args): try: sel = 0 + off = 0 while True: t = time.time() @@ -261,6 +262,10 @@ def main(args): sel -= 1 elif c == curses.KEY_DOWN: sel += 1 + elif c == curses.KEY_LEFT: + off -= 8 + elif c == curses.KEY_RIGHT: + off += 8 ## Find the current selected process and see if it has changed newSel = min([nPID-1, max([0, sel])]) @@ -359,6 +364,8 @@ def main(args): output += '\n' k = _add_line(scr, k, 0, output, rev) if act is not None: + off = min([max([0, len(act['cmd'])-size[1]+23]), max([0, off])]) + output = 'Good: %18iB %18iB\n' % (act['rx']['good' ], act['tx']['good' ]) k = _add_line(scr, k, 0, output, std) output = 'Missing: %18iB %18iB\n' % (act['rx']['missing'], act['tx']['missing']) @@ -371,7 +378,7 @@ def main(args): k = _add_line(scr, k, 0, output, std) output = 'Current Missing: %18.2f%% %18.2f%%\n' % (act['rx']['closs' ], act['tx']['closs' ]) k = _add_line(scr, k, 0, output, std) - output = 'Command: %s' % act['cmd'] + output = 'Command: %s' % act['cmd'][off:] k = _add_line(scr, k, 0, output[:size[1]], std) ### Clear to the bottom From 9782812d256f7b5372353cc6327d2fdf7f776d39 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Apr 2022 19:13:20 -0600 Subject: [PATCH 0583/1155] Pass in remote_address by reference. --- src/Socket.hpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index b91b0b657..82345a326 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -298,14 +298,14 @@ class Socket { int port, sa_family_t family=AF_UNSPEC); inline static sockaddr_storage any_address(sa_family_t family=AF_UNSPEC); - inline static std::string address_string(sockaddr_storage addr); - inline static int discover_mtu(sockaddr_storage remote_address); + inline static std::string address_string(sockaddr_storage const& addr); + inline static int discover_mtu(sockaddr_storage const& remote_address); // Server initialisation - inline void bind(sockaddr_storage local_address, + inline void bind(sockaddr_storage const& local_address, int max_conn_queue=DEFAULT_MAX_CONN_QUEUE); // Client initialisation - inline void connect(sockaddr_storage remote_address); + inline void connect(sockaddr_storage const& remote_address); // Accept incoming SOCK_STREAM connection requests // TODO: With C++11 this could return by value (moved), which would be nicer inline Socket* accept(double timeout_secs=-1); @@ -519,7 +519,7 @@ sockaddr_storage Socket::address(//const char* addrstr, throw Socket::Error("Not a valid IP address, interface or hostname"); } } -std::string Socket::address_string(sockaddr_storage addr) { +std::string Socket::address_string(sockaddr_storage const& addr) { switch( addr.ss_family ) { case AF_UNIX: { // WAR for sun_path not always being NULL-terminated @@ -547,7 +547,7 @@ std::string Socket::address_string(sockaddr_storage addr) { default: throw Socket::Error("Invalid address family"); } } -int Socket::discover_mtu(sockaddr_storage remote_address) { +int Socket::discover_mtu(sockaddr_storage const& remote_address) { Socket s(SOCK_DGRAM); s.connect(remote_address); #if defined __APPLE__ && __APPLE__ @@ -556,8 +556,8 @@ int Socket::discover_mtu(sockaddr_storage remote_address) { return s.get_option(IP_MTU, IPPROTO_IP); #endif } -void Socket::bind(sockaddr_storage local_address, - int max_conn_queue) { +void Socket::bind(sockaddr_storage const& local_address, + int max_conn_queue) { if( _mode != Socket::MODE_CLOSED ) { throw Socket::Error("Socket is already open"); } @@ -587,7 +587,7 @@ void Socket::bind(sockaddr_storage local_address, } } // TODO: Add timeout support? Bit of a pain to implement. -void Socket::connect(sockaddr_storage remote_address) { +void Socket::connect(sockaddr_storage const& remote_address) { bool can_reuse = (_fd != -1 && _type == SOCK_DGRAM && (remote_address.ss_family == AF_UNSPEC || From d5140f121c4851ef257ee01c58ad9ecbb44efa4c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Apr 2022 19:14:04 -0600 Subject: [PATCH 0584/1155] _pid is not used. --- src/udp_capture.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/udp_capture.cpp b/src/udp_capture.cpp index b5fb65c6a..86058c978 100644 --- a/src/udp_capture.cpp +++ b/src/udp_capture.cpp @@ -541,7 +541,6 @@ class BFudpcapture_impl { ProcLog _chan_log; ProcLog _stat_log; ProcLog _perf_log; - pid_t _pid; std::chrono::high_resolution_clock::time_point _t0; std::chrono::high_resolution_clock::time_point _t1; From ec51eaa93d685ca8e5f54484e6bd52eceb85ac79 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Apr 2022 19:41:57 -0600 Subject: [PATCH 0585/1155] It is connect() or discover_mtu()? --- src/Socket.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 82345a326..669f0a7c3 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -305,7 +305,7 @@ class Socket { inline void bind(sockaddr_storage const& local_address, int max_conn_queue=DEFAULT_MAX_CONN_QUEUE); // Client initialisation - inline void connect(sockaddr_storage const& remote_address); + inline void connect(sockaddr_storage remote_address); // Accept incoming SOCK_STREAM connection requests // TODO: With C++11 this could return by value (moved), which would be nicer inline Socket* accept(double timeout_secs=-1); @@ -587,7 +587,7 @@ void Socket::bind(sockaddr_storage const& local_address, } } // TODO: Add timeout support? Bit of a pain to implement. -void Socket::connect(sockaddr_storage const& remote_address) { +void Socket::connect(sockaddr_storage remote_address) { bool can_reuse = (_fd != -1 && _type == SOCK_DGRAM && (remote_address.ss_family == AF_UNSPEC || From 3134dbd1f01ff933220707a75459d69c97aecff0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Apr 2022 19:53:33 -0600 Subject: [PATCH 0586/1155] It is connect() or discover_mtu()? --- src/Socket.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 669f0a7c3..75d0d320f 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -299,13 +299,13 @@ class Socket { sa_family_t family=AF_UNSPEC); inline static sockaddr_storage any_address(sa_family_t family=AF_UNSPEC); inline static std::string address_string(sockaddr_storage const& addr); - inline static int discover_mtu(sockaddr_storage const& remote_address); + inline static int discover_mtu(sockaddr_storage remote_address); // Server initialisation inline void bind(sockaddr_storage const& local_address, int max_conn_queue=DEFAULT_MAX_CONN_QUEUE); // Client initialisation - inline void connect(sockaddr_storage remote_address); + inline void connect(sockaddr_storage const& remote_address); // Accept incoming SOCK_STREAM connection requests // TODO: With C++11 this could return by value (moved), which would be nicer inline Socket* accept(double timeout_secs=-1); @@ -547,7 +547,7 @@ std::string Socket::address_string(sockaddr_storage const& addr) { default: throw Socket::Error("Invalid address family"); } } -int Socket::discover_mtu(sockaddr_storage const& remote_address) { +int Socket::discover_mtu(sockaddr_storage remote_address) { Socket s(SOCK_DGRAM); s.connect(remote_address); #if defined __APPLE__ && __APPLE__ @@ -587,7 +587,7 @@ void Socket::bind(sockaddr_storage const& local_address, } } // TODO: Add timeout support? Bit of a pain to implement. -void Socket::connect(sockaddr_storage remote_address) { +void Socket::connect(sockaddr_storage const& remote_address) { bool can_reuse = (_fd != -1 && _type == SOCK_DGRAM && (remote_address.ss_family == AF_UNSPEC || From eee7811cfe316041e10579218b59ae865e499492 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Apr 2022 20:03:40 -0600 Subject: [PATCH 0587/1155] Remove non-printing characters. --- src/memory.cpp | 2 +- src/ring_impl.cpp | 2 +- src/ring_impl.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/memory.cpp b/src/memory.cpp index 10f68335f..415847802 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) 2016, The Bifrost Authors. All rights reserved. * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. * diff --git a/src/ring_impl.cpp b/src/ring_impl.cpp index cf80e854a..e0471b7ab 100644 --- a/src/ring_impl.cpp +++ b/src/ring_impl.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) 2016, The Bifrost Authors. All rights reserved. * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. * diff --git a/src/ring_impl.hpp b/src/ring_impl.hpp index 6645132bf..5824fd923 100644 --- a/src/ring_impl.hpp +++ b/src/ring_impl.hpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) 2016, The Bifrost Authors. All rights reserved. * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. * From 9afcf7a7f4649443e1165e9ec87bd08e9745cd18 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Apr 2022 20:19:49 -0600 Subject: [PATCH 0588/1155] Remove unused _pid. --- src/udp_transmit.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/udp_transmit.cpp b/src/udp_transmit.cpp index 7d91ee210..0557dedef 100644 --- a/src/udp_transmit.cpp +++ b/src/udp_transmit.cpp @@ -145,7 +145,6 @@ class BFudptransmit_impl { ProcLog _type_log; ProcLog _bind_log; ProcLog _stat_log; - pid_t _pid; void update_stats_log() { const PacketStats* stats = _transmit.get_stats(); From cdb8ddd2e72d0f708da3093e60f1ce247531daee Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Apr 2022 20:29:01 -0600 Subject: [PATCH 0589/1155] Will this work? --- flake.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index fe3539f83..147c5b5c6 100644 --- a/flake.nix +++ b/flake.nix @@ -45,10 +45,10 @@ # │ │*Experimented w/using all supported archs, but # │ │ had to eliminate 87 because not in cufft lib. - bifrost = { gccStdenv, ctags, ncurses, file, enableDebug ? false + bifrost = { stdenv, ctags, ncurses, file, enableDebug ? false , enablePython ? true, python3, enableCuda ? false, cudatoolkit , util-linuxMinimal, gpuArchs ? defaultGpuArchs cudatoolkit }: - gccStdenv.mkDerivation { + stdenv.mkDerivation { name = lib.optionalString (!enablePython) "lib" + "bifrost" + lib.optionalString enablePython "-py${lib.versions.majorMinor python3.version}" From 64a8c3f730d12674d88bfff25f0a1b5fb918c56e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Apr 2022 09:21:01 -0600 Subject: [PATCH 0590/1155] Explictly test for C++ std::filesystem support since support seems to be trickier than it should be. --- config/filesystem.m4 | 34 ++++++++++++++++++++ configure | 71 +++++++++++++++++++++++++++++++++++++++++ configure.ac | 1 + src/bifrost/config.h.in | 1 + src/fileutils.cpp | 7 ++-- 5 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 config/filesystem.m4 diff --git a/config/filesystem.m4 b/config/filesystem.m4 new file mode 100644 index 000000000..7c19a121c --- /dev/null +++ b/config/filesystem.m4 @@ -0,0 +1,34 @@ +AC_DEFUN([AX_CHECK_CXX_FILESYSTEM], +[ + AC_PROVIDE([AX_CHECK_CXX_FILESYSTEM]) + + AC_SUBST([HAVE_CXX_FILESYSTEM], [0]) + + AC_MSG_CHECKING([for a C++ std::filesystem support]) + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #include ]], + [[std::filesystem::exists("/")]])], + [AC_SUBST([HAVE_CXX_FILESYSTEM], [1])], + [AC_SUBST([HAVE_CXX_FILESYSTEM], [0])]) + + if test "$HAVE_CXX_FILESYSTEM" = "1"; then + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + #include ]], + [[std::filesystem::exists("/")]])], + [AC_SUBST([HAVE_CXX_FILESYSTEM], [1])], + [AC_SUBST([HAVE_CXX_FILESYSTEM], [0])]) + fi + + if test "$HAVE_CXX_FILESYSTEM" = "1"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi +]) diff --git a/configure b/configure index 4eac0f422..987431a05 100755 --- a/configure +++ b/configure @@ -737,6 +737,7 @@ HAVE_FLOAT128 HAVE_OPENMP LIBOBJS HAVE_RECVMSG +HAVE_CXX_FILESYSTEM HAVE_CXX11 HAVE_CXX14 HAVE_CXX17 @@ -19381,6 +19382,76 @@ printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h fi fi + + + + HAVE_CXX_FILESYSTEM=0 + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a C++ std::filesystem support" >&5 +printf %s "checking for a C++ std::filesystem support... " >&6; } + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include +int +main (void) +{ +std::filesystem::exists("/") + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + HAVE_CXX_FILESYSTEM=1 + +else $as_nop + HAVE_CXX_FILESYSTEM=0 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + if test "$HAVE_CXX_FILESYSTEM" = "1"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include +int +main (void) +{ +std::filesystem::exists("/") + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + HAVE_CXX_FILESYSTEM=1 + +else $as_nop + HAVE_CXX_FILESYSTEM=0 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + + if test "$HAVE_CXX_FILESYSTEM" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes then : diff --git a/configure.ac b/configure.ac index fd9bb581e..c57933749 100644 --- a/configure.ac +++ b/configure.ac @@ -44,6 +44,7 @@ AS_IF([test x$HAVE_CXX17 != x1], [AX_CXX_COMPILE_STDCXX(14, noext, optional) AS_IF([test x$HAVE_CXX14 != x1], [AX_CXX_COMPILE_STDCXX(11, noext, mandatory)])]) +AX_CHECK_CXX_FILESYSTEM AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index d2909456d..2f7cf9923 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -54,6 +54,7 @@ extern "C" { #define BF_MAP_KERNEL_DISK_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) // Features +#define BF_USE_CXX_FILESYSTEM @HAVE_CXX_FILESYSTEM@ #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ #define BF_OPENMP_ENABLED @HAVE_OPENMP@ #define BF_NUMA_ENABLED @HAVE_NUMA@ diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 3cd1dce09..4256bba2f 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -28,15 +28,13 @@ #include "fileutils.hpp" #include +#include /* Set this constant to 1 to force usage of or 0 to force usage of older POSIX methods such as system, unlink, etc. Leave it unset to detect based on -std=c++17. */ #ifndef BF_USE_CXX_FILESYSTEM -#ifndef __cpp_lib_filesystem -# define __cpp_lib_filesystem 0 -#endif -# define BF_USE_CXX_FILESYSTEM (__cplusplus >= 201703L && __cpp_lib_filesystem) +# define BF_USE_CXX_FILESYSTEM (__cplusplus >= 201703L) #endif #if BF_USE_CXX_FILESYSTEM @@ -58,6 +56,7 @@ std::string get_home_dir(void) { void make_dir(std::string path, int perms) { #if BF_USE_CXX_FILESYSTEM + std::cout << "here" << std::endl; std::filesystem::create_directories(path); std::filesystem::permissions(path, (std::filesystem::perms) perms, std::filesystem::perm_options::replace); From 027d58031f194cafb2f8c1b9a92878b6129bda75 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Apr 2022 09:23:16 -0600 Subject: [PATCH 0591/1155] Include bifrost/config.h. --- src/fileutils.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/fileutils.hpp b/src/fileutils.hpp index 3b02754a8..7664a1cfb 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -28,6 +28,8 @@ #pragma once +#include + #include // For flock #include // For fstat #include // For getpid From 1ac94515404dc867b2141be1f12e4692f098cf03 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Apr 2022 09:41:27 -0600 Subject: [PATCH 0592/1155] Remove debugging. --- src/fileutils.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 4256bba2f..189a4b2d9 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -28,7 +28,6 @@ #include "fileutils.hpp" #include -#include /* Set this constant to 1 to force usage of or 0 to force usage of older POSIX methods such as system, unlink, etc. Leave it unset to detect @@ -56,7 +55,6 @@ std::string get_home_dir(void) { void make_dir(std::string path, int perms) { #if BF_USE_CXX_FILESYSTEM - std::cout << "here" << std::endl; std::filesystem::create_directories(path); std::filesystem::permissions(path, (std::filesystem::perms) perms, std::filesystem::perm_options::replace); From b1ff5530bfa4cb0a23475db713bde16018693270 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Apr 2022 09:42:56 -0600 Subject: [PATCH 0593/1155] This is handled through configure/config.h now. --- src/fileutils.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 189a4b2d9..4727e2270 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -29,13 +29,6 @@ #include "fileutils.hpp" #include -/* Set this constant to 1 to force usage of or 0 to force usage of - older POSIX methods such as system, unlink, etc. Leave it unset to detect - based on -std=c++17. */ -#ifndef BF_USE_CXX_FILESYSTEM -# define BF_USE_CXX_FILESYSTEM (__cplusplus >= 201703L) -#endif - #if BF_USE_CXX_FILESYSTEM #include #endif From ec391a27a3fc2e2e384e5c1b9418f4f9f25e1a0e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Apr 2022 09:46:13 -0600 Subject: [PATCH 0594/1155] Add a message about std::filesystem support. --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index aeb04651a..5f60df63a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ * Cleaned up the Makefile outputs * Added a disk cache for bifrost.map calls * Added support for configurable, reproducible builds with nix + * Use std::filesystem for where possible for file and directory management 0.10.0 * Switched over to an autotools-based build system From b9e147d1f0b75f3d5f2bfbbc1fd3517c946674f1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Apr 2022 11:29:54 -0600 Subject: [PATCH 0595/1155] Reorder and reenable. --- src/Socket.hpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 75d0d320f..e93192eb1 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -299,7 +299,6 @@ class Socket { sa_family_t family=AF_UNSPEC); inline static sockaddr_storage any_address(sa_family_t family=AF_UNSPEC); inline static std::string address_string(sockaddr_storage const& addr); - inline static int discover_mtu(sockaddr_storage remote_address); // Server initialisation inline void bind(sockaddr_storage const& local_address, @@ -317,6 +316,8 @@ class Socket { inline void shutdown(int how=SHUT_RD); //void shutdown(int how=SHUT_RDWR); inline void close(); + // MTU discovery + inline static int discover_mtu(sockaddr_storage const& remote_address); // Send/receive // Note: These four methods return the number of packets received/sent inline size_t recv_block(size_t npacket, // Max for UDP @@ -547,15 +548,6 @@ std::string Socket::address_string(sockaddr_storage const& addr) { default: throw Socket::Error("Invalid address family"); } } -int Socket::discover_mtu(sockaddr_storage remote_address) { - Socket s(SOCK_DGRAM); - s.connect(remote_address); -#if defined __APPLE__ && __APPLE__ - return ::get_mtu(s.get_fd()); -#else - return s.get_option(IP_MTU, IPPROTO_IP); -#endif -} void Socket::bind(sockaddr_storage const& local_address, int max_conn_queue) { if( _mode != Socket::MODE_CLOSED ) { @@ -653,6 +645,15 @@ void Socket::shutdown(int how) { check_error(ret, "shutdown socket"); } } +int Socket::discover_mtu(sockaddr_storage const& remote_address) { + Socket s(SOCK_DGRAM); + s.connect(remote_address); +#if defined __APPLE__ && __APPLE__ + return ::get_mtu(s.get_fd()); +#else + return s.get_option(IP_MTU, IPPROTO_IP); +#endif +} // Note: If offsets is NULL, assumes uniform spacing of sizes[0] void Socket::prepare_msgs(size_t npacket, void* header_buf, From de84fd120f77521cbb4b5767bb329c0832a9de8c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Apr 2022 11:41:58 -0600 Subject: [PATCH 0596/1155] Typo. --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index dab82536d..852b2f951 100644 --- a/Makefile.in +++ b/Makefile.in @@ -56,7 +56,7 @@ uninstall: rm -f $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ) rm -f $(INSTALL_LIB_DIR)/$(LIBBIFROST_SO_MAJ_MIN) rm -rf $(INSTALL_INC_DIR)/bifrost/ - rm -ff $(INSTALL_DAT_DIR)/bifrost/ + rm -rf $(INSTALL_DAT_DIR)/bifrost/ rm -f $(INSTALL_LIB_DIR)/pkgconfig/bifrost.pc ifeq ($(HAVE_PYTHON),1) $(MAKE) -C $(BIFROST_PYTHON_DIR) uninstall From e837a6fbc0a8d235e072496af19770c802951b4c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Apr 2022 13:17:42 -0600 Subject: [PATCH 0597/1155] Revert. --- src/Socket.hpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index e93192eb1..d42a3fdc3 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -299,6 +299,7 @@ class Socket { sa_family_t family=AF_UNSPEC); inline static sockaddr_storage any_address(sa_family_t family=AF_UNSPEC); inline static std::string address_string(sockaddr_storage const& addr); + inline static int discover_mtu(sockaddr_storage const& remote_address); // Server initialisation inline void bind(sockaddr_storage const& local_address, @@ -316,8 +317,6 @@ class Socket { inline void shutdown(int how=SHUT_RD); //void shutdown(int how=SHUT_RDWR); inline void close(); - // MTU discovery - inline static int discover_mtu(sockaddr_storage const& remote_address); // Send/receive // Note: These four methods return the number of packets received/sent inline size_t recv_block(size_t npacket, // Max for UDP @@ -548,6 +547,15 @@ std::string Socket::address_string(sockaddr_storage const& addr) { default: throw Socket::Error("Invalid address family"); } } +int Socket::discover_mtu(sockaddr_storage remote_address) { + Socket s(SOCK_DGRAM); + s.connect(remote_address); +#if defined __APPLE__ && __APPLE__ + return ::get_mtu(s.get_fd()); +#else + return s.get_option(IP_MTU, IPPROTO_IP); +#endif +} void Socket::bind(sockaddr_storage const& local_address, int max_conn_queue) { if( _mode != Socket::MODE_CLOSED ) { @@ -645,15 +653,6 @@ void Socket::shutdown(int how) { check_error(ret, "shutdown socket"); } } -int Socket::discover_mtu(sockaddr_storage const& remote_address) { - Socket s(SOCK_DGRAM); - s.connect(remote_address); -#if defined __APPLE__ && __APPLE__ - return ::get_mtu(s.get_fd()); -#else - return s.get_option(IP_MTU, IPPROTO_IP); -#endif -} // Note: If offsets is NULL, assumes uniform spacing of sizes[0] void Socket::prepare_msgs(size_t npacket, void* header_buf, From e0ab683a0eab9f789658e8789b0f197743bde7b0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Apr 2022 13:20:35 -0600 Subject: [PATCH 0598/1155] Enable Verbs and RDMA support by default. --- configure | 12 ++++++------ configure.ac | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/configure b/configure index 91bc65f0d..1a960651c 100755 --- a/configure +++ b/configure @@ -1519,8 +1519,8 @@ Optional Features: --disable-numa disable numa support (default=no) --disable-hwloc disable hwloc support (default=no) --enable-vma enable vma support (default=no) - --enable-verbs enable Infiniband verbs support (default=no) - --enable-rdma enable RDMA support (default=no) + --disable-verbs disable Infiniband verbs support (default=no) + --diable-rdma disable RDMA support (default=no) --disable-cuda disable cuda support (default=no) --enable-debug enable debugging mode (default=no) --enable-trace enable tracing mode for nvprof/nvvp (default=no) @@ -19294,9 +19294,9 @@ fi # Check whether --enable-verbs was given. if test ${enable_verbs+y} then : - enableval=$enable_verbs; enable_verbs=yes + enableval=$enable_verbs; enable_verbs=no else $as_nop - enable_verbs=no + enable_verbs=yes fi HAVE_VERBS=0 @@ -19353,9 +19353,9 @@ fi # Check whether --enable-rdma was given. if test ${enable_rdma+y} then : - enableval=$enable_rdma; enable_rdma=yes + enableval=$enable_rdma; enable_rdma=no else $as_nop - enable_rdma=no + enable_rdma=yes fi HAVE_RDMA=0 diff --git a/configure.ac b/configure.ac index c51d966ed..e5e6f66b9 100644 --- a/configure.ac +++ b/configure.ac @@ -135,10 +135,10 @@ AS_IF([test x$enable_vma != xno], # AC_ARG_ENABLE([verbs], - AS_HELP_STRING([--enable-verbs], - [enable Infiniband verbs support (default=no)]), - [enable_verbs=yes], - [enable_verbs=no]) + AS_HELP_STRING([--disable-verbs], + [disable Infiniband verbs support (default=no)]), + [enable_verbs=no], + [enable_verbs=yes]) AC_SUBST([HAVE_VERBS], [0]) AS_IF([test x$enable_verbs != xno], [AC_CHECK_LIB([ibverbs], [ibv_query_device], @@ -150,10 +150,10 @@ AS_IF([test x$enable_verbs != xno], # AC_ARG_ENABLE([rdma], - AS_HELP_STRING([--enable-rdma], - [enable RDMA support (default=no)]), - [enable_rdma=yes], - [enable_rdma=no]) + AS_HELP_STRING([--diable-rdma], + [disable RDMA support (default=no)]), + [enable_rdma=no], + [enable_rdma=yes]) AC_SUBST([HAVE_RDMA], [0]) AS_IF([test x$enable_rdma != xno], [AC_CHECK_LIB([rdmacm], [rdma_get_devices], From 2adec8804f7558a4474025d5e8398495d3bcd9be Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Apr 2022 13:23:50 -0600 Subject: [PATCH 0599/1155] Boo. --- src/Socket.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index d42a3fdc3..75d0d320f 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -299,7 +299,7 @@ class Socket { sa_family_t family=AF_UNSPEC); inline static sockaddr_storage any_address(sa_family_t family=AF_UNSPEC); inline static std::string address_string(sockaddr_storage const& addr); - inline static int discover_mtu(sockaddr_storage const& remote_address); + inline static int discover_mtu(sockaddr_storage remote_address); // Server initialisation inline void bind(sockaddr_storage const& local_address, From 5082c87bc85c6a95010674d0fd7c34cf4f8895b2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Apr 2022 09:19:03 -0600 Subject: [PATCH 0600/1155] Also test for C++20/std::string::ends_with support. --- config/endswith.m4 | 34 +++++++++++++++++++ config/filesystem.m4 | 4 +++ configure | 75 +++++++++++++++++++++++++++++++++++++++++ configure.ac | 1 + src/bifrost/config.h.in | 1 + src/fileutils.cpp | 5 ++- 6 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 config/endswith.m4 diff --git a/config/endswith.m4 b/config/endswith.m4 new file mode 100644 index 000000000..1513d56c5 --- /dev/null +++ b/config/endswith.m4 @@ -0,0 +1,34 @@ +AC_DEFUN([AX_CHECK_CXX_ENDS_WITH], +[ + AC_PROVIDE([AX_CHECK_CXX_ENDS_WITH]) + + AC_SUBST([HAVE_CXX_ENDS_WITH], [0]) + + AC_MSG_CHECKING([for a C++ std::string::ends_with support]) + + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #include ]], + [[(std::string("This is a message")).ends_with("suffix")]])], + [AC_SUBST([HAVE_CXX_ENDS_WITH], [1])], + [AC_SUBST([HAVE_CXX_ENDS_WITH], [0])]) + + if test "$HAVE_CXX_ENDS_WITH" = "1"; then + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + #include ]], + [[(std::string("This is a message")).ends_with("suffix")]])], + [AC_SUBST([HAVE_CXX_ENDS_WITH], [1])], + [AC_SUBST([HAVE_CXX_ENDS_WITH], [0])]) + fi + + if test "$HAVE_CXX_ENDS_WITH" = "1"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" +]) diff --git a/config/filesystem.m4 b/config/filesystem.m4 index 7c19a121c..94ab686b0 100644 --- a/config/filesystem.m4 +++ b/config/filesystem.m4 @@ -31,4 +31,8 @@ AC_DEFUN([AX_CHECK_CXX_FILESYSTEM], else AC_MSG_RESULT([no]) fi + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" ]) diff --git a/configure b/configure index 987431a05..1663b86cf 100755 --- a/configure +++ b/configure @@ -737,6 +737,7 @@ HAVE_FLOAT128 HAVE_OPENMP LIBOBJS HAVE_RECVMSG +HAVE_CXX_ENDS_WITH HAVE_CXX_FILESYSTEM HAVE_CXX11 HAVE_CXX14 @@ -19452,6 +19453,80 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "no" >&6; } fi + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + + + + + HAVE_CXX_ENDS_WITH=0 + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a C++ std::string::ends_with support" >&5 +printf %s "checking for a C++ std::string::ends_with support... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include +int +main (void) +{ +(std::string("This is a message")).ends_with("suffix") + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + HAVE_CXX_ENDS_WITH=1 + +else $as_nop + HAVE_CXX_ENDS_WITH=0 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + if test "$HAVE_CXX_ENDS_WITH" = "1"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include +int +main (void) +{ +(std::string("This is a message")).ends_with("suffix") + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + HAVE_CXX_ENDS_WITH=1 + +else $as_nop + HAVE_CXX_ENDS_WITH=0 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + + if test "$HAVE_CXX_ENDS_WITH" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes then : diff --git a/configure.ac b/configure.ac index c57933749..5f4adf237 100644 --- a/configure.ac +++ b/configure.ac @@ -45,6 +45,7 @@ AS_IF([test x$HAVE_CXX17 != x1], AS_IF([test x$HAVE_CXX14 != x1], [AX_CXX_COMPILE_STDCXX(11, noext, mandatory)])]) AX_CHECK_CXX_FILESYSTEM +AX_CHECK_CXX_ENDS_WITH AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([rint]) AC_CHECK_FUNCS([socket]) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 2f7cf9923..c5a532f49 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -55,6 +55,7 @@ extern "C" { // Features #define BF_USE_CXX_FILESYSTEM @HAVE_CXX_FILESYSTEM@ +#define BF_USE_CXX_ENDS_WITH @HAVE_CXX_ENDS_WITH@ #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ #define BF_OPENMP_ENABLED @HAVE_OPENMP@ #define BF_NUMA_ENABLED @HAVE_NUMA@ diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 4727e2270..c9fb81759 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -90,8 +90,7 @@ void remove_file(std::string path) { #endif } -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-function" +#if !BF_USE_CXX_ENDS_WITH // ends_with will be available in C++20; this is suggested as alternative // at https://stackoverflow.com/questions/874134 static bool ends_with (std::string const &fullString, std::string const &ending) { @@ -102,7 +101,7 @@ static bool ends_with (std::string const &fullString, std::string const &ending) return false; } } -#pragma GCC diagnostic pop +#endif void remove_files_with_suffix(std::string dir, std::string suffix) { if(dir.empty()) { From e04cc58cc07aecc65913be81bd2f12986f6d96b7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Apr 2022 09:26:20 -0600 Subject: [PATCH 0601/1155] Move C++ filesystem/std::string::ends_with control out of config.h and into the C++ flags. We don't really need it to be in config.h. --- config/endswith.m4 | 5 +---- config/filesystem.m4 | 9 +-------- configure | 14 ++------------ src/bifrost/config.h.in | 2 -- src/fileutils.cpp | 18 +++++++++--------- 5 files changed, 13 insertions(+), 35 deletions(-) diff --git a/config/endswith.m4 b/config/endswith.m4 index 1513d56c5..36a508347 100644 --- a/config/endswith.m4 +++ b/config/endswith.m4 @@ -24,11 +24,8 @@ AC_DEFUN([AX_CHECK_CXX_ENDS_WITH], if test "$HAVE_CXX_ENDS_WITH" = "1"; then AC_MSG_RESULT([yes]) + CXXFLAGS="$CXXFLAGS -D\"HAVE_CXX_ENDS_WITH=1\"" else AC_MSG_RESULT([no]) fi - - CXXFLAGS="$CXXFLAGS_save" - LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" ]) diff --git a/config/filesystem.m4 b/config/filesystem.m4 index 94ab686b0..19d99097f 100644 --- a/config/filesystem.m4 +++ b/config/filesystem.m4 @@ -6,10 +6,6 @@ AC_DEFUN([AX_CHECK_CXX_FILESYSTEM], AC_MSG_CHECKING([for a C++ std::filesystem support]) - CXXFLAGS_save="$CXXFLAGS" - LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" - AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #include ]], @@ -28,11 +24,8 @@ AC_DEFUN([AX_CHECK_CXX_FILESYSTEM], if test "$HAVE_CXX_FILESYSTEM" = "1"; then AC_MSG_RESULT([yes]) + CXXFLAGS="$CXXFLAGS -D\"HAVE_CXX_FILESYSTEM=1\"" else AC_MSG_RESULT([no]) fi - - CXXFLAGS="$CXXFLAGS_save" - LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" ]) diff --git a/configure b/configure index 1663b86cf..a90c81a24 100755 --- a/configure +++ b/configure @@ -19392,10 +19392,6 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a C++ std::filesystem support" >&5 printf %s "checking for a C++ std::filesystem support... " >&6; } - CXXFLAGS_save="$CXXFLAGS" - LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19448,15 +19444,12 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test "$HAVE_CXX_FILESYSTEM" = "1"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } + CXXFLAGS="$CXXFLAGS -D\"HAVE_CXX_FILESYSTEM=1\"" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi - CXXFLAGS="$CXXFLAGS_save" - LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" - @@ -19518,15 +19511,12 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test "$HAVE_CXX_ENDS_WITH" = "1"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } + CXXFLAGS="$CXXFLAGS -D\"HAVE_CXX_ENDS_WITH=1\"" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi - CXXFLAGS="$CXXFLAGS_save" - LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" - ac_fn_cxx_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes then : diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index c5a532f49..d2909456d 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -54,8 +54,6 @@ extern "C" { #define BF_MAP_KERNEL_DISK_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) // Features -#define BF_USE_CXX_FILESYSTEM @HAVE_CXX_FILESYSTEM@ -#define BF_USE_CXX_ENDS_WITH @HAVE_CXX_ENDS_WITH@ #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ #define BF_OPENMP_ENABLED @HAVE_OPENMP@ #define BF_NUMA_ENABLED @HAVE_NUMA@ diff --git a/src/fileutils.cpp b/src/fileutils.cpp index c9fb81759..8e531ce88 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -29,7 +29,7 @@ #include "fileutils.hpp" #include -#if BF_USE_CXX_FILESYSTEM +#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM #include #endif @@ -47,7 +47,7 @@ std::string get_home_dir(void) { not with data from command line or config files. */ void make_dir(std::string path, int perms) { -#if BF_USE_CXX_FILESYSTEM +#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM std::filesystem::create_directories(path); std::filesystem::permissions(path, (std::filesystem::perms) perms, std::filesystem::perm_options::replace); @@ -60,7 +60,7 @@ void make_dir(std::string path, int perms) { #endif } void remove_files_recursively(std::string path) { -#if BF_USE_CXX_FILESYSTEM +#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM std::filesystem::remove_all(path); #else if( std::system(("rm -rf "+path).c_str()) ) { @@ -69,7 +69,7 @@ void remove_files_recursively(std::string path) { #endif } void remove_dir(std::string path) { -#if BF_USE_CXX_FILESYSTEM +#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM std::filesystem::remove(path); #else if(rmdir(path.c_str()) != 0) { @@ -78,7 +78,7 @@ void remove_dir(std::string path) { #endif } void remove_file(std::string path) { -#if BF_USE_CXX_FILESYSTEM +#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM std::filesystem::remove(path); #else if(unlink(path.c_str()) != 0) { @@ -90,7 +90,7 @@ void remove_file(std::string path) { #endif } -#if !BF_USE_CXX_ENDS_WITH +#if !defined(HAVE_CXX_ENDS_WITH) || !HAVE_CXX_ENDS_WITH // ends_with will be available in C++20; this is suggested as alternative // at https://stackoverflow.com/questions/874134 static bool ends_with (std::string const &fullString, std::string const &ending) { @@ -110,7 +110,7 @@ void remove_files_with_suffix(std::string dir, std::string suffix) { if(suffix.empty()) { throw std::runtime_error("Empty SUFFIX argument"); } -#if BF_USE_CXX_FILESYSTEM +#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM // Iterate through the directory's contents and remove the matches std::filesystem::path path = dir; for(auto const& entry : std::filesystem::directory_iterator{dir}) { @@ -128,7 +128,7 @@ void remove_files_with_suffix(std::string dir, std::string suffix) { } bool file_exists(std::string path) { -#if BF_USE_CXX_FILESYSTEM +#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM return std::filesystem::exists(path); #else struct stat s; @@ -172,7 +172,7 @@ bool process_exists(pid_t pid) { } std::string get_dirname(std::string filename) { -#if BF_USE_CXX_FILESYSTEM +#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM std::filesystem::path path = filename; return (path.parent_path()).string(); #else From 0d7e007c9b5b11b892dde88e6e61a4f6ce303552 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Apr 2022 09:29:32 -0600 Subject: [PATCH 0602/1155] It's Monday. --- src/fileutils.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 8e531ce88..6c0ddbe42 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -29,7 +29,7 @@ #include "fileutils.hpp" #include -#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM +#if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM #include #endif @@ -47,7 +47,7 @@ std::string get_home_dir(void) { not with data from command line or config files. */ void make_dir(std::string path, int perms) { -#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM +#if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM std::filesystem::create_directories(path); std::filesystem::permissions(path, (std::filesystem::perms) perms, std::filesystem::perm_options::replace); @@ -60,7 +60,7 @@ void make_dir(std::string path, int perms) { #endif } void remove_files_recursively(std::string path) { -#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM +#if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM std::filesystem::remove_all(path); #else if( std::system(("rm -rf "+path).c_str()) ) { @@ -69,7 +69,7 @@ void remove_files_recursively(std::string path) { #endif } void remove_dir(std::string path) { -#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM +#if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM std::filesystem::remove(path); #else if(rmdir(path.c_str()) != 0) { @@ -78,7 +78,7 @@ void remove_dir(std::string path) { #endif } void remove_file(std::string path) { -#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM +#if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM std::filesystem::remove(path); #else if(unlink(path.c_str()) != 0) { @@ -110,7 +110,7 @@ void remove_files_with_suffix(std::string dir, std::string suffix) { if(suffix.empty()) { throw std::runtime_error("Empty SUFFIX argument"); } -#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM +#if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM // Iterate through the directory's contents and remove the matches std::filesystem::path path = dir; for(auto const& entry : std::filesystem::directory_iterator{dir}) { @@ -128,7 +128,7 @@ void remove_files_with_suffix(std::string dir, std::string suffix) { } bool file_exists(std::string path) { -#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM +#if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM return std::filesystem::exists(path); #else struct stat s; @@ -172,7 +172,7 @@ bool process_exists(pid_t pid) { } std::string get_dirname(std::string filename) { -#if define(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM +#if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM std::filesystem::path path = filename; return (path.parent_path()).string(); #else From 438dedf8627a7f06c2780fe783bed36fa26113d5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Apr 2022 09:51:18 -0600 Subject: [PATCH 0603/1155] Actually enable testing for C++20 and general cleanup to make configure work again. --- config/cuda.m4 | 26 +- config/endswith.m4 | 2 +- config/filesystem.m4 | 2 +- configure | 994 +++++++++++++++++++++++++++++++++++++++++-- configure.ac | 50 ++- 5 files changed, 1020 insertions(+), 54 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index be1cc4858..4e7b26445 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -16,6 +16,7 @@ AC_DEFUN([AX_CHECK_CUDA], AC_SUBST([HAVE_CUDA], [0]) AC_SUBST([CUDA_VERSION], [0]) + AC_SUBST([CUDA_HAVE_CXX20], [0]) AC_SUBST([CUDA_HAVE_CXX17], [0]) AC_SUBST([CUDA_HAVE_CXX14], [0]) AC_SUBST([CUDA_HAVE_CXX11], [0]) @@ -73,19 +74,24 @@ AC_DEFUN([AX_CHECK_CUDA], AC_MSG_CHECKING([for CUDA CXX standard support]) CUDA_STDCXX=$( ${NVCC} --help | ${GREP} -Po -e "--std.*}" | ${SED} 's/.*|//;s/}//;' ) - if test "$CUDA_STDCXX" = "c++17"; then - AC_MSG_RESULT(C++17) - AC_SUBST([CUDA_HAVE_CXX17], [1]) + if test "$CUDA_STDCXX" = "c++20"; then + AC_MSG_RESULT(C++20) + AC_SUBST([CUDA_HAVE_CXX20], [1]) else - if test "$CUDA_STDCXX" = "c++14"; then - AC_MSG_RESULT(C++14) - AC_SUBST([CUDA_HAVE_CXX14], [1]) + if test "$CUDA_STDCXX" = "c++17"; then + AC_MSG_RESULT(C++17) + AC_SUBST([CUDA_HAVE_CXX17], [1]) else - if test "$CUDA_STDCXX" = "c++11"; then - AC_MSG_RESULT(C++11) - AC_SUBST([CUDA_HAVE_CXX11], [1]) + if test "$CUDA_STDCXX" = "c++14"; then + AC_MSG_RESULT(C++14) + AC_SUBST([CUDA_HAVE_CXX14], [1]) else - AC_MSG_ERROR(nvcc does not support at least C++11) + if test "$CUDA_STDCXX" = "c++11"; then + AC_MSG_RESULT(C++11) + AC_SUBST([CUDA_HAVE_CXX11], [1]) + else + AC_MSG_ERROR(nvcc does not support at least C++11) + fi fi fi fi diff --git a/config/endswith.m4 b/config/endswith.m4 index 36a508347..dfd3c4d40 100644 --- a/config/endswith.m4 +++ b/config/endswith.m4 @@ -24,7 +24,7 @@ AC_DEFUN([AX_CHECK_CXX_ENDS_WITH], if test "$HAVE_CXX_ENDS_WITH" = "1"; then AC_MSG_RESULT([yes]) - CXXFLAGS="$CXXFLAGS -D\"HAVE_CXX_ENDS_WITH=1\"" + CXXFLAGS="-DHAVE_CXX_ENDS_WITH=1 $CXXFLAGS" else AC_MSG_RESULT([no]) fi diff --git a/config/filesystem.m4 b/config/filesystem.m4 index 19d99097f..67ea4f22a 100644 --- a/config/filesystem.m4 +++ b/config/filesystem.m4 @@ -24,7 +24,7 @@ AC_DEFUN([AX_CHECK_CXX_FILESYSTEM], if test "$HAVE_CXX_FILESYSTEM" = "1"; then AC_MSG_RESULT([yes]) - CXXFLAGS="$CXXFLAGS -D\"HAVE_CXX_FILESYSTEM=1\"" + CXXFLAGS="-DHAVE_CXX_FILESYSTEM=1 $CXXFLAGS" else AC_MSG_RESULT([no]) fi diff --git a/configure b/configure index a90c81a24..41c82b657 100755 --- a/configure +++ b/configure @@ -658,6 +658,7 @@ ac_includes_default="\ ac_header_c_list= ac_subst_vars='OPTIONS LTLIBOBJS +STDCXX_IS_SET MAP_KERNEL_STDCXX PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR @@ -727,6 +728,7 @@ GPU_MIN_ARCH CUDA_HAVE_CXX11 CUDA_HAVE_CXX14 CUDA_HAVE_CXX17 +CUDA_HAVE_CXX20 CUDA_VERSION HAVE_CUDA CUDA_HOME @@ -742,6 +744,7 @@ HAVE_CXX_FILESYSTEM HAVE_CXX11 HAVE_CXX14 HAVE_CXX17 +HAVE_CXX20 SO_EXT CTAGS SET_MAKE @@ -17667,7 +17670,897 @@ _ACEOF ;; esac - ax_cxx_compile_alternatives="17 1z" ax_cxx_compile_cxx17_required=false + ax_cxx_compile_alternatives="20" ax_cxx_compile_cxx20_required=false + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + + + + + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx20_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++20 features with $switch" >&5 +printf %s "checking whether $CXX supports C++20 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; + + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture + { + + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + + } + + namespace test_digit_separators + { + + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L + + + + +// If the compiler admits that it is not ready for C++17, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201703L + +#error "This is not a C++17 compiler" + +#else + +#include +#include +#include + +namespace cxx17 +{ + + namespace test_constexpr_lambdas + { + + constexpr int foo = [](){return 42;}(); + + } + + namespace test::nested_namespace::definitions + { + + } + + namespace test_fold_expression + { + + template + int multiply(Args... args) + { + return (args * ... * 1); + } + + template + bool all(Args... args) + { + return (args && ...); + } + + } + + namespace test_extended_static_assert + { + + static_assert (true); + + } + + namespace test_auto_brace_init_list + { + + auto foo = {5}; + auto bar {5}; + + static_assert(std::is_same, decltype(foo)>::value); + static_assert(std::is_same::value); + } + + namespace test_typename_in_template_template_parameter + { + + template typename X> struct D; + + } + + namespace test_fallthrough_nodiscard_maybe_unused_attributes + { + + int f1() + { + return 42; + } + + [[nodiscard]] int f2() + { + [[maybe_unused]] auto unused = f1(); + + switch (f1()) + { + case 17: + f1(); + [[fallthrough]]; + case 42: + f1(); + } + return f1(); + } + + } + + namespace test_extended_aggregate_initialization + { + + struct base1 + { + int b1, b2 = 42; + }; + + struct base2 + { + base2() { + b3 = 42; + } + int b3; + }; + + struct derived : base1, base2 + { + int d; + }; + + derived d1 {{1, 2}, {}, 4}; // full initialization + derived d2 {{}, {}, 4}; // value-initialized bases + + } + + namespace test_general_range_based_for_loop + { + + struct iter + { + int i; + + int& operator* () + { + return i; + } + + const int& operator* () const + { + return i; + } + + iter& operator++() + { + ++i; + return *this; + } + }; + + struct sentinel + { + int i; + }; + + bool operator== (const iter& i, const sentinel& s) + { + return i.i == s.i; + } + + bool operator!= (const iter& i, const sentinel& s) + { + return !(i == s); + } + + struct range + { + iter begin() const + { + return {0}; + } + + sentinel end() const + { + return {5}; + } + }; + + void f() + { + range r {}; + + for (auto i : r) + { + [[maybe_unused]] auto v = i; + } + } + + } + + namespace test_lambda_capture_asterisk_this_by_value + { + + struct t + { + int i; + int foo() + { + return [*this]() + { + return i; + }(); + } + }; + + } + + namespace test_enum_class_construction + { + + enum class byte : unsigned char + {}; + + byte foo {42}; + + } + + namespace test_constexpr_if + { + + template + int f () + { + if constexpr(cond) + { + return 13; + } + else + { + return 42; + } + } + + } + + namespace test_selection_statement_with_initializer + { + + int f() + { + return 13; + } + + int f2() + { + if (auto i = f(); i > 0) + { + return 3; + } + + switch (auto i = f(); i + 4) + { + case 17: + return 2; + + default: + return 1; + } + } + + } + + namespace test_template_argument_deduction_for_class_templates + { + + template + struct pair + { + pair (T1 p1, T2 p2) + : m1 {p1}, + m2 {p2} + {} + + T1 m1; + T2 m2; + }; + + void f() + { + [[maybe_unused]] auto p = pair{13, 42u}; + } + + } + + namespace test_non_type_auto_template_parameters + { + + template + struct B + {}; + + B<5> b1; + B<'a'> b2; + + } + + namespace test_structured_bindings + { + + int arr[2] = { 1, 2 }; + std::pair pr = { 1, 2 }; + + auto f1() -> int(&)[2] + { + return arr; + } + + auto f2() -> std::pair& + { + return pr; + } + + struct S + { + int x1 : 2; + volatile double y1; + }; + + S f3() + { + return {}; + } + + auto [ x1, y1 ] = f1(); + auto& [ xr1, yr1 ] = f1(); + auto [ x2, y2 ] = f2(); + auto& [ xr2, yr2 ] = f2(); + const auto [ x3, y3 ] = f3(); + + } + + namespace test_exception_spec_type_system + { + + struct Good {}; + struct Bad {}; + + void g1() noexcept; + void g2(); + + template + Bad + f(T*, T*); + + template + Good + f(T1*, T2*); + + static_assert (std::is_same_v); + + } + + namespace test_inline_variables + { + + template void f(T) + {} + + template inline T g(T) + { + return T{}; + } + + template<> inline void f<>(int) + {} + + template<> int g<>(int) + { + return 5; + } + + } + +} // namespace cxx17 + +#endif // __cplusplus < 201703L + + + + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 202002L + +#error "This is not a C++20 compiler" + +#else + +#include + +namespace cxx20 +{ + +// As C++20 supports feature test macros in the standard, there is no +// immediate need to actually test for feature availability on the +// Autoconf side. + +} // namespace cxx20 + +#endif // __cplusplus < 202002L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + eval $cachevar=yes +else $as_nop + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx20_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++20 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX20=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++20 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++20 support was found" >&6;} + else + HAVE_CXX20=1 + +printf "%s\n" "#define HAVE_CXX20 1" >>confdefs.h + + fi + + +if test x$HAVE_CXX20 != x1 +then : + ax_cxx_compile_alternatives="17 1z" ax_cxx_compile_cxx17_required=false ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -18529,7 +19422,7 @@ printf "%s\n" "#define HAVE_CXX17 1" >>confdefs.h fi -if test x$HAVE_CXX17 != x1 + if test x$HAVE_CXX17 != x1 then : ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false ac_ext=cpp @@ -19015,7 +19908,7 @@ printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h fi - if test x$HAVE_CXX14 != x1 + if test x$HAVE_CXX14 != x1 then : ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true ac_ext=cpp @@ -19381,6 +20274,7 @@ printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h fi +fi fi fi @@ -19444,7 +20338,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test "$HAVE_CXX_FILESYSTEM" = "1"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - CXXFLAGS="$CXXFLAGS -D\"HAVE_CXX_FILESYSTEM=1\"" + CXXFLAGS="-DHAVE_CXX_FILESYSTEM=1 $CXXFLAGS" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -19511,7 +20405,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test "$HAVE_CXX_ENDS_WITH" = "1"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - CXXFLAGS="$CXXFLAGS -D\"HAVE_CXX_ENDS_WITH=1\"" + CXXFLAGS="-DHAVE_CXX_ENDS_WITH=1 $CXXFLAGS" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -20323,6 +21217,8 @@ fi CUDA_VERSION=0 + CUDA_HAVE_CXX20=0 + CUDA_HAVE_CXX17=0 CUDA_HAVE_CXX14=0 @@ -20561,25 +21457,32 @@ printf "%s\n" "no" >&6; } printf %s "checking for CUDA CXX standard support... " >&6; } CUDA_STDCXX=$( ${NVCC} --help | ${GREP} -Po -e "--std.*}" | ${SED} 's/.*|//;s/}//;' ) - if test "$CUDA_STDCXX" = "c++17"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: C++17" >&5 -printf "%s\n" "C++17" >&6; } - CUDA_HAVE_CXX17=1 + if test "$CUDA_STDCXX" = "c++20"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: C++20" >&5 +printf "%s\n" "C++20" >&6; } + CUDA_HAVE_CXX20=1 else - if test "$CUDA_STDCXX" = "c++14"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: C++14" >&5 -printf "%s\n" "C++14" >&6; } - CUDA_HAVE_CXX14=1 + if test "$CUDA_STDCXX" = "c++17"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: C++17" >&5 +printf "%s\n" "C++17" >&6; } + CUDA_HAVE_CXX17=1 else - if test "$CUDA_STDCXX" = "c++11"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: C++11" >&5 -printf "%s\n" "C++11" >&6; } - CUDA_HAVE_CXX11=1 + if test "$CUDA_STDCXX" = "c++14"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: C++14" >&5 +printf "%s\n" "C++14" >&6; } + CUDA_HAVE_CXX14=1 else - as_fn_error $? "nvcc does not support at least C++11" "$LINENO" 5 + if test "$CUDA_STDCXX" = "c++11"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: C++11" >&5 +printf "%s\n" "C++11" >&6; } + CUDA_HAVE_CXX11=1 + + else + as_fn_error $? "nvcc does not support at least C++11" "$LINENO" 5 + fi fi fi fi @@ -23537,9 +24440,41 @@ PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. '{print $3}'` MAP_KERNEL_STDCXX=c++11 +STDCXX_IS_SET=0 + +if test x$HAVE_CXX20 = x1 +then : + STDCXX_IS_SET=1 + + CXXFLAGS="-std=c++20 $CXXFLAGS" + if test x$CUDA_HAVE_CXX20 = x1 +then : + NVCCFLAGS="-std=c++20 $NVCCFLAGS" + MAP_KERNEL_STDCXX=c++20 + +else $as_nop + if test x$CUDA_HAVE_CXX17 = x1 +then : + NVCCFLAGS="-std=c++17 $NVCCFLAGS" + MAP_KERNEL_STDCXX=c++17 + +else $as_nop + if test x$CUDA_HAVE_CXX14 = x1 +then : + NVCCFLAGS="-std=c++14 $NVCCFLAGS" + MAP_KERNEL_STDCXX=c++14 + +else $as_nop + NVCCFLAGS="-std=c++11 $NVCCFLAGS" +fi +fi +fi +fi if test x$HAVE_CXX17 = x1 then : - CXXFLAGS="-std=c++17 $CXXFLAGS" + STDCXX_IS_SET=1 + + CXXFLAGS="-std=c++17 $CXXFLAGS" if test x$CUDA_HAVE_CXX17 = x1 then : NVCCFLAGS="-std=c++17 $NVCCFLAGS" @@ -23555,22 +24490,27 @@ else $as_nop NVCCFLAGS="-std=c++11 $NVCCFLAGS" fi fi -else $as_nop - if test x$HAVE_CXX14 = x1 +fi +if test x$HAVE_CXX14 = x1 then : - CXXFLAGS="-std=c++14 $CXXFLAGS" - if test x$CUDA_HAVE_CXX14 = x1 + STDCXX_IS_SET=1 + + CXXFLAGS="-std=c++14 $CXXFLAGS" + if test x$CUDA_HAVE_CXX14 = x1 then : NVCCFLAGS="-std=c++14 $NVCCFLAGS" - MAP_KERNEL_STDCXX=c++14 + MAP_KERNEL_STDCXX=c++14 else $as_nop NVCCFLAGS="-std=c++11 $NVCCFLAGS" fi -else $as_nop - CXXFLAGS="-std=c++11 $CXXFLAGS" - NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS" fi +if test x$STDCXX_IS_SET != x1 +then : + STDCXX_IS_SET=1 + + CXXFLAGS="-std=c++11 $CXXFLAGS" + NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS" fi # diff --git a/configure.ac b/configure.ac index 5f4adf237..be2ec51ef 100644 --- a/configure.ac +++ b/configure.ac @@ -39,11 +39,13 @@ AC_SUBST(SO_EXT, $shrext_cmds) # AC_C_INLINE -AX_CXX_COMPILE_STDCXX(17, noext, optional) -AS_IF([test x$HAVE_CXX17 != x1], - [AX_CXX_COMPILE_STDCXX(14, noext, optional) - AS_IF([test x$HAVE_CXX14 != x1], - [AX_CXX_COMPILE_STDCXX(11, noext, mandatory)])]) +AX_CXX_COMPILE_STDCXX(20, noext, optional) +AS_IF([test x$HAVE_CXX20 != x1], + [AX_CXX_COMPILE_STDCXX(17, noext, optional) + AS_IF([test x$HAVE_CXX17 != x1], + [AX_CXX_COMPILE_STDCXX(14, noext, optional) + AS_IF([test x$HAVE_CXX14 != x1], + [AX_CXX_COMPILE_STDCXX(11, noext, mandatory)])])]) AX_CHECK_CXX_FILESYSTEM AX_CHECK_CXX_ENDS_WITH AC_CHECK_FUNCS([memset]) @@ -292,23 +294,41 @@ AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. '{print $3} # AC_SUBST([MAP_KERNEL_STDCXX], [c++11]) +AC_SUBST([STDCXX_IS_SET], [0]) +AS_IF([test x$HAVE_CXX20 = x1], + [AC_SUBST([STDCXX_IS_SET], [1]) + CXXFLAGS="-std=c++20 $CXXFLAGS" + AS_IF([test x$CUDA_HAVE_CXX20 = x1], + [NVCCFLAGS="-std=c++20 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++20])], + [AS_IF([test x$CUDA_HAVE_CXX17 = x1], + [NVCCFLAGS="-std=c++17 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++17])], + [AS_IF([test x$CUDA_HAVE_CXX14 = x1], + [NVCCFLAGS="-std=c++14 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], + [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])])])]) AS_IF([test x$HAVE_CXX17 = x1], - [CXXFLAGS="-std=c++17 $CXXFLAGS" + [AC_SUBST([STDCXX_IS_SET], [1]) + CXXFLAGS="-std=c++17 $CXXFLAGS" AS_IF([test x$CUDA_HAVE_CXX17 = x1], [NVCCFLAGS="-std=c++17 $NVCCFLAGS" AC_SUBST([MAP_KERNEL_STDCXX], [c++17])], [AS_IF([test x$CUDA_HAVE_CXX14 = x1], [NVCCFLAGS="-std=c++14 $NVCCFLAGS" AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], - [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])])], - [AS_IF([test x$HAVE_CXX14 = x1], - [CXXFLAGS="-std=c++14 $CXXFLAGS" - AS_IF([test x$CUDA_HAVE_CXX14 = x1], - [NVCCFLAGS="-std=c++14 $NVCCFLAGS" - AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], - [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])], - [CXXFLAGS="-std=c++11 $CXXFLAGS" - NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS"])]) + [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])])]) +AS_IF([test x$HAVE_CXX14 = x1], + [AC_SUBST([STDCXX_IS_SET], [1]) + CXXFLAGS="-std=c++14 $CXXFLAGS" + AS_IF([test x$CUDA_HAVE_CXX14 = x1], + [NVCCFLAGS="-std=c++14 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], + [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])]) +AS_IF([test x$STDCXX_IS_SET != x1], + [AC_SUBST([STDCXX_IS_SET], [1]) + CXXFLAGS="-std=c++11 $CXXFLAGS" + NVCCFLAGS="-std=c++11 -Xcompiler \"-DTHRUST_IGNORE_DEPRECATED_CPP_DIALECT\" $NVCCFLAGS"]) # # Linking flags From 7ce1ea5115c91b18c03afd2a96aa55942fb32b82 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Apr 2022 10:32:31 -0600 Subject: [PATCH 0604/1155] ends_with() always needs to be there. --- src/fileutils.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 6c0ddbe42..96468cb7e 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -90,10 +90,12 @@ void remove_file(std::string path) { #endif } -#if !defined(HAVE_CXX_ENDS_WITH) || !HAVE_CXX_ENDS_WITH +static bool ends_with (std::string const &fullString, std::string const &ending) { +#if defined(HAVE_CXX_ENDS_WITH) && HAVE_CXX_ENDS_WITH + return fullString.ends_with(ending); +#else // ends_with will be available in C++20; this is suggested as alternative // at https://stackoverflow.com/questions/874134 -static bool ends_with (std::string const &fullString, std::string const &ending) { if (fullString.length() >= ending.length()) { return (0 == fullString.compare(fullString.length() - ending.length(), ending.length(), ending)); From cff438c38e276ba164948d32c001ce2dd029850f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Apr 2022 10:39:02 -0600 Subject: [PATCH 0605/1155] Use std::memcmp() to compare IPv6 addresses. --- src/Socket.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index b91b0b657..3704a5aae 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -185,7 +185,7 @@ inline static int get_mtu(int sockfd) { } } else if( ifa_family == AF_INET6 ) { struct sockaddr_in6* inaddr6 = (struct sockaddr_in6*) ifa->ifa_addr; - if( inaddr6->sin6_addr.s6_addr == addr6->sin6_addr.s6_addr ) { + if( std::memcmp(inaddr6->sin6_addr.s6_addr, addr6->sin6_addr.s6_addr, 16) == 0 ) { found = true; } } From cc4a85ebcd8e5671b96a5aebe621a3f6cbeac912 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Apr 2022 10:41:28 -0600 Subject: [PATCH 0606/1155] Yep, it's Monday. --- src/fileutils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 96468cb7e..e5df72d9a 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -102,8 +102,8 @@ static bool ends_with (std::string const &fullString, std::string const &ending) } else { return false; } -} #endif +} void remove_files_with_suffix(std::string dir, std::string suffix) { if(dir.empty()) { From ba6b1c85155ef6c6fb67225411006be0f1e266bc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Apr 2022 14:52:29 -0600 Subject: [PATCH 0607/1155] Fix variable name. --- python/bifrost/libbifrost.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 6dfa23235..8287502a3 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -170,7 +170,7 @@ def _get(func, *args): def _string2space(s): if s not in STRING2SPACE: raise KeyError("Invalid space '" + str(s) + - "'.\nValid spaces: " + str(list(LUT.keys()))) + "'.\nValid spaces: " + str(list(STRING2SPACE.keys()))) return STRING2SPACE[s] SPACE2STRING = {_bf.BF_SPACE_AUTO: 'auto', From 1b54a023e6e4f2750dd032c1613587befb85be0d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Apr 2022 07:53:15 -0600 Subject: [PATCH 0608/1155] Typo. --- config/endswith.m4 | 2 +- config/filesystem.m4 | 2 +- configure | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/endswith.m4 b/config/endswith.m4 index dfd3c4d40..8550d098d 100644 --- a/config/endswith.m4 +++ b/config/endswith.m4 @@ -4,7 +4,7 @@ AC_DEFUN([AX_CHECK_CXX_ENDS_WITH], AC_SUBST([HAVE_CXX_ENDS_WITH], [0]) - AC_MSG_CHECKING([for a C++ std::string::ends_with support]) + AC_MSG_CHECKING([for C++ std::string::ends_with support]) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ diff --git a/config/filesystem.m4 b/config/filesystem.m4 index 67ea4f22a..31e848646 100644 --- a/config/filesystem.m4 +++ b/config/filesystem.m4 @@ -4,7 +4,7 @@ AC_DEFUN([AX_CHECK_CXX_FILESYSTEM], AC_SUBST([HAVE_CXX_FILESYSTEM], [0]) - AC_MSG_CHECKING([for a C++ std::filesystem support]) + AC_MSG_CHECKING([for C++ std::filesystem support]) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ diff --git a/configure b/configure index 41c82b657..d2c9884de 100755 --- a/configure +++ b/configure @@ -20283,8 +20283,8 @@ fi HAVE_CXX_FILESYSTEM=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a C++ std::filesystem support" >&5 -printf %s "checking for a C++ std::filesystem support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ std::filesystem support" >&5 +printf %s "checking for C++ std::filesystem support... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -20350,8 +20350,8 @@ printf "%s\n" "no" >&6; } HAVE_CXX_ENDS_WITH=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a C++ std::string::ends_with support" >&5 -printf %s "checking for a C++ std::string::ends_with support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ std::string::ends_with support" >&5 +printf %s "checking for C++ std::string::ends_with support... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ From f0ed08040a79c4471dc13741df508f1bdb173b87 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 19 Apr 2022 15:17:31 -0400 Subject: [PATCH 0609/1155] nix: Expose packages built with different gcc/clang versions --- flake.nix | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/flake.nix b/flake.nix index 147c5b5c6..6e7567197 100644 --- a/flake.nix +++ b/flake.nix @@ -57,7 +57,7 @@ + lib.optionalString enableDebug "-debug" + "-${version}"; inherit version; src = ./.; - buildInputs = [ ctags ncurses ] ++ lib.optionals enablePython [ + buildInputs = [ stdenv ctags ncurses ] ++ lib.optionals enablePython [ python3 python3.pkgs.ctypesgen python3.pkgs.setuptools @@ -245,17 +245,38 @@ (name: pkg: isCuda name && lib.elem pkgs.system pkg.meta.platforms) pkgs; + # Which C++ compilers can we build with? How to name them? + eachCxx = f: + lib.concatMap f (with pkgs; [ + stdenv + gcc8Stdenv + gcc9Stdenv + gcc10Stdenv + gcc11Stdenv + clang6Stdenv + clang7Stdenv + clang8Stdenv + clang9Stdenv + clang10Stdenv + ]); + cxxName = stdenv: + lib.optionalString (stdenv != pkgs.stdenv) ("-" + + lib.replaceStrings [ "-wrapper" ] [ "" ] stdenv.cc.pname + + lib.versions.major stdenv.cc.version); + eachBool = f: lib.concatMap f [ true false ]; eachCuda = f: lib.concatMap f ([ null ] ++ lib.attrNames cudaAttrs); eachConfig = f: eachBool (enableDebug: eachCuda (cuda: - f (lib.optionalString (cuda != null) "-${shortenCuda cuda}" - + lib.optionalString enableDebug "-debug") { - inherit enableDebug; - enableCuda = cuda != null; - cudatoolkit = pkgs.${cuda}; - })); + eachCxx (stdenv: + f (cxxName stdenv + + lib.optionalString (cuda != null) "-${shortenCuda cuda}" + + lib.optionalString enableDebug "-debug") { + inherit stdenv enableDebug; + enableCuda = cuda != null; + cudatoolkit = pkgs.${cuda}; + }))); # Runnable ctypesgen per python. Though it's just the executable we # need, it's possible something about ctypes library could change @@ -295,7 +316,7 @@ hooks.yamllint.enable = true; }; - in pkgs.mkShell { + in pkgs.mkShellNoCC { inherit (pre-commit) shellHook; # Tempting to include bifrost-doc.buildInputs here, but that requires From aa9c1e0cd7a23bf1297e9f1d76d2138b17e85152 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 12 Apr 2022 14:56:50 -0400 Subject: [PATCH 0610/1155] My contribution to reducing the build burden? It may be neat that we can ensure it works with different releases of nixpkgs, and survey the horizon of nix-unstable. But any errors that pop up there (but not in pinned) are probably not our issue. Compiling against carefully selected variations of python and C++ might be more productive. --- .github/workflows/nix.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 14b8decbc..796341022 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -10,9 +10,9 @@ jobs: - macos-latest nixpkgs: - pinned - - release-21.11 - - release-21.05 - - nixpkgs-unstable + # - release-21.11 + # - release-21.05 + # - nixpkgs-unstable fail-fast: false runs-on: ${{ matrix.os }} steps: From 54a12f0b14f78604ecb060635918733b328bcb95 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 19 Apr 2022 15:35:41 -0400 Subject: [PATCH 0611/1155] Update nix.yml to build with gcc11 (instead of 10) --- .github/workflows/nix.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 796341022..979f91822 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -44,26 +44,20 @@ jobs: - name: Build for default python3 run: | - nix build --print-build-logs .#bifrost-py3 + nix build --print-build-logs .#bifrost-py3-gcc11 - name: Build with enable-debug for python3, if pinned nixpkgs if: matrix.nixpkgs == 'pinned' run: | nix build --print-build-logs .#bifrost-py3-debug - - name: Build for python38, unless nixpkgs-unstable - # For unstable, 3.8 packages are no longer in the build cache - if: matrix.nixpkgs != 'nixpkgs-unstable' - run: | - nix build --print-build-logs .#bifrost-py38 - - name: Run Python test suite # Skipped during nix build because it needs network data. run: | cd test bash download_test_data.sh - nix run ..#python3-bifrost -- -m bifrost.telemetry --disable - nix run ..#python3-bifrost -- -m unittest discover + nix run ..#python3-bifrost-gcc11 -- -m bifrost.telemetry --disable + nix run ..#python3-bifrost-gcc11 -- -m unittest discover - name: Build documentation run: | From 2f86b8f6cecc660034529de8482a0bdea9ee78f0 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 19 Apr 2022 21:10:59 -0400 Subject: [PATCH 0612/1155] Compiler-dependent bug fix for Socket get_family Both the Linux and BSD man pages for getsockname(2) say: "The addrlen argument should be initialized to indicate the amount of space (in bytes) pointed to by addr." https://man7.org/linux/man-pages/man2/getsockname.2.html https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getsockname.2.html We weren't doing that, so len was uninitialized and you get what you get. On some versions of some compilers we got away with it. We seemed to get away with it more reliably on Linux than on Mac. But when it goes wrong, then get_family doesn't return the right thing. Subsequently, get_mtu can't find the appropriate interface to report on, so it ends up returning 0 and that caused test_address to fail. Booyah! --- src/Socket.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 3704a5aae..04c326363 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -143,7 +143,7 @@ inline static int accept4(int sockfd, inline static sa_family_t get_family(int sockfd) { int ret; sockaddr addr; - socklen_t len; + socklen_t len = sizeof(addr); ret = ::getsockname(sockfd, &addr, &len); if(ret<0) { return AF_UNSPEC; From 49200647115f98f794502afc56e7d016847a4cc5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Apr 2022 19:34:08 -0600 Subject: [PATCH 0613/1155] Make get_family look like get_mtu (see #173; thanks @league). --- src/Socket.hpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 75d0d320f..220f04373 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -143,14 +143,13 @@ inline static int accept4(int sockfd, inline static sa_family_t get_family(int sockfd) { int ret; sockaddr addr; - socklen_t len; - ret = ::getsockname(sockfd, &addr, &len); - if(ret<0) { + socklen_t addr_len = sizeof(addr); + sockaddr_in* addr4 = reinterpret_cast(&addr); + if( ::getsockname(sockfd, (struct sockaddr*)&addr, &addr_len) < 0 ) { return AF_UNSPEC; } - sockaddr_in* sa = reinterpret_cast (&addr); - return sa->sin_family; + return addr4->sin_family; } inline static int get_mtu(int sockfd) { @@ -299,7 +298,7 @@ class Socket { sa_family_t family=AF_UNSPEC); inline static sockaddr_storage any_address(sa_family_t family=AF_UNSPEC); inline static std::string address_string(sockaddr_storage const& addr); - inline static int discover_mtu(sockaddr_storage remote_address); + inline static int discover_mtu(sockaddr_storage const& remote_address); // Server initialisation inline void bind(sockaddr_storage const& local_address, @@ -547,7 +546,7 @@ std::string Socket::address_string(sockaddr_storage const& addr) { default: throw Socket::Error("Invalid address family"); } } -int Socket::discover_mtu(sockaddr_storage remote_address) { +int Socket::discover_mtu(sockaddr_storage const& remote_address) { Socket s(SOCK_DGRAM); s.connect(remote_address); #if defined __APPLE__ && __APPLE__ From 3e2320fc41353f6eee4e1b7e2dd77a2c9d6538ca Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 19 Apr 2022 22:11:48 -0400 Subject: [PATCH 0614/1155] nix: Include compiler name/version in package name E.g., "bifrost-gcc9.3-py3.9-cuda11.4-0.10.0" or "libbifrost-clang10.0-debug-0.10.0" --- flake.nix | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/flake.nix b/flake.nix index 6e7567197..278bd10b9 100644 --- a/flake.nix +++ b/flake.nix @@ -28,6 +28,9 @@ version = "${acVersion}.dev" + lib.optionalString (self ? shortRev) "+g${self.shortRev}"; + compilerName = stdenv: + lib.replaceStrings [ "-wrapper" ] [ "" ] stdenv.cc.pname; + # Can inspect the cuda version to guess at what architectures would be # most useful. Take care not to instatiate the cuda package though, which # would happen if you start inspecting header files or trying to run nvcc. @@ -49,7 +52,8 @@ , enablePython ? true, python3, enableCuda ? false, cudatoolkit , util-linuxMinimal, gpuArchs ? defaultGpuArchs cudatoolkit }: stdenv.mkDerivation { - name = lib.optionalString (!enablePython) "lib" + "bifrost" + name = lib.optionalString (!enablePython) "lib" + "bifrost-" + + compilerName stdenv + lib.versions.majorMinor stdenv.cc.version + lib.optionalString enablePython "-py${lib.versions.majorMinor python3.version}" + lib.optionalString enableCuda @@ -260,9 +264,8 @@ clang10Stdenv ]); cxxName = stdenv: - lib.optionalString (stdenv != pkgs.stdenv) ("-" - + lib.replaceStrings [ "-wrapper" ] [ "" ] stdenv.cc.pname - + lib.versions.major stdenv.cc.version); + lib.optionalString (stdenv != pkgs.stdenv) + ("-" + compilerName stdenv + lib.versions.major stdenv.cc.version); eachBool = f: lib.concatMap f [ true false ]; eachCuda = f: lib.concatMap f ([ null ] ++ lib.attrNames cudaAttrs); From 21225fddf55317cec5d3622905e75ccfb470782d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Apr 2022 07:32:38 -0600 Subject: [PATCH 0615/1155] apt-get update before install. --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 48fe59629..577339e2d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,6 +28,7 @@ jobs: - name: "Software Install - Ubuntu" if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'self-hosted' }} run: | + sudo apt-get update && \ sudo apt-get install -y \ build-essential \ ca-certificates \ From e7942b2b2146fed4abe873d0ceb790cbac231ec7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Apr 2022 14:53:22 -0600 Subject: [PATCH 0616/1155] Only enable ends_with() if we have C++ filesystem support. --- src/fileutils.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index e5df72d9a..58aa6dae1 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -90,6 +90,7 @@ void remove_file(std::string path) { #endif } +#if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM static bool ends_with (std::string const &fullString, std::string const &ending) { #if defined(HAVE_CXX_ENDS_WITH) && HAVE_CXX_ENDS_WITH return fullString.ends_with(ending); @@ -104,6 +105,7 @@ static bool ends_with (std::string const &fullString, std::string const &ending) } #endif } +#endif void remove_files_with_suffix(std::string dir, std::string suffix) { if(dir.empty()) { From a8d8da5b8e79815b8d2f9fef05083658af4229ea Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Apr 2022 15:01:29 -0600 Subject: [PATCH 0617/1155] A few more test cases for ndarray.copy(). --- test/test_ndarray.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index 0eb9755d8..fe9b3c8bb 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -67,6 +67,44 @@ def test_contiguous_copy(self): @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") def test_space_contiguous_copy(self): self.run_contiguous_copy(space='cuda') + def run_slice_copy(self, space='system'): + a = np.random.rand(2,3,4,5) + a = a.astype(np.float64) + b = a[:,1:,:,:].copy() + c = bf.zeros(a.shape, dtype=a.dtype, space='system') + c[...] = a + c = c.copy(space=space) + d = c[:,1:,:,:].copy(space='system') + # Use ctypes to directly access the memory + b_data = ctypes.cast(b.ctypes.data, ctypes.POINTER(ctypes.c_double)) + b_data = np.array([b_data[i] for i in range(b.size)]) + d_data = ctypes.cast(d.ctypes.data, ctypes.POINTER(ctypes.c_double)) + d_data = np.array([d_data[i] for i in range(d.size)]) + np.testing.assert_equal(d_data, b_data) + def test_slice_copy(self): + self.run_slice_copy() + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") + def test_space_slice_copy(self): + self.run_slice_copy(space='cuda') + def run_contiguous_slice_copy(self, space='system'): + a = np.random.rand(2,3,4,5) + a = a.astype(np.float64) + b = a.transpose(0,3,2,1)[:,1:,:,:].copy() + c = bf.zeros(a.shape, dtype=a.dtype, space='system') + c[...] = a + c = c.copy(space=space) + d = c.transpose(0,3,2,1)[:,1:,:,:].copy(space='system') + # Use ctypes to directly access the memory + b_data = ctypes.cast(b.ctypes.data, ctypes.POINTER(ctypes.c_double)) + b_data = np.array([b_data[i] for i in range(b.size)]) + d_data = ctypes.cast(d.ctypes.data, ctypes.POINTER(ctypes.c_double)) + d_data = np.array([d_data[i] for i in range(d.size)]) + np.testing.assert_equal(d_data, b_data) + def test_contiguous_slice_copy(self): + self.run_contiguous_slice_copy() + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") + def test_space_contiguous_slice_copy(self): + self.run_contiguous_slice_copy(space='cuda') def test_view(self): d = bf.ndarray(self.known_vals, dtype='f32') d = d.view(dtype='cf32') From 78baa458e5cc95aed0dc7bf61319c0d6324e725a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 20 Apr 2022 15:51:59 -0600 Subject: [PATCH 0618/1155] Typo. --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 5a989ba65..c9546019f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,7 +4,7 @@ * Added support for configurable, reproducible builds with nix * Added horizontal scrolling for long command names to like_bmon.py * Use std::filesystem for where possible for file and directory management - * Fix a problem in bifrost.ndarray.copy with arrays that are not C contiguous + * Fixed a problem in bifrost.ndarray.copy with arrays that are not C contiguous 0.10.0 * Switched over to an autotools-based build system From 18cef890292e9c9a04e1357a93ecc3a5d68062a2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 21 Apr 2022 15:43:48 -0600 Subject: [PATCH 0619/1155] Try building on both push and pull request to see if that makes codecov happy again. --- .github/workflows/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 577339e2d..cedfa504a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,6 @@ jobs: do_not_skip: '["pull_request", "workflow_dispatch", "schedule"]' build: needs: pre_build - if: ${{ needs.pre_build.outputs.should_skip != 'true' }} runs-on: ${{ matrix.os }} strategy: matrix: From 99b9b33961a06e78792fba0bc822751933172eda Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 21 Apr 2022 16:15:37 -0600 Subject: [PATCH 0620/1155] Turn back on the skipping but send the coverage from ubuntu-latest. --- .github/workflows/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cedfa504a..62e57e535 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,6 +14,7 @@ jobs: do_not_skip: '["pull_request", "workflow_dispatch", "schedule"]' build: needs: pre_build + if: ${{ needs.pre_build.outputs.should_skip != 'true' }} runs-on: ${{ matrix.os }} strategy: matrix: @@ -84,7 +85,7 @@ jobs: coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover coverage xml - name: "Upload Coverage" - if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} + if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == '3.8' }} uses: codecov/codecov-action@v2 with: directory: ./test/ From afeb6ca5c2021936f683be7260551951a6ba30f8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 21 Apr 2022 16:43:39 -0600 Subject: [PATCH 0621/1155] Try uploading from self-hosted again. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 62e57e535..577339e2d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -85,7 +85,7 @@ jobs: coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover coverage xml - name: "Upload Coverage" - if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == '3.8' }} + if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} uses: codecov/codecov-action@v2 with: directory: ./test/ From efdabbbbdadd4f749fc9402902965ff93adfed1a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 21 Apr 2022 18:05:01 -0600 Subject: [PATCH 0622/1155] Remove git from homebrew install. --- .github/workflows/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 577339e2d..8ea7931cf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -46,7 +46,6 @@ jobs: curl \ ctags-exuberant \ gawk \ - git \ gnu-sed \ pkg-config - uses: actions/setup-python@v2 From 42a9aa881315bc538a9442da474ea83368a97c52 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 21 Apr 2022 18:57:41 -0600 Subject: [PATCH 0623/1155] Let's try this for codecov. --- .github/workflows/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8ea7931cf..007ec0d9e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -84,9 +84,10 @@ jobs: coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover coverage xml - name: "Upload Coverage" - if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} + if: ${{ matrix.python-version == '3.8' }} uses: codecov/codecov-action@v2 with: directory: ./test/ + env_vars: OS,PYTHON fail_ci_if_error: false verbose: true From 3dafdc9d3b2c89bd0a19d91ef5e5ed057367e648 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 21 Apr 2022 19:04:41 -0600 Subject: [PATCH 0624/1155] env tweak. --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 007ec0d9e..787da7a91 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,6 +24,8 @@ jobs: - os: macos-latest python-version: 2.7 fail-fast: false + env: + OS: ${{ matrix.os }} steps: - name: "Software Install - Ubuntu" if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'self-hosted' }} @@ -88,6 +90,6 @@ jobs: uses: codecov/codecov-action@v2 with: directory: ./test/ - env_vars: OS,PYTHON + env_vars: OS fail_ci_if_error: false verbose: true From 35d9f702414de9feff2f234a22267f25d90f069c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 21 Apr 2022 19:09:13 -0600 Subject: [PATCH 0625/1155] Move OS around. --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 787da7a91..b9ffdeea5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,8 +24,6 @@ jobs: - os: macos-latest python-version: 2.7 fail-fast: false - env: - OS: ${{ matrix.os }} steps: - name: "Software Install - Ubuntu" if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'self-hosted' }} @@ -86,6 +84,8 @@ jobs: coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover coverage xml - name: "Upload Coverage" + env: + OS: ${{ matrix.os }} if: ${{ matrix.python-version == '3.8' }} uses: codecov/codecov-action@v2 with: From 1e9da60aee91e20cb9c2d4b71268476700aacd44 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 22 Apr 2022 11:20:19 -0400 Subject: [PATCH 0626/1155] What if we only upload to codecov from one OS? Will it then recognize the coverage increase? --- .github/workflows/main.yml | 2 +- flake.nix | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b9ffdeea5..5fb6ca593 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -86,7 +86,7 @@ jobs: - name: "Upload Coverage" env: OS: ${{ matrix.os }} - if: ${{ matrix.python-version == '3.8' }} + if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} uses: codecov/codecov-action@v2 with: directory: ./test/ diff --git a/flake.nix b/flake.nix index 278bd10b9..edeb40fbb 100644 --- a/flake.nix +++ b/flake.nix @@ -317,6 +317,7 @@ hooks.nixfmt.enable = true; hooks.nix-linter.enable = true; hooks.yamllint.enable = true; + hooks.yamllint.excludes = [ ".github/workflows/main.yml" ]; }; in pkgs.mkShellNoCC { From 10c2d679a3aac27a86040bec90bfd239165ea15b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Apr 2022 09:49:42 -0600 Subject: [PATCH 0627/1155] Don't install git with homebrew. --- .github/workflows/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 38d739fe6..86c4334e5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,7 +29,6 @@ jobs: curl \ ctags-exuberant \ gawk \ - git \ gnu-sed \ pkg-config - uses: actions/setup-python@v2 From 53cb1a0af33e7ce4e1ce4b1830a5e5518c0c701f Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 22 Apr 2022 12:26:55 -0400 Subject: [PATCH 0628/1155] Add codecov.yml, attempt to fix source paths from self-hosted Also going to temporarily disable other builds in the matrix so I don't have to wait forever!! --- .github/workflows/main.yml | 4 +- .github/workflows/nix.yml | 90 -------------------------------------- codecov.yml | 3 ++ 3 files changed, 5 insertions(+), 92 deletions(-) delete mode 100644 .github/workflows/nix.yml create mode 100644 codecov.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5fb6ca593..92b9c4d1b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,8 +18,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [self-hosted, ubuntu-latest, macos-latest] - python-version: ['2.7', '3.6', '3.8'] + os: [self-hosted] + python-version: ['3.8'] exclude: - os: macos-latest python-version: 2.7 diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml deleted file mode 100644 index e28efce0c..000000000 --- a/.github/workflows/nix.yml +++ /dev/null @@ -1,90 +0,0 @@ ---- -name: "Nix Build" -"on": [push, pull_request] -jobs: - pre_build: - runs-on: ubuntu-latest - outputs: - should_skip: ${{ steps.skip_check.outputs.should_skip }} - steps: - - id: skip_check - uses: fkirc/skip-duplicate-actions@v3.4.1 - with: - concurrent_skipping: 'same_content' - skip_after_successful_duplicate: 'true' - do_not_skip: '["pull_request", "workflow_dispatch", "schedule"]' - build: - needs: pre_build - if: ${{ needs.pre_build.outputs.should_skip != 'true' }} - strategy: - matrix: - os: - - ubuntu-latest - - macos-latest - nixpkgs: - - pinned - # - release-21.11 - # - release-21.05 - # - nixpkgs-unstable - fail-fast: false - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v2.4.0 - - - name: Install nix - uses: cachix/install-nix-action@v16 - with: - extra_nix_config: | - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} - - - name: Link to bifrost binary cache on cachix.org - uses: cachix/cachix-action@v10 - with: - name: bifrost - authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - - - name: Lock the version of nixpkgs specified by the matrix - run: | - if "${{ matrix.nixpkgs }}" != "pinned"; then - nix flake lock --override-input nixpkgs \ - "nixpkgs/${{ matrix.nixpkgs }}" - fi - nix flake metadata - - - name: Check for well-formed flake - run: | - nix flake check - - - name: Build for default python3 - run: | - nix build --print-build-logs .#bifrost-py3-gcc11 - - - name: Build with enable-debug for python3, if pinned nixpkgs - if: matrix.nixpkgs == 'pinned' - run: | - nix build --print-build-logs .#bifrost-py3-debug - - - name: Run Python test suite - # Skipped during nix build because it needs network data. - run: | - cd test - bash download_test_data.sh - nix run ..#python3-bifrost-gcc11 -- -m bifrost.telemetry --disable - nix run ..#python3-bifrost-gcc11 -- -m unittest discover - - - name: Build documentation - run: | - nix build --print-build-logs --out-link result-doc .#bifrost-doc - - - name: Deploy documentation to gh-pages - uses: JamesIves/github-pages-deploy-action@v4.2.5 - # Maybe only deploy if changes in doc/ folder? (But some doc - # pages generated from code, so should reflect code changes?) - if: | - matrix.os == 'ubuntu-latest' - && matrix.nixpkgs == 'pinned' - && github.event_name == 'push' - && github.ref == 'refs/heads/master' - with: - branch: gh-pages - folder: result-doc/share/doc/bifrost/html diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 000000000..6c5021390 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,3 @@ +# https://docs.codecov.com/docs/fixing-paths +fixes: + - "/home/docker/actions-runner/_work/_tool/Python/3.*/x64/lib/python3.*/site-packages/::python/" From a4be8b52e82389c450a2b4a712fd13e0f31fdf3a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Apr 2022 11:17:40 -0600 Subject: [PATCH 0629/1155] Re-enable the other tests and save some useful coverage information. --- .github/workflows/main.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 92b9c4d1b..60bcc2ebf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,8 +18,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [self-hosted] - python-version: ['3.8'] + os: [self-hosted, ubuntu-latest, macos-latest] + python-version: ['2.7', '3.6', '3.8'] exclude: - os: macos-latest python-version: 2.7 @@ -85,11 +85,12 @@ jobs: coverage xml - name: "Upload Coverage" env: - OS: ${{ matrix.os }} + UNITTEST_OS: ${{ matrix.os }} + UNITTEST_PY: ${{ matrix.python-version }} if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} uses: codecov/codecov-action@v2 with: directory: ./test/ - env_vars: OS + env_vars: UNITTEST_OS,UNITTEST_PY fail_ci_if_error: false verbose: true From 616d221c9978df678a00505bbb5043bd05be7dd2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Apr 2022 12:51:09 -0600 Subject: [PATCH 0630/1155] Update the CHANGELOG. --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index c9546019f..50f4bbc25 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ * Added horizontal scrolling for long command names to like_bmon.py * Use std::filesystem for where possible for file and directory management * Fixed a problem in bifrost.ndarray.copy with arrays that are not C contiguous + * Fixed a problem calling bifrost.reduce on a slice of an array 0.10.0 * Switched over to an autotools-based build system From 3f06628b7596162a82216c6e81d7761103d1fc1b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Apr 2022 14:15:36 -0600 Subject: [PATCH 0631/1155] Started work on re-enabling support for bifrost.ndarray.astype(). --- python/bifrost/ndarray.py | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index aaff6d457..53f5682b2 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -45,7 +45,7 @@ import ctypes import numpy as np from bifrost.memory import raw_malloc, raw_free, raw_get_space, space_accessible -from bifrost.libbifrost import _bf, _check +from bifrost.libbifrost import _bf, _check, _array from bifrost import device from bifrost.DataType import DataType from bifrost.Space import Space @@ -358,13 +358,34 @@ def view(self, dtype=None, type_=None): v.bf.dtype = dtype_bf v._update_BFarray() return v - #def astype(self, dtype): - # dtype_bf = DataType(dtype) - # dtype_np = dtype_bf.as_numpy_dtype() - # # TODO: This segfaults for cuda space; need type conversion support in backend - # a = super(ndarray, self).astype(dtype_np) - # a.bf.dtype = dtype_bf - # return a + def astype(self, dtype): + dtype_bf = DataType(dtype) + dtype_np = dtype_bf.as_numpy_dtype() + if space_accessible(self.bf.space, ['system']): + ## For arrays that can be accessed from the system space, use + ## numpy.ndarray.copy() to do the heavy lifting + if self.bf.space == 'cuda_managed': + ## TODO: Decide where/when these need to be called + device.stream_synchronize() + a = super(ndarray, self).astype(dtype_np) + a.bf.dtype = dtype_bf + else: + a = ndarray(shape=self.shape, dtype=dtype_bf, space=self.bf.space) + if dtype_bf.is_complex: + if self.bf.dtype.is_complex: + func_string = b'a.real = b.real; a.imag = b.imag' + else: + func_string = b'a.real = b; a.imag = 0' + else: + if self.bf.dtype.is_complex: + np.ComplexWarning() + func_string = b'a = b.real' + else: + func_string = b'a = b' + _check(_bf.bfMap(0, _array(None, dtype=ctypes.c_long), _array(None), + 2, _array([a.as_BFarray(), self.as_BFarray()]), _array(['a', 'b']), + None, func_string, None, _array(None), _array(None))) + return a def _system_accessible_copy(self): if space_accessible(self.bf.space, ['system']): return self From 81e43f902a7e59f9b9f33bbeda3458767b539d11 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Apr 2022 14:16:05 -0600 Subject: [PATCH 0632/1155] Start trying out astype(). --- test/test_ndarray.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index fe9b3c8bb..d32e708a8 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -31,6 +31,7 @@ import ctypes from bifrost.libbifrost_generated import BF_CUDA_ENABLED +from bifrost.dtype import split_name_nbit, name_nbit2numpy as dtype_bf2np class NDArrayTest(unittest.TestCase): def setUp(self): @@ -152,3 +153,37 @@ def test_setitem(self): np.testing.assert_equal(g.copy('system'), np.array([[99,88],[2,3],[4,5]])) g[:,1] = [77,66,55] np.testing.assert_equal(g.copy('system'), np.array([[99,77],[2,66],[4,55]])) + def run_type_conversion(self, space='system'): + # Real + a = np.array(self.known_vals, dtype=np.float32) + c = bf.ndarray(a, dtype='f32', space=space) + for dtype in ('i8', 'i16', 'i32', 'i64', 'f64', 'cf64'): + np_dtype = dtype_bf2np(*split_name_nbit(dtype)) + if space == 'cuda': + print(dtype, '->', np_dtype) + b = a.astype(np_dtype) + d = c.astype(dtype) + d = d.copy(space='system') + np.testing.assert_equal(b, d) + + # Complex + a = np.array(self.known_vals, dtype=np.float32) + a = np.stack([a,a[::-1]], axis=0) + a = a.view(np.complex64) + c = bf.ndarray(a, dtype='cf32', space=space) + for dtype in ('ci8', 'ci16', 'ci32', 'cf64', 'i8', 'i16', 'i32', 'i64', 'f64'): + np_dtype = dtype_bf2np(*split_name_nbit(dtype)) + b = a.astype(np_dtype) + d = c.astype(dtype) + d = d.copy(space='system') + if space == 'cuda': + print(dtype, '->', np_dtype) + print(b) + print(d) + np.testing.assert_equal(b, d) + + def test_type_conversion(self): + self.run_type_conversion() + @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") + def test_space_type_conversion(self): + self.run_type_conversion(space='cuda') From 3514350bd00b2f581a9bb6817f7be4b13d47ab09 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Apr 2022 18:16:09 -0600 Subject: [PATCH 0633/1155] Try a cupy wheel. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 60bcc2ebf..7632b90e6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -66,7 +66,7 @@ jobs: - name: "Software Install - Python, part 2" if: ${{ matrix.os == 'self-hosted' && matrix.python-version != '2.7' }} run: python -m pip install \ - cupy \ + cupy-cuda112 \ pycuda - name: "Build and Install" run: | From 298b96c3694d54ec53a5d22255ef9c7df4e76d09 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 26 Apr 2022 09:35:21 -0600 Subject: [PATCH 0634/1155] Fixed a few problems and better test coverage. --- python/bifrost/ndarray.py | 8 +++++- test/test_ndarray.py | 59 ++++++++++++++++++++++----------------- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 53f5682b2..ca52ad333 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -367,7 +367,13 @@ def astype(self, dtype): if self.bf.space == 'cuda_managed': ## TODO: Decide where/when these need to be called device.stream_synchronize() - a = super(ndarray, self).astype(dtype_np) + if dtype_bf.is_complex and dtype_bf.is_integer: + ## Catch for the complex integer types + a = ndarray(shape=self.shape, dtype=dtype_bf) + a['re'] = self.real.astype(dtype_bf.as_real()) + a['im'] = self.imag.astype(dtype_bf.as_real()) + else: + a = super(ndarray, self).astype(dtype_np) a.bf.dtype = dtype_bf else: a = ndarray(shape=self.shape, dtype=dtype_bf, space=self.bf.space) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index d32e708a8..866de215b 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -155,33 +155,40 @@ def test_setitem(self): np.testing.assert_equal(g.copy('system'), np.array([[99,77],[2,66],[4,55]])) def run_type_conversion(self, space='system'): # Real - a = np.array(self.known_vals, dtype=np.float32) - c = bf.ndarray(a, dtype='f32', space=space) - for dtype in ('i8', 'i16', 'i32', 'i64', 'f64', 'cf64'): - np_dtype = dtype_bf2np(*split_name_nbit(dtype)) - if space == 'cuda': - print(dtype, '->', np_dtype) - b = a.astype(np_dtype) - d = c.astype(dtype) - d = d.copy(space='system') - np.testing.assert_equal(b, d) - + for dtype_in in (np.int8, np.int16, np.int32, np.float32, np.float64): + a = np.array(self.known_vals, dtype=dtype_in) + c = bf.ndarray(a, dtype=dtype_in, space=space) + for dtype in ('i8', 'i16', 'i32', 'i64', 'f64', 'ci8', 'ci16', 'ci32', 'cf32', 'cf64'): + np_dtype = dtype_bf2np(*split_name_nbit(dtype)) + try: + ## Catch for the complex integer types + len(np_dtype) + b = np.zeros(a.shape, dtype=np_dtype) + b['re'] = a + except TypeError: + b = a.astype(np_dtype) + d = c.astype(dtype) + d = d.copy(space='system') + np.testing.assert_equal(b, d) # Complex - a = np.array(self.known_vals, dtype=np.float32) - a = np.stack([a,a[::-1]], axis=0) - a = a.view(np.complex64) - c = bf.ndarray(a, dtype='cf32', space=space) - for dtype in ('ci8', 'ci16', 'ci32', 'cf64', 'i8', 'i16', 'i32', 'i64', 'f64'): - np_dtype = dtype_bf2np(*split_name_nbit(dtype)) - b = a.astype(np_dtype) - d = c.astype(dtype) - d = d.copy(space='system') - if space == 'cuda': - print(dtype, '->', np_dtype) - print(b) - print(d) - np.testing.assert_equal(b, d) - + for dtype_in,dtype_in_cmplx in zip((np.float32,np.float64), ('cf32', 'cf64')): + a = np.array(self.known_vals, dtype=dtype_in) + a = np.stack([a,a[::-1]], axis=0) + a = a.view(np.complex64) + c = bf.ndarray(a, dtype=dtype_in_cmplx, space=space) + for dtype in ('ci8', 'ci16', 'ci32', 'cf32', 'cf64', 'i8', 'i16', 'i32', 'i64', 'f64'): + np_dtype = dtype_bf2np(*split_name_nbit(dtype)) + try: + ## Catch for the complex integer types + len(np_dtype) + b = np.zeros(a.shape, dtype=np_dtype) + b['re'] = a.real + b['im'] = a.imag + except TypeError: + b = a.astype(np_dtype) + d = c.astype(dtype) + d = d.copy(space='system') + np.testing.assert_equal(b, d) def test_type_conversion(self): self.run_type_conversion() @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") From a57e699a2c286aa5933b7793975b67c300e6bb4d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 26 Apr 2022 12:32:23 -0600 Subject: [PATCH 0635/1155] Updated for astype(). --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index c9546019f..1bc19cd5c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ * Added horizontal scrolling for long command names to like_bmon.py * Use std::filesystem for where possible for file and directory management * Fixed a problem in bifrost.ndarray.copy with arrays that are not C contiguous + * Added the astype() method to `bifrost.ndarray` 0.10.0 * Switched over to an autotools-based build system From 39526ac478322097c8ab2328ed496104473eadd3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 29 Apr 2022 13:25:47 -0600 Subject: [PATCH 0636/1155] Use bifrost.DataType instead of bifrost.dtype. --- test/test_ndarray.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index 866de215b..21881f62c 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -31,7 +31,7 @@ import ctypes from bifrost.libbifrost_generated import BF_CUDA_ENABLED -from bifrost.dtype import split_name_nbit, name_nbit2numpy as dtype_bf2np +from bifrost.DataType import DataType class NDArrayTest(unittest.TestCase): def setUp(self): @@ -159,7 +159,7 @@ def run_type_conversion(self, space='system'): a = np.array(self.known_vals, dtype=dtype_in) c = bf.ndarray(a, dtype=dtype_in, space=space) for dtype in ('i8', 'i16', 'i32', 'i64', 'f64', 'ci8', 'ci16', 'ci32', 'cf32', 'cf64'): - np_dtype = dtype_bf2np(*split_name_nbit(dtype)) + np_dtype = DataType(dtype).as_numpy_dtype() try: ## Catch for the complex integer types len(np_dtype) @@ -177,7 +177,7 @@ def run_type_conversion(self, space='system'): a = a.view(np.complex64) c = bf.ndarray(a, dtype=dtype_in_cmplx, space=space) for dtype in ('ci8', 'ci16', 'ci32', 'cf32', 'cf64', 'i8', 'i16', 'i32', 'i64', 'f64'): - np_dtype = dtype_bf2np(*split_name_nbit(dtype)) + np_dtype = DataType(dtype).as_numpy_dtype() try: ## Catch for the complex integer types len(np_dtype) From 0bb8c61c5ac81e4c252a97ffd64a4f55123614ef Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 29 Apr 2022 13:31:25 -0600 Subject: [PATCH 0637/1155] Add a catch for IndexError. --- test/test_ndarray.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index 21881f62c..4cfa1cd07 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -165,7 +165,7 @@ def run_type_conversion(self, space='system'): len(np_dtype) b = np.zeros(a.shape, dtype=np_dtype) b['re'] = a - except TypeError: + except (IndexError, TypeError): b = a.astype(np_dtype) d = c.astype(dtype) d = d.copy(space='system') @@ -184,7 +184,7 @@ def run_type_conversion(self, space='system'): b = np.zeros(a.shape, dtype=np_dtype) b['re'] = a.real b['im'] = a.imag - except TypeError: + except (IndexError, TypeError): b = a.astype(np_dtype) d = c.astype(dtype) d = d.copy(space='system') From afd3cabdd9b44a514dc827b209a49be859d9b1bf Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 3 May 2022 15:14:50 -0400 Subject: [PATCH 0638/1155] De-inline Socket.hpp into Socket.cpp Maybe this could be part of #176 ? I think it also, on some compilers, reveals some warnings about using strncpy and memcmp with sockaddr stuff. --- src/Makefile.in | 1 + src/Socket.cpp | 691 ++++++++++++++++++++++++++++++++++++++++++++++ src/Socket.hpp | 710 +++--------------------------------------------- 3 files changed, 733 insertions(+), 669 deletions(-) create mode 100644 src/Socket.cpp diff --git a/src/Makefile.in b/src/Makefile.in index 5ac5189a1..e482eccca 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -36,6 +36,7 @@ LIBBIFROST_OBJS = \ testsuite.o \ ring.o \ ring_impl.o \ + Socket.o \ array.o \ unpack.o \ quantize.o \ diff --git a/src/Socket.cpp b/src/Socket.cpp new file mode 100644 index 000000000..a6ad512ba --- /dev/null +++ b/src/Socket.cpp @@ -0,0 +1,691 @@ +/* -*- indent-tabs-mode:nil -*- + * Copyright (c) 2022, The Bifrost Authors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "Socket.hpp" + +#if defined __APPLE__ && __APPLE__ + +static int accept4(int sockfd, + struct sockaddr *addr, + socklen_t *addrlen, + int flags) { + return ::accept(sockfd, addr, addrlen); +} + +static sa_family_t get_family(int sockfd) { + sockaddr addr; + socklen_t addr_len = sizeof(addr); + sockaddr_in* addr4 = reinterpret_cast(&addr); + if( ::getsockname(sockfd, (struct sockaddr*)&addr, &addr_len) < 0 ) { + return AF_UNSPEC; + } + return addr4->sin_family; +} + +static int get_mtu(int sockfd) { + int mtu = 0; + sa_family_t family = ::get_family(sockfd); + + sockaddr addr; + socklen_t addr_len = sizeof(addr); + sockaddr_in* addr4 = reinterpret_cast (&addr); + sockaddr_in6* addr6 = reinterpret_cast(&addr); + ::getsockname(sockfd, (struct sockaddr*)&addr, &addr_len); + + ifaddrs* ifaddr; + if( ::getifaddrs(&ifaddr) == -1 ) { + return 0; + } + + ifreq ifr; + bool found = false; + for( ifaddrs* ifa=ifaddr; ifa!=NULL; ifa=ifa->ifa_next ) { + if( ifa->ifa_addr == NULL || found) { + continue; + } + sa_family_t ifa_family = ifa->ifa_addr->sa_family; + if( (family == AF_UNSPEC && (ifa_family == AF_INET || + ifa_family == AF_INET6)) || + ifa_family == family ) { + if( ifa_family == AF_INET ) { + struct sockaddr_in* inaddr = (struct sockaddr_in*) ifa->ifa_addr; + if( inaddr->sin_addr.s_addr == addr4->sin_addr.s_addr ) { + found = true; + } + } else if( ifa_family == AF_INET6 ) { + struct sockaddr_in6* inaddr6 = (struct sockaddr_in6*) ifa->ifa_addr; + if( std::memcmp(inaddr6->sin6_addr.s6_addr, addr6->sin6_addr.s6_addr, 16) == 0 ) { + found = true; + } + } + } + + if( found ) { + ::strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name)); + if( ::ioctl(sockfd, SIOCGIFMTU, &ifr) != -1) { + mtu = ifr.ifr_mtu; + } + } + } + ::freeifaddrs(ifaddr); + + return mtu; +} + +// TODO: What about recvmsg_x? +int recvmmsg(int sockfd, + struct mmsghdr *msgvec, + unsigned int vlen, + int flags, + struct timespec *timeout) { + int count = 0; + int recv; + for(int i=0; i 0) { + count++; + } + } + return count; +} + +// TODO: What about sendmsg_x? +int sendmmsg(int sockfd, + struct mmsghdr *msgvec, + unsigned int vlen, + int flags) { + int count = 0; + int sent; + for(int i=0; i (&sas); + sockaddr_in6* sa6 = reinterpret_cast(&sas); + sockaddr_un* saU = reinterpret_cast (&sas); + //if( !addrstr || !std::strlen(addrstr) ) { + if( addrstr.empty() ) { + // No address means "any address" + sas.ss_family = family; + switch( family ) { + case AF_INET: { + sa4->sin_addr.s_addr = htonl(INADDR_ANY); + sa4->sin_port = htons(port); + break; + } + case AF_INET6: { + ::memcpy(&sa6->sin6_addr, &in6addr_any, sizeof(in6addr_any)); + sa4->sin_port = htons(port); + break; + } + case AF_UNIX: // Fall-through + case AF_UNSPEC: // Fall-through + default: break; // Leave as zeroes + } + return sas; + } + if( family == AF_UNIX || port < 0 ) { + // UNIX path + saU->sun_family = AF_UNIX; + std::strncpy(saU->sun_path, addrstr.c_str(), + sizeof(saU->sun_path) - 1); + return sas; + } + if( family == AF_INET || family == AF_UNSPEC ) { + // Try IPv4 address + if( ::inet_pton(AF_INET, addrstr.c_str(), &(sa4->sin_addr)) == 1 ) { + sa4->sin_family = AF_INET; + sa4->sin_port = htons(port); + return sas; + } + } + if( family == AF_INET6 || family == AF_UNSPEC ) { + // Try IPv6 address + if( ::inet_pton(AF_INET6, addrstr.c_str(), &(sa6->sin6_addr)) == 1 ) { + sa6->sin6_family = AF_INET6; + sa6->sin6_port = htons(port); + return sas; + } + } + // Try interface lookup + if( Socket::addr_from_interface(addrstr.c_str(), (sockaddr*)&sas, family) ) { + // Note: Can actually be ip4 or ip6 but the port works the same + sa4->sin_port = htons(port); + return sas; + } + // Try hostname lookup + else if( Socket::addr_from_hostname(addrstr.c_str(), (sockaddr*)&sas, family) ) { + // Note: Can actually be ip4 or ip6 but the port works the same + sa4->sin_port = htons(port); + return sas; + } + else { + throw Socket::Error("Not a valid IP address, interface or hostname"); + } +} + +std::string Socket::address_string(sockaddr_storage const& addr) { + switch( addr.ss_family ) { + case AF_UNIX: { + // WAR for sun_path not always being NULL-terminated + // TODO: Fix this up! + /* + char addr0[sizeof(struct sockaddr_un)+1]; + memset(addr0, 0, sizeof(addr0)); + memcpy(addr0, &addr, sizeof(struct sockaddr_un)); + return std::string(((struct sockaddr_un*)addr0)->sun_path); + */ + return ""; + } + case AF_INET: + case AF_INET6: { + char buffer[INET6_ADDRSTRLEN]; + if( getnameinfo((struct sockaddr*)&addr, sizeof(addr), + buffer, sizeof(buffer), + 0, 0, NI_NUMERICHOST) != 0 ) { + return ""; + } + else { + return std::string(buffer); + } + } + default: throw Socket::Error("Invalid address family"); + } +} + +int Socket::discover_mtu(sockaddr_storage const& remote_address) { + Socket s(SOCK_DGRAM); + s.connect(remote_address); +#if defined __APPLE__ && __APPLE__ + return ::get_mtu(s.get_fd()); +#else + return s.get_option(IP_MTU, IPPROTO_IP); +#endif +} + +void Socket::bind(sockaddr_storage const& local_address, + int max_conn_queue) { + if( _mode != Socket::MODE_CLOSED ) { + throw Socket::Error("Socket is already open"); + } + this->open(local_address.ss_family); + + // Allow binding multiple sockets to one port + // See here for more info: https://lwn.net/Articles/542629/ + // TODO: This must be done before calling ::bind, which is slightly + // awkward with how this method is set up, as the user has + // no way to do it themselves. However, doing it by default + // is probably not a bad idea anyway. +#ifdef SO_REUSEPORT + this->set_option(SO_REUSEPORT, 1); +#else +#warning "Kernel version does not support SO_REUSEPORT; multithreaded send/recv will not be possible" +#endif + + check_error(::bind(_fd, (struct sockaddr*)&local_address, sizeof(local_address)), + "bind socket"); + if( _type == SOCK_STREAM ) { + check_error(::listen(_fd, max_conn_queue), + "set socket to listen"); + _mode = Socket::MODE_LISTENING; + } + else { + _mode = Socket::MODE_BOUND; + } +} + +// TODO: Add timeout support? Bit of a pain to implement. +void Socket::connect(sockaddr_storage const& remote_address) { + bool can_reuse = (_fd != -1 && + _type == SOCK_DGRAM && + (remote_address.ss_family == AF_UNSPEC || + remote_address.ss_family == _family)); + if( !can_reuse ) { + if( _mode != Socket::MODE_CLOSED ) { + throw Socket::Error("Socket is already open"); + } + this->open(remote_address.ss_family); + } + check_error(::connect(_fd, (sockaddr*)&remote_address, sizeof(sockaddr)), + "connect socket"); + if( remote_address.ss_family == AF_UNSPEC ) { + _mode = Socket::MODE_BOUND; + } + else { + _mode = Socket::MODE_CONNECTED; + } +} + +Socket* Socket::accept(double timeout_secs) { + if( _mode != Socket::MODE_LISTENING ) { + throw Socket::Error("Socket is not listening"); + } + sockaddr_storage remote_addr; + int flags = timeout_secs >= 0 ? SOCK_NONBLOCK : 0; + socklen_t addrsize = sizeof(remote_addr); + int ret = ::accept4(_fd, (sockaddr*)&remote_addr, &addrsize, flags); + if( ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK ) ) { + pollfd pfd; + pfd.fd = _fd; + pfd.events = POLLIN | POLLERR | POLLRDNORM; + pfd.revents = 0; + int timeout_ms = int(std::min(timeout_secs*1e3, double(INT_MAX)) + 0.5); + if( poll(&pfd, 1, timeout_ms) == 0 ) { + // Timed out + return 0;//-1; + } + else { + ret = ::accept4(_fd, (sockaddr*)&remote_addr, &addrsize, flags); + if( ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK ) ) { + // Connection dropped before accept completed + return 0;//-1; + } + else { + check_error(ret, "accept incoming connection"); + } + } + } + else { + check_error(ret, "accept incoming connection"); + } + //return ret; // File descriptor for new connected client socket + return Socket::manage(ret); +} + +void Socket::shutdown(int how) { + int ret = ::shutdown(_fd, how); + // WAR for shutdown() returning an error on unconnected DGRAM sockets, even + // though it still successfully unblocks recv calls in other threads, + // which is very useful behaviour. + // Note: In Python, the corresponding exception can be avoided by + // connecting the socket to ("0.0.0.0", 0) first. + if( ret < 0 && errno != EOPNOTSUPP && errno != ENOTCONN ) { + check_error(ret, "shutdown socket"); + } +} + +// Note: If offsets is NULL, assumes uniform spacing of sizes[0] +void Socket::prepare_msgs(size_t npacket, + void* header_buf, + size_t const* header_offsets, + size_t const* header_sizes, + void* payload_buf, + size_t const* payload_offsets, + size_t const* payload_sizes, + sockaddr_storage* packet_addrs) { + mmsghdr hdr0 = {}; + _msgs.resize(npacket, hdr0); + _iovecs.resize(npacket*2); + for( uint64_t m=0; m 0 ) { + timeval timeout; + timeout.tv_sec = (int)timeout_secs; + timeout.tv_usec = (int)((timeout_secs - timeout.tv_sec)*1e6); + setsockopt(_fd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); + } + // TODO: Replacing MSG_WAITFORONE with 0 results in low CPU use instead of 100% + // Probably add an option to the function call + //int flags = (timeout_secs == 0) ? MSG_DONTWAIT : MSG_WAITFORONE; + int flags = (timeout_secs == 0) ? MSG_DONTWAIT : 0; + this->prepare_msgs(npacket, + header_buf, header_offsets, header_sizes, + payload_buf, payload_offsets, payload_sizes, + packet_sources); + ssize_t nmsg = recvmmsg(_fd, &_msgs[0], _msgs.size(), flags, 0);//timeout_ptr); + if( nmsg < 0 && (errno == EAGAIN || errno == EWOULDBLOCK ) ) { + nmsg = 0; + } + else { + check_error(nmsg, "receive messages"); + } + _nrecv_bytes = 0; + if( packet_sizes ) { + for( ssize_t m=0; mcmsg_type == SO_RXQ_OVFL ) { +unsigned* uptr = reinterpret_cast(CMSG_DATA(cmsg)); +_ndropped += *uptr; +break; +} +} +} + */ + return nmsg; +} + +size_t Socket::recv_packet(void* header_buf, + size_t header_size, + void* payload_buf, + size_t payload_size, + size_t* packet_size, + sockaddr_storage* packet_source, + double timeout_secs) { + return this->recv_block(1, + header_buf, 0, &header_size, + payload_buf, 0, &payload_size, + packet_size, + packet_source, + timeout_secs); +} + +size_t Socket::send_block(size_t npacket, + void const* header_buf, + size_t const* header_offsets, + size_t const* header_sizes, + void const* payload_buf, + size_t const* payload_offsets, + size_t const* payload_sizes, + sockaddr_storage const* packet_dests, // Not needed after connect() + double timeout_secs) { + if( !(_mode == Socket::MODE_BOUND || _mode == Socket::MODE_CONNECTED) ) { + throw Socket::Error("Cannot send; not connected or listening"); + } + if( packet_dests && _mode == Socket::MODE_CONNECTED ) { + throw Socket::Error("packet_dests must be NULL for connected sockets"); + } + else if( !packet_dests && _mode == Socket::MODE_BOUND ) { + throw Socket::Error("packet_dests must be specified for bound sockets"); + } + if( timeout_secs > 0 ) { + timeval timeout; + timeout.tv_sec = (int)timeout_secs; + timeout.tv_usec = (int)((timeout_secs - timeout.tv_sec)*1e6); + setsockopt(_fd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); + } + int flags = (timeout_secs == 0) ? MSG_DONTWAIT : 0; + this->prepare_msgs(npacket, + (void*)header_buf, header_offsets, header_sizes, + (void*)payload_buf, payload_offsets, payload_sizes, + (sockaddr_storage*)packet_dests); + ssize_t nmsg = sendmmsg(_fd, &_msgs[0], _msgs.size(), flags); + if( nmsg < 0 && (errno == EAGAIN || errno == EWOULDBLOCK ) ) { + nmsg = 0; + } + else { + check_error(nmsg, "send messages"); + } + return nmsg; +} + +size_t Socket::send_packet(void const* header_buf, + size_t header_size, + void const* payload_buf, + size_t payload_size, + sockaddr_storage const* packet_dest, // Not needed after connect() + double timeout_secs) { + return this->send_block(1, + header_buf, 0, &header_size, + payload_buf, 0, &payload_size, + packet_dest, timeout_secs); +} + +void Socket::open(sa_family_t family) { + this->close(); + _family = family; + check_error(_fd = ::socket(_family, _type, 0), + "create socket"); + this->set_default_options(); +} + +void Socket::set_default_options() { + // Increase socket buffer sizes for efficiency + this->set_option(SO_RCVBUF, DEFAULT_SOCK_BUF_SIZE); + this->set_option(SO_SNDBUF, DEFAULT_SOCK_BUF_SIZE); + struct linger linger_obj; + linger_obj.l_onoff = 1; + linger_obj.l_linger = DEFAULT_LINGER_SECS; + this->set_option(SO_LINGER, linger_obj); + // TODO: Not sure if this feature actually works + //this->set_option(SO_RXQ_OVFL, 1); // Enable dropped packet logging +} + +sockaddr_storage Socket::get_remote_address() /*const*/ { + if( _mode != Socket::MODE_CONNECTED ) { + throw Socket::Error("Not connected"); + } + sockaddr_storage sas; + socklen_t size = sizeof(sas); + check_error(::getpeername(_fd, (sockaddr*)&sas, &size), + "get peer address"); + return sas; +} + +int Socket::get_mtu() /*const*/ { + if( _mode != Socket::MODE_CONNECTED ) { + throw Socket::Error("Not connected"); + } +#if defined __APPLE__ && __APPLE__ + return ::get_mtu(_fd); +#else + return this->get_option(IP_MTU, IPPROTO_IP); +#endif +} + +sockaddr_storage Socket::get_local_address() /*const*/ { + if( _mode != Socket::MODE_CONNECTED && + _mode != Socket::MODE_BOUND ) { + throw Socket::Error("Not bound"); + } + sockaddr_storage sas; + socklen_t size = sizeof(sas); + check_error(::getsockname(_fd, (sockaddr*)&sas, &size), + "get socket address"); + return sas; +} + +void Socket::close() { + if( _fd >= 0 ) { + ::close(_fd); + _fd = -1; + _family = AF_UNSPEC; + _mode = Socket::MODE_CLOSED; + } +} + +// Similar to pton(), copies first found address into *address and returns 1 +// on success, else 0. +int Socket::addr_from_hostname(const char* hostname, + sockaddr* address, + sa_family_t family, + int socktype) { + struct addrinfo hints; + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = family; + hints.ai_socktype = socktype; + hints.ai_flags = 0; // Any + hints.ai_protocol = 0; // Any + struct addrinfo* servinfo; + if( ::getaddrinfo(hostname, 0, &hints, &servinfo) != 0 ) { + return 0; + } + for( struct addrinfo* it=servinfo; it!=NULL; it=it->ai_next ) { + ::memcpy(address, it->ai_addr, it->ai_addrlen); + break; // Return first address + } + ::freeaddrinfo(servinfo); + return 1; +} + +int Socket::addr_from_interface(const char* ifname, + sockaddr* address, + sa_family_t family) { + ifaddrs* ifaddr; + if( ::getifaddrs(&ifaddr) == -1 ) { + return 0; + } + bool found = false; + for( ifaddrs* ifa=ifaddr; ifa!=NULL; ifa=ifa->ifa_next ) { + if( std::strcmp(ifa->ifa_name, ifname) != 0 || + ifa->ifa_addr == NULL ) { + continue; + } + sa_family_t ifa_family = ifa->ifa_addr->sa_family; + if( (family == AF_UNSPEC && (ifa_family == AF_INET || + ifa_family == AF_INET6)) || + ifa_family == family ) { + size_t addr_size = ((ifa_family == AF_INET) ? + sizeof(struct sockaddr_in) : + sizeof(struct sockaddr_in6)); + ::memcpy(address, ifa->ifa_addr, addr_size); + found = true; + break; // Return first match + } + } + ::freeifaddrs(ifaddr); + return found; +} + +void Socket::replace(Socket& s) { + _fd = s._fd; s._fd = -1; + _type = std::move(s._type); + _family = std::move(s._family); + _mode = std::move(s._mode); + _ndropped = std::move(s._ndropped); + _nrecv_bytes = std::move(s._nrecv_bytes); + _msgs = std::move(s._msgs); + _iovecs = std::move(s._iovecs); +} + +void Socket::swap(Socket& s) { + std::swap(_fd, s._fd); + std::swap(_type, s._type); + std::swap(_family, s._family); + std::swap(_mode, s._mode); + std::swap(_ndropped, s._ndropped); + std::swap(_nrecv_bytes, s._nrecv_bytes); + std::swap(_msgs, s._msgs); + std::swap(_iovecs, s._iovecs); +} + +Socket::Socket(int fd, ManageTag ) : _fd(fd) { + _type = this->get_option(SO_TYPE); +#if defined __APPLE__ && __APPLE__ + _family = get_family(fd); +#else + _family = this->get_option(SO_DOMAIN); +#endif + if( this->get_option(SO_ACCEPTCONN) ) { + _mode = Socket::MODE_LISTENING; + } + else { + // Not listening + try { + _mode = Socket::MODE_CONNECTED; + this->get_remote_address(); + } + catch( Socket::Error const& ) { + // Not connected + try { + _mode = Socket::MODE_BOUND; + this->get_local_address(); + } + catch( Socket::Error const& ) { + // Not bound + _mode = Socket::MODE_CLOSED; + } + } + } + this->set_default_options(); +} diff --git a/src/Socket.hpp b/src/Socket.hpp index 324e609e4..11c2328dd 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -124,7 +124,6 @@ client.send/recv_block/packet(...); #include #include #include -//#include #if defined __APPLE__ && __APPLE__ @@ -133,123 +132,31 @@ client.send/recv_block/packet(...); #define SOCK_NONBLOCK O_NONBLOCK -inline static int accept4(int sockfd, - struct sockaddr *addr, - socklen_t *addrlen, - int flags) { - return ::accept(sockfd, addr, addrlen); -} - -inline static sa_family_t get_family(int sockfd) { - int ret; - sockaddr addr; - socklen_t addr_len = sizeof(addr); - sockaddr_in* addr4 = reinterpret_cast(&addr); - if( ::getsockname(sockfd, (struct sockaddr*)&addr, &addr_len) < 0 ) { - return AF_UNSPEC; - } - - return addr4->sin_family; -} - -inline static int get_mtu(int sockfd) { - int mtu = 0; - sa_family_t family = ::get_family(sockfd); - - sockaddr addr; - socklen_t addr_len = sizeof(addr); - sockaddr_in* addr4 = reinterpret_cast (&addr); - sockaddr_in6* addr6 = reinterpret_cast(&addr); - ::getsockname(sockfd, (struct sockaddr*)&addr, &addr_len); - - ifaddrs* ifaddr; - if( ::getifaddrs(&ifaddr) == -1 ) { - return 0; - } - - ifreq ifr; - bool found = false; - for( ifaddrs* ifa=ifaddr; ifa!=NULL; ifa=ifa->ifa_next ) { - if( ifa->ifa_addr == NULL || found) { - continue; - } - sa_family_t ifa_family = ifa->ifa_addr->sa_family; - if( (family == AF_UNSPEC && (ifa_family == AF_INET || - ifa_family == AF_INET6)) || - ifa_family == family ) { - if( ifa_family == AF_INET ) { - struct sockaddr_in* inaddr = (struct sockaddr_in*) ifa->ifa_addr; - if( inaddr->sin_addr.s_addr == addr4->sin_addr.s_addr ) { - found = true; - } - } else if( ifa_family == AF_INET6 ) { - struct sockaddr_in6* inaddr6 = (struct sockaddr_in6*) ifa->ifa_addr; - if( std::memcmp(inaddr6->sin6_addr.s6_addr, addr6->sin6_addr.s6_addr, 16) == 0 ) { - found = true; - } - } - } - - if( found ) { - ::strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name)); - if( ::ioctl(sockfd, SIOCGIFMTU, &ifr) != -1) { - mtu = ifr.ifr_mtu; - } - } - } - ::freeifaddrs(ifaddr); - - return mtu; -} - typedef struct mmsghdr { struct msghdr msg_hdr; /* Message header */ unsigned int msg_len; /* Number of bytes transmitted */ } mmsghdr; -// TODO: What about recvmsg_x? -inline static int recvmmsg(int sockfd, +int recvmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen, int flags, - struct timespec *timeout) { - int count = 0; - int recv; - for(int i=0; i 0) { - count++; - } - } - return count; -} - -// TODO: What about sendmsg_x? -inline static int sendmmsg(int sockfd, + struct timespec *timeout); +int sendmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen, - int flags) { - int count = 0; - int sent; - for(int i=0; iclose(); } // Move semantics - inline Socket(Socket&& s) { this->replace(s); } - inline Socket& operator=(Socket&& s) { this->close(); this->replace(s); return *this; } - inline void swap(Socket& s); + Socket(Socket&& s) { this->replace(s); } + Socket& operator=(Socket&& s) { this->close(); this->replace(s); return *this; } + void swap(Socket& s); // Address generator // Note: Supports UNIX paths, IPv4 and IPv6 addrs, interfaces and hostnames // Passing addr=0 means "any address" // Passing port=-1 implies family=AF_UNIX - inline static sockaddr_storage address(std::string addr, + static sockaddr_storage address(std::string addr, // Note: int so that -1 can be given int port, sa_family_t family=AF_UNSPEC); - inline static sockaddr_storage any_address(sa_family_t family=AF_UNSPEC); - inline static std::string address_string(sockaddr_storage const& addr); - inline static int discover_mtu(sockaddr_storage const& remote_address); + static sockaddr_storage any_address(sa_family_t family=AF_UNSPEC); + static std::string address_string(sockaddr_storage const& addr); + static int discover_mtu(sockaddr_storage const& remote_address); // Server initialisation - inline void bind(sockaddr_storage const& local_address, + void bind(sockaddr_storage const& local_address, int max_conn_queue=DEFAULT_MAX_CONN_QUEUE); // Client initialisation - inline void connect(sockaddr_storage const& remote_address); + void connect(sockaddr_storage const& remote_address); // Accept incoming SOCK_STREAM connection requests // TODO: With C++11 this could return by value (moved), which would be nicer - inline Socket* accept(double timeout_secs=-1); + Socket* accept(double timeout_secs=-1); // Note: This can be used to unblock recv calls from another thread // This behaviour is not explicitly documented, but it works, is // much simpler than having to mess around with select/poll, and // is better than relying on timeouts. // IMHO this should be official behaviour of POSIX shutdown! - inline void shutdown(int how=SHUT_RD); + void shutdown(int how=SHUT_RD); //void shutdown(int how=SHUT_RDWR); - inline void close(); + void close(); // Send/receive // Note: These four methods return the number of packets received/sent - inline size_t recv_block(size_t npacket, // Max for UDP + size_t recv_block(size_t npacket, // Max for UDP void* header_buf, // Can be NULL size_t const* header_offsets, size_t const* header_sizes, @@ -328,7 +235,7 @@ class Socket { size_t* packet_sizes, sockaddr_storage* packet_sources=0, double timeout_secs=-1); - inline size_t recv_packet(void* header_buf, + size_t recv_packet(void* header_buf, size_t header_size, void* payload_buf, size_t payload_size, @@ -336,11 +243,11 @@ class Socket { sockaddr_storage* packet_source=0, double timeout_secs=-1); // No. dropped packets detected during last call to recv_* - inline size_t get_drop_count() const { return _ndropped; } + size_t get_drop_count() const { return _ndropped; } // No. bytes received by last call to recv_* // Note: Only valid if packet_sizes was non-NULL, otherwise returns 0 - inline size_t get_recv_size() const { return _nrecv_bytes; } - inline size_t send_block(size_t npacket, + size_t get_recv_size() const { return _nrecv_bytes; } + size_t send_block(size_t npacket, void const* header_buf, size_t const* header_offsets, size_t const* header_sizes, @@ -349,41 +256,32 @@ class Socket { size_t const* payload_sizes, sockaddr_storage const* packet_dests=0, // Not needed after connect() double timeout_secs=-1); - inline size_t send_packet(void const* header_buf, + size_t send_packet(void const* header_buf, size_t header_size, void const* payload_buf, size_t payload_size, sockaddr_storage const* packet_dest=0, // Not needed after connect() double timeout_secs=-1); - inline sockaddr_storage get_local_address() /*const*/; // check_error is non-const - inline sockaddr_storage get_remote_address() /*const*/; - inline int get_mtu() /*const*/ { - if( _mode != Socket::MODE_CONNECTED ) { - throw Socket::Error("Not connected"); - } -#if defined __APPLE__ && __APPLE__ - return ::get_mtu(_fd); -#else - return this->get_option(IP_MTU, IPPROTO_IP); -#endif - } + sockaddr_storage get_local_address() /*const*/; // check_error is non-const + sockaddr_storage get_remote_address() /*const*/; + int get_mtu() /*const*/; template - inline void set_option(int optname, T value, int level=SOL_SOCKET) { + void set_option(int optname, T value, int level=SOL_SOCKET) { //::setsockopt(_fd, level, optname, &value, sizeof(value)); check_error( ::setsockopt(_fd, level, optname, &value, sizeof(value)), "set socket option" ); } // Note: non-const because check_error closes the socket on failure template - inline T get_option(int optname, int level=SOL_SOCKET) /*const*/ { + T get_option(int optname, int level=SOL_SOCKET) /*const*/ { T value; socklen_t size = sizeof(value); check_error( ::getsockopt(_fd, level, optname, &value, &size), "get socket option"); return value; } - inline int get_fd() const { return _fd; } - inline void set_timeout(double secs) { + int get_fd() const { return _fd; } + void set_timeout(double secs) { if( secs > 0 ) { timeval timeout; timeout.tv_sec = (int)secs; @@ -392,7 +290,7 @@ class Socket { this->set_option(SO_SNDTIMEO, timeout); } } - inline double get_timeout() const { + double get_timeout() const { // WAR for non-const get_option (which is because of close-on-error) Socket* self = const_cast(this); // TODO: This ignores SO_SNDTIMEO @@ -400,9 +298,9 @@ class Socket { return timeout.tv_sec + timeout.tv_usec*1e-6; } private: - inline void open(sa_family_t family); - inline void set_default_options(); - inline void check_error(int retval, std::string what) { + void open(sa_family_t family); + void set_default_options(); + void check_error(int retval, std::string what) { if( retval < 0 ) { if( errno == ENOTCONN ) { this->close(); @@ -413,7 +311,7 @@ class Socket { throw Socket::Error(ss.str()); } } - inline void prepare_msgs(size_t npacket, + void prepare_msgs(size_t npacket, void* header_buf, size_t const* header_offsets, size_t const* header_sizes, @@ -421,11 +319,11 @@ class Socket { size_t const* payload_offsets, size_t const* payload_sizes, sockaddr_storage* packet_addrs); - inline static int addr_from_hostname(const char* hostname, + static int addr_from_hostname(const char* hostname, sockaddr* address, sa_family_t family=AF_UNSPEC, int socktype=0); - inline static int addr_from_interface(const char* ifname, + static int addr_from_interface(const char* ifname, sockaddr* address, sa_family_t family=AF_UNSPEC); int _fd; @@ -444,529 +342,3 @@ class Socket { std::vector _msgs; std::vector _iovecs; }; - -sockaddr_storage Socket::any_address(sa_family_t family) { - //return Socket::address(0, -1, family); - return Socket::address("", 0, family); -} -sockaddr_storage Socket::address(//const char* addrstr, - std::string addrstr, - int port, - sa_family_t family) { - sockaddr_storage sas; - memset(&sas, 0, sizeof(sas)); - sockaddr_in* sa4 = reinterpret_cast (&sas); - sockaddr_in6* sa6 = reinterpret_cast(&sas); - sockaddr_un* saU = reinterpret_cast (&sas); - //if( !addrstr || !std::strlen(addrstr) ) { - if( addrstr.empty() ) { - // No address means "any address" - sas.ss_family = family; - switch( family ) { - case AF_INET: { - sa4->sin_addr.s_addr = htonl(INADDR_ANY); - sa4->sin_port = htons(port); - break; - } - case AF_INET6: { - ::memcpy(&sa6->sin6_addr, &in6addr_any, sizeof(in6addr_any)); - sa4->sin_port = htons(port); - break; - } - case AF_UNIX: // Fall-through - case AF_UNSPEC: // Fall-through - default: break; // Leave as zeroes - } - return sas; - } - if( family == AF_UNIX || port < 0 ) { - // UNIX path - saU->sun_family = AF_UNIX; - std::strncpy(saU->sun_path, addrstr.c_str(), - sizeof(saU->sun_path) - 1); - return sas; - } - if( family == AF_INET || family == AF_UNSPEC ) { - // Try IPv4 address - if( ::inet_pton(AF_INET, addrstr.c_str(), &(sa4->sin_addr)) == 1 ) { - sa4->sin_family = AF_INET; - sa4->sin_port = htons(port); - return sas; - } - } - if( family == AF_INET6 || family == AF_UNSPEC ) { - // Try IPv6 address - if( ::inet_pton(AF_INET6, addrstr.c_str(), &(sa6->sin6_addr)) == 1 ) { - sa6->sin6_family = AF_INET6; - sa6->sin6_port = htons(port); - return sas; - } - } - // Try interface lookup - if( Socket::addr_from_interface(addrstr.c_str(), (sockaddr*)&sas, family) ) { - // Note: Can actually be ip4 or ip6 but the port works the same - sa4->sin_port = htons(port); - return sas; - } - // Try hostname lookup - else if( Socket::addr_from_hostname(addrstr.c_str(), (sockaddr*)&sas, family) ) { - // Note: Can actually be ip4 or ip6 but the port works the same - sa4->sin_port = htons(port); - return sas; - } - else { - throw Socket::Error("Not a valid IP address, interface or hostname"); - } -} -std::string Socket::address_string(sockaddr_storage const& addr) { - switch( addr.ss_family ) { - case AF_UNIX: { - // WAR for sun_path not always being NULL-terminated - // TODO: Fix this up! - /* - char addr0[sizeof(struct sockaddr_un)+1]; - memset(addr0, 0, sizeof(addr0)); - memcpy(addr0, &addr, sizeof(struct sockaddr_un)); - return std::string(((struct sockaddr_un*)addr0)->sun_path); - */ - return ""; - } - case AF_INET: - case AF_INET6: { - char buffer[INET6_ADDRSTRLEN]; - if( getnameinfo((struct sockaddr*)&addr, sizeof(addr), - buffer, sizeof(buffer), - 0, 0, NI_NUMERICHOST) != 0 ) { - return ""; - } - else { - return std::string(buffer); - } - } - default: throw Socket::Error("Invalid address family"); - } -} -int Socket::discover_mtu(sockaddr_storage const& remote_address) { - Socket s(SOCK_DGRAM); - s.connect(remote_address); -#if defined __APPLE__ && __APPLE__ - return ::get_mtu(s.get_fd()); -#else - return s.get_option(IP_MTU, IPPROTO_IP); -#endif -} -void Socket::bind(sockaddr_storage const& local_address, - int max_conn_queue) { - if( _mode != Socket::MODE_CLOSED ) { - throw Socket::Error("Socket is already open"); - } - this->open(local_address.ss_family); - - // Allow binding multiple sockets to one port - // See here for more info: https://lwn.net/Articles/542629/ - // TODO: This must be done before calling ::bind, which is slightly - // awkward with how this method is set up, as the user has - // no way to do it themselves. However, doing it by default - // is probably not a bad idea anyway. -#ifdef SO_REUSEPORT - this->set_option(SO_REUSEPORT, 1); -#else - #warning "Kernel version does not support SO_REUSEPORT; multithreaded send/recv will not be possible" -#endif - - check_error(::bind(_fd, (struct sockaddr*)&local_address, sizeof(local_address)), - "bind socket"); - if( _type == SOCK_STREAM ) { - check_error(::listen(_fd, max_conn_queue), - "set socket to listen"); - _mode = Socket::MODE_LISTENING; - } - else { - _mode = Socket::MODE_BOUND; - } -} -// TODO: Add timeout support? Bit of a pain to implement. -void Socket::connect(sockaddr_storage const& remote_address) { - bool can_reuse = (_fd != -1 && - _type == SOCK_DGRAM && - (remote_address.ss_family == AF_UNSPEC || - remote_address.ss_family == _family)); - if( !can_reuse ) { - if( _mode != Socket::MODE_CLOSED ) { - throw Socket::Error("Socket is already open"); - } - this->open(remote_address.ss_family); - } - check_error(::connect(_fd, (sockaddr*)&remote_address, sizeof(sockaddr)), - "connect socket"); - if( remote_address.ss_family == AF_UNSPEC ) { - _mode = Socket::MODE_BOUND; - } - else { - _mode = Socket::MODE_CONNECTED; - } -} -Socket* Socket::accept(double timeout_secs) { - if( _mode != Socket::MODE_LISTENING ) { - throw Socket::Error("Socket is not listening"); - } - sockaddr_storage remote_addr; - int flags = timeout_secs >= 0 ? SOCK_NONBLOCK : 0; - socklen_t addrsize = sizeof(remote_addr); - int ret = ::accept4(_fd, (sockaddr*)&remote_addr, &addrsize, flags); - if( ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK ) ) { - pollfd pfd; - pfd.fd = _fd; - pfd.events = POLLIN | POLLERR | POLLRDNORM; - pfd.revents = 0; - int timeout_ms = int(std::min(timeout_secs*1e3, double(INT_MAX)) + 0.5); - if( poll(&pfd, 1, timeout_ms) == 0 ) { - // Timed out - return 0;//-1; - } - else { - ret = ::accept4(_fd, (sockaddr*)&remote_addr, &addrsize, flags); - if( ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK ) ) { - // Connection dropped before accept completed - return 0;//-1; - } - else { - check_error(ret, "accept incoming connection"); - } - } - } - else { - check_error(ret, "accept incoming connection"); - } - //return ret; // File descriptor for new connected client socket - return Socket::manage(ret); -} -void Socket::shutdown(int how) { - int ret = ::shutdown(_fd, how); - // WAR for shutdown() returning an error on unconnected DGRAM sockets, even - // though it still successfully unblocks recv calls in other threads, - // which is very useful behaviour. - // Note: In Python, the corresponding exception can be avoided by - // connecting the socket to ("0.0.0.0", 0) first. - if( ret < 0 && errno != EOPNOTSUPP && errno != ENOTCONN ) { - check_error(ret, "shutdown socket"); - } -} -// Note: If offsets is NULL, assumes uniform spacing of sizes[0] -void Socket::prepare_msgs(size_t npacket, - void* header_buf, - size_t const* header_offsets, - size_t const* header_sizes, - void* payload_buf, - size_t const* payload_offsets, - size_t const* payload_sizes, - sockaddr_storage* packet_addrs) { - mmsghdr hdr0 = {}; - _msgs.resize(npacket, hdr0); - _iovecs.resize(npacket*2); - for( uint64_t m=0; m 0 ) { - timeval timeout; - timeout.tv_sec = (int)timeout_secs; - timeout.tv_usec = (int)((timeout_secs - timeout.tv_sec)*1e6); - setsockopt(_fd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); - } - // TODO: Replacing MSG_WAITFORONE with 0 results in low CPU use instead of 100% - // Probably add an option to the function call - //int flags = (timeout_secs == 0) ? MSG_DONTWAIT : MSG_WAITFORONE; - int flags = (timeout_secs == 0) ? MSG_DONTWAIT : 0; - this->prepare_msgs(npacket, - header_buf, header_offsets, header_sizes, - payload_buf, payload_offsets, payload_sizes, - packet_sources); - ssize_t nmsg = recvmmsg(_fd, &_msgs[0], _msgs.size(), flags, 0);//timeout_ptr); - if( nmsg < 0 && (errno == EAGAIN || errno == EWOULDBLOCK ) ) { - nmsg = 0; - } - else { - check_error(nmsg, "receive messages"); - } - _nrecv_bytes = 0; - if( packet_sizes ) { - for( ssize_t m=0; mcmsg_type == SO_RXQ_OVFL ) { - unsigned* uptr = reinterpret_cast(CMSG_DATA(cmsg)); - _ndropped += *uptr; - break; - } - } - } - */ - return nmsg; -} -size_t Socket::recv_packet(void* header_buf, - size_t header_size, - void* payload_buf, - size_t payload_size, - size_t* packet_size, - sockaddr_storage* packet_source, - double timeout_secs) { - return this->recv_block(1, - header_buf, 0, &header_size, - payload_buf, 0, &payload_size, - packet_size, - packet_source, - timeout_secs); -} -size_t Socket::send_block(size_t npacket, - void const* header_buf, - size_t const* header_offsets, - size_t const* header_sizes, - void const* payload_buf, - size_t const* payload_offsets, - size_t const* payload_sizes, - sockaddr_storage const* packet_dests, // Not needed after connect() - double timeout_secs) { - if( !(_mode == Socket::MODE_BOUND || _mode == Socket::MODE_CONNECTED) ) { - throw Socket::Error("Cannot send; not connected or listening"); - } - if( packet_dests && _mode == Socket::MODE_CONNECTED ) { - throw Socket::Error("packet_dests must be NULL for connected sockets"); - } - else if( !packet_dests && _mode == Socket::MODE_BOUND ) { - throw Socket::Error("packet_dests must be specified for bound sockets"); - } - if( timeout_secs > 0 ) { - timeval timeout; - timeout.tv_sec = (int)timeout_secs; - timeout.tv_usec = (int)((timeout_secs - timeout.tv_sec)*1e6); - setsockopt(_fd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); - } - int flags = (timeout_secs == 0) ? MSG_DONTWAIT : 0; - this->prepare_msgs(npacket, - (void*)header_buf, header_offsets, header_sizes, - (void*)payload_buf, payload_offsets, payload_sizes, - (sockaddr_storage*)packet_dests); - ssize_t nmsg = sendmmsg(_fd, &_msgs[0], _msgs.size(), flags); - if( nmsg < 0 && (errno == EAGAIN || errno == EWOULDBLOCK ) ) { - nmsg = 0; - } - else { - check_error(nmsg, "send messages"); - } - return nmsg; -} -size_t Socket::send_packet(void const* header_buf, - size_t header_size, - void const* payload_buf, - size_t payload_size, - sockaddr_storage const* packet_dest, // Not needed after connect() - double timeout_secs) { - return this->send_block(1, - header_buf, 0, &header_size, - payload_buf, 0, &payload_size, - packet_dest, timeout_secs); -} -void Socket::open(sa_family_t family) { - this->close(); - _family = family; - check_error(_fd = ::socket(_family, _type, 0), - "create socket"); - this->set_default_options(); -} -void Socket::set_default_options() { - // Increase socket buffer sizes for efficiency - this->set_option(SO_RCVBUF, DEFAULT_SOCK_BUF_SIZE); - this->set_option(SO_SNDBUF, DEFAULT_SOCK_BUF_SIZE); - struct linger linger_obj; - linger_obj.l_onoff = 1; - linger_obj.l_linger = DEFAULT_LINGER_SECS; - this->set_option(SO_LINGER, linger_obj); - // TODO: Not sure if this feature actually works - //this->set_option(SO_RXQ_OVFL, 1); // Enable dropped packet logging -} -sockaddr_storage Socket::get_remote_address() /*const*/ { - if( _mode != Socket::MODE_CONNECTED ) { - throw Socket::Error("Not connected"); - } - sockaddr_storage sas; - socklen_t size = sizeof(sas); - check_error(::getpeername(_fd, (sockaddr*)&sas, &size), - "get peer address"); - return sas; -} -sockaddr_storage Socket::get_local_address() /*const*/ { - if( _mode != Socket::MODE_CONNECTED && - _mode != Socket::MODE_BOUND ) { - throw Socket::Error("Not bound"); - } - sockaddr_storage sas; - socklen_t size = sizeof(sas); - check_error(::getsockname(_fd, (sockaddr*)&sas, &size), - "get socket address"); - return sas; -} -void Socket::close() { - if( _fd >= 0 ) { - ::close(_fd); - _fd = -1; - _family = AF_UNSPEC; - _mode = Socket::MODE_CLOSED; - } -} -// Similar to pton(), copies first found address into *address and returns 1 -// on success, else 0. -int Socket::addr_from_hostname(const char* hostname, - sockaddr* address, - sa_family_t family, - int socktype) { - struct addrinfo hints; - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = family; - hints.ai_socktype = socktype; - hints.ai_flags = 0; // Any - hints.ai_protocol = 0; // Any - struct addrinfo* servinfo; - if( ::getaddrinfo(hostname, 0, &hints, &servinfo) != 0 ) { - return 0; - } - for( struct addrinfo* it=servinfo; it!=NULL; it=it->ai_next ) { - ::memcpy(address, it->ai_addr, it->ai_addrlen); - break; // Return first address - } - ::freeaddrinfo(servinfo); - return 1; -} -int Socket::addr_from_interface(const char* ifname, - sockaddr* address, - sa_family_t family) { - ifaddrs* ifaddr; - if( ::getifaddrs(&ifaddr) == -1 ) { - return 0; - } - bool found = false; - for( ifaddrs* ifa=ifaddr; ifa!=NULL; ifa=ifa->ifa_next ) { - if( std::strcmp(ifa->ifa_name, ifname) != 0 || - ifa->ifa_addr == NULL ) { - continue; - } - sa_family_t ifa_family = ifa->ifa_addr->sa_family; - if( (family == AF_UNSPEC && (ifa_family == AF_INET || - ifa_family == AF_INET6)) || - ifa_family == family ) { - size_t addr_size = ((ifa_family == AF_INET) ? - sizeof(struct sockaddr_in) : - sizeof(struct sockaddr_in6)); - ::memcpy(address, ifa->ifa_addr, addr_size); - found = true; - break; // Return first match - } - } - ::freeifaddrs(ifaddr); - return found; -} -void Socket::replace(Socket& s) { - _fd = s._fd; s._fd = -1; - _type = std::move(s._type); - _family = std::move(s._family); - _mode = std::move(s._mode); - _ndropped = std::move(s._ndropped); - _nrecv_bytes = std::move(s._nrecv_bytes); - _msgs = std::move(s._msgs); - _iovecs = std::move(s._iovecs); -} -void Socket::swap(Socket& s) { - std::swap(_fd, s._fd); - std::swap(_type, s._type); - std::swap(_family, s._family); - std::swap(_mode, s._mode); - std::swap(_ndropped, s._ndropped); - std::swap(_nrecv_bytes, s._nrecv_bytes); - std::swap(_msgs, s._msgs); - std::swap(_iovecs, s._iovecs); -} -Socket::Socket(int fd, ManageTag ) : _fd(fd) { - _type = this->get_option(SO_TYPE); -#if defined __APPLE__ && __APPLE__ - _family = get_family(fd); -#else - _family = this->get_option(SO_DOMAIN); -#endif - if( this->get_option(SO_ACCEPTCONN) ) { - _mode = Socket::MODE_LISTENING; - } - else { - // Not listening - try { - _mode = Socket::MODE_CONNECTED; - this->get_remote_address(); - } - catch( Socket::Error const& ) { - // Not connected - try { - _mode = Socket::MODE_BOUND; - this->get_local_address(); - } - catch( Socket::Error const& ) { - // Not bound - _mode = Socket::MODE_CLOSED; - } - } - } - this->set_default_options(); -} From 8d1812418c335d1f97aaf9e4b52c619d17462c3b Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 3 May 2022 20:08:40 -0400 Subject: [PATCH 0639/1155] Resolve potential issue w/strncpy on ifr_name This is a Mac-only function, but gcc gave this warning: ``` Socket.cpp:89:16: warning: 'char* strncpy(char*, const char*, size_t)' specified bound 16 equals destination size [ https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wstringop-truncation -Wstringop-truncation] 89 | ::strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name)); ``` and I found code elsewhere that uses IFNAMSIZ-1 in strncpy and then manually places the NUL char at IFNAMSIZ-1. That seems safer in the (sure to be rare) case that length reaches maximum. --- src/Socket.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Socket.cpp b/src/Socket.cpp index a6ad512ba..694afd8c2 100644 --- a/src/Socket.cpp +++ b/src/Socket.cpp @@ -86,7 +86,8 @@ static int get_mtu(int sockfd) { } if( found ) { - ::strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name)); + ::strncpy(ifr.ifr_name, ifa->ifa_name, IFNAMSIZ-1); + ifr.ifr_name[IFNAMSIZ-1] = '\0'; if( ::ioctl(sockfd, SIOCGIFMTU, &ifr) != -1) { mtu = ifr.ifr_mtu; } From 43d8d6afb7e2d59d5b5a8b85f03fb9cf6c7fd592 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 3 May 2022 20:22:04 -0400 Subject: [PATCH 0640/1155] Resolve potential IPV6 memcmp issue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Again, Mac-only code... but gcc warned: ``` Socket.cpp: In function ‘int get_mtu(int)’: Socket.cpp:82:24: warning: ‘int __builtin_memcmp_eq(const void*, const void*, long unsigned int)’ reading 16 bytes from a region of size 8 [-Wstringop-overflow=] 82 | if( std::memcmp(inaddr6->sin6_addr.s6_addr, addr6->sin6_addr.s6_addr, 16) == 0 ) ``` So I wondered, why would it be that addr6's s6_addr is only size 8? Well addr6 is a reinterpret cast of addr which is a plain sockaddr struct declared locally. I take it the way to ensure there's enough space is to use sockaddr_storage here, and that fixed the warning. --- src/Socket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Socket.cpp b/src/Socket.cpp index 694afd8c2..bea981af0 100644 --- a/src/Socket.cpp +++ b/src/Socket.cpp @@ -51,7 +51,7 @@ static int get_mtu(int sockfd) { int mtu = 0; sa_family_t family = ::get_family(sockfd); - sockaddr addr; + sockaddr_storage addr; socklen_t addr_len = sizeof(addr); sockaddr_in* addr4 = reinterpret_cast (&addr); sockaddr_in6* addr6 = reinterpret_cast(&addr); From cd3e1027ea08884bd4b0e8c79b56bf21cb50f139 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 3 May 2022 20:28:29 -0400 Subject: [PATCH 0641/1155] Fix a couple sign-compare warnings in socket code --- src/Socket.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Socket.cpp b/src/Socket.cpp index bea981af0..4b417e854 100644 --- a/src/Socket.cpp +++ b/src/Socket.cpp @@ -106,7 +106,7 @@ int recvmmsg(int sockfd, struct timespec *timeout) { int count = 0; int recv; - for(int i=0; i 0) { count++; @@ -122,7 +122,7 @@ int sendmmsg(int sockfd, int flags) { int count = 0; int sent; - for(int i=0; i Date: Thu, 5 May 2022 16:22:15 -0600 Subject: [PATCH 0642/1155] Try github actions for regularly scheduled testing. --- tutorial/.github/workflows/main.yml | 57 +++++++++++++++++++++++++++++ tutorial/test/jenkins.sh | 3 -- 2 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 tutorial/.github/workflows/main.yml delete mode 100755 tutorial/test/jenkins.sh diff --git a/tutorial/.github/workflows/main.yml b/tutorial/.github/workflows/main.yml new file mode 100644 index 000000000..2dab99ab8 --- /dev/null +++ b/tutorial/.github/workflows/main.yml @@ -0,0 +1,57 @@ +name: Test +on: + push: + pull_request: + schedule: + - cron: '30 5 4 * *' + +jobs: + build: + runs-on: self-hosted + strategy: + matrix: + python-version: ['2.7', '3.6', '3.8'] + fail-fast: false + steps: + - name: "Software Install - Ubuntu" + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + sudo apt-get install -y \ + build-essential \ + ca-certificates \ + curl \ + exuberant-ctags \ + gfortran \ + git \ + libopenblas-dev \ + pkg-config \ + software-properties-common + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - uses: actions/checkout@v2 + - name: "Software Install - Python" + run: python -m pip install \ + setuptools \ + numpy \ + matplotlib \ + contextlib2 \ + simplejson \ + pint \ + graphviz \ + ctypesgen==1.0.2 + - name: "Software Install - Bifrost" + run: | + git clone https://github.com/ledatelescope/bifrost + cd bifrost + ./configure + make -j all + sudo make install + cd .. + - name: Test + env: + LD_LIBRARY_PATH: /usr/local/lib:${LD_LIBRARY_PATH} + run: | + python -m pip install scipy + cd test + python -m unittest discover diff --git a/tutorial/test/jenkins.sh b/tutorial/test/jenkins.sh deleted file mode 100755 index 031a40d93..000000000 --- a/tutorial/test/jenkins.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# This file runs CPU and GPU tests for jenkins -python -m unittest test_notebooks From f0c11e7c2d6757d029e397ccaa78c7a24fba16bc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 6 May 2022 06:39:48 -0600 Subject: [PATCH 0643/1155] There is only one OS option. --- tutorial/.github/workflows/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/tutorial/.github/workflows/main.yml b/tutorial/.github/workflows/main.yml index 2dab99ab8..5a9bb8781 100644 --- a/tutorial/.github/workflows/main.yml +++ b/tutorial/.github/workflows/main.yml @@ -14,7 +14,6 @@ jobs: fail-fast: false steps: - name: "Software Install - Ubuntu" - if: ${{ matrix.os == 'ubuntu-latest' }} run: | sudo apt-get install -y \ build-essential \ From cca3a6c8a16899b14f48436412bcf9e57dcf35e0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 6 May 2022 06:41:42 -0600 Subject: [PATCH 0644/1155] Update before trying to install software. --- tutorial/.github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tutorial/.github/workflows/main.yml b/tutorial/.github/workflows/main.yml index 5a9bb8781..a458a2f71 100644 --- a/tutorial/.github/workflows/main.yml +++ b/tutorial/.github/workflows/main.yml @@ -15,6 +15,7 @@ jobs: steps: - name: "Software Install - Ubuntu" run: | + sudo apt-get update sudo apt-get install -y \ build-essential \ ca-certificates \ From 166c916bf4548d794ee55622f85eef3ca994aebb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 6 May 2022 06:51:25 -0600 Subject: [PATCH 0645/1155] LD_LIBRARY_PATH fix. --- tutorial/.github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorial/.github/workflows/main.yml b/tutorial/.github/workflows/main.yml index a458a2f71..48df79402 100644 --- a/tutorial/.github/workflows/main.yml +++ b/tutorial/.github/workflows/main.yml @@ -50,7 +50,7 @@ jobs: cd .. - name: Test env: - LD_LIBRARY_PATH: /usr/local/lib:${LD_LIBRARY_PATH} + LD_LIBRARY_PATH: /usr/local/lib:${{ env.LD_LIBRARY_PATH }} run: | python -m pip install scipy cd test From 7e38dfc090bf364706a84d9d8081925c51245c94 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 6 May 2022 06:57:15 -0600 Subject: [PATCH 0646/1155] Add in all of the jupyter stuff needed to test the notebooks. --- tutorial/.github/workflows/main.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tutorial/.github/workflows/main.yml b/tutorial/.github/workflows/main.yml index 48df79402..0e6125d53 100644 --- a/tutorial/.github/workflows/main.yml +++ b/tutorial/.github/workflows/main.yml @@ -39,7 +39,11 @@ jobs: simplejson \ pint \ graphviz \ - ctypesgen==1.0.2 + ctypesgen==1.0.2 \ + jupyterlab \ + jupyter_client \ + nbformat \ + nbconvert - name: "Software Install - Bifrost" run: | git clone https://github.com/ledatelescope/bifrost From 3789b65afb55d9c9f7a465db9cb0cd492bc9e996 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 6 May 2022 07:18:21 -0600 Subject: [PATCH 0647/1155] Also install numba. --- tutorial/.github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tutorial/.github/workflows/main.yml b/tutorial/.github/workflows/main.yml index 0e6125d53..faa465fc7 100644 --- a/tutorial/.github/workflows/main.yml +++ b/tutorial/.github/workflows/main.yml @@ -40,6 +40,7 @@ jobs: pint \ graphviz \ ctypesgen==1.0.2 \ + numba \ jupyterlab \ jupyter_client \ nbformat \ From 4f5a1977e969b112f48341f1323724b08a5b00ff Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 6 May 2022 07:29:02 -0600 Subject: [PATCH 0648/1155] bifrost.transpose.transpose -> bifrost.transpose --- tutorial/01_useful_functions.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorial/01_useful_functions.ipynb b/tutorial/01_useful_functions.ipynb index 5f7a2f3f0..ea509d931 100644 --- a/tutorial/01_useful_functions.ipynb +++ b/tutorial/01_useful_functions.ipynb @@ -148,7 +148,7 @@ "id": "85537a6d", "metadata": {}, "source": [ - "## bifrost.transpose.transpose\n", + "## bifrost.transpose\n", "\n", "For some data processing it may be more convenient to have the axis in a different order. To transpose a GPU array in Bifrost there is the `bifrost.transpose` function:" ] @@ -177,7 +177,7 @@ "data = bifrost.ndarray(data, space='cuda')\n", "tdata = bifrost.ndarray(shape=data.shape[::-1], dtype=data.dtype,\n", " space='cuda')\n", - "bifrost.transpose.transpose(tdata, data, axes=(1,0))\n", + "bifrost.transpose(tdata, data, axes=(1,0))\n", "data2 = data.copy(space='system')\n", "tdata2 = tdata.copy(space='system')\n", "print('bifrost:', data2[0,9], '->', tdata2[9,0])" @@ -188,7 +188,7 @@ "id": "bf2d856f", "metadata": {}, "source": [ - "Unlike `bifrost.reduce`, `bifrost.transpose.transpose` requires you to have both an output array with the correct shape and to explicitly specify the axis ordering in the call.\n", + "Unlike `bifrost.reduce`, `bifrost.transpose` requires you to have both an output array with the correct shape and to explicitly specify the axis ordering in the call.\n", "\n", "This function also support for general data re-ordering operations as well:" ] @@ -217,7 +217,7 @@ "data = bifrost.ndarray(data, space='cuda')\n", "tdata = bifrost.ndarray(shape=[data.shape[v] for v in (1,3,2,0)],\n", " dtype=data.dtype, space='cuda')\n", - "bifrost.transpose.transpose(tdata, data, axes=(1,3,2,0))\n", + "bifrost.transpose(tdata, data, axes=(1,3,2,0))\n", "data2 = data.copy(space='system')\n", "tdata2 = tdata.copy(space='system')\n", "print('bifrost:', data2[1,3,5,7], '->', tdata2[3,7,5,1])" From 00e5b4fa374ae238c9a35e3f67eb06808d87b640 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 6 May 2022 07:37:48 -0600 Subject: [PATCH 0649/1155] Drop testing on Python2.7. --- tutorial/.github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorial/.github/workflows/main.yml b/tutorial/.github/workflows/main.yml index faa465fc7..b9ae1a808 100644 --- a/tutorial/.github/workflows/main.yml +++ b/tutorial/.github/workflows/main.yml @@ -10,7 +10,7 @@ jobs: runs-on: self-hosted strategy: matrix: - python-version: ['2.7', '3.6', '3.8'] + python-version: ['3.6', '3.8'] fail-fast: false steps: - name: "Software Install - Ubuntu" From eb5a8c5290b1f13eccaa76f223894a981be2914d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 6 May 2022 08:00:25 -0600 Subject: [PATCH 0650/1155] All the builds are with github actions now. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fff2b0e9d..190d3b1cd 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Bifrost -| **`CPU Build`** | **`GPU Build`** | **`Coverage`** | -|-----------------|-----------------|----------------| -|[![GHA](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml/badge.svg)](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml) | [![Build Status](https://fornax.phys.unm.edu/jenkins/buildStatus/icon?job=Bifrost)](https://fornax.phys.unm.edu/jenkins/job/Bifrost/) | [![Coverage Status](https://codecov.io/gh/ledatelescope/bifrost/branch/master/graph/badge.svg?token=f3ge1zWe5P)](https://codecov.io/gh/ledatelescope/bifrost) | +| **`CPU/GPU Build`** | **`Coverage`** | +|-----------------|----------------| +|[![GHA](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml/badge.svg)](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml) | [![Coverage Status](https://codecov.io/gh/ledatelescope/bifrost/branch/master/graph/badge.svg?token=f3ge1zWe5P)](https://codecov.io/gh/ledatelescope/bifrost) | A stream processing framework for high-throughput applications. From 9a14750f02ec1a68a445c74a4ba1fcc6afd554e8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 May 2022 10:28:17 -0600 Subject: [PATCH 0651/1155] Try to integrate the tutorial tets into the main test suite. --- .github/workflows/main.yml | 7 ++++++- {tutorial/test => test}/test_notebooks.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) rename {tutorial/test => test}/test_notebooks.py (99%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 60bcc2ebf..eefd63813 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -67,7 +67,12 @@ jobs: if: ${{ matrix.os == 'self-hosted' && matrix.python-version != '2.7' }} run: python -m pip install \ cupy \ - pycuda + pycuda \ + numba \ + jupyterlab \ + jupyter_client \ + nbformat \ + nbconvert - name: "Build and Install" run: | ./configure diff --git a/tutorial/test/test_notebooks.py b/test/test_notebooks.py similarity index 99% rename from tutorial/test/test_notebooks.py rename to test/test_notebooks.py index 6f2bd97ed..3a35a94b4 100644 --- a/tutorial/test/test_notebooks.py +++ b/test/test_notebooks.py @@ -109,7 +109,7 @@ def test(self): return test -_NOTEBOOKS = glob.glob(os.path.join(os.path.dirname(__file__), '..', '*.ipynb')) +_NOTEBOOKS = glob.glob(os.path.join(os.path.dirname(__file__), '..', 'tutorial', '*.ipynb')) _NOTEBOOKS.sort() for notebook in _NOTEBOOKS: test = _test_generator(notebook) From 2c3aab4f212e392c358e9e76981e7173e1827fbf Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 May 2022 10:29:28 -0600 Subject: [PATCH 0652/1155] Skip the data capture notebook for now. --- test/test_notebooks.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test_notebooks.py b/test/test_notebooks.py index 3a35a94b4..902543268 100644 --- a/test/test_notebooks.py +++ b/test/test_notebooks.py @@ -112,6 +112,9 @@ def test(self): _NOTEBOOKS = glob.glob(os.path.join(os.path.dirname(__file__), '..', 'tutorial', '*.ipynb')) _NOTEBOOKS.sort() for notebook in _NOTEBOOKS: + if notebook.startswith('06_'): + # Skip this for now + continue test = _test_generator(notebook) name = 'test_%s' % os.path.splitext(os.path.basename(notebook))[0].replace(' ', '_') doc = """Execution of the '%s' notebook.""" % os.path.basename(notebook) From 7fe331633cea3bc0ee5640ffcc17e001c2318064 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 May 2022 10:29:49 -0600 Subject: [PATCH 0653/1155] Rename. --- test/{test_notebooks.py => test_tutorial.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{test_notebooks.py => test_tutorial.py} (100%) diff --git a/test/test_notebooks.py b/test/test_tutorial.py similarity index 100% rename from test/test_notebooks.py rename to test/test_tutorial.py From 96a15d0f78e763689ebff25b989ea31ef7892fb9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 May 2022 10:33:15 -0600 Subject: [PATCH 0654/1155] notebooks -> tutorial --- test/test_tutorial.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/test_tutorial.py b/test/test_tutorial.py index 902543268..24fbcfecb 100644 --- a/test/test_tutorial.py +++ b/test/test_tutorial.py @@ -17,12 +17,12 @@ from shutil import rmtree -run_notebooks_tests = False +run_tutorial_tests = False try: import jupyter_client import nbformat from nbconvert.preprocessors import ExecutePreprocessor - run_notebooks_tests = True + run_tutorial_tests = True except ImportError: pass @@ -45,7 +45,7 @@ def run_notebook(notebook_path, run_path=None, kernel_name=None): cleanup = False if run_path is None: - run_path = mkdtemp(prefix='test-notebooks-', suffix='.tmp') + run_path = mkdtemp(prefix='test-tutorial-', suffix='.tmp') cleanup = True proc = ExecutePreprocessor(timeout=600, kernel_name=kernel_name) @@ -72,8 +72,8 @@ def run_notebook(notebook_path, run_path=None, kernel_name=None): return nb, errors -@unittest.skipUnless(run_notebooks_tests, "requires the 'nbformat' and 'nbconvert' modules") -class notebooks_tests(unittest.TestCase): +@unittest.skipUnless(run_tutorial_tests, "requires the 'nbformat' and 'nbconvert' modules") +class tutorial_tests(unittest.TestCase): """A unittest.TestCase collection of unit tests for the Bifrost tutorial notebooks.""" def setUp(self): @@ -119,10 +119,10 @@ def test(self): name = 'test_%s' % os.path.splitext(os.path.basename(notebook))[0].replace(' ', '_') doc = """Execution of the '%s' notebook.""" % os.path.basename(notebook) setattr(test, '__doc__', doc) - setattr(notebooks_tests, name, test) + setattr(tutorial_tests, name, test) -class notebooks_test_suite(unittest.TestSuite): +class tutorial_test_suite(unittest.TestSuite): """A unittest.TestSuite class which contains all of the Bifrost tutorial notebook tests.""" @@ -130,7 +130,7 @@ def __init__(self): unittest.TestSuite.__init__(self) loader = unittest.TestLoader() - self.addTests(loader.loadTestsFromTestCase(notebooks_tests)) + self.addTests(loader.loadTestsFromTestCase(tutorial_tests)) if __name__ == '__main__': From 23dc3049df488c499677bdae37eeb5fd321dcb30 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 May 2022 11:11:00 -0600 Subject: [PATCH 0655/1155] Better skip for the data capture notebook. --- test/test_tutorial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_tutorial.py b/test/test_tutorial.py index 24fbcfecb..b315bdd5e 100644 --- a/test/test_tutorial.py +++ b/test/test_tutorial.py @@ -112,7 +112,7 @@ def test(self): _NOTEBOOKS = glob.glob(os.path.join(os.path.dirname(__file__), '..', 'tutorial', '*.ipynb')) _NOTEBOOKS.sort() for notebook in _NOTEBOOKS: - if notebook.startswith('06_'): + if notebook.find('06_data_capture') != -1: # Skip this for now continue test = _test_generator(notebook) From 8b88dbb9ab20516605d6781ac28f0465d911859f Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 24 May 2022 16:08:47 -0400 Subject: [PATCH 0656/1155] cufft c2r issue still persists with CUDA 11.7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit “Fixes” is a strong word, but I suppose this can close #180. --- configure.ac | 2 +- test/test_fft.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index be2ec51ef..69ec07e85 100644 --- a/configure.ac +++ b/configure.ac @@ -346,7 +346,7 @@ AC_OUTPUT # AS_IF([test x$HAVE_CUDA = x1], - [cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10\.[[1-2]]" -e "11\.[[0-6]]" ) + [cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10\.[[1-2]]" -e "11\.[[0-7]]" ) if test "$cufft_c2r_modifies" != ""; then echo "" AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms) diff --git a/test/test_fft.py b/test/test_fft.py index 9169dd68d..ac7219950 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -51,7 +51,7 @@ def compare(result, gold): np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) def cudaExpectedFailure(testcase): - if BF_CUDA_VERSION < 10.1 or BF_CUDA_VERSION > 11.6: + if BF_CUDA_VERSION < 10.1 or BF_CUDA_VERSION > 11.7: return testcase return unittest.expectedFailure(testcase) From be639c02d3bce11c4640aa9561f8af9094cdbef7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 24 May 2022 14:14:36 -0600 Subject: [PATCH 0657/1155] Update configure. --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index d2c9884de..4b36cff4b 100755 --- a/configure +++ b/configure @@ -26801,7 +26801,7 @@ fi if test x$HAVE_CUDA = x1 then : - cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10\.[1-2]" -e "11\.[0-6]" ) + cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10\.[1-2]" -e "11\.[0-7]" ) if test "$cufft_c2r_modifies" != ""; then echo "" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 From dbe7d364d774440ff9bc6a855519b178fbc0bbec Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 25 May 2022 07:17:46 -0600 Subject: [PATCH 0658/1155] Started sketching out how to fix c2r on CUDA 10.1+. --- src/fft.cu | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/fft.cu b/src/fft.cu index 66af32c17..67f84235a 100644 --- a/src/fft.cu +++ b/src/fft.cu @@ -60,6 +60,7 @@ class BFfft_impl { size_t _workspace_size; std::vector _axes; bool _do_fftshift; + bool _do_fftshfit_before; bool _using_load_callback; thrust::device_vector _dv_tmp_storage; thrust::device_vector _dv_callback_data; @@ -231,10 +232,17 @@ BFstatus BFfft_impl::init(BFarray const* in, _axes.assign(axes, axes+rank); _do_fftshift = do_fftshift; + _do_fftshift_before = false; +#if CUDA_VERSION >= 10100 + // Figure out what to do with c2r with fftshift on CUDA 10.1+ + if( type == CUFFT_C2R || type == CUFFT_Z2D ) { + _do_fftshift_before = true; + } +#endif _dv_callback_data.resize(1); _hv_callback_data.resize(1); CallbackData* callback_data = thrust::raw_pointer_cast(&_dv_callback_data[0]); - BF_CHECK( set_fft_load_callback(in->dtype, _nbit, _handle, _do_fftshift, + BF_CHECK( set_fft_load_callback(in->dtype, _nbit, _handle, _do_fftshift ^ _do_fftshift_before, callback_data, &_using_load_callback) ); if( tmp_storage_size ) { @@ -261,6 +269,13 @@ BFstatus BFfft_impl::execute_impl(BFarray const* in, void* idata = in->data; void* odata = out->data; + // Apply a pre-call fftshift to deal with c2r problems in CUDA 10.1+ +#if CUDA_VERSION >= 10100 + if( _do_fftshift_before ) { + /* Pre-call fftshift here */ + } +#endif + // TODO: This sync is needed to ensure that the previous h2d copy of // h_callback_data has finished before we overwrite it. // We could potentially use a CUDA event as a lighter-weight @@ -282,7 +297,7 @@ BFstatus BFfft_impl::execute_impl(BFarray const* in, // Set callback data needed for applying fftshift h_callback_data->inverse = _real_out || (!_real_in && inverse); - h_callback_data->do_fftshift = _do_fftshift; + h_callback_data->do_fftshift = _do_fftshift ^ _do_fftshift_before; h_callback_data->ndim = _axes.size(); for( int d=0; dndim; ++d ) { h_callback_data->shape[d] = in->shape[_axes[d]]; From c5ed348fbe2a8ba0883f2999f35aaa3fdbb19432 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 25 May 2022 07:30:58 -0600 Subject: [PATCH 0659/1155] Sketch out a precall_fftshift function for use with c2r. --- src/fft_kernels.cu | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/fft_kernels.cu b/src/fft_kernels.cu index 9aefa8992..e84844bf6 100644 --- a/src/fft_kernels.cu +++ b/src/fft_kernels.cu @@ -48,6 +48,15 @@ inline size_t pre_fftshift(size_t offset, } return offset; } + +template +__device__ +inline void precall_fftshift(Complex* dataIn, + Complex* dataOut, + CallbackData* cb) { + /* Something */ +} + template __device__ inline Complex post_fftshift(size_t offset, From 23e9d928bb0832a04cf890f3eb7448bfb192eb4b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 25 May 2022 08:11:09 -0600 Subject: [PATCH 0660/1155] Rename. --- src/fft.cu | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/fft.cu b/src/fft.cu index 67f84235a..2daea355f 100644 --- a/src/fft.cu +++ b/src/fft.cu @@ -60,7 +60,7 @@ class BFfft_impl { size_t _workspace_size; std::vector _axes; bool _do_fftshift; - bool _do_fftshfit_before; + bool _do_fftshift_before_c2r; bool _using_load_callback; thrust::device_vector _dv_tmp_storage; thrust::device_vector _dv_callback_data; @@ -232,17 +232,17 @@ BFstatus BFfft_impl::init(BFarray const* in, _axes.assign(axes, axes+rank); _do_fftshift = do_fftshift; - _do_fftshift_before = false; + _do_fftshift_before_c2r = false; #if CUDA_VERSION >= 10100 // Figure out what to do with c2r with fftshift on CUDA 10.1+ if( type == CUFFT_C2R || type == CUFFT_Z2D ) { - _do_fftshift_before = true; + _do_fftshift_before_c2r = true; } #endif _dv_callback_data.resize(1); _hv_callback_data.resize(1); CallbackData* callback_data = thrust::raw_pointer_cast(&_dv_callback_data[0]); - BF_CHECK( set_fft_load_callback(in->dtype, _nbit, _handle, _do_fftshift ^ _do_fftshift_before, + BF_CHECK( set_fft_load_callback(in->dtype, _nbit, _handle, _do_fftshift ^ _do_fftshift_before_c2r, callback_data, &_using_load_callback) ); if( tmp_storage_size ) { @@ -271,7 +271,7 @@ BFstatus BFfft_impl::execute_impl(BFarray const* in, // Apply a pre-call fftshift to deal with c2r problems in CUDA 10.1+ #if CUDA_VERSION >= 10100 - if( _do_fftshift_before ) { + if( _do_fftshift_before_c2r ) { /* Pre-call fftshift here */ } #endif @@ -297,7 +297,7 @@ BFstatus BFfft_impl::execute_impl(BFarray const* in, // Set callback data needed for applying fftshift h_callback_data->inverse = _real_out || (!_real_in && inverse); - h_callback_data->do_fftshift = _do_fftshift ^ _do_fftshift_before; + h_callback_data->do_fftshift = _do_fftshift ^ _do_fftshift_before_c2r; h_callback_data->ndim = _axes.size(); for( int d=0; dndim; ++d ) { h_callback_data->shape[d] = in->shape[_axes[d]]; From bceff95e659e0bf148d2c751cc381149240500ba Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 8 Jun 2022 12:56:09 -0600 Subject: [PATCH 0661/1155] Make c2r test data that is consistent with a real-to-complex transform. --- test/test_fft.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/test_fft.py b/test/test_fft.py index 9169dd68d..40b22b4ba 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -127,7 +127,11 @@ def run_test_c2r_impl(self, shape, axes, fftshift=False): ishape[axes[-1]] = shape[axes[-1]] // 2 + 1 oshape[axes[-1]] = (ishape[axes[-1]] - 1) * 2 ishape[-1] *= 2 # For complex - known_data = np.random.normal(size=ishape).astype(np.float32).view(np.complex64) + # Note: We need to make a set of known_data that are consistent with a + # a real real-to-complex FFT. + known_data_real = np.np.random.normal(size=oshape).astype(np.float32) + know_data = gold_fftn(know_data_real, axes=axes) + know_data = know_data.copy().astype(np.complex64) idata = bf.ndarray(known_data, space='cuda') odata = bf.ndarray(shape=oshape, dtype='f32', space='cuda') fft = Fft() From 394022bc5ee59ede7f0bbd318f87fb01f54118fb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 8 Jun 2022 12:56:24 -0600 Subject: [PATCH 0662/1155] Turn off the catch for now. --- src/fft.cu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fft.cu b/src/fft.cu index 2daea355f..44eb5731f 100644 --- a/src/fft.cu +++ b/src/fft.cu @@ -236,7 +236,7 @@ BFstatus BFfft_impl::init(BFarray const* in, #if CUDA_VERSION >= 10100 // Figure out what to do with c2r with fftshift on CUDA 10.1+ if( type == CUFFT_C2R || type == CUFFT_Z2D ) { - _do_fftshift_before_c2r = true; + _do_fftshift_before_c2r = false; } #endif _dv_callback_data.resize(1); From f8bcbe1d5cc133e8589a687253925d3a394a6ef7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 8 Jun 2022 14:24:36 -0600 Subject: [PATCH 0663/1155] Do we have success if we don't try to fftshift now? --- test/test_fft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_fft.py b/test/test_fft.py index 40b22b4ba..4e8a7bcc3 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -150,7 +150,7 @@ def run_test_c2c(self, shape, axes): self.run_test_c2c_impl(shape, axes, inverse=True, fftshift=True) def run_test_c2r(self, shape, axes): self.run_test_c2r_impl(shape, axes) - self.run_test_c2r_impl(shape, axes, fftshift=True) + #self.run_test_c2r_impl(shape, axes, fftshift=True) def test_1D(self): self.run_test_c2c(self.shape1D, [0]) From 2992af143f17537d3bf6587ca26becd168ec2a99 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 8 Jun 2022 14:56:28 -0600 Subject: [PATCH 0664/1155] Only one np. is needed. --- test/test_fft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_fft.py b/test/test_fft.py index 4e8a7bcc3..f78306719 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -129,7 +129,7 @@ def run_test_c2r_impl(self, shape, axes, fftshift=False): ishape[-1] *= 2 # For complex # Note: We need to make a set of known_data that are consistent with a # a real real-to-complex FFT. - known_data_real = np.np.random.normal(size=oshape).astype(np.float32) + known_data_real = np.random.normal(size=oshape).astype(np.float32) know_data = gold_fftn(know_data_real, axes=axes) know_data = know_data.copy().astype(np.complex64) idata = bf.ndarray(known_data, space='cuda') From ad30ca12cdd524e2fb0ae233c64bf9a0e99aa2f1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 8 Jun 2022 15:34:25 -0600 Subject: [PATCH 0665/1155] Wow. Typos. --- test/test_fft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_fft.py b/test/test_fft.py index f78306719..b855521f2 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -130,7 +130,7 @@ def run_test_c2r_impl(self, shape, axes, fftshift=False): # Note: We need to make a set of known_data that are consistent with a # a real real-to-complex FFT. known_data_real = np.random.normal(size=oshape).astype(np.float32) - know_data = gold_fftn(know_data_real, axes=axes) + know_data = gold_rfftn(known_data_real, axes=axes) know_data = know_data.copy().astype(np.complex64) idata = bf.ndarray(known_data, space='cuda') odata = bf.ndarray(shape=oshape, dtype='f32', space='cuda') From 55b8a09fbb9cda1706d9b9b17659ebb1d9d63cdd Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 8 Jun 2022 16:17:07 -0600 Subject: [PATCH 0666/1155] Argh. --- test/test_fft.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_fft.py b/test/test_fft.py index b855521f2..363dc3131 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -130,8 +130,8 @@ def run_test_c2r_impl(self, shape, axes, fftshift=False): # Note: We need to make a set of known_data that are consistent with a # a real real-to-complex FFT. known_data_real = np.random.normal(size=oshape).astype(np.float32) - know_data = gold_rfftn(known_data_real, axes=axes) - know_data = know_data.copy().astype(np.complex64) + known_data = gold_rfftn(known_data_real, axes=axes) + known_data = known_data.copy().astype(np.complex64) idata = bf.ndarray(known_data, space='cuda') odata = bf.ndarray(shape=oshape, dtype='f32', space='cuda') fft = Fft() From c4a521ef643980c82194c8276e14d4435a416fb9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 8 Jun 2022 17:29:53 -0600 Subject: [PATCH 0667/1155] Does this change anything? --- python/bifrost/pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 96bd6614a..8fdc03370 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -377,7 +377,7 @@ def run(self): self.pipeline.block_init_queue.put((self, False)) sys.stderr.write("From block instantiated here:\n") sys.stderr.write(self.init_trace) - raise + return def num_outputs(self): # TODO: This is a little hacky return len(self.orings) From de9ff5401100a5f0e281d9793df67a94d7698747 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 8 Jun 2022 18:40:59 -0600 Subject: [PATCH 0668/1155] Revert, sorta. --- python/bifrost/pipeline.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 8fdc03370..4d1fec6d7 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -373,11 +373,11 @@ def run(self): active_orings = self.begin_writing(oring_stack, self.orings) try: self.main(active_orings) - except Exception: + except Exception as e: self.pipeline.block_init_queue.put((self, False)) sys.stderr.write("From block instantiated here:\n") sys.stderr.write(self.init_trace) - return + raise e def num_outputs(self): # TODO: This is a little hacky return len(self.orings) From 113659b5339626ba05d9841313297cbfe685a5b9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 9 Jun 2022 09:50:05 -0600 Subject: [PATCH 0669/1155] Full revert. --- python/bifrost/pipeline.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 4d1fec6d7..96bd6614a 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -373,11 +373,11 @@ def run(self): active_orings = self.begin_writing(oring_stack, self.orings) try: self.main(active_orings) - except Exception as e: + except Exception: self.pipeline.block_init_queue.put((self, False)) sys.stderr.write("From block instantiated here:\n") sys.stderr.write(self.init_trace) - raise e + raise def num_outputs(self): # TODO: This is a little hacky return len(self.orings) From ec60e3c77f671f01d537628cc00e11bfb8d8f950 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 9 Jun 2022 09:51:57 -0600 Subject: [PATCH 0670/1155] New approach: an fftshift with a c2r doesn't make that much sense so just don't do it. --- src/fft.cu | 19 ++----------------- src/fft_kernels.cu | 8 -------- test/test_fft.py | 5 +---- 3 files changed, 3 insertions(+), 29 deletions(-) diff --git a/src/fft.cu b/src/fft.cu index 44eb5731f..eeace96fb 100644 --- a/src/fft.cu +++ b/src/fft.cu @@ -60,7 +60,6 @@ class BFfft_impl { size_t _workspace_size; std::vector _axes; bool _do_fftshift; - bool _do_fftshift_before_c2r; bool _using_load_callback; thrust::device_vector _dv_tmp_storage; thrust::device_vector _dv_callback_data; @@ -232,17 +231,10 @@ BFstatus BFfft_impl::init(BFarray const* in, _axes.assign(axes, axes+rank); _do_fftshift = do_fftshift; - _do_fftshift_before_c2r = false; -#if CUDA_VERSION >= 10100 - // Figure out what to do with c2r with fftshift on CUDA 10.1+ - if( type == CUFFT_C2R || type == CUFFT_Z2D ) { - _do_fftshift_before_c2r = false; - } -#endif _dv_callback_data.resize(1); _hv_callback_data.resize(1); CallbackData* callback_data = thrust::raw_pointer_cast(&_dv_callback_data[0]); - BF_CHECK( set_fft_load_callback(in->dtype, _nbit, _handle, _do_fftshift ^ _do_fftshift_before_c2r, + BF_CHECK( set_fft_load_callback(in->dtype, _nbit, _handle, _do_fftshift, callback_data, &_using_load_callback) ); if( tmp_storage_size ) { @@ -269,13 +261,6 @@ BFstatus BFfft_impl::execute_impl(BFarray const* in, void* idata = in->data; void* odata = out->data; - // Apply a pre-call fftshift to deal with c2r problems in CUDA 10.1+ -#if CUDA_VERSION >= 10100 - if( _do_fftshift_before_c2r ) { - /* Pre-call fftshift here */ - } -#endif - // TODO: This sync is needed to ensure that the previous h2d copy of // h_callback_data has finished before we overwrite it. // We could potentially use a CUDA event as a lighter-weight @@ -297,7 +282,7 @@ BFstatus BFfft_impl::execute_impl(BFarray const* in, // Set callback data needed for applying fftshift h_callback_data->inverse = _real_out || (!_real_in && inverse); - h_callback_data->do_fftshift = _do_fftshift ^ _do_fftshift_before_c2r; + h_callback_data->do_fftshift = _do_fftshift ^ _real_out; h_callback_data->ndim = _axes.size(); for( int d=0; dndim; ++d ) { h_callback_data->shape[d] = in->shape[_axes[d]]; diff --git a/src/fft_kernels.cu b/src/fft_kernels.cu index e84844bf6..baff8bfc2 100644 --- a/src/fft_kernels.cu +++ b/src/fft_kernels.cu @@ -49,14 +49,6 @@ inline size_t pre_fftshift(size_t offset, return offset; } -template -__device__ -inline void precall_fftshift(Complex* dataIn, - Complex* dataOut, - CallbackData* cb) { - /* Something */ -} - template __device__ inline Complex post_fftshift(size_t offset, diff --git a/test/test_fft.py b/test/test_fft.py index 363dc3131..681f1ccff 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -121,7 +121,7 @@ def run_test_r2c(self, shape, axes, dtype=np.float32): self.run_test_r2c_dtype(shape, axes, np.int16, (1 << 15) - 1, misalign=misalign) for misalign in range(8): self.run_test_r2c_dtype(shape, axes, np.int8, (1 << 7 ) - 1, misalign=misalign) - def run_test_c2r_impl(self, shape, axes, fftshift=False): + def run_test_c2r_impl(self, shape, axes): ishape = list(shape) oshape = list(shape) ishape[axes[-1]] = shape[axes[-1]] // 2 + 1 @@ -139,8 +139,6 @@ def run_test_c2r_impl(self, shape, axes, fftshift=False): fft.execute(idata, odata) # Note: Numpy applies normalization while CUFFT does not norm = reduce(lambda a, b: a * b, [shape[d] for d in axes]) - if fftshift: - known_data = np.fft.ifftshift(known_data, axes=axes) known_result = gold_irfftn(known_data, axes=axes) * norm compare(odata.copy('system'), known_result) def run_test_c2c(self, shape, axes): @@ -150,7 +148,6 @@ def run_test_c2c(self, shape, axes): self.run_test_c2c_impl(shape, axes, inverse=True, fftshift=True) def run_test_c2r(self, shape, axes): self.run_test_c2r_impl(shape, axes) - #self.run_test_c2r_impl(shape, axes, fftshift=True) def test_1D(self): self.run_test_c2c(self.shape1D, [0]) From 2db1a444f2f37ecb86d22db7235596ec946936f1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 9 Jun 2022 15:23:25 -0600 Subject: [PATCH 0671/1155] Remove missing fftshift variable. --- test/test_fft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_fft.py b/test/test_fft.py index 681f1ccff..156d15ffe 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -135,7 +135,7 @@ def run_test_c2r_impl(self, shape, axes): idata = bf.ndarray(known_data, space='cuda') odata = bf.ndarray(shape=oshape, dtype='f32', space='cuda') fft = Fft() - fft.init(idata, odata, axes=axes, apply_fftshift=fftshift) + fft.init(idata, odata, axes=axes) fft.execute(idata, odata) # Note: Numpy applies normalization while CUFFT does not norm = reduce(lambda a, b: a * b, [shape[d] for d in axes]) From f27fb14cad5f4a8080f7674fee74d11393c62b30 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 9 Jun 2022 16:52:58 -0600 Subject: [PATCH 0672/1155] Remove the expected failure catches. --- test/test_fft.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/test/test_fft.py b/test/test_fft.py index 156d15ffe..afaeaa068 100644 --- a/test/test_fft.py +++ b/test/test_fft.py @@ -50,11 +50,6 @@ def compare(result, gold): absmean = np.abs(gold).mean() np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) -def cudaExpectedFailure(testcase): - if BF_CUDA_VERSION < 10.1 or BF_CUDA_VERSION > 11.6: - return testcase - return unittest.expectedFailure(testcase) - @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class TestFFT(unittest.TestCase): def setUp(self): @@ -202,13 +197,10 @@ def test_r2c_2D(self): def test_r2c_3D(self): self.run_test_r2c(self.shape3D, [0, 1, 2]) - @cudaExpectedFailure def test_c2r_1D(self): self.run_test_c2r(self.shape1D, [0]) - @cudaExpectedFailure def test_c2r_2D(self): self.run_test_c2r(self.shape2D, [0, 1]) - @cudaExpectedFailure def test_c2r_3D(self): self.run_test_c2r(self.shape3D, [0, 1, 2]) From 1e5dbd7654977889eab3f9c4fec50b2a9417a0d1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 9 Jun 2022 16:54:12 -0600 Subject: [PATCH 0673/1155] Remove the cuFFT c2r warning. --- configure | 10 ---------- configure.ac | 7 ------- 2 files changed, 17 deletions(-) diff --git a/configure b/configure index d2c9884de..e1c09ecc9 100755 --- a/configure +++ b/configure @@ -26799,16 +26799,6 @@ fi # User warnings # -if test x$HAVE_CUDA = x1 -then : - cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10\.[1-2]" -e "11\.[0-6]" ) - if test "$cufft_c2r_modifies" != ""; then - echo "" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&5 -printf "%s\n" "$as_me: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms" >&2;} - fi -fi - # # User notes # diff --git a/configure.ac b/configure.ac index be2ec51ef..d631ca56d 100644 --- a/configure.ac +++ b/configure.ac @@ -345,13 +345,6 @@ AC_OUTPUT # User warnings # -AS_IF([test x$HAVE_CUDA = x1], - [cufft_c2r_modifies=$( echo $CUDA_VERSION | ${GREP} -e "10\.[[1-2]]" -e "11\.[[0-6]]" ) - if test "$cufft_c2r_modifies" != ""; then - echo "" - AC_MSG_WARN(This version of cuFFT may have unexpected behavior for complex-to-real transforms) - fi]) - # # User notes # From ff0d80da4336f5c8fb1272ef0f6e31fc114042d9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 9 Jun 2022 17:39:48 -0600 Subject: [PATCH 0674/1155] Try to better suppress the expected traceback. --- test/test_pipeline_cpu.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/test/test_pipeline_cpu.py b/test/test_pipeline_cpu.py index 4253ded72..6e1886014 100644 --- a/test/test_pipeline_cpu.py +++ b/test/test_pipeline_cpu.py @@ -26,11 +26,16 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import unittest -import os +import os, sys import bifrost as bf from bifrost.blocks import * +try: + from StringIO import StringIO +except ImportError: + from io import StringIO + class CallbackBlock(CopyBlock): """Testing-only block which calls user-defined functions on sequence and on data""" @@ -59,20 +64,6 @@ def rename_sequence(hdr, name): hdr['name'] = name return hdr -class suppress_fd(object): - def __init__(self, fd): - if fd.lower() == 'stdout': fd = 1 - elif fd.lower() == 'stderr': fd = 2 - else: assert(isinstance(fd, int)) - self.fd = fd - self.devnull = os.open(os.devnull, os.O_RDWR) - self.stderr = os.dup(self.fd) # Save original - def __enter__(self): - os.dup2(self.devnull, self.fd) # Set stderr to devnull - def __exit__(self, type, value, tb): - os.dup2(self.stderr, self.fd) # Restore original - os.close(self.devnull) - class PipelineTestCPU(unittest.TestCase): def setUp(self): # Note: This file needs to be large enough to fill the minimum-size @@ -174,5 +165,13 @@ def check_data(ispan, ospan): data = CallbackBlock(data, check_sequence, check_data) data = copy(data) data = copy(data) - with suppress_fd('stderr'): + # TODO: would be nicer as a context manager, something like + # contextlib.redirect_stdout + orig_stderr = sys.stderr + new_stderr = StringIO() + sys.stderr = new_stderr + try: self.assertRaises(bf.pipeline.PipelineInitError, pipeline.run) + finally: + sys.stderr = orig_stderr + new_stderr.close() From d3fc5cc99f3b100e12f08b4c5e1c5836235e5725 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 9 Jun 2022 19:09:32 -0600 Subject: [PATCH 0675/1155] No new line. --- src/fft_kernels.cu | 1 - 1 file changed, 1 deletion(-) diff --git a/src/fft_kernels.cu b/src/fft_kernels.cu index baff8bfc2..9aefa8992 100644 --- a/src/fft_kernels.cu +++ b/src/fft_kernels.cu @@ -48,7 +48,6 @@ inline size_t pre_fftshift(size_t offset, } return offset; } - template __device__ inline Complex post_fftshift(size_t offset, From 924d4dcd77b8c3110d708f703850f7a431f42bbb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 07:23:53 -0600 Subject: [PATCH 0676/1155] Grammar. --- python/bifrost/device.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/device.py b/python/bifrost/device.py index 20a648a83..dc3ec5771 100644 --- a/python/bifrost/device.py +++ b/python/bifrost/device.py @@ -61,7 +61,7 @@ def get_stream(): return stream.value class ExternalStream(object): - """Context manager to use a stream created by outside of Bifrost""" + """Context manager to use a stream created outside Bifrost""" def __init__(self, stream): self._stream = stream def __del__(self): From e9e6e67bfd214cad37034b84e98cdd0e95271230 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 07:57:20 -0600 Subject: [PATCH 0677/1155] Added a flag to enable per-thread default streams be default for CUDA 7+. --- config/cuda.m4 | 24 ++++++++++++++++++++++++ configure | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/config/cuda.m4 b/config/cuda.m4 index 4e7b26445..63b770a74 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -104,6 +104,30 @@ AC_DEFUN([AX_CHECK_CUDA], [with_nvcc_flags='-O3 -Xcompiler "-Wall"']) AC_SUBST(NVCCFLAGS, $with_nvcc_flags) + AC_ARG_WITH([stream_model], + [AS_HELP_STRING([--with-stream-model], + [CUDA stream model to use: 'legacy' or 'per-thread' (default='per-thread')])], + [], + [with_stream_model='per-thread'])) + + + if test "$HAVE_CUDA" = "1"; then + dsm_supported=$( ${NVCC} -h | ${GREP} -Po -e "--default-stream" ) + if test "$dsm_supported" = "--default-stream"; then + if test "$with_stream_model" = "per-thread"; then + NVCCFLAGS="$NVCCFLAGS -default-stream per-thread" + else + if test "$with_stream_model" = "legacy"; then + NVCCFLAGS="$NVCCFLAGS -default-stream legacy" + else + AC_MSG_ERROR(Invalid CUDA stream model: '$with_stream_model') + fi + fi + else + AC_MSG_WARN(Only the 'legacy' stream model is supported) + fi + fi + if test "$HAVE_CUDA" = "1"; then CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" diff --git a/configure b/configure index d2c9884de..6490dea96 100755 --- a/configure +++ b/configure @@ -852,6 +852,7 @@ enable_vma with_cuda_home enable_cuda with_nvcc_flags +with_stream_model with_gpu_archs with_shared_mem with_alignment @@ -1558,6 +1559,8 @@ Optional Packages: --with-cuda-home CUDA install path (default=/usr/local/cuda) --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"') + --with-stream-model CUDA stream model to use: 'legacy' or 'per-thread' + (default='per-thread') --with-gpu-archs=... default GPU architectures (default=detect) --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) @@ -21500,6 +21503,35 @@ fi NVCCFLAGS=$with_nvcc_flags + +# Check whether --with-stream_model was given. +if test ${with_stream_model+y} +then : + withval=$with_stream_model; +else $as_nop + with_stream_model='per-thread' +fi +) + + + if test "$HAVE_CUDA" = "1"; then + dsm_supported=$( ${NVCC} -h | ${GREP} -Po -e "--default-stream" ) + if test "$dsm_supported" = "--default-stream"; then + if test "$with_stream_model" = "per-thread"; then + NVCCFLAGS="$NVCCFLAGS -default-stream per-thread" + else + if test "$with_stream_model" = "legacy"; then + NVCCFLAGS="$NVCCFLAGS -default-stream legacy" + else + as_fn_error $? "Invalid CUDA stream model: '$with_stream_model'" "$LINENO" 5 + fi + fi + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Only the 'legacy' stream model is supported" >&5 +printf "%s\n" "$as_me: WARNING: Only the 'legacy' stream model is supported" >&2;} + fi + fi + if test "$HAVE_CUDA" = "1"; then CPPFLAGS="$CPPFLAGS -DBF_CUDA_ENABLED=1" CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" From 266cff9c90e3b6db7d150bad8be2c01caa445877 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 08:12:41 -0600 Subject: [PATCH 0678/1155] Cleanups and a fix. --- config/cuda.m4 | 9 ++++++--- configure | 16 +++++++++++----- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 63b770a74..5f8a9f215 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -106,25 +106,28 @@ AC_DEFUN([AX_CHECK_CUDA], AC_ARG_WITH([stream_model], [AS_HELP_STRING([--with-stream-model], - [CUDA stream model to use: 'legacy' or 'per-thread' (default='per-thread')])], + [CUDA default stream model to use: 'legacy' or 'per-thread' (default='per-thread')])], [], - [with_stream_model='per-thread'])) + [with_stream_model='per-thread']) if test "$HAVE_CUDA" = "1"; then + AC_MSG_CHECKING([for different CUDA default stream models]) dsm_supported=$( ${NVCC} -h | ${GREP} -Po -e "--default-stream" ) if test "$dsm_supported" = "--default-stream"; then if test "$with_stream_model" = "per-thread"; then NVCCFLAGS="$NVCCFLAGS -default-stream per-thread" + AC_MSG_RESULT([yes, using 'per-thread']) else if test "$with_stream_model" = "legacy"; then NVCCFLAGS="$NVCCFLAGS -default-stream legacy" + AC_MSG_RESULT([yes, using 'legacy']) else AC_MSG_ERROR(Invalid CUDA stream model: '$with_stream_model') fi fi else - AC_MSG_WARN(Only the 'legacy' stream model is supported) + AC_MSG_RESULT([no, only the 'legacy' stream model is supported]) fi fi diff --git a/configure b/configure index 6490dea96..bbbfd04f7 100755 --- a/configure +++ b/configure @@ -1559,8 +1559,8 @@ Optional Packages: --with-cuda-home CUDA install path (default=/usr/local/cuda) --with-nvcc-flags flags to pass to NVCC (default='-O3 -Xcompiler "-Wall"') - --with-stream-model CUDA stream model to use: 'legacy' or 'per-thread' - (default='per-thread') + --with-stream-model CUDA default stream model to use: 'legacy' or + 'per-thread' (default='per-thread') --with-gpu-archs=... default GPU architectures (default=detect) --with-shared-mem=N default GPU shared memory in bytes (default=16384) --with-alignment=N default memory alignment in bytes (default=4096) @@ -21511,24 +21511,30 @@ then : else $as_nop with_stream_model='per-thread' fi -) + if test "$HAVE_CUDA" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for different CUDA default stream models" >&5 +printf %s "checking for different CUDA default stream models... " >&6; } dsm_supported=$( ${NVCC} -h | ${GREP} -Po -e "--default-stream" ) if test "$dsm_supported" = "--default-stream"; then if test "$with_stream_model" = "per-thread"; then NVCCFLAGS="$NVCCFLAGS -default-stream per-thread" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, using 'per-thread'" >&5 +printf "%s\n" "yes, using 'per-thread'" >&6; } else if test "$with_stream_model" = "legacy"; then NVCCFLAGS="$NVCCFLAGS -default-stream legacy" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, using 'legacy'" >&5 +printf "%s\n" "yes, using 'legacy'" >&6; } else as_fn_error $? "Invalid CUDA stream model: '$with_stream_model'" "$LINENO" 5 fi fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Only the 'legacy' stream model is supported" >&5 -printf "%s\n" "$as_me: WARNING: Only the 'legacy' stream model is supported" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, only the 'legacy' stream model is supported" >&5 +printf "%s\n" "no, only the 'legacy' stream model is supported" >&6; } fi fi From 75073e236953ec550afcd2f3c8d55d87b9a80061 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 08:21:17 -0600 Subject: [PATCH 0679/1155] No longer needed? --- src/Makefile.in | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index 5ac5189a1..073be7369 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -14,8 +14,6 @@ DOXYGEN ?= @DX_DOXYGEN@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ -HAVE_CXX14 ?= @HAVE_CXX14@ - HAVE_RECVMSG ?= @HAVE_RECVMSG@ HAVE_CUDA ?= @HAVE_CUDA@ From 0ba7a1b689ffa86ecb35e75da6db3c5337094a79 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 09:53:07 -0600 Subject: [PATCH 0680/1155] Enable debug for the Bifrost build. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7632b90e6..eedd66103 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -70,7 +70,7 @@ jobs: pycuda - name: "Build and Install" run: | - ./configure + ./configure --enable-debug make -j all sudo make install - name: Test From df749d07096fd7da33f9ad98236fb3ee01821f9f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 11:41:28 -0600 Subject: [PATCH 0681/1155] No more debug. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index eedd66103..7632b90e6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -70,7 +70,7 @@ jobs: pycuda - name: "Build and Install" run: | - ./configure --enable-debug + ./configure make -j all sudo make install - name: Test From 949f7c36da925c2a8f6d042c007af42aeb637a49 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 11:47:32 -0600 Subject: [PATCH 0682/1155] Also check for vma_recvfrom_zcopy. --- configure | 41 +++++++++++++++++++++++++++++++++++++++++ configure.ac | 3 +++ 2 files changed, 44 insertions(+) diff --git a/configure b/configure index 4b36cff4b..7f4a95b03 100755 --- a/configure +++ b/configure @@ -21170,6 +21170,47 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } if test "x$ac_cv_lib_vma_recvfrom_zcopy" = xyes +then : + HAVE_VMA=1 + + LIBS="$LIBS -lvma" +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for vma_recvfrom_zcopy in -lvma" >&5 +printf %s "checking for vma_recvfrom_zcopy in -lvma... " >&6; } +if test ${ac_cv_lib_vma_vma_recvfrom_zcopy+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lvma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +namespace conftest { + extern "C" int vma_recvfrom_zcopy (); +} +int +main (void) +{ +return conftest::vma_recvfrom_zcopy (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + ac_cv_lib_vma_vma_recvfrom_zcopy=yes +else $as_nop + ac_cv_lib_vma_vma_recvfrom_zcopy=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_vma_recvfrom_zcopy" >&5 +printf "%s\n" "$ac_cv_lib_vma_vma_recvfrom_zcopy" >&6; } +if test "x$ac_cv_lib_vma_vma_recvfrom_zcopy" = xyes then : HAVE_VMA=1 diff --git a/configure.ac b/configure.ac index 69ec07e85..6651d35b7 100644 --- a/configure.ac +++ b/configure.ac @@ -133,6 +133,9 @@ AC_ARG_ENABLE([vma], AC_SUBST([HAVE_VMA], [0]) AS_IF([test x$enable_vma != xno], [AC_CHECK_LIB([vma], [recvfrom_zcopy], + [AC_SUBST([HAVE_VMA], [1]) + LIBS="$LIBS -lvma"]) + AC_CHECK_LIB([vma], [vma_recvfrom_zcopy], [AC_SUBST([HAVE_VMA], [1]) LIBS="$LIBS -lvma"])]) From 6eba9c7de9bba98d09c1eb09b07b6a061817d720 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 12:48:32 -0600 Subject: [PATCH 0683/1155] Update to use the ledatelescope version. --- tutorial/docker/Dockerfile | 12 ++++-------- tutorial/docker/config.mk | 35 ----------------------------------- tutorial/docker/user.mk | 32 -------------------------------- 3 files changed, 4 insertions(+), 75 deletions(-) delete mode 100644 tutorial/docker/config.mk delete mode 100644 tutorial/docker/user.mk diff --git a/tutorial/docker/Dockerfile b/tutorial/docker/Dockerfile index e2a8ebd61..abecc59d5 100644 --- a/tutorial/docker/Dockerfile +++ b/tutorial/docker/Dockerfile @@ -128,20 +128,16 @@ RUN pip install \ numba \ pint \ simplejson \ - git+https://github.com/olsonse/ctypesgen.git@9bd2d249aa4011c6383a10890ec6f203d7b7990f + ctypesgen==1.0.2 ## Bifrost -RUN git clone https://github.com/jaycedowell/bifrost.git && \ - cd /home/$LSL_USER/bifrost && \ - git checkout disk-readers -COPY config.mk user.mk /home/$LSL_USER/bifrost/ +RUN git clone https://github.com/ledatelescope/bifrost.git && \ + cd /home/$LSL_USER/bifrost RUN cd /home/$LSL_USER/bifrost && \ - make clean && \ + ./configure --with-gpu-archs="35 50 61 75" && \ make -j all && \ make doc && \ make install && \ cd /home/$LSL_USER -## The tutorial -RUN git clone https://github.com/ledatelescope/bifrost_tutorial.git # Back to root USER root diff --git a/tutorial/docker/config.mk b/tutorial/docker/config.mk deleted file mode 100644 index ea0ce4fe1..000000000 --- a/tutorial/docker/config.mk +++ /dev/null @@ -1,35 +0,0 @@ - -ifndef OS - OS := $(shell uname -s) -endif - -ifeq ($(OS),Linux) - SO_EXT = .so - SHARED_FLAG = -shared - SONAME_FLAG = -soname -else ifeq ($(OS),Darwin) - SO_EXT = .dylib - SHARED_FLAG = -dynamiclib - SONAME_FLAG = -install_name -#else ifeq ($(OS),Windows_NT) -# SO_EXT = .dll -else - $(error Unsupported OS) -endif - -ifndef INSTALL_LIB_DIR - INSTALL_LIB_DIR = /home/lwa/venv/lib -endif - -ifndef INSTALL_INC_DIR - INSTALL_INC_DIR = /home/lwa/venv/include -endif - -BIFROST_NAME = bifrost -LIBBIFROST_NAME = lib$(BIFROST_NAME) -LIBBIFROST_MAJOR = 0 -LIBBIFROST_MINOR = 9 -LIBBIFROST_PATCH = 0 -LIBBIFROST_SO = $(LIBBIFROST_NAME)$(SO_EXT) -LIBBIFROST_SO_MAJ = $(LIBBIFROST_SO).$(LIBBIFROST_MAJOR) -LIBBIFROST_SO_MAJ_MIN = $(LIBBIFROST_SO_MAJ).$(LIBBIFROST_MINOR) diff --git a/tutorial/docker/user.mk b/tutorial/docker/user.mk deleted file mode 100644 index 0bd0d712d..000000000 --- a/tutorial/docker/user.mk +++ /dev/null @@ -1,32 +0,0 @@ -CXX ?= g++ -NVCC ?= nvcc -LINKER ?= g++ -CPPFLAGS ?= -CXXFLAGS ?= -O3 -Wall -pedantic -NVCCFLAGS ?= -O3 -Xcompiler "-Wall" #-Xptxas -v -LDFLAGS ?= -DOXYGEN ?= doxygen -PYBUILDFLAGS ?= -PYINSTALLFLAGS ?= - -#GPU_ARCHS ?= 30 32 35 37 50 52 53 # Nap time! -#GPU_ARCHS ?= 35 52 -GPU_ARCHS ?= 35 50 61 75 - -GPU_SHAREDMEM ?= 16384 # GPU shared memory size - -CUDA_HOME ?= /usr/local/cuda -CUDA_LIBDIR ?= $(CUDA_HOME)/lib -CUDA_LIBDIR64 ?= $(CUDA_HOME)/lib64 -CUDA_INCDIR ?= $(CUDA_HOME)/include - -ALIGNMENT ?= 4096 # Memory allocation alignment - -#NODEBUG = 1 # Disable debugging mode (use this for production releases) -#TRACE = 1 # Enable tracing mode (generates annotations for use with nvprof/nvvp) -#NOCUDA = 1 # Disable CUDA support -#ANY_ARCH = 1 # Disable native architecture compilation -#CUDA_DEBUG = 1 # Enable CUDA debugging (nvcc -G) -NUMA = 1 # Enable use of numa library for setting affinity of ring memory -HWLOC = 1 # Enable use of hwloc library for memory binding in udp_capture -#VMA = 1 # Enable use of Mellanox libvma in udp_capture From f29793b1118b118999993ab442a217476cf4365c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 12:50:45 -0600 Subject: [PATCH 0684/1155] Remove old badges. --- tutorial/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/tutorial/README.md b/tutorial/README.md index e0c55b062..fdb53060f 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -1,7 +1,5 @@ # The Bifrost Tutorial -[![Build Status](https://fornax.phys.unm.edu/jenkins/buildStatus/icon?job=BifrostTutorial)](https://fornax.phys.unm.edu/jenkins/job/BifrostTutorial/) - A collection of examples that show how to use various features in the [Bifrost framework](https://github.com/ledatelescope/bifrost/). Before beginning this tutorial it would be a good idea to familiarize yourself with the framework and its concepts: * Bifrost is described in [Cranmer et al.](https://arxiv.org/abs/1708.00720) From 23dbb3148cc408afa00943eb8e94f99e67ca7a77 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 12:51:47 -0600 Subject: [PATCH 0685/1155] Try to move over to ledatelescope for the base bifrost image. --- tutorial/test/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tutorial/test/__init__.py diff --git a/tutorial/test/__init__.py b/tutorial/test/__init__.py deleted file mode 100644 index e69de29bb..000000000 From eadcf24d45517b0a7365b255bb5300b810739584 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 12:54:11 -0600 Subject: [PATCH 0686/1155] Symlink to make things like they were. --- tutorial/docker/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tutorial/docker/Dockerfile b/tutorial/docker/Dockerfile index abecc59d5..64271df7a 100644 --- a/tutorial/docker/Dockerfile +++ b/tutorial/docker/Dockerfile @@ -137,7 +137,8 @@ RUN cd /home/$LSL_USER/bifrost && \ make -j all && \ make doc && \ make install && \ - cd /home/$LSL_USER + cd /home/$LSL_USER && \ + ln -s /home/$LSL_USER/bifrost/tutorial /home/$LSL_USER/bifrost_tutorial # Back to root USER root From 2398102e7007fff91abc4089604f009f0c08d02b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 10 Jun 2022 13:08:24 -0600 Subject: [PATCH 0687/1155] We already require C++11. --- src/Socket.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index f98f65c0f..0760e77bf 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -1156,8 +1156,7 @@ int Socket::get_promiscuous() { return false; #endif } - -#if __cplusplus >= 201103L + void Socket::replace(Socket& s) { _fd = s._fd; s._fd = -1; _type = std::move(s._type); From b591d93af7f68fb5adf7cf60eff2f7907d232765 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 23 Jun 2022 12:41:16 -0600 Subject: [PATCH 0688/1155] Cleanup. --- src/Socket.hpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Socket.hpp b/src/Socket.hpp index 0760e77bf..99132f5c0 100644 --- a/src/Socket.hpp +++ b/src/Socket.hpp @@ -152,14 +152,12 @@ inline static int accept4(int sockfd, inline static sa_family_t get_family(int sockfd) { int ret; sockaddr addr; - socklen_t len = sizeof(addr); - ret = ::getsockname(sockfd, &addr, &len); - if(ret<0) { + socklen_t addr_len = sizeof(addr); + sockaddr_in* addr4 = reinterpret_cast(&addr); + if( ::getsockname(sockfd, (struct sockaddr*)&addr, &addr_len) < 0 ) { return AF_UNSPEC; } - - sockaddr_in* sa = reinterpret_cast (&addr); - return sa->sin_family; + return addr4->sin_family; } inline static int get_mtu(int sockfd) { @@ -624,7 +622,7 @@ void Socket::bind(sockaddr_storage local_address, base_address.sin_family = reinterpret_cast(&local_address)->sin_family; base_address.sin_addr.s_addr = htonl(INADDR_ANY); base_address.sin_port = htons(reinterpret_cast(&local_address)->sin_port); - check_error(::bind(_fd, (struct sockaddr*)&local_address, sizeof(local_address)), + check_error(::bind(_fd, (struct sockaddr*)&local_address, sizeof(struct sockaddr)), "bind socket"); if( _type == SOCK_STREAM ) { From 7c4349ba6f7344b80d28d91d0f4233a6213bf7f6 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 23 Jun 2022 23:25:51 -0400 Subject: [PATCH 0689/1155] First cut at github_stats tracker Just needs cron environment to run it in. I can easily hook it into a systemd timer on one of my servers. --- flake.nix | 6 +++- tools/github_stats.py | 77 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 tools/github_stats.py diff --git a/flake.nix b/flake.nix index edeb40fbb..344793138 100644 --- a/flake.nix +++ b/flake.nix @@ -230,6 +230,10 @@ { bifrost = final.callPackage bifrost { }; bifrost-doc = final.callPackage bifrost-doc { }; + github_stats = final.writeShellScriptBin "github_stats" '' + ${final.python3.withPackages (p: [p.PyGithub])}/bin/python \ + ${tools/github_stats.py} "$@" + ''; } # Apply the python overlay to every python package set we find. // lib.mapAttrs (_: py: py.override { packageOverrides = pyOverlay; }) @@ -308,7 +312,7 @@ value = py.withPackages (p: [ (p.bifrost.override config) ]); }) (pythonAttrs pkgs))); - in { inherit (pkgs) bifrost-doc; } // cgens // bfs // pys); + in { inherit (pkgs) bifrost-doc github_stats; } // cgens // bfs // pys); devShells = eachSystem (pkgs: { default = let diff --git a/tools/github_stats.py b/tools/github_stats.py new file mode 100644 index 000000000..2d2f4138f --- /dev/null +++ b/tools/github_stats.py @@ -0,0 +1,77 @@ +# github_stats.py – Grab a snapshot of github stats +# usage: [-h] --token-file PATH [--repo OWNER/REPO] [--output PATH] + +# Reads github user token from token-file path and appends one line of JSON to +# output path. Default repo is ledatelescope/bifrost. Default output is +# stdout. Accumulated log file is JSON-lines format +# and can be queried using `jq`. Meant to be run daily. + +# Prerequisites: python3, PyGithub + +from datetime import datetime, timezone +import argparse +import github +import json +import sys + + +class CustomEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, datetime): + return obj.isoformat() + elif isinstance(obj, (github.View.View, github.Clones.Clones)): + return obj.raw_data + else: + return super().default(obj) + + +def main(token_file, repo, output): + token = token_file.read().rstrip() + g = github.Github(token) + r = g.get_repo(repo) + snapshot = { + "timestamp": datetime.now(timezone.utc), + "repo": r.full_name, + "stars": r.stargazers_count, + "watchers": r.watchers_count, + "forks": r.forks_count, + "network": r.network_count, + "open_issues": r.open_issues_count, + "subscribers": r.subscribers_count, + "views": r.get_views_traffic(), + "clones": r.get_clones_traffic(), + } + json.dump(snapshot, output, cls=CustomEncoder) + output.write("\n") + + +parser = argparse.ArgumentParser(description="Grab snapshot of github stats.") + +parser.add_argument( + "--token-file", + "-t", + metavar="PATH", + required=True, + type=argparse.FileType("r"), + help="Read github access token from this file", +) + +parser.add_argument( + "--repo", + "-r", + metavar="OWNER/REPO", + default="ledatelescope/bifrost", + help="Grab statistics from this repo [ledatelescope/bifrost]", +) + +parser.add_argument( + "--output", + "-o", + metavar="PATH", + default=sys.stdout, + type=argparse.FileType("a"), + help="Append data to this file", +) + +if __name__ == "__main__": + main(**vars(parser.parse_args())) From 6c51f99f8566048f5d2c00b69a3c455c2440ea08 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 27 Jun 2022 11:06:14 -0400 Subject: [PATCH 0690/1155] Add simple install black for google colab --- tutorial/00_getting_started.ipynb | 951 ++++++++++++++++-------------- 1 file changed, 524 insertions(+), 427 deletions(-) diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb index 3b7f22197..398db938d 100644 --- a/tutorial/00_getting_started.ipynb +++ b/tutorial/00_getting_started.ipynb @@ -1,448 +1,545 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "1dfd7ec3", - "metadata": {}, - "source": [ - "# Getting started with Bifrost\n", - "\n", - "Once Bifrost is installed you can load the Python API with:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "proud-container", - "metadata": {}, - "outputs": [], - "source": [ - "import bifrost" - ] - }, - { - "cell_type": "markdown", - "id": "rental-equipment", - "metadata": {}, - "source": [ - "This loads the core parts of Bifrost and several useful functions. The main way of interacting with Bifrost is through the `bifrost.ndarray`, a sub-class of `numpy.ndarray`. You can create an empty array with:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "subject-quebec", - "metadata": {}, - "outputs": [ + "cells": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " float32 (2, 4096) system\n", - "[[1.9045215e+31 1.6631021e+22 2.7229835e+20 ... 0.0000000e+00\n", - " 0.0000000e+00 0.0000000e+00]\n", - " [0.0000000e+00 0.0000000e+00 0.0000000e+00 ... 4.5557614e-41\n", - " 1.4012985e-45 0.0000000e+00]]\n" - ] - } - ], - "source": [ - "data = bifrost.ndarray(shape=(2,4096), dtype='f32', space='system')\n", - "print(type(data), data.dtype, data.shape, data.bf.space)\n", - "print(data)" - ] - }, - { - "cell_type": "markdown", - "id": "eleven-omaha", - "metadata": {}, - "source": [ - "Note that bifrost defines datatypes differently to numpy:\n", - "```\n", - "f32: 32-bit float (equivalent to numpy float32)\n", - "cf32: complex 32-bit data (equivalent to numpy complex64)\n", - "i[8,16,32]: signed integer datatypes of 8, 16 and 32-bit width\n", - "u[8,16,32]: unsigned integer datatypes of 8, 16 and 32-bit width\n", - "ci[4,8,16,32]: complex 4-bit per sample, 8-bit, 16-bit and 32-bit datatypes\n", - "```\n", - "\n", - "The `ci4`, `ci8` and `ci16` datatypes do not have an equivalent numpy type, but are commonly encountered in radio astronomy.\n", - "\n", - "You can also use the `bifrost.ndarray` to wrap existing numpy arrays:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "lightweight-madrid", - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "id": "1dfd7ec3", + "metadata": { + "id": "1dfd7ec3" + }, + "source": [ + "# Getting started with Bifrost\n", + "\n", + "Once Bifrost is installed you can load the Python API with `import bifrost`:" + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - " float64 (2, 4096) system\n", - "r: [[ 0.13445404 0.3175441 0.53332765 ... 1.18956152 -1.15990205\n", - " -0.64751085]\n", - " [ 0.45399238 -0.42930972 0.47645107 ... 2.00526937 2.27132679\n", - " 0.78468687]]\n", - "data: [[ 0.13445404 0.3175441 0.53332765 ... 1.18956152 -1.15990205\n", - " -0.64751085]\n", - " [ 0.45399238 -0.42930972 0.47645107 ... 2.00526937 2.27132679\n", - " 0.78468687]]\n" - ] - } - ], - "source": [ - "import numpy\n", - "r = numpy.random.randn(2, 4096)\n", - "data = bifrost.ndarray(r)\n", - "print(type(data), data.dtype, data.shape, data.bf.space)\n", - "print('r:', r)\n", - "print('data:', data)" - ] - }, - { - "cell_type": "markdown", - "id": "earlier-latino", - "metadata": {}, - "source": [ - "Since `bifrost.ndarray`s are derived from numpy arrays they can do many (but not all) of the same things:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "regional-darkness", - "metadata": {}, - "outputs": [ + "cell_type": "code", + "execution_count": 3, + "id": "proud-container", + "metadata": { + "id": "proud-container" + }, + "outputs": [], + "source": [ + "try:\n", + " import bifrost\n", + "except ModuleNotFoundError:\n", + " try:\n", + " import google.colab # If on colab, following install steps should work\n", + " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", + " import bifrost\n", + " except ModuleNotFoundError:\n", + " print(\"Sorry, could not import bifrost and we're not on colab.\")" + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "data += 2.0: [[2.13445404 2.3175441 2.53332765 ... 3.18956152 0.84009795 1.35248915]\n", - " [2.45399238 1.57069028 2.47645107 ... 4.00526937 4.27132679 2.78468687]]\n", - "data[0,:] = 55: [[55. 55. 55. ... 55. 55.\n", - " 55. ]\n", - " [ 2.45399238 1.57069028 2.47645107 ... 4.00526937 4.27132679\n", - " 2.78468687]]\n" - ] - } - ], - "source": [ - "data += 2.0\n", - "print('data += 2.0:', data)\n", - "data[0,:] = 55\n", - "print('data[0,:] = 55:', data)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "artificial-spider", - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "id": "rental-equipment", + "metadata": { + "id": "rental-equipment" + }, + "source": [ + "This loads the core parts of Bifrost and several useful functions. The main way of interacting with Bifrost is through the `bifrost.ndarray`, a sub-class of `numpy.ndarray`. You can create an empty array with:" + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "data[:,[1,3,5,7]] = 10: [[55. 55. 55. ... 55. 55.\n", - " 55. ]\n", - " [ 2.45399238 1.57069028 2.47645107 ... 4.00526937 4.27132679\n", - " 2.78468687]]\n" - ] - } - ], - "source": [ - "data[:,[1,3,5,7]] = 10\n", - "print('data[:,[1,3,5,7]] = 10:', data)" - ] - }, - { - "cell_type": "markdown", - "id": "thirty-stretch", - "metadata": {}, - "source": [ - "You can also use `bifrost.ndarray`s with [numba](https://numba.pydata.org/):" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "smaller-organizer", - "metadata": {}, - "outputs": [ + "cell_type": "code", + "execution_count": 4, + "id": "subject-quebec", + "metadata": { + "id": "subject-quebec", + "outputId": "918c09dc-e927-4920-d12e-048cd968fd17", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " float32 (2, 4096) system\n", + "[[0.0000000e+00 0.0000000e+00 1.5581587e-38 ... 1.5554413e-43\n", + " 1.5554413e-43 1.4012985e-43]\n", + " [4.4841551e-44 1.1210388e-43 1.6955711e-43 ... 0.0000000e+00\n", + " 7.8472714e-44 2.6989008e-42]]\n" + ] + } + ], + "source": [ + "data = bifrost.ndarray(shape=(2,4096), dtype='f32', space='system')\n", + "print(type(data), data.dtype, data.shape, data.bf.space)\n", + "print(data)" + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - " [[65. 65. 65. ... 65. 65.\n", - " 65. ]\n", - " [12.45399238 11.57069028 12.47645107 ... 14.00526937 14.27132679\n", - " 12.78468687]]\n" - ] - } - ], - "source": [ - "from numba import jit\n", - "\n", - "@jit(nopython=True)\n", - "def compute(x):\n", - " for i in range(len(x)):\n", - " x[i] = x[i] + 10\n", - "\n", - "compute(data)\n", - "print(type(data), data)\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "informative-brush", - "metadata": {}, - "source": [ - "### Arrays on the CPU and GPU" - ] - }, - { - "cell_type": "markdown", - "id": "acute-efficiency", - "metadata": {}, - "source": [ - "Unlike numpy arrays `bifrost.ndarray` are \"space aware\", meaning that they can exist in different memory spaces. What we have created so far is in system memory. `bifrost.ndarray`s can also exist in \"cuda_host\" (pinned) memory and \"cuda\" (GPU) memory:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "changing-enhancement", - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "id": "eleven-omaha", + "metadata": { + "id": "eleven-omaha" + }, + "source": [ + "Note that bifrost defines datatypes differently to numpy:\n", + "```\n", + "f32: 32-bit float (equivalent to numpy float32)\n", + "cf32: complex 32-bit data (equivalent to numpy complex64)\n", + "i[8,16,32]: signed integer datatypes of 8, 16 and 32-bit width\n", + "u[8,16,32]: unsigned integer datatypes of 8, 16 and 32-bit width\n", + "ci[4,8,16,32]: complex 4-bit per sample, 8-bit, 16-bit and 32-bit datatypes\n", + "```\n", + "\n", + "The `ci4`, `ci8` and `ci16` datatypes do not have an equivalent numpy type, but are commonly encountered in radio astronomy.\n", + "\n", + "You can also use the `bifrost.ndarray` to wrap existing numpy arrays:" + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - " float32 (2, 4096) cuda_host\n", - " float32 (2, 4096) cuda\n" - ] - } - ], - "source": [ - "data2 = bifrost.ndarray(shape=(2,4096), dtype='f32', space='cuda_host')\n", - "data3 = bifrost.ndarray(shape=(2,4096), dtype='f32', space='cuda')\n", - "print(type(data2), data2.dtype, data2.shape, data2.bf.space)\n", - "print(type(data3), data3.dtype, data3.shape, data3.bf.space)" - ] - }, - { - "cell_type": "markdown", - "id": "million-guess", - "metadata": {}, - "source": [ - "To move between the different spaces the `bifrost.ndarray` class provides a `copy` method:" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "talented-lending", - "metadata": {}, - "outputs": [ + "cell_type": "code", + "execution_count": 5, + "id": "lightweight-madrid", + "metadata": { + "id": "lightweight-madrid", + "outputId": "a3c11d1c-f512-466c-f5b7-31e9ba3d60df", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " float64 (2, 4096) system\n", + "r: [[-1.05480499 0.36415701 -0.8737974 ... -0.33165307 1.62013049\n", + " 0.69380237]\n", + " [ 1.17068956 0.46664369 0.67406924 ... 0.87138256 -0.36889056\n", + " -0.32501501]]\n", + "data: [[-1.05480499 0.36415701 -0.8737974 ... -0.33165307 1.62013049\n", + " 0.69380237]\n", + " [ 1.17068956 0.46664369 0.67406924 ... 0.87138256 -0.36889056\n", + " -0.32501501]]\n" + ] + } + ], + "source": [ + "import numpy\n", + "r = numpy.random.randn(2, 4096)\n", + "data = bifrost.ndarray(r)\n", + "print(type(data), data.dtype, data.shape, data.bf.space)\n", + "print('r:', r)\n", + "print('data:', data)" + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - " float64 (2, 4096) cuda\n" - ] - } - ], - "source": [ - "data4 = data.copy(space='cuda')\n", - "print(type(data4), data4.dtype, data4.shape, data4.bf.space)" - ] - }, - { - "cell_type": "markdown", - "id": "stable-instrumentation", - "metadata": {}, - "source": [ - "Once on the GPU you can take advantage of Bifrost's GPU-based functions, like `bifrost.map`:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "prospective-financing", - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "id": "earlier-latino", + "metadata": { + "id": "earlier-latino" + }, + "source": [ + "Since `bifrost.ndarray`s are derived from numpy arrays they can do many (but not all) of the same things:" + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "data4/data = data*10/data = 10: [[10. 10. 10. ... 10. 10. 10.]\n", - " [10. 10. 10. ... 10. 10. 10.]]\n" - ] - } - ], - "source": [ - "bifrost.map(\"a(i,j) *= 10\",\n", - " {'a': data4},\n", - " axis_names=('i', 'j'),\n", - " shape=data4.shape)\n", - "data4 = data4.copy(space='system')\n", - "print('data4/data = data*10/data = 10:', data4/data)" - ] - }, - { - "cell_type": "markdown", - "id": "amateur-bridges", - "metadata": {}, - "source": [ - "The `bifrost.map` call here compiles and runs a CUDA kernel that does an element-wise multiplication by ten. In order to view the results of this kernel call we need to copy the memory back to the \"system\" memory space. In the future we hope to support a \"cuda_managed\" space to make this easier." - ] - }, - { - "cell_type": "markdown", - "id": "vocational-archives", - "metadata": {}, - "source": [ - "`bifrost.map` is an example of a function that does not require any additional setup to run. This code is converted into a CUDA kernel at runtime, using [NVRTC](https://docs.nvidia.com/cuda/nvrtc/index.html). \n", - "\n", - "For some Bifrost functions, like `bifrost.fft.Fft`, some setup is required so that the function knows how to run. To show the use of the Bifrost FFT, let us first make some example data on the GPU, using `bf.map`:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "restricted-carrier", - "metadata": {}, - "outputs": [ + "cell_type": "code", + "execution_count": 6, + "id": "regional-darkness", + "metadata": { + "id": "regional-darkness", + "outputId": "2d4c2714-6960-4c5e-da20-c4f52f8c451d", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "data += 2.0: [[0.94519501 2.36415701 1.1262026 ... 1.66834693 3.62013049 2.69380237]\n", + " [3.17068956 2.46664369 2.67406924 ... 2.87138256 1.63110944 1.67498499]]\n", + "data[0,:] = 55: [[55. 55. 55. ... 55. 55.\n", + " 55. ]\n", + " [ 3.17068956 2.46664369 2.67406924 ... 2.87138256 1.63110944\n", + " 1.67498499]]\n" + ] + } + ], + "source": [ + "data += 2.0\n", + "print('data += 2.0:', data)\n", + "data[0,:] = 55\n", + "print('data[0,:] = 55:', data)" + ] + }, { - "data": { - "text/plain": [ - "" + "cell_type": "code", + "execution_count": 7, + "id": "artificial-spider", + "metadata": { + "id": "artificial-spider", + "outputId": "6439ba36-0080-4664-ee9c-fb8f2349a0ec", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "data[:,[1,3,5,7]] = 10: [[55. 55. 55. ... 55. 55.\n", + " 55. ]\n", + " [ 3.17068956 2.46664369 2.67406924 ... 2.87138256 1.63110944\n", + " 1.67498499]]\n" + ] + } + ], + "source": [ + "data[:,[1,3,5,7]] = 10\n", + "print('data[:,[1,3,5,7]] = 10:', data)" ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" + "cell_type": "markdown", + "id": "thirty-stretch", + "metadata": { + "id": "thirty-stretch" + }, + "source": [ + "You can also use `bifrost.ndarray`s with [numba](https://numba.pydata.org/):" ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "data = bifrost.ndarray(shape=(16, 4096), dtype='cf32', space='cuda')\n", - "bifrost.map(\"a(i,j) = exp(Complex(0.0, 2*3.14*i*j/4096))\",\n", - " {'a': data},\n", - " axis_names=('i', 'j'),\n", - " shape=data.shape)\n", - "data2 = data.copy(space='system')\n", - "\n", - "import pylab\n", - "pylab.plot(data2[0,:].real, label='Re0')\n", - "#pylab.plot(data2[0,:].imag, label='Im0')\n", - "pylab.plot(data2[2,:].real, label='Re2')\n", - "#pylab.plot(data2[2,:].imag, label='Im2')\n", - "pylab.plot(data2[5,:].real, label='Re5')\n", - "#pylab.plot(data2[5,:].imag, label='Im5')\n", - "pylab.xlabel('Time')\n", - "pylab.ylabel('Value')\n", - "pylab.legend(loc=0)" - ] - }, - { - "cell_type": "markdown", - "id": "soviet-conference", - "metadata": {}, - "source": [ - "Now run the FFT and plot the results. The FFT is initialised using its `.init` method, and then executed using its `.execute` method. An output data array also needs to be pre-allocated :" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "moral-worship", - "metadata": {}, - "outputs": [ + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "smaller-organizer", + "metadata": { + "id": "smaller-organizer", + "outputId": "51737f9d-27b9-4140-8367-ed0c920b5077", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " [[65. 65. 65. ... 65. 65.\n", + " 65. ]\n", + " [13.17068956 12.46664369 12.67406924 ... 12.87138256 11.63110944\n", + " 11.67498499]]\n" + ] + } + ], + "source": [ + "from numba import jit\n", + "\n", + "@jit(nopython=True)\n", + "def compute(x):\n", + " for i in range(len(x)):\n", + " x[i] = x[i] + 10\n", + "\n", + "compute(data)\n", + "print(type(data), data)" + ] + }, + { + "cell_type": "markdown", + "id": "informative-brush", + "metadata": { + "id": "informative-brush" + }, + "source": [ + "### Arrays on the CPU and GPU" + ] + }, + { + "cell_type": "markdown", + "id": "acute-efficiency", + "metadata": { + "id": "acute-efficiency" + }, + "source": [ + "Unlike numpy arrays `bifrost.ndarray` are \"space aware\", meaning that they can exist in different memory spaces. What we have created so far is in system memory. `bifrost.ndarray`s can also exist in \"cuda_host\" (pinned) memory and \"cuda\" (GPU) memory:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "changing-enhancement", + "metadata": { + "id": "changing-enhancement", + "outputId": "4e114751-9130-4ec1-e0a3-27c56dc1edc4", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " float32 (2, 4096) cuda_host\n", + " float32 (2, 4096) cuda\n" + ] + } + ], + "source": [ + "data2 = bifrost.ndarray(shape=(2,4096), dtype='f32', space='cuda_host')\n", + "data3 = bifrost.ndarray(shape=(2,4096), dtype='f32', space='cuda')\n", + "print(type(data2), data2.dtype, data2.shape, data2.bf.space)\n", + "print(type(data3), data3.dtype, data3.shape, data3.bf.space)" + ] + }, + { + "cell_type": "markdown", + "id": "million-guess", + "metadata": { + "id": "million-guess" + }, + "source": [ + "To move between the different spaces the `bifrost.ndarray` class provides a `copy` method:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "talented-lending", + "metadata": { + "id": "talented-lending", + "outputId": "c154236d-e8ba-4cc7-8d86-eef236d97bcb", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " float64 (2, 4096) cuda\n" + ] + } + ], + "source": [ + "data4 = data.copy(space='cuda')\n", + "print(type(data4), data4.dtype, data4.shape, data4.bf.space)" + ] + }, + { + "cell_type": "markdown", + "id": "stable-instrumentation", + "metadata": { + "id": "stable-instrumentation" + }, + "source": [ + "Once on the GPU you can take advantage of Bifrost's GPU-based functions, like `bifrost.map`:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "prospective-financing", + "metadata": { + "id": "prospective-financing", + "outputId": "92ae4c71-65b6-4c38-db01-7d657a84a2f1", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "data4/data = data*10/data = 10: [[10. 10. 10. ... 10. 10. 10.]\n", + " [10. 10. 10. ... 10. 10. 10.]]\n" + ] + } + ], + "source": [ + "bifrost.map(\"a(i,j) *= 10\",\n", + " {'a': data4},\n", + " axis_names=('i', 'j'),\n", + " shape=data4.shape)\n", + "data4 = data4.copy(space='system')\n", + "print('data4/data = data*10/data = 10:', data4/data)" + ] + }, + { + "cell_type": "markdown", + "id": "amateur-bridges", + "metadata": { + "id": "amateur-bridges" + }, + "source": [ + "The `bifrost.map` call here compiles and runs a CUDA kernel that does an element-wise multiplication by ten. In order to view the results of this kernel call we need to copy the memory back to the \"system\" memory space. In the future we hope to support a \"cuda_managed\" space to make this easier." + ] + }, { - "data": { - "text/plain": [ - "" + "cell_type": "markdown", + "id": "vocational-archives", + "metadata": { + "id": "vocational-archives" + }, + "source": [ + "`bifrost.map` is an example of a function that does not require any additional setup to run. This code is converted into a CUDA kernel at runtime, using [NVRTC](https://docs.nvidia.com/cuda/nvrtc/index.html). \n", + "\n", + "For some Bifrost functions, like `bifrost.fft.Fft`, some setup is required so that the function knows how to run. To show the use of the Bifrost FFT, let us first make some example data on the GPU, using `bf.map`:" ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" + "cell_type": "code", + "execution_count": 12, + "id": "restricted-carrier", + "metadata": { + "id": "restricted-carrier", + "outputId": "6b2543b6-87eb-4a38-8445-f178c8aec9de", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 297 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 12 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "data = bifrost.ndarray(shape=(16, 4096), dtype='cf32', space='cuda')\n", + "bifrost.map(\"a(i,j) = exp(Complex(0.0, 2*3.14*i*j/4096))\",\n", + " {'a': data},\n", + " axis_names=('i', 'j'),\n", + " shape=data.shape)\n", + "data2 = data.copy(space='system')\n", + "\n", + "import pylab\n", + "pylab.plot(data2[0,:].real, label='Re0')\n", + "#pylab.plot(data2[0,:].imag, label='Im0')\n", + "pylab.plot(data2[2,:].real, label='Re2')\n", + "#pylab.plot(data2[2,:].imag, label='Im2')\n", + "pylab.plot(data2[5,:].real, label='Re5')\n", + "#pylab.plot(data2[5,:].imag, label='Im5')\n", + "pylab.xlabel('Time')\n", + "pylab.ylabel('Value')\n", + "pylab.legend(loc=0)" + ] + }, + { + "cell_type": "markdown", + "id": "soviet-conference", + "metadata": { + "id": "soviet-conference" + }, + "source": [ + "Now run the FFT and plot the results. The FFT is initialised using its `.init` method, and then executed using its `.execute` method. An output data array also needs to be pre-allocated :" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "moral-worship", + "metadata": { + "id": "moral-worship", + "outputId": "bee8da0b-1d92-4a0a-978a-ab232059d276", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 297 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 13 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "fdata = bifrost.ndarray(shape=data.shape, dtype='cf32', space='cuda')\n", + "f = bifrost.fft.Fft()\n", + "f.init(data, fdata, axes=1, apply_fftshift=True)\n", + "f.execute(data, fdata)\n", + "fdata2 = fdata.copy(space='system')\n", + "ffreqs = numpy.fft.fftfreq(fdata2.shape[1], d=1/4096.)\n", + "ffreqs = numpy.fft.fftshift(ffreqs)\n", + "\n", + "pylab.semilogy(ffreqs, numpy.abs(fdata2[0,:])**2, label='0')\n", + "pylab.semilogy(ffreqs, numpy.abs(fdata2[2,:])**2, label='2')\n", + "pylab.semilogy(ffreqs, numpy.abs(fdata2[5,:])**2, label='5')\n", + "pylab.xlabel('Frequency')\n", + "pylab.ylabel('Power')\n", + "pylab.xlim(-10, 10)\n", + "pylab.xticks([-10,-5,0,2,5,10])\n", + "pylab.legend(loc=0)" ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" } - ], - "source": [ - "fdata = bifrost.ndarray(shape=data.shape, dtype='cf32', space='cuda')\n", - "f = bifrost.fft.Fft()\n", - "f.init(data, fdata, axes=1, apply_fftshift=True)\n", - "f.execute(data, fdata)\n", - "fdata2 = fdata.copy(space='system')\n", - "ffreqs = numpy.fft.fftfreq(fdata2.shape[1], d=1/4096.)\n", - "ffreqs = numpy.fft.fftshift(ffreqs)\n", - "\n", - "pylab.semilogy(ffreqs, numpy.abs(fdata2[0,:])**2, label='0')\n", - "pylab.semilogy(ffreqs, numpy.abs(fdata2[2,:])**2, label='2')\n", - "pylab.semilogy(ffreqs, numpy.abs(fdata2[5,:])**2, label='5')\n", - "pylab.xlabel('Frequency')\n", - "pylab.ylabel('Power')\n", - "pylab.xlim(-10, 10)\n", - "pylab.legend(loc=0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "geological-occasions", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + }, + "colab": { + "name": "00_getting_started.ipynb", + "provenance": [] + }, + "accelerator": "GPU", + "gpuClass": "standard" }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file From 75e7a06d2b450aa668e7608662596bc6b6ea794a Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 27 Jun 2022 13:01:54 -0400 Subject: [PATCH 0691/1155] Preamble linking to README; open in Colab button; links assume this has merged into master --- tutorial/00_getting_started.ipynb | 509 ++++++++++++++++++++++++++++-- 1 file changed, 474 insertions(+), 35 deletions(-) diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb index 398db938d..6a745c938 100644 --- a/tutorial/00_getting_started.ipynb +++ b/tutorial/00_getting_started.ipynb @@ -9,7 +9,14 @@ "source": [ "# Getting started with Bifrost\n", "\n", - "Once Bifrost is installed you can load the Python API with `import bifrost`:" + "These tutorials require an installation of Bifrost and a machine with a GPU. The simplest way to start is using Google Colab. There are tips for other ways to run them in [the README](https://github.com/ledatelescope/bifrost/blob/master/tutorial/README.md).\n", + "\n", + "\"Open\n", + "\n", + "Once Bifrost is installed you can load the Python API with\n", + "```python\n", + "import bifrost\n", + "```" ] }, { @@ -17,9 +24,441 @@ "execution_count": 3, "id": "proud-container", "metadata": { - "id": "proud-container" + "id": "proud-container", + "outputId": "c0b1f84d-50cd-4532-cae5-be97bbeac236", + "colab": { + "base_uri": "https://localhost:8080/" + } }, - "outputs": [], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Installing backend dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Preparing wheel metadata ... \u001b[?25l\u001b[?25hdone\n", + "\u001b[K |████████████████████████████████| 209 kB 30.1 MB/s \n", + "\u001b[K |████████████████████████████████| 130 kB 71.7 MB/s \n", + "\u001b[?25h Building wheel for ctypesgen (PEP 517) ... \u001b[?25l\u001b[?25hdone\n", + "checking build system type... x86_64-unknown-linux-gnu\n", + "checking host system type... x86_64-unknown-linux-gnu\n", + "checking how to print strings... printf\n", + "checking for gcc... gcc\n", + "checking whether the C compiler works... yes\n", + "checking for C compiler default output file name... a.out\n", + "checking for suffix of executables... \n", + "checking whether we are cross compiling... no\n", + "checking for suffix of object files... o\n", + "checking whether the compiler supports GNU C... yes\n", + "checking whether gcc accepts -g... yes\n", + "checking for gcc option to enable C11 features... none needed\n", + "checking for a sed that does not truncate output... /bin/sed\n", + "checking for grep that handles long lines and -e... /bin/grep\n", + "checking for egrep... /bin/grep -E\n", + "checking for fgrep... /bin/grep -F\n", + "checking for ld used by gcc... /usr/bin/ld\n", + "checking if the linker (/usr/bin/ld) is GNU ld... yes\n", + "checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B\n", + "checking the name lister (/usr/bin/nm -B) interface... BSD nm\n", + "checking whether ln -s works... yes\n", + "checking the maximum length of command line arguments... 1572864\n", + "checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format... func_convert_file_noop\n", + "checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop\n", + "checking for /usr/bin/ld option to reload object files... -r\n", + "checking for objdump... objdump\n", + "checking how to recognize dependent libraries... pass_all\n", + "checking for dlltool... no\n", + "checking how to associate runtime and link libraries... printf %s\\n\n", + "checking for g++... g++\n", + "checking whether the compiler supports GNU C++... yes\n", + "checking whether g++ accepts -g... yes\n", + "checking for g++ option to enable C++11 features... none needed\n", + "checking for ar... ar\n", + "checking for archiver @FILE support... @\n", + "checking for strip... strip\n", + "checking for ranlib... ranlib\n", + "checking for gawk... no\n", + "checking for mawk... mawk\n", + "checking command to parse /usr/bin/nm -B output from gcc object... ok\n", + "checking for sysroot... no\n", + "checking for a working dd... /bin/dd\n", + "checking how to truncate binary pipes... /bin/dd bs=4096 count=1\n", + "./configure: line 7420: /usr/bin/file: No such file or directory\n", + "checking for mt... no\n", + "checking if : is a manifest tool... no\n", + "checking for stdio.h... yes\n", + "checking for stdlib.h... yes\n", + "checking for string.h... yes\n", + "checking for inttypes.h... yes\n", + "checking for stdint.h... yes\n", + "checking for strings.h... yes\n", + "checking for sys/stat.h... yes\n", + "checking for sys/types.h... yes\n", + "checking for unistd.h... yes\n", + "checking for dlfcn.h... yes\n", + "checking for objdir... .libs\n", + "checking if gcc supports -fno-rtti -fno-exceptions... no\n", + "checking for gcc option to produce PIC... -fPIC -DPIC\n", + "checking if gcc PIC flag -fPIC -DPIC works... yes\n", + "checking if gcc static flag -static works... yes\n", + "checking if gcc supports -c -o file.o... yes\n", + "checking if gcc supports -c -o file.o... (cached) yes\n", + "checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes\n", + "checking whether -lc should be explicitly linked in... no\n", + "checking dynamic linker characteristics... GNU/Linux ld.so\n", + "checking how to hardcode library paths into programs... immediate\n", + "checking whether stripping libraries is possible... yes\n", + "checking if libtool supports shared libraries... yes\n", + "checking whether to build shared libraries... yes\n", + "checking whether to build static libraries... yes\n", + "checking how to run the C++ preprocessor... g++ -E\n", + "checking for ld used by g++... /usr/bin/ld\n", + "checking if the linker (/usr/bin/ld) is GNU ld... yes\n", + "checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes\n", + "checking for g++ option to produce PIC... -fPIC -DPIC\n", + "checking if g++ PIC flag -fPIC -DPIC works... yes\n", + "checking if g++ static flag -static works... yes\n", + "checking if g++ supports -c -o file.o... yes\n", + "checking if g++ supports -c -o file.o... (cached) yes\n", + "checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes\n", + "checking dynamic linker characteristics... (cached) GNU/Linux ld.so\n", + "checking how to hardcode library paths into programs... immediate\n", + "checking for gcc... (cached) gcc\n", + "checking whether the compiler supports GNU C... (cached) yes\n", + "checking whether gcc accepts -g... (cached) yes\n", + "checking for gcc option to enable C11 features... (cached) none needed\n", + "checking whether the compiler supports GNU C++... (cached) yes\n", + "checking whether g++ accepts -g... (cached) yes\n", + "checking for g++ option to enable C++11 features... (cached) none needed\n", + "checking for gawk... (cached) mawk\n", + "checking for a sed that does not truncate output... (cached) /bin/sed\n", + "checking for a BSD-compatible install... /usr/bin/install -c\n", + "checking whether ln -s works... yes\n", + "checking whether make sets $(MAKE)... yes\n", + "checking whether ctags executable path has been provided... no\n", + "checking for ctags... /usr/bin/ctags\n", + "checking whether /usr/bin/ctags is exuberant... yes\n", + "checking for inline... inline\n", + "checking whether g++ supports C++20 features with -std=c++20... no\n", + "checking whether g++ supports C++20 features with +std=c++20... no\n", + "checking whether g++ supports C++20 features with -h std=c++20... no\n", + "configure: No compiler with C++20 support was found\n", + "checking whether g++ supports C++17 features with -std=c++17... yes\n", + "checking for C++ std::filesystem support... no\n", + "checking for C++ std::string::ends_with support... no\n", + "checking for memset... yes\n", + "checking for rint... yes\n", + "checking for socket... yes\n", + "checking for recvmsg... yes\n", + "checking for sqrt... yes\n", + "checking for strerror... yes\n", + "checking for arpa/inet.h... yes\n", + "checking for netdb.h... yes\n", + "checking for netinet/in.h... yes\n", + "checking for sys/file.h... yes\n", + "checking for sys/ioctl.h... yes\n", + "checking for sys/socket.h... yes\n", + "checking for _Bool... no\n", + "checking for stdbool.h that conforms to C99... yes\n", + "checking for GNU libc compatible malloc... yes\n", + "checking for OpenMP flag of C++ compiler... -fopenmp\n", + "checking for ptrdiff_t... yes\n", + "checking for int16_t... yes\n", + "checking for int32_t... yes\n", + "checking for int64_t... yes\n", + "checking for int8_t... yes\n", + "checking for pid_t... yes\n", + "checking for size_t... yes\n", + "checking for ssize_t... yes\n", + "checking for uint16_t... yes\n", + "checking for uint32_t... yes\n", + "checking for uint64_t... yes\n", + "checking for uint8_t... yes\n", + "checking for long double with more range or precision than double... yes\n", + "checking for numa_node_of_cpu in -lnuma... yes\n", + "checking for hwloc_topology_init in -lhwloc... yes\n", + "checking for nvcc... /usr/local/cuda/bin/nvcc\n", + "checking for nvprune... /usr/local/cuda/bin/nvprune\n", + "checking for cuobjdump... /usr/local/cuda/bin/cuobjdump\n", + "checking for a working CUDA installation... yes - v11.1\n", + "checking for CUDA CXX standard support... C++17\n", + "checking for valid CUDA architectures... found: 35 37 50 52 53 60 61 62 70 72 75 80 86\n", + "checking which CUDA architectures to target... 70 75\n", + "checking for valid requested CUDA architectures... yes\n", + "checking for Pascal-style CUDA managed memory... yes\n", + "checking for /dev/shm... yes\n", + "checking if the compiler accepts '-march=native'... yes\n", + "checking whether python executable path has been provided... no\n", + "checking for python... /usr/local/bin/python\n", + "checking whether /usr/local/bin/python as ctypesgen... yes\n", + "checking whether docker executable path has been provided... no\n", + "checking for docker... no\n", + "checking for doxygen... no\n", + "configure: WARNING: doxygen not found - will not generate any doxygen documentation\n", + "checking for perl... /usr/bin/perl\n", + "configure: creating ./config.status\n", + "config.status: creating config.mk\n", + "config.status: creating Makefile\n", + "config.status: creating src/Makefile\n", + "config.status: creating python/Makefile\n", + "config.status: creating share/bifrost.pc\n", + "config.status: creating src/bifrost/config.h\n", + "config.status: executing libtool commands\n", + "\n", + "configure: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms\n", + "\n", + "configure: cuda: yes - v11.1 - 70 75\n", + "configure: numa: yes\n", + "configure: hwloc: yes\n", + "configure: libvma: no\n", + "configure: python bindings: yes\n", + "configure: memory alignment: 4096\n", + "configure: logging directory: /dev/shm/bifrost\n", + "configure: options: native map_cache\n", + "\n", + "Bifrost is now ready to be compiled. Please run 'make'\n", + "\n", + "make -C src all\n", + "make[1]: Entering directory '/root/bifrost/src'\n", + "Building C++ source file common.cpp\n", + "Building C++ source file memory.cpp\n", + "Building C++ source file fileutils.cpp\n", + "Building C++ source file affinity.cpp\n", + "Building C++ source file cuda.cpp\n", + "Building C++ source file testsuite.cpp\n", + "Building C++ source file quantize.cpp\n", + "Building C++ source file ring_impl.cpp\n", + "Building C++ source file unpack.cpp\n", + "Building C++ source file ring.cpp\n", + "Building C++ source file array.cpp\n", + "Building C++ source file address.cpp\n", + "Building C++ source file udp_socket.cpp\n", + "Building C++ source file proclog.cpp\n", + "Building C++ source file udp_transmit.cpp\n", + "Building C++ source file udp_capture.cpp\n", + "Building CUDA source file transpose.cu\n", + "Building CUDA source file fft.cu\n", + "Building CUDA source file fdmt.cu\n", + "Building C++ source file map.cpp\n", + "Building C++ source file trace.cpp\n", + "Building CUDA source file linalg.cu\n", + "Building CUDA source file linalg_kernels.cu\n", + "Building CUDA source file romein_kernels.cu\n", + "Building CUDA source file romein.cu\n", + "Building CUDA source file fir.cu\n", + "Building CUDA source file reduce.cu\n", + "Building CUDA source file guantize.cu\n", + "Generating libbifrost.version\n", + "Building CUDA source file gunpack.cu\n", + "Linking _cuda_device_link.o\n", + "\u001b[01m\u001b[Ktranspose.cu:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[KBFstatus \n", + " transpose_simple(const BFarray*, const BFarray*, const int*)\u001b[m\u001b[K’:\n", + "\u001b[01m\u001b[Ktranspose.cu:319:32:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Kaxes_inverted\u001b[m\u001b[K’\n", + " may be used uninitialized in this function \n", + " [\u001b[01;35m\u001b[K-Wmaybe-uninitialized\u001b[m\u001b[K]\n", + " func_str += hex_digits[a\u001b[01;35m\u001b[Kxes[0]]\u001b[m\u001b[K;\n", + " \u001b[01;35m\u001b[K~~~~~~^\u001b[m\u001b[K\n", + "Linking libbifrost.so.0.10\n", + "Successfully built libbifrost.so.0.10\n", + "make[1]: Leaving directory '/root/bifrost/src'\n", + "make -C python build\n", + "make[1]: Entering directory '/root/bifrost/python'\n", + "# Build the libbifrost wrapper\n", + "/usr/local/bin/python -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -lbifrost -I../src ../src/bifrost/address.h ../src/bifrost/memory.h ../src/bifrost/config.h ../src/bifrost/ring.h ../src/bifrost/array.h ../src/bifrost/cuda.h ../src/bifrost/transpose.h ../src/bifrost/testsuite.h ../src/bifrost/udp_capture.h ../src/bifrost/linalg.h ../src/bifrost/udp_transmit.h ../src/bifrost/common.h ../src/bifrost/unpack.h ../src/bifrost/udp_socket.h ../src/bifrost/affinity.h ../src/bifrost/fft.h ../src/bifrost/map.h ../src/bifrost/proclog.h ../src/bifrost/fdmt.h ../src/bifrost/quantize.h ../src/bifrost/fir.h ../src/bifrost/romein.h ../src/bifrost/reduce.h -o bifrost/libbifrost_generated.py\n", + "INFO: Status: Preprocessing /tmp/tmp_8rbhedy.h\n", + "INFO: Status: gcc -E -U __GNUC__ -dD -I\"../src\" \"-D__extension__=\" \"-D__const=const\" \"-D__asm__(x)=\" \"-D__asm(x)=\" \"-DCTYPESGEN=1\" \"/tmp/tmp_8rbhedy.h\"\n", + "INFO: Status: Parsing /tmp/tmp_8rbhedy.h\n", + "INFO: Status: Processing description list.\n", + "INFO: Status: Writing to bifrost/libbifrost_generated.py.\n", + "INFO: Status: Wrapping complete.\n", + "# WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p)\n", + "/bin/sed -i.orig -e 's/POINTER(c_char)/c_char_p/g' bifrost/libbifrost_generated.py\n", + "# WAR for a buggy WAR in ctypesgen that breaks type checking and auto-byref functionality\n", + "/bin/sed -i.orig -e 's/def POINTER/def POINTER_not_used/' bifrost/libbifrost_generated.py\n", + "# WAR for a buggy WAR in ctypesgen that breaks string buffer arguments (e.g., as in address.py)\n", + "/bin/sed -i.orig -e 's/class String/String = c_char_p\\nclass String_not_used/' bifrost/libbifrost_generated.py\n", + "/bin/sed -i.orig -e 's/String.from_param/String_not_used.from_param/g' bifrost/libbifrost_generated.py\n", + "/bin/sed -i.orig -e 's/def ReturnString/ReturnString = c_char_p\\ndef ReturnString_not_used/' bifrost/libbifrost_generated.py\n", + "/bin/sed -i.orig -e '/errcheck = ReturnString/s/^/#/' bifrost/libbifrost_generated.py\n", + "/usr/local/bin/python setup.py build \n", + "running build\n", + "running build_py\n", + "creating build\n", + "creating build/lib\n", + "creating build/lib/bifrost\n", + "copying bifrost/block.py -> build/lib/bifrost\n", + "copying bifrost/ring.py -> build/lib/bifrost\n", + "copying bifrost/GPUArray.py -> build/lib/bifrost\n", + "copying bifrost/ndarray.py -> build/lib/bifrost\n", + "copying bifrost/romein.py -> build/lib/bifrost\n", + "copying bifrost/Space.py -> build/lib/bifrost\n", + "copying bifrost/fdmt.py -> build/lib/bifrost\n", + "copying bifrost/core.py -> build/lib/bifrost\n", + "copying bifrost/memory.py -> build/lib/bifrost\n", + "copying bifrost/pipeline.py -> build/lib/bifrost\n", + "copying bifrost/udp_capture.py -> build/lib/bifrost\n", + "copying bifrost/linalg.py -> build/lib/bifrost\n", + "copying bifrost/map.py -> build/lib/bifrost\n", + "copying bifrost/affinity.py -> build/lib/bifrost\n", + "copying bifrost/DataType.py -> build/lib/bifrost\n", + "copying bifrost/dtype.py -> build/lib/bifrost\n", + "copying bifrost/quantize.py -> build/lib/bifrost\n", + "copying bifrost/temp_storage.py -> build/lib/bifrost\n", + "copying bifrost/device.py -> build/lib/bifrost\n", + "copying bifrost/transpose.py -> build/lib/bifrost\n", + "copying bifrost/psrdada.py -> build/lib/bifrost\n", + "copying bifrost/reduce.py -> build/lib/bifrost\n", + "copying bifrost/fft.py -> build/lib/bifrost\n", + "copying bifrost/__init__.py -> build/lib/bifrost\n", + "copying bifrost/fir.py -> build/lib/bifrost\n", + "copying bifrost/portaudio.py -> build/lib/bifrost\n", + "copying bifrost/header_standard.py -> build/lib/bifrost\n", + "copying bifrost/unpack.py -> build/lib/bifrost\n", + "copying bifrost/ring2.py -> build/lib/bifrost\n", + "copying bifrost/address.py -> build/lib/bifrost\n", + "copying bifrost/libbifrost.py -> build/lib/bifrost\n", + "copying bifrost/proclog.py -> build/lib/bifrost\n", + "copying bifrost/guppi_raw.py -> build/lib/bifrost\n", + "copying bifrost/udp_transmit.py -> build/lib/bifrost\n", + "copying bifrost/udp_socket.py -> build/lib/bifrost\n", + "copying bifrost/libbifrost_generated.py -> build/lib/bifrost\n", + "copying bifrost/sigproc.py -> build/lib/bifrost\n", + "copying bifrost/block_chainer.py -> build/lib/bifrost\n", + "copying bifrost/sigproc2.py -> build/lib/bifrost\n", + "copying bifrost/units.py -> build/lib/bifrost\n", + "creating build/lib/bifrost/views\n", + "copying bifrost/views/basic_views.py -> build/lib/bifrost/views\n", + "copying bifrost/views/__init__.py -> build/lib/bifrost/views\n", + "creating build/lib/bifrost/version\n", + "copying bifrost/version/__init__.py -> build/lib/bifrost/version\n", + "copying bifrost/version/__main__.py -> build/lib/bifrost/version\n", + "creating build/lib/bifrost/blocks\n", + "copying bifrost/blocks/wav.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/detect.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/correlate.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/fdmt.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/audio.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/reverse.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/binary_io.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/quantize.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/copy.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/transpose.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/psrdada.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/reduce.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/fft.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/__init__.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/serialize.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/unpack.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/fftshift.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/guppi_raw.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/sigproc.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/convert_visibilities.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/scrunch.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/accumulate.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/print_header.py -> build/lib/bifrost/blocks\n", + "creating build/lib/bifrost/telemetry\n", + "copying bifrost/telemetry/__init__.py -> build/lib/bifrost/telemetry\n", + "copying bifrost/telemetry/__main__.py -> build/lib/bifrost/telemetry\n", + "running build_scripts\n", + "creating build/scripts-3.7\n", + "copying and adjusting ../tools/setirq.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/like_pmap.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/like_top.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/like_bmon.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/getsiblings.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/pipeline2dot.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/like_ps.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/getirq.py -> build/scripts-3.7\n", + "copying ../tools/github_stats.py -> build/scripts-3.7\n", + "changing mode of build/scripts-3.7/setirq.py from 644 to 755\n", + "changing mode of build/scripts-3.7/like_pmap.py from 644 to 755\n", + "changing mode of build/scripts-3.7/like_top.py from 644 to 755\n", + "changing mode of build/scripts-3.7/like_bmon.py from 644 to 755\n", + "changing mode of build/scripts-3.7/getsiblings.py from 644 to 755\n", + "changing mode of build/scripts-3.7/pipeline2dot.py from 644 to 755\n", + "changing mode of build/scripts-3.7/like_ps.py from 644 to 755\n", + "changing mode of build/scripts-3.7/getirq.py from 644 to 755\n", + "changing mode of build/scripts-3.7/github_stats.py from 644 to 755\n", + "make[1]: Leaving directory '/root/bifrost/python'\n", + "mkdir -p /usr/local/lib\n", + "cp lib/libbifrost.so.0.10 /usr/local/lib/libbifrost.so.0.10\n", + "ln -f -s libbifrost.so.0.10 /usr/local/lib/libbifrost.so.0\n", + "ln -f -s libbifrost.so.0.10 /usr/local/lib/libbifrost.so\n", + "mkdir -p /usr/local/include/bifrost\n", + "cp src/bifrost/config.h /usr/local/include/bifrost/\n", + "mkdir -p /usr/local/lib/pkgconfig\n", + "cp share/bifrost.pc /usr/local/lib/pkgconfig/\n", + "make -C python install\n", + "make[1]: Entering directory '/root/bifrost/python'\n", + "/usr/local/bin/python setup.py build \n", + "running build\n", + "running build_py\n", + "running build_scripts\n", + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Processing /root/bifrost/python\n", + "\u001b[33m DEPRECATION: A future pip version will change local packages to be built in-place without first copying to a temporary directory. We recommend you use --use-feature=in-tree-build to test your packages with this new behavior before it becomes the default.\n", + " pip 21.3 will remove support for this functionality. You can find discussion regarding this at https://github.com/pypa/pip/issues/7555.\u001b[0m\n", + "Requirement already satisfied: numpy>=1.8.1 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (1.21.6)\n", + "Requirement already satisfied: contextlib2>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.5.5)\n", + "Requirement already satisfied: pint>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.18)\n", + "Requirement already satisfied: graphviz>=0.5.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.10.1)\n", + "Collecting ctypesgen==1.0.2\n", + " Downloading ctypesgen-1.0.2-py2.py3-none-any.whl (476 kB)\n", + "\u001b[K |████████████████████████████████| 476 kB 36.2 MB/s \n", + "\u001b[?25hRequirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (3.2.2)\n", + "Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from pint>=0.7.0->bifrost==0.10.0) (21.3)\n", + "Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from pint>=0.7.0->bifrost==0.10.0) (4.11.4)\n", + "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->pint>=0.7.0->bifrost==0.10.0) (3.8.0)\n", + "Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->pint>=0.7.0->bifrost==0.10.0) (4.1.1)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (3.0.9)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (0.11.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (1.4.3)\n", + "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (2.8.2)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->bifrost==0.10.0) (1.15.0)\n", + "Building wheels for collected packages: bifrost\n", + " Building wheel for bifrost (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for bifrost: filename=bifrost-0.10.0-py3-none-any.whl size=183760 sha256=9e062a1671658778062220c0ff2d6067751ce92be1f7cb11aa17fdc53f7e43ed\n", + " Stored in directory: /tmp/pip-ephem-wheel-cache-vao467b4/wheels/35/b7/11/a795b9aa4b1dfc3b2091f793f70becd9333a0b79216d208fd5\n", + "Successfully built bifrost\n", + "Installing collected packages: ctypesgen, bifrost\n", + " Attempting uninstall: ctypesgen\n", + " Found existing installation: ctypesgen 1.0.3.dev98+g2120dbf\n", + " Uninstalling ctypesgen-1.0.3.dev98+g2120dbf:\n", + " Successfully uninstalled ctypesgen-1.0.3.dev98+g2120dbf\n", + "Successfully installed bifrost-0.10.0 ctypesgen-1.0.2\n", + "*************************************************************************\n", + "By default Bifrost installs with basic Python telemetry enabled in order\n", + "to help inform how the software is used for future development. You can\n", + "opt out of telemetry collection using:\n", + "python -m bifrost.telemetry --disable\n", + "*************************************************************************\n", + "\n", + "If you have trouble importing Bifrost from Python you may need\n", + "to set LD_LIBRARY_PATH to /usr/local/lib or have your\n", + "system administrator add this directory to '/etc/ld.so.conf'.\n", + "\n", + "make[1]: Leaving directory '/root/bifrost/python'\n", + "Libraries have been installed in:\n", + " /usr/local/lib\n", + "\n", + "If you ever happen to want to link against installed libraries\n", + "in a given directory, LIBDIR, you must either use libtool, and\n", + "specify the full pathname of the library, or use the '-LLIBDIR'\n", + "flag during linking and do at least one of the following:\n", + " - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable\n", + " during execution\n", + " - add LIBDIR to the 'LD_RUN_PATH' environment variable\n", + " during linking\n", + " - use the '-Wl,-rpath -Wl,LIBDIR' linker flag\n", + " - have your system administrator add LIBDIR to '/etc/ld.so.conf'\n", + "\n", + "See any operating system documentation about shared libraries for\n", + "more information, such as the ld(1) and ld.so(8) manual pages.\n" + ] + } + ], "source": [ "try:\n", " import bifrost\n", @@ -51,7 +490,7 @@ "id": "subject-quebec", "metadata": { "id": "subject-quebec", - "outputId": "918c09dc-e927-4920-d12e-048cd968fd17", + "outputId": "35f71b57-fd1b-4113-ad3d-5e7430ad603e", "colab": { "base_uri": "https://localhost:8080/" } @@ -62,10 +501,10 @@ "name": "stdout", "text": [ " float32 (2, 4096) system\n", - "[[0.0000000e+00 0.0000000e+00 1.5581587e-38 ... 1.5554413e-43\n", - " 1.5554413e-43 1.4012985e-43]\n", - " [4.4841551e-44 1.1210388e-43 1.6955711e-43 ... 0.0000000e+00\n", - " 7.8472714e-44 2.6989008e-42]]\n" + "[[ 2.2875120e-35 0.0000000e+00 1.5581004e-38 ... 1.3563156e-19\n", + " 2.8297670e+20 2.6373977e+23]\n", + " [ 2.0704474e-19 7.1220526e+28 1.4251251e-13 ... 2.7550649e-40\n", + " 6.1529782e-39 -5.7935773e-05]]\n" ] } ], @@ -102,7 +541,7 @@ "id": "lightweight-madrid", "metadata": { "id": "lightweight-madrid", - "outputId": "a3c11d1c-f512-466c-f5b7-31e9ba3d60df", + "outputId": "e0b40abb-6d54-4fa8-d552-36d73feea486", "colab": { "base_uri": "https://localhost:8080/" } @@ -113,14 +552,14 @@ "name": "stdout", "text": [ " float64 (2, 4096) system\n", - "r: [[-1.05480499 0.36415701 -0.8737974 ... -0.33165307 1.62013049\n", - " 0.69380237]\n", - " [ 1.17068956 0.46664369 0.67406924 ... 0.87138256 -0.36889056\n", - " -0.32501501]]\n", - "data: [[-1.05480499 0.36415701 -0.8737974 ... -0.33165307 1.62013049\n", - " 0.69380237]\n", - " [ 1.17068956 0.46664369 0.67406924 ... 0.87138256 -0.36889056\n", - " -0.32501501]]\n" + "r: [[-0.3415904 0.07395837 1.1215293 ... 0.52340138 -0.43369748\n", + " 0.99678685]\n", + " [-0.74268647 1.9056947 -0.23712155 ... 0.65987519 1.13804761\n", + " 0.36587976]]\n", + "data: [[-0.3415904 0.07395837 1.1215293 ... 0.52340138 -0.43369748\n", + " 0.99678685]\n", + " [-0.74268647 1.9056947 -0.23712155 ... 0.65987519 1.13804761\n", + " 0.36587976]]\n" ] } ], @@ -149,7 +588,7 @@ "id": "regional-darkness", "metadata": { "id": "regional-darkness", - "outputId": "2d4c2714-6960-4c5e-da20-c4f52f8c451d", + "outputId": "90fef638-53cf-4c47-9c85-da83fc6dbaf1", "colab": { "base_uri": "https://localhost:8080/" } @@ -159,12 +598,12 @@ "output_type": "stream", "name": "stdout", "text": [ - "data += 2.0: [[0.94519501 2.36415701 1.1262026 ... 1.66834693 3.62013049 2.69380237]\n", - " [3.17068956 2.46664369 2.67406924 ... 2.87138256 1.63110944 1.67498499]]\n", + "data += 2.0: [[1.6584096 2.07395837 3.1215293 ... 2.52340138 1.56630252 2.99678685]\n", + " [1.25731353 3.9056947 1.76287845 ... 2.65987519 3.13804761 2.36587976]]\n", "data[0,:] = 55: [[55. 55. 55. ... 55. 55.\n", " 55. ]\n", - " [ 3.17068956 2.46664369 2.67406924 ... 2.87138256 1.63110944\n", - " 1.67498499]]\n" + " [ 1.25731353 3.9056947 1.76287845 ... 2.65987519 3.13804761\n", + " 2.36587976]]\n" ] } ], @@ -181,7 +620,7 @@ "id": "artificial-spider", "metadata": { "id": "artificial-spider", - "outputId": "6439ba36-0080-4664-ee9c-fb8f2349a0ec", + "outputId": "a27f7776-1f3c-45e1-8320-43d3ed6a2d5a", "colab": { "base_uri": "https://localhost:8080/" } @@ -193,8 +632,8 @@ "text": [ "data[:,[1,3,5,7]] = 10: [[55. 55. 55. ... 55. 55.\n", " 55. ]\n", - " [ 3.17068956 2.46664369 2.67406924 ... 2.87138256 1.63110944\n", - " 1.67498499]]\n" + " [ 1.25731353 3.9056947 1.76287845 ... 2.65987519 3.13804761\n", + " 2.36587976]]\n" ] } ], @@ -219,7 +658,7 @@ "id": "smaller-organizer", "metadata": { "id": "smaller-organizer", - "outputId": "51737f9d-27b9-4140-8367-ed0c920b5077", + "outputId": "6bfd54c2-16e7-4fdb-b5ce-3155ae447ce9", "colab": { "base_uri": "https://localhost:8080/" } @@ -231,8 +670,8 @@ "text": [ " [[65. 65. 65. ... 65. 65.\n", " 65. ]\n", - " [13.17068956 12.46664369 12.67406924 ... 12.87138256 11.63110944\n", - " 11.67498499]]\n" + " [11.25731353 13.9056947 11.76287845 ... 12.65987519 13.13804761\n", + " 12.36587976]]\n" ] } ], @@ -274,7 +713,7 @@ "id": "changing-enhancement", "metadata": { "id": "changing-enhancement", - "outputId": "4e114751-9130-4ec1-e0a3-27c56dc1edc4", + "outputId": "8def579b-b38e-44dc-efbc-2b59655a8185", "colab": { "base_uri": "https://localhost:8080/" } @@ -312,7 +751,7 @@ "id": "talented-lending", "metadata": { "id": "talented-lending", - "outputId": "c154236d-e8ba-4cc7-8d86-eef236d97bcb", + "outputId": "575c6d4e-009f-45cc-de40-5b19aa96b27e", "colab": { "base_uri": "https://localhost:8080/" } @@ -347,7 +786,7 @@ "id": "prospective-financing", "metadata": { "id": "prospective-financing", - "outputId": "92ae4c71-65b6-4c38-db01-7d657a84a2f1", + "outputId": "f8b315b1-1a21-4e7b-f4b4-38af5ed37c11", "colab": { "base_uri": "https://localhost:8080/" } @@ -399,7 +838,7 @@ "id": "restricted-carrier", "metadata": { "id": "restricted-carrier", - "outputId": "6b2543b6-87eb-4a38-8445-f178c8aec9de", + "outputId": "4645aa43-2fbe-47eb-c051-727cef930472", "colab": { "base_uri": "https://localhost:8080/", "height": 297 @@ -410,7 +849,7 @@ "output_type": "execute_result", "data": { "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -465,7 +904,7 @@ "id": "moral-worship", "metadata": { "id": "moral-worship", - "outputId": "bee8da0b-1d92-4a0a-978a-ab232059d276", + "outputId": "df15893d-a150-41dc-bd17-d76a73f04deb", "colab": { "base_uri": "https://localhost:8080/", "height": 297 @@ -476,7 +915,7 @@ "output_type": "execute_result", "data": { "text/plain": [ - "" + "" ] }, "metadata": {}, From b606920ed158a2f7c7e9a5688ebf459cae4ec5c4 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 27 Jun 2022 13:10:52 -0400 Subject: [PATCH 0692/1155] Snip install output --- tutorial/00_getting_started.ipynb | 444 +----------------------------- 1 file changed, 8 insertions(+), 436 deletions(-) diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb index 6a745c938..67642df8f 100644 --- a/tutorial/00_getting_started.ipynb +++ b/tutorial/00_getting_started.ipynb @@ -21,450 +21,22 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "id": "proud-container", "metadata": { - "id": "proud-container", - "outputId": "c0b1f84d-50cd-4532-cae5-be97bbeac236", - "colab": { - "base_uri": "https://localhost:8080/" - } + "id": "proud-container" }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", - " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", - " Installing backend dependencies ... \u001b[?25l\u001b[?25hdone\n", - " Preparing wheel metadata ... \u001b[?25l\u001b[?25hdone\n", - "\u001b[K |████████████████████████████████| 209 kB 30.1 MB/s \n", - "\u001b[K |████████████████████████████████| 130 kB 71.7 MB/s \n", - "\u001b[?25h Building wheel for ctypesgen (PEP 517) ... \u001b[?25l\u001b[?25hdone\n", - "checking build system type... x86_64-unknown-linux-gnu\n", - "checking host system type... x86_64-unknown-linux-gnu\n", - "checking how to print strings... printf\n", - "checking for gcc... gcc\n", - "checking whether the C compiler works... yes\n", - "checking for C compiler default output file name... a.out\n", - "checking for suffix of executables... \n", - "checking whether we are cross compiling... no\n", - "checking for suffix of object files... o\n", - "checking whether the compiler supports GNU C... yes\n", - "checking whether gcc accepts -g... yes\n", - "checking for gcc option to enable C11 features... none needed\n", - "checking for a sed that does not truncate output... /bin/sed\n", - "checking for grep that handles long lines and -e... /bin/grep\n", - "checking for egrep... /bin/grep -E\n", - "checking for fgrep... /bin/grep -F\n", - "checking for ld used by gcc... /usr/bin/ld\n", - "checking if the linker (/usr/bin/ld) is GNU ld... yes\n", - "checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B\n", - "checking the name lister (/usr/bin/nm -B) interface... BSD nm\n", - "checking whether ln -s works... yes\n", - "checking the maximum length of command line arguments... 1572864\n", - "checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format... func_convert_file_noop\n", - "checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop\n", - "checking for /usr/bin/ld option to reload object files... -r\n", - "checking for objdump... objdump\n", - "checking how to recognize dependent libraries... pass_all\n", - "checking for dlltool... no\n", - "checking how to associate runtime and link libraries... printf %s\\n\n", - "checking for g++... g++\n", - "checking whether the compiler supports GNU C++... yes\n", - "checking whether g++ accepts -g... yes\n", - "checking for g++ option to enable C++11 features... none needed\n", - "checking for ar... ar\n", - "checking for archiver @FILE support... @\n", - "checking for strip... strip\n", - "checking for ranlib... ranlib\n", - "checking for gawk... no\n", - "checking for mawk... mawk\n", - "checking command to parse /usr/bin/nm -B output from gcc object... ok\n", - "checking for sysroot... no\n", - "checking for a working dd... /bin/dd\n", - "checking how to truncate binary pipes... /bin/dd bs=4096 count=1\n", - "./configure: line 7420: /usr/bin/file: No such file or directory\n", - "checking for mt... no\n", - "checking if : is a manifest tool... no\n", - "checking for stdio.h... yes\n", - "checking for stdlib.h... yes\n", - "checking for string.h... yes\n", - "checking for inttypes.h... yes\n", - "checking for stdint.h... yes\n", - "checking for strings.h... yes\n", - "checking for sys/stat.h... yes\n", - "checking for sys/types.h... yes\n", - "checking for unistd.h... yes\n", - "checking for dlfcn.h... yes\n", - "checking for objdir... .libs\n", - "checking if gcc supports -fno-rtti -fno-exceptions... no\n", - "checking for gcc option to produce PIC... -fPIC -DPIC\n", - "checking if gcc PIC flag -fPIC -DPIC works... yes\n", - "checking if gcc static flag -static works... yes\n", - "checking if gcc supports -c -o file.o... yes\n", - "checking if gcc supports -c -o file.o... (cached) yes\n", - "checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes\n", - "checking whether -lc should be explicitly linked in... no\n", - "checking dynamic linker characteristics... GNU/Linux ld.so\n", - "checking how to hardcode library paths into programs... immediate\n", - "checking whether stripping libraries is possible... yes\n", - "checking if libtool supports shared libraries... yes\n", - "checking whether to build shared libraries... yes\n", - "checking whether to build static libraries... yes\n", - "checking how to run the C++ preprocessor... g++ -E\n", - "checking for ld used by g++... /usr/bin/ld\n", - "checking if the linker (/usr/bin/ld) is GNU ld... yes\n", - "checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes\n", - "checking for g++ option to produce PIC... -fPIC -DPIC\n", - "checking if g++ PIC flag -fPIC -DPIC works... yes\n", - "checking if g++ static flag -static works... yes\n", - "checking if g++ supports -c -o file.o... yes\n", - "checking if g++ supports -c -o file.o... (cached) yes\n", - "checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes\n", - "checking dynamic linker characteristics... (cached) GNU/Linux ld.so\n", - "checking how to hardcode library paths into programs... immediate\n", - "checking for gcc... (cached) gcc\n", - "checking whether the compiler supports GNU C... (cached) yes\n", - "checking whether gcc accepts -g... (cached) yes\n", - "checking for gcc option to enable C11 features... (cached) none needed\n", - "checking whether the compiler supports GNU C++... (cached) yes\n", - "checking whether g++ accepts -g... (cached) yes\n", - "checking for g++ option to enable C++11 features... (cached) none needed\n", - "checking for gawk... (cached) mawk\n", - "checking for a sed that does not truncate output... (cached) /bin/sed\n", - "checking for a BSD-compatible install... /usr/bin/install -c\n", - "checking whether ln -s works... yes\n", - "checking whether make sets $(MAKE)... yes\n", - "checking whether ctags executable path has been provided... no\n", - "checking for ctags... /usr/bin/ctags\n", - "checking whether /usr/bin/ctags is exuberant... yes\n", - "checking for inline... inline\n", - "checking whether g++ supports C++20 features with -std=c++20... no\n", - "checking whether g++ supports C++20 features with +std=c++20... no\n", - "checking whether g++ supports C++20 features with -h std=c++20... no\n", - "configure: No compiler with C++20 support was found\n", - "checking whether g++ supports C++17 features with -std=c++17... yes\n", - "checking for C++ std::filesystem support... no\n", - "checking for C++ std::string::ends_with support... no\n", - "checking for memset... yes\n", - "checking for rint... yes\n", - "checking for socket... yes\n", - "checking for recvmsg... yes\n", - "checking for sqrt... yes\n", - "checking for strerror... yes\n", - "checking for arpa/inet.h... yes\n", - "checking for netdb.h... yes\n", - "checking for netinet/in.h... yes\n", - "checking for sys/file.h... yes\n", - "checking for sys/ioctl.h... yes\n", - "checking for sys/socket.h... yes\n", - "checking for _Bool... no\n", - "checking for stdbool.h that conforms to C99... yes\n", - "checking for GNU libc compatible malloc... yes\n", - "checking for OpenMP flag of C++ compiler... -fopenmp\n", - "checking for ptrdiff_t... yes\n", - "checking for int16_t... yes\n", - "checking for int32_t... yes\n", - "checking for int64_t... yes\n", - "checking for int8_t... yes\n", - "checking for pid_t... yes\n", - "checking for size_t... yes\n", - "checking for ssize_t... yes\n", - "checking for uint16_t... yes\n", - "checking for uint32_t... yes\n", - "checking for uint64_t... yes\n", - "checking for uint8_t... yes\n", - "checking for long double with more range or precision than double... yes\n", - "checking for numa_node_of_cpu in -lnuma... yes\n", - "checking for hwloc_topology_init in -lhwloc... yes\n", - "checking for nvcc... /usr/local/cuda/bin/nvcc\n", - "checking for nvprune... /usr/local/cuda/bin/nvprune\n", - "checking for cuobjdump... /usr/local/cuda/bin/cuobjdump\n", - "checking for a working CUDA installation... yes - v11.1\n", - "checking for CUDA CXX standard support... C++17\n", - "checking for valid CUDA architectures... found: 35 37 50 52 53 60 61 62 70 72 75 80 86\n", - "checking which CUDA architectures to target... 70 75\n", - "checking for valid requested CUDA architectures... yes\n", - "checking for Pascal-style CUDA managed memory... yes\n", - "checking for /dev/shm... yes\n", - "checking if the compiler accepts '-march=native'... yes\n", - "checking whether python executable path has been provided... no\n", - "checking for python... /usr/local/bin/python\n", - "checking whether /usr/local/bin/python as ctypesgen... yes\n", - "checking whether docker executable path has been provided... no\n", - "checking for docker... no\n", - "checking for doxygen... no\n", - "configure: WARNING: doxygen not found - will not generate any doxygen documentation\n", - "checking for perl... /usr/bin/perl\n", - "configure: creating ./config.status\n", - "config.status: creating config.mk\n", - "config.status: creating Makefile\n", - "config.status: creating src/Makefile\n", - "config.status: creating python/Makefile\n", - "config.status: creating share/bifrost.pc\n", - "config.status: creating src/bifrost/config.h\n", - "config.status: executing libtool commands\n", - "\n", - "configure: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms\n", - "\n", - "configure: cuda: yes - v11.1 - 70 75\n", - "configure: numa: yes\n", - "configure: hwloc: yes\n", - "configure: libvma: no\n", - "configure: python bindings: yes\n", - "configure: memory alignment: 4096\n", - "configure: logging directory: /dev/shm/bifrost\n", - "configure: options: native map_cache\n", - "\n", - "Bifrost is now ready to be compiled. Please run 'make'\n", - "\n", - "make -C src all\n", - "make[1]: Entering directory '/root/bifrost/src'\n", - "Building C++ source file common.cpp\n", - "Building C++ source file memory.cpp\n", - "Building C++ source file fileutils.cpp\n", - "Building C++ source file affinity.cpp\n", - "Building C++ source file cuda.cpp\n", - "Building C++ source file testsuite.cpp\n", - "Building C++ source file quantize.cpp\n", - "Building C++ source file ring_impl.cpp\n", - "Building C++ source file unpack.cpp\n", - "Building C++ source file ring.cpp\n", - "Building C++ source file array.cpp\n", - "Building C++ source file address.cpp\n", - "Building C++ source file udp_socket.cpp\n", - "Building C++ source file proclog.cpp\n", - "Building C++ source file udp_transmit.cpp\n", - "Building C++ source file udp_capture.cpp\n", - "Building CUDA source file transpose.cu\n", - "Building CUDA source file fft.cu\n", - "Building CUDA source file fdmt.cu\n", - "Building C++ source file map.cpp\n", - "Building C++ source file trace.cpp\n", - "Building CUDA source file linalg.cu\n", - "Building CUDA source file linalg_kernels.cu\n", - "Building CUDA source file romein_kernels.cu\n", - "Building CUDA source file romein.cu\n", - "Building CUDA source file fir.cu\n", - "Building CUDA source file reduce.cu\n", - "Building CUDA source file guantize.cu\n", - "Generating libbifrost.version\n", - "Building CUDA source file gunpack.cu\n", - "Linking _cuda_device_link.o\n", - "\u001b[01m\u001b[Ktranspose.cu:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[KBFstatus \n", - " transpose_simple(const BFarray*, const BFarray*, const int*)\u001b[m\u001b[K’:\n", - "\u001b[01m\u001b[Ktranspose.cu:319:32:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Kaxes_inverted\u001b[m\u001b[K’\n", - " may be used uninitialized in this function \n", - " [\u001b[01;35m\u001b[K-Wmaybe-uninitialized\u001b[m\u001b[K]\n", - " func_str += hex_digits[a\u001b[01;35m\u001b[Kxes[0]]\u001b[m\u001b[K;\n", - " \u001b[01;35m\u001b[K~~~~~~^\u001b[m\u001b[K\n", - "Linking libbifrost.so.0.10\n", - "Successfully built libbifrost.so.0.10\n", - "make[1]: Leaving directory '/root/bifrost/src'\n", - "make -C python build\n", - "make[1]: Entering directory '/root/bifrost/python'\n", - "# Build the libbifrost wrapper\n", - "/usr/local/bin/python -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -lbifrost -I../src ../src/bifrost/address.h ../src/bifrost/memory.h ../src/bifrost/config.h ../src/bifrost/ring.h ../src/bifrost/array.h ../src/bifrost/cuda.h ../src/bifrost/transpose.h ../src/bifrost/testsuite.h ../src/bifrost/udp_capture.h ../src/bifrost/linalg.h ../src/bifrost/udp_transmit.h ../src/bifrost/common.h ../src/bifrost/unpack.h ../src/bifrost/udp_socket.h ../src/bifrost/affinity.h ../src/bifrost/fft.h ../src/bifrost/map.h ../src/bifrost/proclog.h ../src/bifrost/fdmt.h ../src/bifrost/quantize.h ../src/bifrost/fir.h ../src/bifrost/romein.h ../src/bifrost/reduce.h -o bifrost/libbifrost_generated.py\n", - "INFO: Status: Preprocessing /tmp/tmp_8rbhedy.h\n", - "INFO: Status: gcc -E -U __GNUC__ -dD -I\"../src\" \"-D__extension__=\" \"-D__const=const\" \"-D__asm__(x)=\" \"-D__asm(x)=\" \"-DCTYPESGEN=1\" \"/tmp/tmp_8rbhedy.h\"\n", - "INFO: Status: Parsing /tmp/tmp_8rbhedy.h\n", - "INFO: Status: Processing description list.\n", - "INFO: Status: Writing to bifrost/libbifrost_generated.py.\n", - "INFO: Status: Wrapping complete.\n", - "# WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p)\n", - "/bin/sed -i.orig -e 's/POINTER(c_char)/c_char_p/g' bifrost/libbifrost_generated.py\n", - "# WAR for a buggy WAR in ctypesgen that breaks type checking and auto-byref functionality\n", - "/bin/sed -i.orig -e 's/def POINTER/def POINTER_not_used/' bifrost/libbifrost_generated.py\n", - "# WAR for a buggy WAR in ctypesgen that breaks string buffer arguments (e.g., as in address.py)\n", - "/bin/sed -i.orig -e 's/class String/String = c_char_p\\nclass String_not_used/' bifrost/libbifrost_generated.py\n", - "/bin/sed -i.orig -e 's/String.from_param/String_not_used.from_param/g' bifrost/libbifrost_generated.py\n", - "/bin/sed -i.orig -e 's/def ReturnString/ReturnString = c_char_p\\ndef ReturnString_not_used/' bifrost/libbifrost_generated.py\n", - "/bin/sed -i.orig -e '/errcheck = ReturnString/s/^/#/' bifrost/libbifrost_generated.py\n", - "/usr/local/bin/python setup.py build \n", - "running build\n", - "running build_py\n", - "creating build\n", - "creating build/lib\n", - "creating build/lib/bifrost\n", - "copying bifrost/block.py -> build/lib/bifrost\n", - "copying bifrost/ring.py -> build/lib/bifrost\n", - "copying bifrost/GPUArray.py -> build/lib/bifrost\n", - "copying bifrost/ndarray.py -> build/lib/bifrost\n", - "copying bifrost/romein.py -> build/lib/bifrost\n", - "copying bifrost/Space.py -> build/lib/bifrost\n", - "copying bifrost/fdmt.py -> build/lib/bifrost\n", - "copying bifrost/core.py -> build/lib/bifrost\n", - "copying bifrost/memory.py -> build/lib/bifrost\n", - "copying bifrost/pipeline.py -> build/lib/bifrost\n", - "copying bifrost/udp_capture.py -> build/lib/bifrost\n", - "copying bifrost/linalg.py -> build/lib/bifrost\n", - "copying bifrost/map.py -> build/lib/bifrost\n", - "copying bifrost/affinity.py -> build/lib/bifrost\n", - "copying bifrost/DataType.py -> build/lib/bifrost\n", - "copying bifrost/dtype.py -> build/lib/bifrost\n", - "copying bifrost/quantize.py -> build/lib/bifrost\n", - "copying bifrost/temp_storage.py -> build/lib/bifrost\n", - "copying bifrost/device.py -> build/lib/bifrost\n", - "copying bifrost/transpose.py -> build/lib/bifrost\n", - "copying bifrost/psrdada.py -> build/lib/bifrost\n", - "copying bifrost/reduce.py -> build/lib/bifrost\n", - "copying bifrost/fft.py -> build/lib/bifrost\n", - "copying bifrost/__init__.py -> build/lib/bifrost\n", - "copying bifrost/fir.py -> build/lib/bifrost\n", - "copying bifrost/portaudio.py -> build/lib/bifrost\n", - "copying bifrost/header_standard.py -> build/lib/bifrost\n", - "copying bifrost/unpack.py -> build/lib/bifrost\n", - "copying bifrost/ring2.py -> build/lib/bifrost\n", - "copying bifrost/address.py -> build/lib/bifrost\n", - "copying bifrost/libbifrost.py -> build/lib/bifrost\n", - "copying bifrost/proclog.py -> build/lib/bifrost\n", - "copying bifrost/guppi_raw.py -> build/lib/bifrost\n", - "copying bifrost/udp_transmit.py -> build/lib/bifrost\n", - "copying bifrost/udp_socket.py -> build/lib/bifrost\n", - "copying bifrost/libbifrost_generated.py -> build/lib/bifrost\n", - "copying bifrost/sigproc.py -> build/lib/bifrost\n", - "copying bifrost/block_chainer.py -> build/lib/bifrost\n", - "copying bifrost/sigproc2.py -> build/lib/bifrost\n", - "copying bifrost/units.py -> build/lib/bifrost\n", - "creating build/lib/bifrost/views\n", - "copying bifrost/views/basic_views.py -> build/lib/bifrost/views\n", - "copying bifrost/views/__init__.py -> build/lib/bifrost/views\n", - "creating build/lib/bifrost/version\n", - "copying bifrost/version/__init__.py -> build/lib/bifrost/version\n", - "copying bifrost/version/__main__.py -> build/lib/bifrost/version\n", - "creating build/lib/bifrost/blocks\n", - "copying bifrost/blocks/wav.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/detect.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/correlate.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/fdmt.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/audio.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/reverse.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/binary_io.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/quantize.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/copy.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/transpose.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/psrdada.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/reduce.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/fft.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/__init__.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/serialize.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/unpack.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/fftshift.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/guppi_raw.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/sigproc.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/convert_visibilities.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/scrunch.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/accumulate.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/print_header.py -> build/lib/bifrost/blocks\n", - "creating build/lib/bifrost/telemetry\n", - "copying bifrost/telemetry/__init__.py -> build/lib/bifrost/telemetry\n", - "copying bifrost/telemetry/__main__.py -> build/lib/bifrost/telemetry\n", - "running build_scripts\n", - "creating build/scripts-3.7\n", - "copying and adjusting ../tools/setirq.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/like_pmap.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/like_top.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/like_bmon.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/getsiblings.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/pipeline2dot.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/like_ps.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/getirq.py -> build/scripts-3.7\n", - "copying ../tools/github_stats.py -> build/scripts-3.7\n", - "changing mode of build/scripts-3.7/setirq.py from 644 to 755\n", - "changing mode of build/scripts-3.7/like_pmap.py from 644 to 755\n", - "changing mode of build/scripts-3.7/like_top.py from 644 to 755\n", - "changing mode of build/scripts-3.7/like_bmon.py from 644 to 755\n", - "changing mode of build/scripts-3.7/getsiblings.py from 644 to 755\n", - "changing mode of build/scripts-3.7/pipeline2dot.py from 644 to 755\n", - "changing mode of build/scripts-3.7/like_ps.py from 644 to 755\n", - "changing mode of build/scripts-3.7/getirq.py from 644 to 755\n", - "changing mode of build/scripts-3.7/github_stats.py from 644 to 755\n", - "make[1]: Leaving directory '/root/bifrost/python'\n", - "mkdir -p /usr/local/lib\n", - "cp lib/libbifrost.so.0.10 /usr/local/lib/libbifrost.so.0.10\n", - "ln -f -s libbifrost.so.0.10 /usr/local/lib/libbifrost.so.0\n", - "ln -f -s libbifrost.so.0.10 /usr/local/lib/libbifrost.so\n", - "mkdir -p /usr/local/include/bifrost\n", - "cp src/bifrost/config.h /usr/local/include/bifrost/\n", - "mkdir -p /usr/local/lib/pkgconfig\n", - "cp share/bifrost.pc /usr/local/lib/pkgconfig/\n", - "make -C python install\n", - "make[1]: Entering directory '/root/bifrost/python'\n", - "/usr/local/bin/python setup.py build \n", - "running build\n", - "running build_py\n", - "running build_scripts\n", - "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", - "Processing /root/bifrost/python\n", - "\u001b[33m DEPRECATION: A future pip version will change local packages to be built in-place without first copying to a temporary directory. We recommend you use --use-feature=in-tree-build to test your packages with this new behavior before it becomes the default.\n", - " pip 21.3 will remove support for this functionality. You can find discussion regarding this at https://github.com/pypa/pip/issues/7555.\u001b[0m\n", - "Requirement already satisfied: numpy>=1.8.1 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (1.21.6)\n", - "Requirement already satisfied: contextlib2>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.5.5)\n", - "Requirement already satisfied: pint>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.18)\n", - "Requirement already satisfied: graphviz>=0.5.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.10.1)\n", - "Collecting ctypesgen==1.0.2\n", - " Downloading ctypesgen-1.0.2-py2.py3-none-any.whl (476 kB)\n", - "\u001b[K |████████████████████████████████| 476 kB 36.2 MB/s \n", - "\u001b[?25hRequirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (3.2.2)\n", - "Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from pint>=0.7.0->bifrost==0.10.0) (21.3)\n", - "Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from pint>=0.7.0->bifrost==0.10.0) (4.11.4)\n", - "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->pint>=0.7.0->bifrost==0.10.0) (3.8.0)\n", - "Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->pint>=0.7.0->bifrost==0.10.0) (4.1.1)\n", - "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (3.0.9)\n", - "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (0.11.0)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (1.4.3)\n", - "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (2.8.2)\n", - "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->bifrost==0.10.0) (1.15.0)\n", - "Building wheels for collected packages: bifrost\n", - " Building wheel for bifrost (setup.py) ... \u001b[?25l\u001b[?25hdone\n", - " Created wheel for bifrost: filename=bifrost-0.10.0-py3-none-any.whl size=183760 sha256=9e062a1671658778062220c0ff2d6067751ce92be1f7cb11aa17fdc53f7e43ed\n", - " Stored in directory: /tmp/pip-ephem-wheel-cache-vao467b4/wheels/35/b7/11/a795b9aa4b1dfc3b2091f793f70becd9333a0b79216d208fd5\n", - "Successfully built bifrost\n", - "Installing collected packages: ctypesgen, bifrost\n", - " Attempting uninstall: ctypesgen\n", - " Found existing installation: ctypesgen 1.0.3.dev98+g2120dbf\n", - " Uninstalling ctypesgen-1.0.3.dev98+g2120dbf:\n", - " Successfully uninstalled ctypesgen-1.0.3.dev98+g2120dbf\n", - "Successfully installed bifrost-0.10.0 ctypesgen-1.0.2\n", - "*************************************************************************\n", - "By default Bifrost installs with basic Python telemetry enabled in order\n", - "to help inform how the software is used for future development. You can\n", - "opt out of telemetry collection using:\n", - "python -m bifrost.telemetry --disable\n", - "*************************************************************************\n", - "\n", - "If you have trouble importing Bifrost from Python you may need\n", - "to set LD_LIBRARY_PATH to /usr/local/lib or have your\n", - "system administrator add this directory to '/etc/ld.so.conf'.\n", - "\n", - "make[1]: Leaving directory '/root/bifrost/python'\n", - "Libraries have been installed in:\n", - " /usr/local/lib\n", - "\n", - "If you ever happen to want to link against installed libraries\n", - "in a given directory, LIBDIR, you must either use libtool, and\n", - "specify the full pathname of the library, or use the '-LLIBDIR'\n", - "flag during linking and do at least one of the following:\n", - " - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable\n", - " during execution\n", - " - add LIBDIR to the 'LD_RUN_PATH' environment variable\n", - " during linking\n", - " - use the '-Wl,-rpath -Wl,LIBDIR' linker flag\n", - " - have your system administrator add LIBDIR to '/etc/ld.so.conf'\n", - "\n", - "See any operating system documentation about shared libraries for\n", - "more information, such as the ld(1) and ld.so(8) manual pages.\n" - ] - } - ], + "outputs": [], "source": [ + "%%capture install_log\n", + "# Import bifrost, but attempt to auto-install if needed (and we're running on\n", + "# Colab). If something goes wrong, evaluate install_log.show() in a new block\n", + "# to retrieve the details.\n", "try:\n", " import bifrost\n", "except ModuleNotFoundError:\n", " try:\n", - " import google.colab # If on colab, following install steps should work\n", + " import google.colab\n", " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", From f795a6c7d64c10412b6efdf9b196b4206e6414f5 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 27 Jun 2022 13:40:07 -0400 Subject: [PATCH 0693/1155] Colabify tutorial 01, fix some typos and improve some typesetting --- tutorial/01_useful_functions.ipynb | 932 ++++++++++++++++------------- 1 file changed, 510 insertions(+), 422 deletions(-) diff --git a/tutorial/01_useful_functions.ipynb b/tutorial/01_useful_functions.ipynb index ea509d931..bb17f7573 100644 --- a/tutorial/01_useful_functions.ipynb +++ b/tutorial/01_useful_functions.ipynb @@ -1,441 +1,529 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "5ecd430b", - "metadata": {}, - "source": [ - "# Useful Functions in Bifrost\n", - "\n", - "With the basics of how to get data onto and off of the GPU, we can now start to look at useful functions in Bifrost. Bifrost provides many functions that run on GPUs and interact via `bifrost.ndarray`s:\n", - "\n", - " * bifrost.fdmt - the fast dispersion measure transform\n", - " * bifrost.fft - multi-dimensional Fourier transforms\n", - " * bifrost.fir - finite impulse response (FIR) filters\n", - " * bifrost.linalg- linear algebra module for matrix-matrix operations\n", - " * bifrost.map - JIT functions for element-wise operations\n", - " * bifrost.quantize - quantizers for moving between floating and integer types\n", - " * bifrost.reduce - reduction (sum, min, max, etc.) array operations\n", - " * bifrost.romein - data gridder\n", - " * bifrost.transpose - data transpositions\n", - " * bifrost.unpack - unpackers for moving between integer and floating types\n", - "\n", - "We have already seen maps and FFTs in action so let's look at some of the other functions here." - ] - }, - { - "cell_type": "markdown", - "id": "bd3473d6", - "metadata": {}, - "source": [ - "## bifrost.reduce\n", - "\n", - "`bifrost.reduce` is a complement to `bifrost.map` that deals with operations that reduce the size of an array, like a summation along an axis." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "ccc10558", - "metadata": {}, - "outputs": [ + "cells": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "numpy: [ -5.5700846 36.078346 63.174416 -13.507341 15.61409 26.860054\n", - " -48.392242 -37.947693 32.48661 0.6984892]\n", - "bifrost: [ -5.5700974 36.078346 63.174435 -13.507346 15.614068 26.860054\n", - " -48.39224 -37.94771 32.486645 0.6984974]\n" - ] - } - ], - "source": [ - "import bifrost, numpy\n", - "data = numpy.random.randn(10, 1000)\n", - "data = data.astype(numpy.float32)\n", - "sdata = data.sum(axis=1)\n", - "print('numpy:', sdata)\n", - "\n", - "data = bifrost.ndarray(data, space='cuda')\n", - "sdata = bifrost.ndarray(shape=(data.shape[0], 1), dtype=sdata.dtype,\n", - " space='cuda')\n", - "bifrost.reduce(data, sdata, op='sum')\n", - "sdata2 = sdata.copy(space='system')\n", - "print('bifrost:', sdata2[:,0])" - ] - }, - { - "cell_type": "markdown", - "id": "afb6b49d", - "metadata": {}, - "source": [ - "During a reduction Bifrost uses the difference in the dimensions of the input and output arrays to determine what axis to run the reduction on. Here we have summed along the second axis by setting that dimension to one for sdata.\n", - "\n", - "In addition to sum, there are also reduction operations that work on power, i.e., magnitude squared:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "17a76f06", - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "id": "5ecd430b", + "metadata": { + "id": "5ecd430b" + }, + "source": [ + "# Useful Functions in Bifrost\n", + "\n", + "\"Open\n", + "\n", + "With the basics of how to get data onto and off of the GPU, we can now start to look at useful functions in Bifrost. Bifrost provides many functions that run on GPUs and interact via `bifrost.ndarray`s:\n", + "\n", + " * `bifrost.fdmt` — the fast dispersion measure transform\n", + " * `bifrost.fft` — multi-dimensional Fourier transforms\n", + " * `bifrost.fir` — finite impulse response (FIR) filters\n", + " * `bifrost.linalg` — linear algebra module for matrix-matrix operations\n", + " * `bifrost.map` — JIT functions for element-wise operations\n", + " * `bifrost.quantize` — quantizers for moving between floating and integer types\n", + " * `bifrost.reduce` — reduction (sum, min, max, etc.) array operations\n", + " * `bifrost.romein` — data gridder\n", + " * `bifrost.transpose` — data transpositions\n", + " * `bifrost.unpack` — unpackers for moving between integer and floating types\n", + "\n", + "We have already seen maps and FFTs in action so let's look at some of the other functions here." + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "numpy: [ 966.90137 1045.7456 932.72754 961.6767 956.31177 1002.28186\n", - " 1080.3342 964.5902 964.6155 971.55927]\n", - "bifrost: [ 966.9012 1045.7462 932.7264 961.676 956.3119 1002.2823\n", - " 1080.334 964.58997 964.61554 971.5588 ]\n" - ] - } - ], - "source": [ - "data = numpy.random.randn(10, 1000)\n", - "data = data.astype(numpy.float32)\n", - "sdata = (data**2).sum(axis=1)\n", - "print('numpy:', sdata)\n", - "\n", - "data = bifrost.ndarray(data, space='cuda')\n", - "sdata = bifrost.ndarray(shape=(data.shape[0], 1), dtype=sdata.dtype,\n", - " space='cuda')\n", - "bifrost.reduce(data, sdata, op='pwrsum')\n", - "sdata2 = sdata.copy(space='system')\n", - "print('bifrost:', sdata2[:,0])" - ] - }, - { - "cell_type": "markdown", - "id": "df8b8726", - "metadata": {}, - "source": [ - "`bifrost.reduce` currently only support explicit reduction along one axies at a time. However, it may be possible to run multi-dimensional reductions be reshaping the data:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "50c5887d", - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "%%capture install_log\n", + "# Import bifrost, but attempt to auto-install if needed (and we're running on\n", + "# Colab). If something goes wrong, evaluate install_log.show() in a new block\n", + "# to retrieve the details.\n", + "try:\n", + " import bifrost\n", + "except ModuleNotFoundError:\n", + " try:\n", + " import google.colab\n", + " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", + " import bifrost\n", + " except ModuleNotFoundError:\n", + " print(\"Sorry, could not import bifrost and we're not on colab.\")" + ], + "metadata": { + "id": "fM8F7RpjKayt" + }, + "id": "fM8F7RpjKayt", + "execution_count": 1, + "outputs": [] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "numpy: 10009.424\n", - "bifrost: 10009.425\n" - ] - } - ], - "source": [ - "data = numpy.random.randn(10, 1000)\n", - "data = data.astype(numpy.float32)\n", - "sdata = (data**2).sum()\n", - "print('numpy:', sdata)\n", - "\n", - "data = bifrost.ndarray(data, space='cuda')\n", - "data = data.reshape(data.shape[0]*data.shape[1])\n", - "sdata = bifrost.ndarray(shape=(1,), dtype=sdata.dtype, space='cuda')\n", - "bifrost.reduce(data, sdata, op='pwrsum')\n", - "sdata2 = sdata.copy(space='system')\n", - "print('bifrost:', sdata2[0])" - ] - }, - { - "cell_type": "markdown", - "id": "85537a6d", - "metadata": {}, - "source": [ - "## bifrost.transpose\n", - "\n", - "For some data processing it may be more convenient to have the axis in a different order. To transpose a GPU array in Bifrost there is the `bifrost.transpose` function:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "1c7cf1a4", - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "id": "bd3473d6", + "metadata": { + "id": "bd3473d6" + }, + "source": [ + "## bifrost.reduce\n", + "\n", + "`bifrost.reduce` is a complement to `bifrost.map` that deals with operations that reduce the size of an array, like a summation along an axis." + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "numpy: 0.97977257 -> 0.97977257\n", - "bifrost: 0.97977257 -> 0.97977257\n" - ] - } - ], - "source": [ - "data = numpy.random.randn(10, 1000)\n", - "data = data.astype(numpy.float32)\n", - "tdata = data.T.copy()\n", - "print('numpy:', data[0,9], '->', tdata[9,0])\n", - "\n", - "data = bifrost.ndarray(data, space='cuda')\n", - "tdata = bifrost.ndarray(shape=data.shape[::-1], dtype=data.dtype,\n", - " space='cuda')\n", - "bifrost.transpose(tdata, data, axes=(1,0))\n", - "data2 = data.copy(space='system')\n", - "tdata2 = tdata.copy(space='system')\n", - "print('bifrost:', data2[0,9], '->', tdata2[9,0])" - ] - }, - { - "cell_type": "markdown", - "id": "bf2d856f", - "metadata": {}, - "source": [ - "Unlike `bifrost.reduce`, `bifrost.transpose` requires you to have both an output array with the correct shape and to explicitly specify the axis ordering in the call.\n", - "\n", - "This function also support for general data re-ordering operations as well:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "40228867", - "metadata": {}, - "outputs": [ + "cell_type": "code", + "execution_count": 2, + "id": "ccc10558", + "metadata": { + "id": "ccc10558", + "outputId": "ee89a590-fb00-4aee-9e66-efcd9a882b28", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "numpy: [ 4.140649 18.068268 -28.093277 -3.199566 -7.7478523 32.780075\n", + " -37.850746 -24.040245 25.390383 54.569324 ]\n", + "bifrost: [ 4.140649 18.068268 -28.093285 -3.1995583 -7.7478404 32.780083\n", + " -37.850758 -24.040249 25.390385 54.56932 ]\n" + ] + } + ], + "source": [ + "import numpy\n", + "data = numpy.random.randn(10, 1000)\n", + "data = data.astype(numpy.float32)\n", + "sdata = data.sum(axis=1)\n", + "print('numpy:', sdata)\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "sdata = bifrost.ndarray(shape=(data.shape[0], 1), dtype=sdata.dtype,\n", + " space='cuda')\n", + "bifrost.reduce(data, sdata, op='sum')\n", + "sdata2 = sdata.copy(space='system')\n", + "print('bifrost:', sdata2[:,0])" + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "numpy: 0.9396533 -> 0.9396533\n", - "bifrost: 0.9396533 -> 0.9396533\n" - ] - } - ], - "source": [ - "data = numpy.random.randn(10, 20, 30, 40)\n", - "data = data.astype(numpy.float32)\n", - "tdata = data.transpose(1,3,2,0).copy()\n", - "print('numpy:', data[1,3,5,7], '->', tdata[3,7,5,1])\n", - "\n", - "data = bifrost.ndarray(data, space='cuda')\n", - "tdata = bifrost.ndarray(shape=[data.shape[v] for v in (1,3,2,0)],\n", - " dtype=data.dtype, space='cuda')\n", - "bifrost.transpose(tdata, data, axes=(1,3,2,0))\n", - "data2 = data.copy(space='system')\n", - "tdata2 = tdata.copy(space='system')\n", - "print('bifrost:', data2[1,3,5,7], '->', tdata2[3,7,5,1])" - ] - }, - { - "cell_type": "markdown", - "id": "6e291072", - "metadata": {}, - "source": [ - "## bifrost.fdmt\n", - "\n", - "Bifrost includes a module for computing the fast dispersion measure transform of Zackay and Ofek (2017, ApJ 835 11) for incoherent dedispersion. Like the `bifrost.fft` module using the FDMT requires some setup. To get started let's make a simulation dispersed pulse at a DM of 5.5 pc cm^3:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "acb5f590", - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "id": "afb6b49d", + "metadata": { + "id": "afb6b49d" + }, + "source": [ + "During a reduction Bifrost uses the difference in the dimensions of the input and output arrays to determine what axis to run the reduction on. Here we have summed along the second axis by setting that dimension to one for sdata.\n", + "\n", + "In addition to sum, there are also reduction operations that work on power, i.e., magnitude squared:" + ] + }, { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Frequency [MHz]')" + "cell_type": "code", + "execution_count": 3, + "id": "17a76f06", + "metadata": { + "id": "17a76f06", + "outputId": "55a60a6e-f08c-4b0b-bc93-dc99ed30e95f", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "numpy: [1010.9479 1074.0662 997.83887 917.8666 988.5895 993.8688\n", + " 1045.6895 993.13806 1067.0187 1014.4079 ]\n", + "bifrost: [1010.94824 1074.0671 997.8386 917.8666 988.58954 993.8687\n", + " 1045.6901 993.1382 1067.019 1014.4079 ]\n" + ] + } + ], + "source": [ + "data = numpy.random.randn(10, 1000)\n", + "data = data.astype(numpy.float32)\n", + "sdata = (data**2).sum(axis=1)\n", + "print('numpy:', sdata)\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "sdata = bifrost.ndarray(shape=(data.shape[0], 1), dtype=sdata.dtype,\n", + " space='cuda')\n", + "bifrost.reduce(data, sdata, op='pwrsum')\n", + "sdata2 = sdata.copy(space='system')\n", + "print('bifrost:', sdata2[:,0])" ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" + "cell_type": "markdown", + "id": "df8b8726", + "metadata": { + "id": "df8b8726" + }, + "source": [ + "`bifrost.reduce` currently only supports explicit reduction along one axis at a time. However, it may be possible to run multi-dimensional reductions for reshaping the data:" ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "DM = 1.25\n", - "time = numpy.linspace(0, 2, 1000)\n", - "freq = numpy.linspace(50e6, 70e6, 200)\n", - "data = numpy.random.randn(freq.size, time.size)\n", - "data[:,100] += 10.0\n", - "data[:,101] += 8.0\n", - "data[:,102] += 4.0\n", - "data[:,103] += 1.0\n", - "for i in range(freq.size):\n", - " delay = 4.15e-3 * DM * ((freq[i]/1e9)**-2 - (freq[-1]/1e9)**-2)\n", - " delay = int(round(delay / (time[1] - time[0])))\n", - " data[i,:] = numpy.roll(data[i,:], delay)\n", - "data = data.astype(numpy.float32)\n", - "\n", - "import pylab\n", - "pylab.imshow(data, extent=(time[0], time[-1], freq[-1]/1e6, freq[0]/1e6))\n", - "pylab.axis('auto')\n", - "pylab.xlabel('Time [s]')\n", - "pylab.ylabel('Frequency [MHz]')" - ] - }, - { - "cell_type": "markdown", - "id": "a65b79b7", - "metadata": {}, - "source": [ - "Now setup and run the FDMT on the data:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "7c33477b", - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "Text(0, 0.5, 'DM [pc cm$^{-3}$]')" + "cell_type": "code", + "execution_count": 4, + "id": "50c5887d", + "metadata": { + "id": "50c5887d", + "outputId": "6725e484-515c-44e2-9737-65c095725ad6", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "numpy: 10091.392\n", + "bifrost: 10091.382\n" + ] + } + ], + "source": [ + "data = numpy.random.randn(10, 1000)\n", + "data = data.astype(numpy.float32)\n", + "sdata = (data**2).sum()\n", + "print('numpy:', sdata)\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "data = data.reshape(data.shape[0]*data.shape[1])\n", + "sdata = bifrost.ndarray(shape=(1,), dtype=sdata.dtype, space='cuda')\n", + "bifrost.reduce(data, sdata, op='pwrsum')\n", + "sdata2 = sdata.copy(space='system')\n", + "print('bifrost:', sdata2[0])" ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" + "cell_type": "markdown", + "id": "85537a6d", + "metadata": { + "id": "85537a6d" + }, + "source": [ + "## bifrost.transpose\n", + "\n", + "For some data processing it may be more convenient to have the axis in a different order. To transpose a GPU array in Bifrost there is the `bifrost.transpose` function:" ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "data = bifrost.ndarray(data, space='cuda')\n", - "ddata = bifrost.ndarray(shape=(time.size, time.size),\n", - " dtype=data.dtype, space='cuda')\n", - "f = bifrost.fdmt.Fdmt()\n", - "f.init(freq.size, time.size, freq[0]/1e6, (freq[1]-freq[0])/1e6)\n", - "f.execute(data, ddata)\n", - "ddata2 = ddata.copy(space='system')\n", - "\n", - "tint = time[1] - time[0]\n", - "dm = numpy.arange(time.size)*1.0\n", - "dm *= tint / 4.15e-3 / ((freq[0]/1e9)**-2 - (freq[-1]/1e9)**-2)\n", - "\n", - "pylab.imshow(ddata2, extent=(time[0], time[-1], dm[-1], dm[0]))\n", - "pylab.axis('auto')\n", - "pylab.xlabel('Time [s]')\n", - "pylab.ylabel('DM [pc cm$^{-3}$]')" - ] - }, - { - "cell_type": "markdown", - "id": "a307015b", - "metadata": {}, - "source": [ - "## bifrost.linalg.LinAlg\n", - "\n", - "The final useful function in Bifrost that we will explore is `bifrost.linalg.LinAlg`. This function implements a varity of matrix-matrix operations. It supports:\n", - "\n", - " * C = $\\alpha$A $\\times$ B + $\\beta$ C\n", - " * C = $\\alpha$A $\\times$ A$^{H}$ + $\\beta$ C $-$ if B is not provided\n", - " * C = $\\alpha$B$^{H}$ $\\times$ B + $\\beta$ C $-$ if A is not provided\n", - "\n", - "where $\\alpha$ and $\\beta$ are scalar values, $\\times$ is a matrix product, and $^{H}$ denotes a Hermetian transpose. For matricies with more than two dimensions the semantics are the same as for `numpy.matmul`: The last two dims represent the matrix, and all other dimensions are used as batch dimensions to be matched or broadcast between A and B.\n", - "\n", - "These three operations make this function useful for implementing simple beamformers or cross-correlation operations. For a beamformer:" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "95844ac9", - "metadata": {}, - "outputs": [ + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1c7cf1a4", + "metadata": { + "id": "1c7cf1a4", + "outputId": "f8371a1f-f594-4a08-d4a6-fba1ec6faea3", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "numpy: -0.3481426 -> -0.3481426\n", + "bifrost: -0.3481426 -> -0.3481426\n" + ] + } + ], + "source": [ + "data = numpy.random.randn(10, 1000)\n", + "data = data.astype(numpy.float32)\n", + "tdata = data.T.copy()\n", + "print('numpy:', data[0,9], '->', tdata[9,0])\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "tdata = bifrost.ndarray(shape=data.shape[::-1], dtype=data.dtype,\n", + " space='cuda')\n", + "bifrost.transpose(tdata, data, axes=(1,0))\n", + "data2 = data.copy(space='system')\n", + "tdata2 = tdata.copy(space='system')\n", + "print('bifrost:', data2[0,9], '->', tdata2[9,0])" + ] + }, + { + "cell_type": "markdown", + "id": "bf2d856f", + "metadata": { + "id": "bf2d856f" + }, + "source": [ + "Unlike `bifrost.reduce`, `bifrost.transpose` requires you to have both an output array with the correct shape and to explicitly specify the axis ordering in the call.\n", + "\n", + "This function also supports general data re-ordering operations as well:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "40228867", + "metadata": { + "id": "40228867", + "outputId": "95617589-b0e9-44ab-a16d-2f451892ed80", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "numpy: -0.78903913 -> -0.78903913\n", + "bifrost: -0.78903913 -> -0.78903913\n" + ] + } + ], + "source": [ + "data = numpy.random.randn(10, 20, 30, 40)\n", + "data = data.astype(numpy.float32)\n", + "tdata = data.transpose(1,3,2,0).copy()\n", + "print('numpy:', data[1,3,5,7], '->', tdata[3,7,5,1])\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "tdata = bifrost.ndarray(shape=[data.shape[v] for v in (1,3,2,0)],\n", + " dtype=data.dtype, space='cuda')\n", + "bifrost.transpose(tdata, data, axes=(1,3,2,0))\n", + "data2 = data.copy(space='system')\n", + "tdata2 = tdata.copy(space='system')\n", + "print('bifrost:', data2[1,3,5,7], '->', tdata2[3,7,5,1])" + ] + }, + { + "cell_type": "markdown", + "id": "6e291072", + "metadata": { + "id": "6e291072" + }, + "source": [ + "## bifrost.fdmt\n", + "\n", + "Bifrost includes a module for computing the fast dispersion measure transform of [Zackay and Ofek](https://iopscience.iop.org/article/10.3847/1538-4357/835/1/11/meta) (2017, ApJ 835 11) for incoherent dedispersion. Like the `bifrost.fft` module using the FDMT requires some setup. To get started let's make a simulation dispersed pulse at a DM of 5.5 pc/cm³:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "acb5f590", + "metadata": { + "id": "acb5f590", + "outputId": "f5d0776c-f6cb-4384-c1e9-a6efb157f21d", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 283 + } + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "DM = 1.25\n", + "time = numpy.linspace(0, 2, 1000)\n", + "freq = numpy.linspace(50e6, 70e6, 200)\n", + "data = numpy.random.randn(freq.size, time.size)\n", + "data[:,100] += 10.0\n", + "data[:,101] += 8.0\n", + "data[:,102] += 4.0\n", + "data[:,103] += 1.0\n", + "for i in range(freq.size):\n", + " delay = 4.15e-3 * DM * ((freq[i]/1e9)**-2 - (freq[-1]/1e9)**-2)\n", + " delay = int(round(delay / (time[1] - time[0])))\n", + " data[i,:] = numpy.roll(data[i,:], delay)\n", + "data = data.astype(numpy.float32)\n", + "\n", + "import pylab\n", + "pylab.imshow(data, extent=(time[0], time[-1], freq[-1]/1e6, freq[0]/1e6))\n", + "pylab.axis('auto')\n", + "pylab.xlabel('Time [s]')\n", + "pylab.ylabel('Frequency [MHz]'); None" + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "numpy.matmul: 0.6552756\n", - "numpy manual: 0.6552757\n", - "bifrost: 0.65527564\n" - ] + "cell_type": "markdown", + "id": "a65b79b7", + "metadata": { + "id": "a65b79b7" + }, + "source": [ + "Now setup and run the FDMT on the data:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "7c33477b", + "metadata": { + "id": "7c33477b", + "outputId": "49870b5d-a24e-47ef-c324-8fe5290b5d90", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 283 + } + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "data = bifrost.ndarray(data, space='cuda')\n", + "ddata = bifrost.ndarray(shape=(time.size, time.size),\n", + " dtype=data.dtype, space='cuda')\n", + "f = bifrost.fdmt.Fdmt()\n", + "f.init(freq.size, time.size, freq[0]/1e6, (freq[1]-freq[0])/1e6)\n", + "f.execute(data, ddata)\n", + "ddata2 = ddata.copy(space='system')\n", + "\n", + "tint = time[1] - time[0]\n", + "dm = numpy.arange(time.size)*1.0\n", + "dm *= tint / 4.15e-3 / ((freq[0]/1e9)**-2 - (freq[-1]/1e9)**-2)\n", + "\n", + "pylab.imshow(ddata2, extent=(time[0], time[-1], dm[-1], dm[0]))\n", + "pylab.axis('auto')\n", + "pylab.xlabel('Time [s]')\n", + "pylab.ylabel('DM [pc cm$^{-3}$]')\n", + "pylab.yticks(numpy.arange(0.0, 2.5, 0.625)); None" + ] + }, + { + "cell_type": "markdown", + "id": "a307015b", + "metadata": { + "id": "a307015b" + }, + "source": [ + "## bifrost.linalg.LinAlg\n", + "\n", + "The final useful function in Bifrost that we will explore is `bifrost.linalg.LinAlg`. This function implements a variety of matrix-matrix operations. It supports:\n", + "\n", + " * $C = \\alpha A × B + \\beta C$\n", + " * $C = \\alpha A × A^H + \\beta C$ (if $B$ is not provided)\n", + " * $C = \\alpha B^H × B + \\beta C$ (if $A$ is not provided)\n", + "\n", + "where $\\alpha$ and $\\beta$ are scalar values, $×$ is a matrix product, and $·^{H}$ denotes a Hermetian transpose. For matricies with more than two dimensions the semantics are the same as for `numpy.matmul`: The last two dims represent the matrix, and all other dimensions are used as batch dimensions to be matched or broadcast between $A$ and $B$.\n", + "\n", + "These three operations make this function useful for implementing simple beamformers or cross-correlation operations. For a beamformer:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "95844ac9", + "metadata": { + "id": "95844ac9", + "outputId": "d65a46ce-4ab9-4219-d2ac-63b01b48aedc", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "numpy.matmul: -0.06674242\n", + "numpy manual: -0.06674248\n", + "bifrost: -0.06674242\n" + ] + } + ], + "source": [ + "data = numpy.random.randn(1000, 32, 48) # time, channel, input\n", + "data = data.astype(numpy.float32) # beam, channel input\n", + "coeffs = numpy.ones((1, 32, 48))\n", + "for i in range(coeffs.shape[1]):\n", + " coeffs[:,i] = i/32.0\n", + "coeffs = coeffs.astype(numpy.float32)\n", + "beam = numpy.matmul(coeffs.transpose(1,0,2), data.transpose(1,2,0))\n", + "beam = beam.transpose(2,0,1) # time, channel, beam\n", + "print('numpy.matmul:', beam[0,10,0])\n", + "print('numpy manual:', (data[0,10,:]*coeffs[0,10,:]).sum())\n", + "\n", + "data = bifrost.ndarray(data, space='cuda')\n", + "coeffs = bifrost.ndarray(coeffs, space='cuda')\n", + "beam = bifrost.ndarray(shape=(32,1,1000), dtype=numpy.float32,\n", + " space='cuda')\n", + "l = bifrost.linalg.LinAlg()\n", + "beam = l.matmul(1.0, coeffs.transpose(1,0,2), data.transpose(1,2,0),\n", + " 0.0, beam)\n", + "beam2 = beam.copy(space='system')\n", + "beam2 = beam2.transpose(2, 0, 1)\n", + "print('bifrost:', beam2[0,10,0])" + ] + }, + { + "cell_type": "markdown", + "id": "a59c251e", + "metadata": { + "id": "a59c251e" + }, + "source": [ + "This example illustrates one of the complexities when dealing with real data. The axis order that makes the most sense for some operations may not be the best match for other operations. Luckily `bifrost.linalg.LinAlg` supports at least some on-the-fly transpose operations and an explict transpose may not be necessary." + ] + }, + { + "cell_type": "markdown", + "id": "48298668", + "metadata": { + "id": "48298668" + }, + "source": [ + "## Remaining Functions\n", + "\n", + "The remaining functions of `bifrost.fir`, `bifrost.romein`, `bifrost.quantize`, and `bifrost.unpack` will not be addressed here. However, `bifrost.quantize` and `bifrost.unpack` will be used later in the tutorial." + ] } - ], - "source": [ - "data = numpy.random.randn(1000, 32, 48) # time, channel, input\n", - "data = data.astype(numpy.float32) # beam, channel input\n", - "coeffs = numpy.ones((1, 32, 48))\n", - "for i in range(coeffs.shape[1]):\n", - " coeffs[:,i] = i/32.0\n", - "coeffs = coeffs.astype(numpy.float32)\n", - "beam = numpy.matmul(coeffs.transpose(1,0,2), data.transpose(1,2,0))\n", - "beam = beam.transpose(2,0,1) # time, channel, beam\n", - "print('numpy.matmul:', beam[0,10,0])\n", - "print('numpy manual:', (data[0,10,:]*coeffs[0,10,:]).sum())\n", - "\n", - "data = bifrost.ndarray(data, space='cuda')\n", - "coeffs = bifrost.ndarray(coeffs, space='cuda')\n", - "beam = bifrost.ndarray(shape=(32,1,1000), dtype=numpy.float32,\n", - " space='cuda')\n", - "l = bifrost.linalg.LinAlg()\n", - "beam = l.matmul(1.0, coeffs.transpose(1,0,2), data.transpose(1,2,0),\n", - " 0.0, beam)\n", - "beam2 = beam.copy(space='system')\n", - "beam2 = beam2.transpose(2, 0, 1)\n", - "print('bifrost:', beam2[0,10,0])" - ] - }, - { - "cell_type": "markdown", - "id": "a59c251e", - "metadata": {}, - "source": [ - "This example illustrates one of the complexities when dealing with real data. The axis order that makes the most sense for some operations may not be the best match for other operations. Luckily `bifrost.linalg.LinAlg` supports at least some on-the-fly transpose operations and an explict transpose may not be necessary." - ] - }, - { - "cell_type": "markdown", - "id": "48298668", - "metadata": {}, - "source": [ - "## Remaining Functions\n", - "\n", - "The remaining functions of `bifrost.fir`, `bifrost.romein`, `bifrost.quantize`, and `bifrost.unpack` will not be addressed here. However, `bifrost.quantize` and `bifrost.unpack` will be used later in the tutorial." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + }, + "colab": { + "name": "01_useful_functions.ipynb", + "provenance": [] + }, + "accelerator": "GPU", + "gpuClass": "standard" }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file From 1411f2d3d8a1219caf57f3885da935a1e1224786 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 27 Jun 2022 14:21:16 -0400 Subject: [PATCH 0694/1155] Colabify 02 --- tutorial/02_building_complexity.ipynb | 809 ++++++++++++++------------ 1 file changed, 435 insertions(+), 374 deletions(-) diff --git a/tutorial/02_building_complexity.ipynb b/tutorial/02_building_complexity.ipynb index a8a779375..c0f3ecd0b 100644 --- a/tutorial/02_building_complexity.ipynb +++ b/tutorial/02_building_complexity.ipynb @@ -1,396 +1,457 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "8ccf096e", - "metadata": {}, - "source": [ - "# Building Complexity\n", - "\n", - "The previous notebooks have shown how to work with data in Bifrost and highlighted several of its features. We are now going to use that to build a more complete example of how data reducation can be done with Bifrost.\n", - "\n", - "Let's start by taking taking in a collection of time domain complex voltage data for 16 inputs, transforming it to the frequency domain, and creating integrated spectra. First, we need a time domain signal:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "f785410a", - "metadata": {}, - "outputs": [ + "cells": [ { - "data": { - "text/plain": [ - "" + "cell_type": "markdown", + "id": "8ccf096e", + "metadata": { + "id": "8ccf096e" + }, + "source": [ + "# Building Complexity\n", + "\n", + "\"Open\n", + "\n", + "The previous notebooks have shown how to work with data in Bifrost and highlighted several of its features. We are now going to use that to build a more complete example of how data reduction can be done with Bifrost.\n", + "\n" ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" }, { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydd5hcV333P2d62b4rraRdNVvuNggsasAQwGAcDAFCggmhOUB4gTfw+oUXCJCYAHZogWCDbcAYU2wM2NjGFfeKLBe5qVhdW7R9Z6feft4/zr13ZrZL3tVqtPfzPHpWc2fmzrntfM+vnN8RUkoCAgICAgIAQgvdgICAgICAI4dAFAICAgICfAJRCAgICAjwCUQhICAgIMAnEIWAgICAAJ/IQjfghdDW1ibXrFmz0M0ICAgIqCkef/zxISnlksneq0lREEKcA5yzbt06HnvssYVuTkBAQEBNIYTYN9V7Nek+klLeJKX8WGNj40I3JSAgIOCooiZFISAgICBgfghEISAgICDAp+ZjCgEBAQHzhWmadHd3o2naQjflkEgkEnR2dhKNRmf9HVHLtY82bNggg0BzQEDAfLFnzx7q6+tpbW1FCLHQzTkopJQMDw+Ty+VYu3Zt1XtCiMellBsm+17gPgoICAiYAk3TalIQAIQQtLa2HrSVE4hCQEBAwDTUoiB4HErbA1EICAjwkVLyh8e70Ux7oZsSsEDUpCgIIc4RQlw+Nja20E0JCDiq2D1U4PzfPcWdW/sXuikBLh/5yEdYunQpp556qr/tP/7jP+jo6GD9+vWsX7+eW265Zc5+ryZFIZi8FhAwP3gWQskILIUjhQ996EPcdtttE7Z/9rOfZfPmzWzevJmzzz57zn6vJkUhICBgfrBslY2oW84CtyTA44wzzqClpeWw/V5NzlMICAiYH0xbiUEgChO54Kbn2NKbndN9nryigX8/55RD+u7FF1/MVVddxYYNG/jud79Lc3PznLQpsBQCAgJ8TNdSMAJROKL5xCc+wa5du9i8eTPLly/n/PPPn7N9B5ZCQECAT9lSCGIK4znUEf180N7e7v//ox/9KG9729vmbN9HjKUghAgJIb4hhPihEOKDC92egIDFiCcKgaVwZHPgwAH//9dff31VZtILZV4tBSHEFcDbgAEp5akV288CfgCEgZ9KKS8C3gF0AsNA93y2KyAgYHLMINB8xHHuuedy7733MjQ0RGdnJxdccAH33nsvmzdvRgjBmjVruOyyy+bs9+bbfXQlcDFwlbdBCBEGLgHORHX+m4QQNwInAA9LKS8TQvweuGue2xYQEDCOwH105HH11VdP2HbeeefN2+/Nq/tISnk/MDJu88uBnVLK3VJKA7gGZSV0A6PuZ4I7MiBgAbCcwH202FmImEIH0FXxutvddh3wFiHED4H7p/qyEOJjQojHhBCPDQ4Ozm9LAwIWGaYVuI8WO0dM9pGUsgjMaBNJKS8XQhwAzonFYqfPf8sCAhYPZmApLHoWwlLoAVZWvO50t82aoMxFQMD8YFrB5LXFzkKIwibgOCHEWiFEDHgvcOPB7CAoiHf4sB3JPdsGqOXFmAJmj+V47qMgrLdYmVdREEJcDTwCnCCE6BZCnCeltIBPAbcDW4FrpZTPzWc7Ag6dB3cO8eErN7HlwNxO7w84MjGCeQqLnvnOPjpXSrlcShmVUnZKKX/mbr9FSnm8lPJYKeU3DmG/gfvoMDFaMADIa9YCtyTgcBAEmo9MbrvtNk444QTWrVvHRRddNK+/dcTMaA44MsnpSgyCTmJxEKSkHnnYts0nP/lJbr31VrZs2cLVV1/Nli1b5u33alIUgpjC4aMQiMKiwgiqpB5xPProo6xbt45jjjmGWCzGe9/7Xm644YZ5+70jJiX1YJBS3gTctGHDho8udFuOdjy3URB4XByE9Rw3x77IhfpngNcvdHOOLG79AvQ9M7f7XHYavHV6d1BPTw8rV5YTNjs7O9m4cePctqOCwFIImJa8ZymYwchxMZDWejkltI+19p6FbkrAAhFYCgHTkg/cR4sLSyUWCNtY4IYcgcwwop8vOjo66OoqF4Ho7u6mo6Nj3n6vJi2FgMNH4D5aXEhXDEJOIApHCi972cvYsWMHe/bswTAMrrnmGt7+9rfP2+/VpKUghDgHOGfdunUL3ZSjnoIRWAqLCWHpAIQcEyklQogFblFAJBLh4osv5i1veQu2bfORj3yEU06ZvwV/alIUAvfR4SPnWgqaGVgKiwLXUohholsOiWh4gRsUAHD22Wdz9tlnH5bfCtxHAdMSxBQWGbayFGJYfnpqwOIiEIWAaSkE2UeLipBnKQgzuOaLlJoUhSAl9fARBJoXGbYJBJZCJbVcDPJQ2l6TohDUPjo8SCnJB4HmRUXI8dxHJnoQRyKRSDA8PFyTwiClZHh4mEQicVDfq8lAc8DhoWjYeM9CIAqLAzEu0LzY6ezspLu7m1pd5TGRSNDZ2XlQ3wlEIWBKvCAzEIwaFwlhqdxHcWEFRfGAaDTK2rVrF7oZh5WadB8FHB6qRCHoIBYFocBSWPQEohAwJXnNooE8X4v8HMcsLnRzAg4DIddSiGIHlsIipSZFIcg+OjwUdItXhbbygcif6dB2LnRzAg4DYafSUghchouRmhSFIPvo8JDTLVJoAEhTX+DWBBwOqkUhsBQWIzUpCgGHh7xmkRZKFIQdiMJiwAs0x4JA86IlEIWAKSkYFnWUgEAUFgsRx5u8FriPFiuBKARMSU6zSAWWwqLCT0klsBQWK4EoBExJ0bCod0UhFIjCoiAiKy2FQBQWI0eMKAghXi+EeEAIcakQ4vUL3Z4AKOg2DWEVeAwHorAoKIuCFYjCImVeRUEIcYUQYkAI8ey47WcJIbYLIXYKIb7gbpZAHkgA3fPZroDZUTQsGkPKUgg7Rk3WfwmYPbYjieHOUxCBKCxW5ttSuBI4q3KDECIMXAK8FTgZOFcIcTLwgJTyrcD/Ay6Y53YFzIKiYVMnlIUQxwyqZh7lmLZDDDWLPY4VlDY5CHb05/jjkz0L3Yw5YV5rH0kp7xdCrBm3+eXATinlbgAhxDXAO6SUW9z3R4H4VPsUQnwM+BjAqlWr5rrJARUoUVCWQlwY6JZDPBKsxHW0YtoOUaFEISZMfynWgJm58NZt3L1tAInknS85uAJ0RxoLEVPoALoqXncDHUKIdwkhLgN+CVw81ZellJejLIknYrHYvDZ0sVOomLwWJ1h05WjHtMvuoxiWv5ZGwMw0JqMAfPG6Z8hq5gK35oVxxASapZTXSSk/LqX8BynlvTN8NpjRfBgoGjZpd55CHDNYp/kox7Id4q77KIpFQTMWuEW1g+m6VjXTYTBX20kZCyEKPcDKited7rZZE9Q+OjwUDYuErLAUgsDjUY1hO76lAKDp2gK2praofDYKem1bWAshCpuA44QQa4UQMeC9wI0Hs4PAUjg8FA2bhHQtBRHMcD3asWzpB5oBdK20gK2pLSqt6IJe28/JfKekXg08ApwghOgWQpwnpbSATwG3A1uBa6WUzx3kfgNL4TBQ1A3ijuc+MgJL4SinMtAMYAaWwqzRLYdkVCVhFGs8QD/f2UfnTrH9FuCWF7Dfm4CbNmzY8NFD3UfALDCK4Mbyg0Dz0Y8XaLZDMcKOga7Xtm/8cKKbNi3pGD2ZEgUjsBQOO4GlMP8YluNbCeDFFGr7Zg+YHm+egh2tA8AyAvfRbNFMh9Y6NYIqBjGFw08QU5h/ika5bDZ4MYXAUjiasRwVaLajaQAcS8cKJizOCt2yaU4pUQgshQUgsBTmn0JFOioE2UeLAcO0iQkbx7UU4lg138EdLjTToTUdWAoLRmApzD8lwyKN8ik70To3phB0EEczlru6nhNTohDDJF/jHdzhQrds6hIRYpEQ+RoPNNekKATMPwXdJi2UpSBTLcQxKAWicFTjWJ4o1APBrOaDQTMd4pEQ6ViYYpCSGnA0UjAs0m6JC5FuIy5MsqXanr4fMD2W4WYbeZaCCCyF2SClRLdsEtEwqVik5mtG1aQoBDGF+aeo236gOZRuI47JWCAKRzXSVNdbxj1LIRCF2WDaEkeiLIV4YCksCEFMYf4pmrZvKZBqJS6sQBSOcgzdXY877sUUrJov2XA40NxU7cBSCDiqKeoWdV72Uao1sBQWAdlCEYBEXTOgiuIFMYWZ8SZ1xqNhZSnUeMZWTYpC4D6afwqGTbPIIeMNEEsTx2CsGFTNPJrJ5QsAxFINgJqbEriPZsarexSPhJSlUOPnrCZFIXAfzT9F3aJF5CDVBhG15lGxFNTCOZrJF5QoiHhF9lGNd3CHA2/+TiIaVtlHgaUQcDRSNG3aRA6RboVIAgCtVFjgVgXMJ/mich/hikIqHMQUZkOlpZCOB5ZCwFFKUbdoDVVbCrpWXOBWBcwnxXGiUB9xyNV4B3c40CsCzel4EGgOOEopGDYt5CBVthQsvRTUwjmK8d2D7uS1dNgOAs2zQDcdQjisef5K/mHn55Gmhu3IhW7WITOvpbMDapeCZtJIFircR3FhktUsWtLB2thHG7YjMfQiRIFYChCkw04QU5gFmmXzL+GbWP3YbwHoFOdQNCzqE9EFbtmhUZOWQpB9NP9kMqNqFa5Uq+8+CtJSj15GiwZR6QpAOA7RFA3hYBb7bNBNhxND+/3XjRRqOthck6IQZB/NP7mRPvWfVFvZUghE4ahlKK/TINxEgng9JJtpCecZCdKQZ0SzbFrIIoVaea1RFGo62FyTohAwv4yVTCLaiHoRWAqLgqGcQRN59SLVAqlmmskzWghEYSZ006FV5LCajwECSyHgKGT/cJFmkVMv0m3KnQDEhRGIwlHKcEGnWeRxomk1CEi1Ui9zZEpmTQdNDweaadMissiWdYCyFGo5FhOIQsAE9o0UaBVZ9SLVElgKi4DBnE6TyEGyRW1ItpC2x5ASMoELaVo006aZHKL1WEBZCoH7KOCoYt9wkWZcS2FcTCEIPB6dDOZ0WkUekXZFIdVC0lSJHKOBKEyL1LLEhE24YRlONK1iCoH7aG4QQqSFEI8JId620G1ZzOwbLtAZL0IoqoKOrqWQDgeVUo9WNndlWB4rIioshaiZJYTDSCG45tMRLg0BEKpbgkw0KfdRDc/vmFdREEJcIYQYEEI8O277WUKI7UKInUKIL1S89f+Aa+ezTQEzs2+4SGesqOIJQkA0BcCSmMlIEHg86tAtmye7MiwJF5S7ECDVgkDSQCG45jNQTspog2QTjRTI67UrpPNtKVwJnFW5QQgRBi4B3gqcDJwrhDhZCHEmsAUYmOc2BcxA92iJ9kheZR4BpJdAJMGxsWEGcvrCNi5gznmmewzDcqh3cuVr7loMzSIfuI9mIKq7opBuJZSsfUthXmc0SynvF0KsGbf55cBOKeVuACHENcA7gDogjRKKkhDiFinlhJoKQoiPAR8DWLVq1fw1fhGTKRo01mfLHUQoBM1rWVPoZyAbVEo92ti4Z4QwNlEzWw40uxZDM7nAUpiBmC8KSxDJZprF/pquGbUQZS46gK6K193AK6SUnwIQQnwIGJpMEACklJcDlwNs2LAhyJWbY0zboWDY1NtjkDq+/EbLWlbktgaWwlHIxj0jvKQNyFPlPgJYFi0GojADSaPCfRTEFOYeKeWVUso/TfeZoMzF/OEFkpNWRsUUPFqOocXoZbSg+VUhA2of3bJ5dM8wr1upZuNWpqQCdMRLwQS2GUiaoxRJQjQBySbqCeYpHCw9wMqK153utoAjgEzRJIJF3KrwLwO0rCXq6Cwlw2BgLRw1PL5vFM10eOUyd0Oq2f2rRGF5tBiUupiBlJUhG3JL7iSaSKJT0koL26gXwEKIwibgOCHEWiFEDHgvcOPB7CCofTR/jJUMmv1yB5WioKbwrxH9gQvpKOKBHUNEQoJTW1zrz7vm8QYIRVgSKQSWwgykrQz5sNsXJZsAkKXMArbohTHfKalXA48AJwghuoUQ50kpLeBTwO3AVuBaKeVzB7nfwH00T4yVTFr82cwVotC8FoBVoSDYfLRwz/YBbn76AC9Z1eRPVPPdR0JAspnWUCGwFGYgZY6ixdzzllCiENJqt2+a7+yjc6fYfgtwywvY703ATRs2bPjooe4jYHIyRVOtzQzVMYXGlchQhLWij/5sYCnUOn1jGh/++SbSsTDfW98Hd/+nesMLNAMkW2iycowGk9emxHYkjc4o/anT1AbXUgjrtSsKR1ygeTYElsL8kSmaasU1qLYUwhGoX85yMcJALrAUah1vctU333UaG57/HuT71RuxuvKHks3UyTx53QqK4k1B/1iRVrKEGtrVBtdSiJq12zfVpCgEMYU5Zu9D8Ov3gGMzVjLLFVJTbVUfE+klLIvkA0vhKEC3VMZ3PBIGS1fuwff9TrmNPOJ1JKQaANRyNs180t/fS0Q4xJuWqw2xNADCLOLUqJDWpCgEzDH7HoIdd0BplLGSyYpoRV39StJtLAnl6A9iCjWP4YtCCApDcOLfwPFvrv5QLE3cUVk0QSHEyRnu7wagvm2F2lBRUbhg1KaQ1qQoBO6jOcZwRUAbI1M0aI8UINEI4XFrzKbaaBU5nu0Zw7QnnVsYUCN4opBAA7NQHT/yiNURs4sA5Gp4MtZ8kh9U2fTNSzvVBreicExYNWtd1aQoBO6jOcZwl2HUc4yVTJaE8tXxBI90Kw3OGKNFgwd3Dh3eNgbMiqG8Pqta/oYr6ilzVG1IL5n4oVgdEVcUslpgKUxGKaOWrY03uu4j31IwanZWc02KQsAcUyEKmZKbfZSaZOSYaiPs6CxLWNy0uffwtjFgVvzjTzbyrdu2zfg5z1JIeSUa0ksnfiiWJmwpUcgUDS69b1fNjn7nCyfnBujrXFGtcB9lA1E4fATuoznGcx/pWcaKJk1ybApLQd347zw+we3P9QUdxBGGlJLdQ3l6x1TMRzNtfvrAbqxJXH2++8gYVhsmdR+lCTkmUSwe2DHERbdu45anD8xb+2uRUHEAQ8TUZD+oWpCqVp+PmhSFwH00x4xzHzU4WUhPJgqq4/jb42MUDJvfP9Y18TMBC8Zo0cS0JTnX1fPgjiG+fvNWnuqeOLvWzz7yLIW6ySwFlZ6apsSuQTVw2HIgOw8tr01M2yGhD1OKtpaztkIRpAgREyZ5zcK0HYo1FnCeURSEEGEhxMz2aEDt4oqC1LJkSgZpOzO5peC6lE6oN1i/solfPLJv3tLuHEfW3MO00HhZYd4INefORZjMjeFZCjHNjQ1N5i500yvTaOwaVPfI1kAUfPYMFWiVGezKeIwQyHDctRRMvvfn53nXjx5euEYeAjOKgpTSBrYLIYLFC45WXFHo7h8g6RQJS2vyTsKzHopDvP+Vq9kzVJi3keMfN/fwqgvvRjPntiLrcF4/aqu8eqLgZQrlx/2tRLc9URiGeKOq8DmeuLIUWqKmXwRx64EsUtZm/v1cs60vxxIxRtSbuOYRUaKQ0yx29Od4vj+HZTs4juSffraR+54fXJgGz5LZuo+ageeEEHcJIW70/s1nw6YjiCnMMW5M4fbHn+fFLW4HMo2lQGGIE9rrAbVKG9tuhuFdc9qkXYN5xkomvZlDqzb56J4RDoxVf1dKyVu+/wA/fWDPXDTxoPn27dt4YMf8dQi+paB5loIrCpP4tj1LIVIamjyeAL77qC1WzjzKahY9h3hNjlQs2+Hmpw8ctNht78vSJsZItayo2i4iCV8UhvIGjoSBnE5OU7GZx/aOzGXz55zZisJXgLcBXwO+W/FvQQhiCnOMaynE7QIXnuXe4FMEHokkoDhEZ3MSQHUQ132csfsuYc9QYc6alCmqjqhv7NAmyp33i038bFznnymaDOV1dg/OXTtni+1ILr1vN7c80zerzx9KKRFvprlnKXipqZNZCp4ohEvDk8cTwHcfLYmraxEJKb/51gO5g27bkcxDu4b55G+e4JmegxtkbjuQo0kUCKerJ3mKSJyGqM1gXmcor67JgbESedcdeqTP+ZiVKEgp7wP2AlH3/5uAJ+axXQEHy2//CbZOuzZRFT2Zkt8xeKLQHNbojKkUxEktBSFUBlJhiKZUlFQsTO9IHowcf356D5/73VMv9Ch8Mu4M2gPjREG37BmtB820yWnWhBmlfe5I2ntQDyfDBR3bKQeBp6NrpMgrvnkXf9k97G8bKRj8/vHuab/nWQqG7aBb9gSLoRLv2oeKg9NYCkoUmqOqSur6lU38W+RXjG5/aMZjqCW82dpF4+DcijsOZIhiQTRV/UYkQX3EoX9M8++13oxGUT+KREEI8VHg98Bl7qYO4I/z1aiAg0RK2HoTdP1lVh/PaiZv/O69XPXIXnBsMJUQLE+YhEre0oKTiIK3vTCEEIKOpiTDI6rjCts6O90MlblgzLMUxpXU+NVf9vPm/76/LGiT4FkZ+rjP9C+gKPSPqd+cTZriQE5HStgxUD6f1z3Rzf/93VPTWhCVNalymlV2H3md0NPXwqafAmDYNuGQQOQHJp+4Br77qD1c4FWh5zi2OcJHI7fQ0n3njMcwLY4Dt3wehna+sP3MESVXDKa7p8aT00yGPfd1ZFw8JhKnPmKxe6iAZqp99mZK/rX3ihGCGsD88K4dcx47eyHM1n30SeCvgCyAlHIHMIXNGXDYsU1Aun9n5pnuMTTTYXNXhuFMOV2xNapD0ctGmUYUikoIOpqT7NivJrG1xhwyRXPCgiz/c9cOfvnI3oM5GgAyJbWf8e6j/cNqqcPBaTp2b03h8Q+5JwrTrhz35K/g2g8cdHtnYnwQeDq8dleuW+EtbDRdDaJKwchrVtl95HVCj18Jj//C/436sAWlEWhYMX5XClcU3li4hatj3+DEiLrWpeILFP9sDzx6GVzxlhe2nznCy3I7GFF4unuMBO69Hk1WvxmJUxe2q9ypB8Y0Crrq+Cvvgd9u6uK7f36en9y/+xBbP/fMVhR0KaX/tAshIsCCpSAc0YHm7AEoDM/8uakwS3Dpa2DfI7P/juW6U2YpCpu7lBBs78vxrRsf97c3hjTV4YdjEK+f/Mvxej8w3dGUxCqpa7CqQfmb9wyXH4StB7J878/P85UbDmoNJQByhRIrGJrgPhpyO/zpOvZMcXJR6HNH68MFY+pU2hs+CVtugOLcBgP7c9VB4OnwSlBUFh4c8kRhmu/3ZzVa0zFAdTz58YHmwqB/jxiWw8qwW+KiceWEfQG++2iFoWIzq4WKhxilPLc/18f373x+xmPx2NGf4/F97jmV7qi4eGSUSim6o3Rjkkl+Ukp++che33LFKECmi427h0kKt0ucYCkkSIaqr1NvpuS7MyutxSatm3tinyU3sG9uDmYOmK0o3CeE+BKQFEKcCfwOuGn+mjU9cxFo3tGfY8PX7zzkQOaU/P7DcMv5h/79bC/0PQP9z87+O5bbQToHJwq7hwo8t1eN/iwZIi0LShRSrdUllCuJ14HuikJzkjqUIC1Nqk52T0UQ9zu3b+ftoYd5f8Pm2R+Ly+tLd3Jn/HOMjFVPvBp2LYTpVn8bdR/g8Q+51zHbjvRjFhPwZqbun50rbraUg8AzXyPd7aQq3UGeZTSVpWHZDoM5nWOXqtF9TjfLMQXvO4UhsNV+dMthZdgdvDR0TN4Q11cedceD7Y7KnArbJb5z+3aufHjvjMficeZ/38+7f+wOdOyKY9BV0NqwHP70dO+CpLtO5z7aPVTgKzc8x3VPuvGchy+Gn7yBv+wZ4bR2VdJiMkshKcrH2FYXdy2FiYH/F3f/mrWhfo4ZvGsOj+iFMVtR+AIwCDwDfBy1atqX56tRh4OdA3mG8vqcZswA6sEbfgG+Uq/khH0QSyBabgdpV3cYj+8bmTAillKyuStDfSKC7Uikro4/E24mahWUlTPZHAWPWJ0fmO5oSlIvlCgkhEVIwF7XUhgrmdy1bYDzIrfwfuv62R8LaqZogzVMSugUxqpH7MN5dV6mWyd6dApLob9iADBlXKHtOPV339wGUzOjI4CcnftoEkthcAb30ZUP78WR8MpjlNuv0lLIaZa6N0ojVZZCh3BFobFz8oaEQlWL7rRaqs5PEoMdA3lymnXQnbhpO9WDl66NgFoa9FO/eZLneg//5LjiNKIw4Aqzn7GW74PCAE91jXD6CtdCmCAKCeKifIwv6mzkwFjJF4VKay9eGgCg21KWuWbaC14eY7ai8NfAr6SU75FS/p2U8ieyxmewlNzR2GwqSh4Ulq5cSDv+DD9YD+ZBWiL6oYiCPuE72/tyvPvHj0yoZnpgTGMwp/O369XoMO2O9NuWr0HoOWXSj19HoZJYHRg5kJLOCkshZGl0Nqd8kX3aLa3QEDZod/pnfyyojs97qPRituph9eIF04rCFDGFvqxGOhYGpnE/eedw/0G476Zi+21w8/lQHOHftr6d14eeIm9YM84C92MKFW0cmsxS2HEnPHYFPZkS37p9O286aSnvfqm6rvnx7iMvgcA9Pt12WBEaBsTUMQXwXUgA9Zqqe5REtcV25EFn7PRmStVuzn0PVx3XQqzV4R2DPon7yLPQdg+5z6Wp7vewpfHiZa6lMEmgOVr2tnPqigaG8oZvwVYGmmOuKOTdeMPX/rSF867c9AKP6IUxW1H4APCUEOIvQohvuz795vls2Hzji8Jcl1KwNNWx7rwLRvf4QdlpMUu+Ge3/nWV8wP9NqBqBeQ/XyLjA775hlWl05sntxCIh1jS4HVT9cvX9bO/UKYqg3EfSAUvj+PZ61jW637dKrG1L+6Lw5P4MQkBjxKKZbPm4ZkGmZPpBvDSafyy2I/1F5Md36pu7Mlx2n5pAN6X7KKtxygrlcpzSUvDa2bsZjOKs2zyBoR1w9T+obJ9sD3Gpc6zoRcqZ7zlPFEYKBrplY9kOw+51rHI/Pfg9uOebbO1VwvnJv15HfSLqf65qRnPBnTRnlwVzOUNqjoJb2XNSKkQhVVKuRt+XzsGX1N43XKy+tzP7gfLzOG0SwDxRmibQ7MVyPEth1I1jntgS4tSlKn4zwVIIx4m4otCUitLhzunZ6z4bmun465EkNCUKhqbutd5MaUIc7XAz23kKH5RSHg+8C+gCLkG5k2oWL1Ws0lS747k+PvGrx1+YX9Mbte93652Ys+hYbv08/Oa96v+++62zYf4AACAASURBVOggHjZzovvIc6GMH8l5x9uUivLmk9t53Ro3x7p+mfqb7Zk68wjK7gQ9T30iymdeu8xvw9q2tC86m7syHLukjoR03R4HdvKbjfunPrcj5eyLTLFaFJ7YP+ofk/f1wYpMm/6sxt9e8hAX3roNy3YmDTSbtsNQ3uCUjgb3+9OIQjimgqGzEfTJkBJu+FT5tdsht4byfD5yDeLPX53265ViNpDVGSmUj9u3FBxbCVdhkGxe3TOt6Th18QigXBQF99rndUu5NQGs8rlpl0NTu448KkRBZFQBxIZwxQzn0uwGVU0pJVb7RorV7iP3HHsd86RibRlwz4UvLIFjHD++dxd3PKcC59O5jwb9yWcaRcNicETdiz859ySSnotoEkshZOvEIiFa0zFa0kp0u0bLfYEn2Enduy46Uko0017w9NTZzlN4vxDiMtRchTcBFwOvnc+GzTfeia8M+vxq435ufbbPz3M/JLxMoL5n1N/ZiEKmqxyH8C2FKdxH3zoWbv3CuN+caCmM+RNyqh9az11WF49w8fteyt+c4AZW65eXPzQbUeh9Ei7/a3+kh6WxoilBXrfIaiabuzKsX9lE1F3O8S9PPMGXrn/GL5Fw6X27uNarstr/HPzPS6D7cbftBnFU+09sDfHNW7aqvPB8+ZxUulb+q2L9gLxuTRpT8D5/fHs90bBgKD/F+dXzZYE0po83aaY9aVlqhIB3XAKnvUedmjHV+axKaLwu9BTh7o1T77Q0ytq91+Il9w3ktKr0W99SGNyuVkwDrFF1HhtTUWKREPFIyJ/fkY6FyesWTn6ipbDEGZo6yOxREVPAUPdmR1rysTOOAWZvKTS4Fsz+4UJ5wBNJ+FleJUOdx0nFetddcN9FsG32kzNn4qpH9nL9k2rVNM9Kmc5SAGUtCPd5bo1avitpspiCsAzaG+K01cVpcTPC9o9UiIJugaUTkup5TGCQ0y000/H7pqJhseHrd3LtJnV9u0eL3HwYSpfP1n30fWA98BPgf0spvyWlnAOnaxkhxElCiEuFEL8XQnxiLvc9GV7GgddJaqbNRncGaeXFm5KR3eUO0cNxyp259GYLV+9LM212DoxzpRgF5XKScnpLQUr1uY0/rt4+SUzBE7bSOEshVyEK/m9DtSh0nD7xtz28kePue6D3ibLv3dJY1qgejk17RhgpGKzvbCTqqM5JjuxV7dEtuOPLPLfxLm59xr3B3RGoN6LOFE0SroviQ6e30Z/VuWFzr595tLIl6QcAgaoZztmSxcgkk9e8LLNlDQna6uKTdz6WrrJzvHMxlSi4C6u89/K/8O07tqvjk7L6uratY2NkAwD5EeV2WR4r0ibGcKxxgnTFW9X8CICnf8drt3+DVUK5FfqzelVb/SBlb0VBgWw3IQH17jWtT0Q54J6T9kY1ijWyan84Jmf8190Ylk2bMzB1OqpHpSi41IVM/uY0dY5mk00F5Q5333CFpVDX7sc6iqY6Lk8Adw3my+fz+dvc4+xh12Ded8McMkYB07T8gZOffWRPHKEP5nVSbhxq91CBsK35+/AHY5NYClgaX12zjU927vLThCuzybKaWdV/JDDoG9OUpeCeq+7REkN5nc//4WkcR/KH+5/kN9dcNe/Vg2frPmoDPgIkgG8IIR4VQvxypu8JIa4QQgwIIZ4dt/0sIcR2IcROIcQX3N/YKqX8F+DvURPl5hXfUnADPI/vG/U7kVmJwg2fhj99tnqbPUlHM85SuOCmLbzpe/dXm8lGARwLtMz0gebKfVV2WJNkH3miUDRt7traz6N71MPnWwoJTxTc3+s4HVrXwbt+AsedOckBu7iVM/0bemiH27YSHSmbTjHAQzuVuJ7QFvO/Fsupjr9UKsLDP+Q1+v1YXsC1NFp1zMp9pNq/sk5dn7GS6c9ROGlZA0N53Q/Ylsxy55/VzLL7qMoNo85RuysKk7opvHPvWwqTxEEOPAXfPR76t7B7ME/3iOp8H90zwpu+d78fYAfYn1dpvVl3Hd+l4Twt5JCVomBqytW45Qb1OqcEpA3lu+7Par5VUxePlDvhnicAtf9wrpfGZJSQW5uoPhHx/dLLXVEwcwPlQxjNIYsjyrU3W/dRoqmizUXq3ftnOveR40j+809b2NGfQ3Mr0+4fqYgp1C+Dorr2mlEdU/jy9c/yb9c/qwZCz9+hPp/t4Yt/eIav3jjJvJehHRMHaZNhavC9k3iD/WCFNT2NpZDXWb+yCSFg92C+LApmYVpLAVvnzIGfc0bfL2lOxxhPXrNgdK//Oi5MDriiYFiqomqllXLHlj5O3v9rfh79L/YMzG+G1mzdRw3AKmA1sAZoBGYz/e9K4Kxx+wqjYhJvBU4GzhVCnOy+93bgZlTK67xS8kVB3Rj3Pz/oF/yaVBQcGw48XX6tZSbehNYkASKzyE8f2O2Pbrb1qQu6s6KEgd8xF4andx9VBmu7Hp34uxXuI29GcMmw+dZt2/nRvco9lddU6mgyGnZ/uwChCCw5AT79OLzo7yf+biUxd1LbWFf1b0ub47ZfxvWxf2fjHiUKqxvKX6svqTxvo6g6uxZnCMNyeGjnED+69TH/mLOaSX9O8y2FiFUkHBIUDcu3FE5c3oDlSN9NVDIs32ed1cxJs488d8qyxgT1icikaX/Xb3TdUK6lYOt5PnDFo35l07u39fPNX6lb0872kdUsf9Tm7X/T3lF/fwWpOuTiiLKI2oweosKuvrZe3KJ7k+oAs+qzS8I5mlNRHt0z4neUa9vSFZbCk+jLlEUXLxygKVXueOoTkfLxNqgOy8mVQ4AxTKQXY5iqxIX/4ToQIWg7vrzNLNGQLJ/vqegaLfKzB/dw17YBfxC2f6SIdI8/F2lRwmsZfsfsCWBfVlMDm75nfKFkrIehgj75HJU/nKdKZ8yEWQRtjGVOf9lSmMR9dO2mLt743XvpG9PobE6ytD5Ob6ZEzHWHYhSnEQX3WuT6YWQ3DYkI0bDqW7zsN9H7BNzzTf8rcQwOZEp+rFO3nCq34R3P9ZMu9hATNl19ZYGfD2brPnoQOAd4GvgHKeUJUsoPzvQlKeX9wPipoS8Hdkopd7uzpK8B3uF+/kYp5VuBf5xqn0KIjwkhHhNCPDY4eOix7nJKqs0T+0f5xSN7OeP4JbTVxdg/PIkobL0RLjsDxtSoD0vzH2AP25h4s5aKOb5+81auekTNWFzTqkZe+ypm/vqj/uJQeXQ6mftIqxghVObRT+I+8mZgFg2LnGaWa+zrFul4BOFNTjMKajQ41WS18Xgjx7GJxdnSxW6WiDGePzBCIhpiSbzc8baYyq9uldQxtDnDWI5kW18Os+ClS5q8/6cbuey+3cRcS0EYBVLRMEXDZjhvEBJwfLuyVrw4Qcm0aa9XHfBoobw2rmGpoPO2vix9WY1YOERzKko6Hpk0Ffm2x12rx7UUxsYy3P/8oF+YbvP+DPmMuudKJXXN3jl8OVzzj77IPFNhKRSk6hxs192U1NzUXNvwBdEXhdKockm6HWB7uMC7X9rJn7f0c2DPc6yLjdDekFDXUUrk8E5uH2lnhEbS2gEa3U4alCh4lqJnKchC+VmJYmFr7n0Wn+geqmLly+C4N1dnpFkl6uOq65iu7IaXdFB0feWxcIiiYWOa6j69eY/qAP/nT49OyD4azOnqnPa4M+6Xr4dsD9lSOWZUxehele03E466TlGpVz0jUG1ZPr5vlF2DBYbyBkvq4yypjzOUN4i5iRPKfeSKQmQSSwFAH4PCAELP0eyKtufOW7715zC4jVtWfY6MTJPAIFMyfYtKM23/XBzfXkd3pkSDrp6hvv4jQBSklC+SUv4v4EZg4tp+B0cHKoPJoxvoEEK8XgjxP25Ae0pLQUp5OXAB8EQsNtEsmy16RfbR/732KZbWJ/jW372IVS0p9g4XuGFzT/VocmQPIMsPsaWrDrxi9D6UmVh2Q3frxHhLIi6tV5kI1ZaCKwqFoendRxW/Vdqzkdvd7IlymYsK95H7sBYMVTE0XyEKnu/Z/+1J/MZT4nUik2TmhN2OZ6kc5Vfx/0L0KzN/v7OElU4vDRSwXEthKcOYtkrNa6R8zE93q/frvQwXI08yFqZk2AwXDFrScZqS5VIOoKyhpQ3VGR718QiG7XDeLx7jrO8/QG9GY2lDHCEEdfHJLYWQJ8iupZDLqFG/18GOFk2aUJ8pFtXvrNW2Qfdj/vn12g+Qdy2FuFY9VwTH5M9b+vnHn25koL+nvL17E+TUNW0L5Tj3Fau4MPRjvrbvn7gq9l80JFz3UWkUoWd5qtBEt9NKg9HvW0qAf35AWUYAouJ6RbFIC3cAM9O1P/1D8L7fVruPgLg0SURD05bd8Cxub0Te6LbRMtS93WMqq/OZnXt8v35etxgpGOR1NZghs19ZsitfDmM95DSV71+VxabnQRtTsamZMgddUUiik9OtqrkWlTGo3oq1OJbUqYBxf1Yj7omCWVCuKBGCcPncAxNTfEf3+MFmT6Qxi9ByDH9p/VsMESMpDFc83bYUs5y47WJSYYeTljfQmynRaqvna3BofhM/Z+s+OlUI8STwHLBFCPG4EOLUuWyIlPJeKeX/llJ+XEp5yQyffcFlLryRSU4z2TdS5O0vXkFbXZxVLSke3TvCv16zuXoNYvdh9Ttwz23ibQf6R9QoeEg2YCdVBo/pjih7erowixls1w/uV8B07HKnXhyadkaz7dYZKokkw0MDfOYat3zEJGUuPL96UbfIG+WJTAXXUvAxixPN3+mYrhMpqBHMS0I72WA9CbvuAeAW5xVEhc0ZoaexXUthKRks08S0HBpFwT/m+kSEt71oOeua3TbqeVIxZSmMFHRa0lFScWWCeyO8kmGzrEE9bCMH9rA38T7enN6B7Uieckt6PLpn2P9MOh6e1FIIm9UxhVxOfdcT2EzJpMlta6mkOrxGZxQKg+Q1db53DxV8l0rOUR1Bsyy7lABCtul3lPpYxQPevcm3PttCOY5dUsdr0uoeXB4rUZ+IKCHMKKuzSy6lV7bSaPTTVGEpvPmU8kpg3jGHS2VhigvLn3Q4o6XgkRj3rJlFGhLRaQPNnih4gX/PmjFN1xpATXWK6KP+8wjlJT/zuoXM7Fdxj6ZVYBaIW3kMy6n6PDnXYjcL5fjUVPiioK5XtmROWuaicq5AW70ShT1DeX/inh9ojiQnWtnjA8/Du3xRaHevhzQ1iMQxLAedOKmQSiFeah3gFLGX5IMX8Zqen/He5EY6mpL0ZQoswU3NHpnfmlGzdR9dDvwfKeVqKeUq4Hx326HQA1SmPHS622bNXBTE8xS5a7SE7Uja6tRFW9Wa9gcbz1ZOufduPF8U9OrtwKBrKXzdfD+b33Kd+rhbRuKy0EXk//g5f9LKjv48P7l/N72DFSPuwmDZUnAmdlqlnLophmhCmkVKXkqkH2iuFAX1/6G8ynH3Oqq8bpWDzN5xjL+Jp2MyUfDM57wShZXC7ejySjAfdk5hRNbxhvCTSNcFFhU2dXYG03Zoci0FaSvf8prWNDFvRqhRIOG6j/K6RX0i6meDFA0bKSVF02aJa4Gt7VIB27eGVdqn9xD2Z3Vlug9spSVcrlhZdRiWe23rlCiU8qqtnsBmigbNrqWgaZ4oZEDa2IWyl/RZ11rI2qpNraI6YB2Spi9odt59wNtPUyLqWist7neWp9TNKByTercTtoeVmyTcspZe2coyhqtE4S2nLPP/71kKESPr13WKYpHGvWfiFYGf6fBEIeT+jhtsrgo0//b9cM+FPLxriHN++CDP96tjGCnorGCIk90qq56lUN+mZlLHjQwl08YN6bHFfe4cCc7oPiUIburscrc0R9WkzGxF9zGJW7NvTPPb4j1XXsxqKK/7CQ/esyml5ECmRNht0JI65T6yDY2wcDsHL6Yw2TKm45+nkd2+KLSmY0RCAuEKimE7mCJKOqRiYZ+L/JbvRX+EcPuVZDJJR3OSNjlKRKj2ZceG57VG1GxFIS2lvMd7IaW8F0hP/fFp2QQcJ4RYK4SIAe9FuaVmzVxaCp7frs3tVFa3pIhicVHsCga6dpS/4FkE5tSWwnBG3cwj1LPTaAYRxtZUh7da9GP1b/P9lj2ZIn23f4c7H3jA/76VH5w20Kzl1cj1gN2obipUTKQcU1Adv5Tlgm9eOeW8rurU5HWrnI7qHcd0M1rHE4mpyV2V1LnBSk21r9MTBffc5GWSe5z1/HVoM6JiJNdkDWHY0rcULNPAdqSyBLzzayhLQdWEsUnHI6Siqv1Fw0a3HKRU2VR18QjHFFSqZqnhWABf7AHWJDX40Ss5Z99FGLZTNTLULZukdGNJiQaIpjGKniioczlWYSlopRIRLN/1FSoM+m65J13rJOtMfl5DjlmeoFQcUi6I494EI+UlTVtwByQV17YlovOtyKVknlcTI1etO4le2Uqd0FgaK49sE9EwL1+rSpWsW1qnUiKtkt+xR7Goc2tWzdp16IlCnWuFuMFmP9BsFGHbLdD9KD+8ayfP9Ixx73Z1H4wUTL4TvZQvZr8BQEFTbV2zWs11SFhjFHSL5W5Kc+W6387oPp7KNWLVKwHxRKFyLtEdjzxZbuckovDt27fz4Z+7pSMcdd4TlCeleXj3gzfx790v7WDD6mZObHJoS8fKpbJB9QOepTCe8c/HyB4/LTUdj6hBma37loIh4qSEyUjRoI4SS0VGucOASLKJFU1JVojy4DFs5PxZ+/PBbEVhtxDiK0KINe6/LwMzFgAXQlwNPAKcIIToFkKcJ6W0gE8BtwNbgWullAdVW3kuLIXx+fttdeoBfutpy7jkDWHeG7qTFSMbyw9vhfuoayhX7rSzvf4+RsdUh26KGN0ZDaIpbL1IBIsmUSBa6MOwlMK3kuUr0V/Tuesa//u79+6rCDRPFAXd9ccPygbft5k3rAnZR3nXVwrlbA4pVSea18aJgm1A+CBEAcrBZm/FqXEZLCvdHHvPitKI8RfnZJpFnobsdv9zLfYQlu3QiOpoDV0dR108Us7sMPKkYhGKhlofoC4eJhUP00CeomH51zEZDdMYD7HBvZWak8qaOKNwB7+Kqs7o1cW7AWgy1DWrzPcu6naFS6UeYmksNxhbjikYNLkjeFMv0kq584qUBlnelOC4pXVsctfgLVphTBmecPrC0vQHJaI4AslmWPlK/31dxGmSnih4VqDBsYXN/F34flqf+QnDsp6XHb+aXqnclJWdBsCvznsFd5//OhLRMG88cQlRR8N2M8eqLYWDFAUvXdd1H/mB5gNPubPAR1i/qjr+YOVHeHloG+1WNwl08gV1nhuWqHTYZvIM5nSOcxMIvPMXxyBaHODOA3F26Y3ucar3vGCzZTs8tWVL+ccmEYWRgk5PpqRcXePcR5VVkr0Bm7e292uPW8LvP3gijZecwinFv5RdR6A8BmZxZksh0QQju/y01Lp4hPpERKW2RpMYloMp4iRCKpYSw6JZ5Alp6jjTqRQdTUmWi7Il2iCK/pyq+WC2ovARYAlwHfAHwJu3MC1SynOllMullFEpZaeU8mfu9luklMdLKY+VUn7jYBs9F5bC+FW5PPdDKhbhze3umsVSZ3ufKv7mdXCOXuDM7/y5/MUKS2EspzqMunQdXSNFiKVwjILvcmiwhrAtg+X1ET5zhhr5xApl03ewvxdHn3rymhekHZKN/qiloFsVZS5c37fbiYUEvjiAEosJMYWDtRSgnJa69GT1N1293tLKkGcpqGwbTcQZlOpa1ZXKD22LPagCzZ6lYKiHLh2LlEfIugo0Fw1btT0WoX7rNTyd+Bjx0ef9WvipWJiXxvb75n1dRF3fY/StvCyk6v6fMqCqvRvJpf758CgYavTsICCahnidfy3K7iOTpgoBaxNlUYhqw9TFQpyfvoWuvbuwHYluOxRR51aLlNenCOOguanQIW1EzSDv3OC/3x1ZQ6McZyk4FvFUednHLrmEF69sYiSijqVdVgcfY5EQxyxRnexbTmwljGTEVqPaOCZpUcIhNHEpyamYIAolGhKRcqC52x2Jl0Z9N5DHqaXHiAiHEJJjRS+6m6UXTjViheI0CTXyXd6YoKMpSfeo6pQ9oeuWSxiiGSnCE9xHJdNmuRimFG5QnfFYOQ6omTbS0im58Z5dg4WJopCdaCkcyKhtK5oS7hoUOkvtAVKiUhSK6rmbLB5X+TyteQ10b+IVo2o2djoeYXlDEuk+d6btYIVUoHk4b/iFIBM5FTdqToZZ0ZT0jxtgWdzwZ2PPB9OKghAiIYT4DPCfqCDzK6SUp0spPyOlnCGiM3/MlaUQwuEbkZ+xRhzwLQXALzmRROfZ3jE1Fd8dhRfzY34JBqCcQw1k86rzb26sp2u0BNEk0ij6PuUQDq8fuoZbrX/mn9a7Ix/UxbbCSZrkGI42taVgl8Yoyjg5Ur4o5LSJloIXxFxaXz2KyWkmuQnuI/3gRcEbXba7olBXbSmsiXgppuohEtE0w64oNJa6cUQEQ4Zpc4YxrHJMwfRFIVQOvhsFUrEwJbekcDoeIXbvfwIQLvT7lkIiGuaYcDlVLyrU9pidJ4JFpxikaUzNQ0ia6r6pjCsUDZs6NDW3IBSCWBrhBv0Lhu2v++xZCpZeok2U77+EPsypob2cdeBS3mPfzLa+LLrlUEBdAy1VXYnUcI81ornrV6TboHktAHsja2mUY2owUjH3pS5UvicOiGW01cVwXLdKizUIA9uqBxN9z8K3juE1raqdXUUVD4iijtUMp2afijzefXTHl/l81/8qB5orRKHSLReLhDhDPI7hWkzHi24MXR17PJbAjDXR7F7/ZDTCizrLA70OoeIt3XIJo5pDKdnub/MGPprpsEyMMBZrV3EH11LQTJtXX3Q3A5e+nXMzlwJuxp8nCsJzH5WzjLx2e5lHyxuTvsVaHzZ9IQFc91FpcvdRpaXwN9+FtWfwqucuoFMMko6F2dCZotEaxS6N0aAfYKkzyAnmNlYWnmWDO4CJuEkPG0Zuou7pX/Dl6K/9XX7S+Q2n7/gBY0O9zAeRGd7/BWACD6Amm50EfGZeWnIQSClvAm7asGHDRw91HyXTZoUY5h8jd7FTrKKhMvjq+nYbIiY7+vOwuhwozOez40RBWQqOIykWChCB5oZ6ertL0JhGmEVaKkaUr8zdplwDbpaJV9M+3LKaFUN9RBx1s1qmPuHiOFqWPElKMk5U2ERwl1wcF1Pwc9SbElUjoazmuWBeoCh47qNVr1adxdrXwxNX+W+LcYImYklGdDVSbtZ7sKP1DOhhlsohdpl5P4BmmTo/in6fU7auL3/ZyJOMli2F5oiOcFNfLb3ki0IqFqExUh75R92aMkmnSDgsaQ25saBQhLgrCpWWQl5XGTl5kqQcCZE0MTtLR1OSnkzJzbmXvqVgmRqtlEUhZQ7zIlu5rl4X2szGPSPolkNJxkGAXbcCss/j1TTyBDBmjELqJLWTlS+H0gi9op2E1EDPqnIp8UbQx2iLlu+7QqoDIQSJ5hUY+TCtuW1w6dfhFf8Cb3GN730PQ3GY+Ihy2XWXorxUQFQo95EVSTHrK9+8RgWZl52mXvc8zkrAMvNIKRHefAI9i2UaxCMhzn/z8Ty5P8NLn9/B3c5LOTOymRNC3RiGEpZ4PI6daKa54IpCLMSpHY3c+mwf4ZDwY1M9so3RgkE+sYJOt4aT5z7STJvlYoRMpIOGVAizbzeNKAEYKRjEI/tZ6s6L2DmQh3Z1v7SSpZks2nAXq0UfTVGbVVof7AsR27uTN4X30t6lwz4V82vd/CP+NbK2fD68GegAvz9Pibelq78VE0utn7yJSFZZLw/G/xX+CG8HNRl91538gPJ619eEvzLhtK/tvwNuvmPC9o+Hb+TZJ99E45kzThc7aGYShZOllKcBCCF+Bjw6w+cPC0KIc4Bz1q1bd8j70EybE1IO2NAWs8qTucC3FJqiFgPZXugtZxiV8mPE3cwFmxBht3MfK5mE3YyZunRa3bRtSYRWYlmkPCdhmem6T/LKteKZi6JpNc2D5cJuuUKR8bXJhZ4lJ5Ok03VgKBNYiUK1+yiy9x7ui32JS+oupyIEx2BOx5FUZx/Z+iHEFFxLIb0E3vx1GN417cfDsTTD7gT4qDQoRpbSo9WxXAwSNcsdq2FonCr20DxYIbruPIXRgoEj4ZRcxaQ9o+D75pPRMA2VooD6f71QweNfffA0+A1Qt4yYrozcyrTUom5TJ4rkZZIG04ZQkpQY4KTlDfRkSuwZKlBHybdAHEOjzXVVObEG6q0RVhvKUjkp1MXv9+1AN8NYkTQ4kGpoBuskRkZHaDH7fFGIG5lyAcI3fhVO/xDD19ysXnvxqngd6GMsS6pzeK31OrYvfwcAy5pS9O9vYXnXnWoUvOmn8KpPQcNyGHYTJdyic6N2AiLqnkuLkmrbbGlaCV/srs70AVY5XZQKY6SyPWqknu0hbGSpT0T52BnH8sXrniYpDEacOvJ1azku041luK5ECkSkyWmh3RwrelilS46vi/Kq0HOsqhecV7oVgNeFn6JzZw9LRx5jaQjOj/6elzyfAKOOhlyOlaF9kNsH3tjtirPoyGa5LZalSe/lVfTyRPxjpB61YKN6VlaGBnky8S8q79G7/fPAz+E9wHuiKEe5S6g0wpvDky/R2rv1YXQZpeT+65AplrmWyA2jqzHkOs6NqDydH1jvRJcxPh/9LZqM8hXrw3w9cgVxYfEh4/NcGftW1b4vjv8z5ol/y3mb38NG52ReWT9A3BwjZmY56fgTZn/9DoKZRMF/OqWUlpitqTnPvFBLwXEkuuWwvMmGPLTEKtLqpIRhFUNvCFt8Yu+/ws7yg6AXc76lMEgLywoDMNZDwyWv4KVC+YXT6Xo0cxA7miJkjbI8kp9YFCQ/blZi5wbYcbv/0jYnuo+EkSdHije8aDU8pjIo8pWWgmOClCzdfR2rQwO8Rj7OtZzkf9/av4krot9hIFQxDeSFWApJV7amS2kVYaLxN3qoEQAAIABJREFUOBoGRRknJXSMSJo9zjLeFH6CmFEWhWKxRLMwiZdc/3ii0Z+n4KUNLjEq5o4YBT9YnIyFyxPegIgrCl7wuN5bA6C+nUjuSUI4VaJQMCzq0JQlZtpkSmHq0Pirda3cubWffcMFP/MIwDF1WoVOScYINa6maWCUY4r7YMVLofcJvnx8D3/c1UksWQcFSKYb4O8f4qErL+Sc/d/CMjRAkjQrRKGxExo7GZb3q9fe7HlvvWw3HfpH9tt5d8eJAKxoStJLKytL7oDCNmHjpXDmBTDkrqHsTlzLugmDS5OCZj2vKiflB6tHuf7fyn8V71XU6wG4NvY1dvzwek4DXzD+dfsHeKezBH78H5yfGaNNZHhf5B7IwRvDwKAaqqz/jbIIlwm4K/45cGv8XR0DdHzn9oXRn0HFuOPT4evQB+NYmQQpZ2Jq8YG8xdbhKDrLONGdJ/sn+1XodpTXJvdyoqkC0181P4hODF1G0an4J6NqO1H+KvQs/x79JTfYr+Zuez0/iP2IfloYE03EhUlPdDU/XvpV6uIRUrEIdfEwK2QfH9/8bkbr1mG//lIaYhEOPPkllvTezZn//N+kkzGs//kddza9h2dDb+cR6wAbSg9wr7aeXtniB9MB3vW6l7Hi1HXwVIkzz/47eOZa6FXHFG6aoW7VITKTKLxYCN/3IVBrNGfd/0sp5SyTnI8svCBze0KJQnO0QhTyA34GUH3YoF2vGBnVL8cs5akPqxuxR7ayzBqC3icIGzlOC6n88XQ6DQxiheKEbY32cA7HEejESXpZH4VxonDKO+EeZfZrIl5dNM0lbObRQile3NmuREGMsxQAbIPlg2o0/aLiRqgQhfa9N7IhvJldu38Er/2R2niw8xSg3Ekl3SyT6Sa/RVOk4sqXnRENpBhED6fZK5fRJrI0aOVAfbFUYhkmEXc1KlJtoO2iLlIOlleufYtZ8LPDktEw6bBbriCc8kXBWy7ULyZYtwwhHRoo+OsNgLIa2kSJvEyQ1yy2Dju8OmqwYXULF0UuZ81TjdzEy/zPO5bGUmEwTAON8TZO5yGSlgGnXwCFQUTXo+jWCsyIG8iNpiEUIuxmqzhGiXaKhHFrIY3s9jvfFZZrTT52hfrrWZAP/jcAvzv1URrsHrjd4J+LBepCZQsTacND31fVa92lLrn3QgA+HfkjABda34YwUAC+c+jWNkBCmJymP1G1LWWPUQyvhqYOBi2dNn3yQnX3rf0sr9ujjulTxqcJxRK8ZO0ybtuWQSfK16I/50WhPfyV9gN0Yrwt/Aj/Eb2K1+nfY59cBiU4Qezn9vgX+JTxaVaIIb4UvZo39n6CohvL2R76IIM08lXrwwB8ML2XCzJfIiuTXGW/BVCrD34iciM/sN7Nt/9hA5/57WaWNSS47J9OZ2nXrXDHL3nr+jVs252CArQv66TdLIIlWL26k1e/6xXVB5Ztgc3Q3NrO32/wpmSdDXuu4+TQXmg6DYTDQAmMuI0djhN11PMeo3p+UjoqoNt10Kx8eblirAj782nmmmlFQcpJ8umOAF6o+8hzOXi1eRojFe6KilzxdMhkf6iDVU4PdL4MzBJOPk9nvYAS9DgtnB5GBfiAJULlp9fVqRGZLpJE7RJLwjkK4QaGnXrWyGr3kU/jSuXGsXW0SCOYE7OPomYOLbzM74STGKpjqxSF/Y+QtMYYpJmO4YeI8n5OEXspkGDUUmlxa/ddC2P/Bo0dh2gpuO4jb9nOqu8LPL+5anTSj2Hkw41gD6KH0uyR6obuLJXTCTWtRAyrHJNIt8HILupD5ayPuDCViFkaYavolyhIxcLoIQNDhnHCCSJSnb8GXDHwRKFe+bNbRE7NSi5l1DnI7Of00A52O8vY9ODtnGrtpDU0hDxwJ6dF7oUR+FO87Ec+y7xLdawA3fd4BUth00/U+Rndw6/lFzl+zL2f/nIJPP1bzi6qQOkPhz4CnhY/crH65+LXjd9+c/V5d7+7ZMdvYWcIIknqprp2k0x+1GWUuDAZibTT4q63zNnfUdcvkkBG4pgijiajlGSEoqP+FewIeStMzo5QMBzed095KZVnki/nq5m/4fr4v3N13Qc4N38VHzc+y53O6SS3qASBnfG7udQ+h1FZx1eiv+YP9mt5Q+hJPvj/23vvMLmu+uD/871t6lattOqS5aLiKlvuHRdkg21CDNh07GAgkIDfQAKBEAJv+IX2hhAghFAcEgI2EMAGFwwYiO24gituwpZkFauttNLuTp/z++OcW2Z2Znd2pd3Vru7nefTsaObOvWduOd/z7U+dzPudK3iXfTM/rZ6Kylvcs9Ej03U4ac/mhV23k63m2IwOZHhaLQZ0HswGc/9c2DsAe2BXYgFz7SqU4X/ecywvv2EjuwZy2lSm8py8tIsH1+/mbacvgtv0s9Od8egbLHKm9QTvcX7MQ+5JXHLsK7n+JnjdyYs4flEn9OkL61XznLU4rYPoM7Nh+1NaM28YfWQubCpiAF50iv675RFdjRjYW7IpOYqql8AxIeY1/kog5Yr2UdgJmHuczqEB3ULVHm1NPz4mZq8TzP6aj3yh0GPMRm12NDvS2HGdJBkpkqjmYPWb4IovwtcuQhUHmdcB5AhixNmuJ7Ye+lEIHWktFPJ4ONU83c4+Bu1OtqvOiFCIhBCKrR/MFZfCkz9EnAR2cYi+wWKQCQmQqAxSdrLBjZi1isZ8FBEKz9xOBYtvpd/KXwz9I2dZj/NN7zNUlXBn7hWATp7ixfug44/HF5Ka6tQJOgkTKRKNwGibVxORhZsKMpBzbhdUIGelg4f66Hy4ypyTf6E27M80Kjp62838kTVEQkoseS50aL+m/waeeqzCJ5yt9N51M0s3fFdPzsU+ks/8Fz/0HqDd+BT44Tv0X7P6/mXi/fBz8P18rzb7XGa9xLJH3haYLnp+Omrk9XASWZTY7FZ1OQCrrmDgiVvJ5rdyp5xOZ2WXDpdd/UZYclYwOX/ixrv4G/VVnbvw4n0623nb47DqVfD7H8FfPAvZOVSUzrWoPvB1On75V7x04vVkN/ycvNvFE0f+Gedt1k1+NnSewpI9D3B96V182fsCn85dxp/aP+YhtZwv330UgyZUeahYoVytACN1/lK8NmHhSJUX6aUn93zgt9nl6JpRXSZC642nLea/H9qAo6oUlcv5Ry+CZ6GNIcrYfP+dp3PUC89h//rHtDHEp994LmuPCVe/d33s4xRMqZBjF3SwNL0SXoQjvd38Pr+Xi+2HObUjAXugY8FykrkC7AI718fOgQKJiAlxzRItFDbv2sdSdHTaog6HvsFicI+4lRybdudQCpbMMhpeKdQ0z1wWEQrFh3QQwEghqalIvkbnYh3Kve1JWHkZAHvLti6TbSexVQWbSlAI0seTqo7smn+CThz1n7nRmiPtB9NSKOwvvslhlhEKWavWsQlAZg4pVSSl8uHK2Mtgl/fQm9arh62+UDDqvS0K5aToNBN5TpJ0qzxdai9Dbhe/KJ9CxfY4vfJgrabgZXVo4Cs/D7OOYGDrVtqf/QFP7xigO9MdbJasDlFy24Ibscut1EYfAezZyB6ri6dmXUip/E0+ob4JgCUKq7CPbaqTXtmjC/xVStrcUMrpKKpSroFtuYGtuVKExafDrz4Zfuazry5Mbs8GPpK7hg8khlhiqoQu33EHtye0/+TIcpg1foTaUPtds7pf/fTnWN2k9uHhL/6AObZNYmPbsM8aFgJwUlDO8WR1KTuXXMK5qxaBk+CXv9/Cy174HL+tHsHts97C2bu+x9nWY6hrfoZ842LuqhzP+fajgK5t9Xj1MI5PbOUX+RWoU65j3wPfZs4ff5rLVuvVbL5Y4a0fvZ2bF9/CcZu/g7rkMxROvJa7C8ew9vHr+af8KzjPepSTrWf52eLr6S8nGBrSYbc/zPXzN0l4eG87JwG/HljAuTzOz9ft5ULgnM/fz/aiG5RZPs/ayQ0efOQ+i3c4BYpqFz/ceBfnmXM22LcNrNCn4BfEy6kkR/VmjS3cIe3ZZBIOGf+v/y943yGTsLH/OQOFfSw6+XJ48N84viMHOXjPqy+Ab3yK1T2wLtHJh1+xihU9DtwGRRxOPWoBPAvtVp4iDkfP7yC1R2tuXTIQLB58MlaJnBEKfYNFNnqdVLB47RFVTnvm66y1H2TLtiPZpdrYU03Rp/Q9sGnzJiDF/LSCqhYAx81NknAstvSFkYR/feFSPv7zTSwdKEMR3Eo+qNd0wu474CvfhBPeEN6LvraZ6QkrGzQyvfqBG6nw2UUEeo/WQsEImoGqq4W6ESIpCiSkTsOrVvSzutx0IPA1hdH6YOwHh6RQ8MMY5yT1BViQiUwffm2jTA/JfXnSJnTPAapuGreSY05Kb79VmYu+M5zYxEkEFStzVQ9PFehQ/ex0D+e7Qxdxb+Isbsm9udbRrKqhw++4q+je8H5SkmPvU3dBuUNPuqUcGTXIGblfwcP64fk/8m1e2vgs7IpkdD7zU2YB79/9d7jFPSyMxAZcVPl1aOb45Sf0P4D7vqz/jZUXfqMfilE0Dek5kn05oC8Mrfti+Qre42hzTBULq1F7jsVnwMZ7eXLN/+Vd92QoKJe7jriJdP9z9A8VuEdW84fTP8Xn7nyW5953CfKjd1Ba/794iRSDnct51xMv5/6k6ZV83l9rIfaaG+A7r+O71qVYPW/g3NN1XcenNtzBy4D/KF/E74rHIvYLnK0eY4d0Mwe4r7qKr1Uu5XOHP8LQjo24g2W8yiADpPi7ey3gTbT/+Cl+/Nh2BgvlINb91xtyHOfAX97yB773w9s5x3qJtZ62Ha+wNrK+2st1Nz5T87OTJhymsE+bi/pNDaUupwRFOHfVApLJVDBRZ90VPLItw9VHvJYj774XV5VYsSQLD4CyHFa2lWAfLJo7F/rgFatmkX02z8uOP5w3XDlCl71muGmduLXgRHgQVnnbIIc2R4pNqtyPl9aqVtb434ri4njG7KlylLFJOFZgguxCR5lFSVtF9iqPue1J9gwV6Ui57LZns2r7rayytcY9P/8cv1VHUKoodhmhkNuzHVjCsi4bkwZEt1PgqN42tuwOIwGXz7L56Z+fDXfdDb+GhMoHfU96889rTdUvO1PK6X9iaQ3AN8810hRsB858L6y8vPb93lXw+A8Czb6gXPbmyyhbC5Y2P6M+iqroY/mlM/xaVR2xplDD/voUfE3Br3/i5nfpsL1yPuytvHczcwe2gUBx/d3w5I+wnvkpKyzo2fZfAPyxbeoWRRuR5/cw9/a38w13Eyue11VMe4sb6S1u5CfqSTpyvo072k9hX43Dz7/NLrj/Gqhr59te2Q1PfB+Ao9VzHL3rORrRrgYppefgDo1Qe/2Ud8AD/wqdS+Cs94UTfM3f+teR/9tumPz0mSO18/y0d2v7+bGv1ZESS8+m963foxe486sf5KIt/8Idc/6Ez258GSfJc5xu/55/mPt5Ltvxr7ilvaywItFFK18JG++l2r6YjUrfqlYyC8VuCsV9OMUcQ6UKjiVUqopqfhBx0+Srwr7BocCsAfD4+i0cC/z74zneAiwob+Qn993Fm3cNMVQoY298nHcnYBtdrN81xC7bBRfe+eWf8N8JGCDFPdVjOe25Y/lP9+9JSIlENR9kLIPOA9m8J0c2YQdNjHJKf37WqiUsnbecwae3wDadQLZSNvK0Wsxt7z07WKmnPJtVH70dhXDGPIHNcPmpK+DXP+akeS78AT7xR6t1gl0NpgvgI1kY2kkmUQHLQRJtQfTRm88/Fn4AWSlo38xYSqZHcVM65NWUN/Fbh6pEG5LqIlXZi+f4QsEUmbM8xDd7kqMiju4UZ1bTnbIvbPxkSFFiG1kOn5PhnnW72DVYYF32JHoGf8ngonPZvGEdR1mbWa/mUixX2VnRv6cyuBNYwvyMBEKhzcqzYm4bLz0VPndB0UVTZygtBdZtHyDpWqTNuPGbEQUF8NK1561ZkMZFHx/+Xu/R2nxpQrjz6IlemX20R6LbAqplrS1YZqoONIVR2qjuB9NSKOyvTyH9ws94LHE97Y+aSWPL7+DTh9VuFDHveJvvh++Fs3PPHt2B7eX2Qw33b/f9gdmSH/b+Q9WjECfBq9Qvhn/p0s+Gk+69/wQvPc6bih/k0pOO4OrTj4SXHoOb/4z/WfAnnH3p6+HfXsZT7ipWmvA6vDYo7qPSuZTH+hweOePbnHvUbD7+j5/n7bOe4LR9d7CuOp+XnAWcc8wSZMN9cNb1Wiic9T5YMw7beRQ3qR8Y3/nctcS8H66kSgn9Wb/S7/1OHUF3dS8/6VvAuSVhidSulG5/vsha4Af3PwMcDcATG7bToYrkijaOGuJffqUfsBV/czvfdDfRLSUExU61K3QyA79dt5ljHfj6b/fyes/mnc5PeKfzE1Zv+h4r57XTIzp3YZvSzsEBM8brT2uH38HZxyzj/OPXMKc9weF39uINbsXdWWFQJTllaTcPrO/j1j8/m1Xz9UO7cdcQ53zmLi5afTg8AVecchQccQRPpZ+H2/QEsFRe4lfuOaydFwbxaS1WKNtJXJNfUBOSarkNBEIEJ2FMfSaqzM0E5aRXLtUmh27LJItlx1kmxk1rJ6q51r2VrVSVsK+SpCPdTbZ/L56tx5gymoKyvWACzUqOvWJ+0wiaQkoK5OliWU+We9btYtveArce/WFOu+I79O/J8evPXsNR1mY2VHsplqsMVlOUlB30jpgbqeDRRo4V8+by2O/ymLkYT5ln1BcK5Hls+wCLu9OInxlunPuUhvT5d9O1pUHGUna+13QbMIl+BbRFQcx58WuA9UsbHcqv6lrR2oIvFBITbz5qtfbRjMLesz50QPqs/ZS26bsmBj9S5G37ijfBu+6lb+GFALx43J8DcEr+Swwme2v3M3sF8u77eJv3GX4w7/8Eb9+2/O+5vvSnfKT6DnK2/0AYn8SSs+CUt8OJb4LjXgPH/DEAatFpfHvLXLAc1E/fzw7VzvoFl4EpbdBTjRTFMqUnVH4feeUxuy1B2nP4VXU1fenDsKkyT/po7+pBug6DvZtC/8kIyWtKKXLFCjsHCmzYNcjvt+zlofV9/OqZ7dz6+FZueuhFbrjnBfqKNgOk+Omz+sb+lomSvHfjEGs//xvO/vQv+cEz+iG8f7N+4D5dfh2vKH6SLXsLFJVNG7XX5LtP6n317Q77OnlSomonGCJZ45T+y7XLWdnjMr+nm0U9HRw3Lx1WAgWuOkGf619/8CLciCN191CJf7pqNWf2msbxSjsHD5uvawqd3avHuvbEI7lwVS/HLewkk87g5vVEO0QyqETbFkkKLJgOWhIUD9R/Ewk9AaySDdii+H21dsXnf69kp4OksxqhUF+Bsx5fKJRy+rUXmcASWRCbea4+z52d3U12MgqnvxtOe1dw/3bkNjFAihf35CHVRaYaagppXyhYXlA8ro0cFTEluE2ETiOfQkIVyJPg8Nlhkp3fuTDt2dxT1QuF9aqXUqVKsaLYTRtWXj8XvpkXIKOGOKo3ix0xUzp+T/VAKGhNYXF3Juy37jcnKvmaQkpnd/uMdj2izDHh4Vu1BaHgS6dAU9DX5fbkK/hsSQcJoKpaW7DMuelcBEhte9QDzLTUFPaXIVtL29z800htuQ86FsNp79Qfbvxf2HgfHLVWr6KBl7pPYU7v0exuX0E3P8dJ6gl4kCRDTicZIk5jY1/vSLlsy4UG/R3dJwF9DBbLFBNpUpV9enIf6guTwXzMjTY7ZbF9dxWeuwOpFLi88Fne3X1Y6GiuRIVCG+zbilXcS45FVKoqsGs/u1df5nYZYk81xV3b05yvqtx4+y95HXDDA1u5+7EHGTARKAOFMkMF7cQeLJapNvTY1nKSp8iIx083JbkYhwcGe3kzuqbTou40Gc/m+d16wu0Pqq4LZRw60y5pJ0WmUKtdff1da+Hrn+GjL1/Kzbfp/rbH9WptakN/hf6dm7loVS/PbdvHn553BDyndFXKcoGqUjU22kRV71saCMD+XIlMcQd5PPaiJ1HbXOMggzdaTdROQM5UQpVUUH49Wj7Ez4VRflii+ZtM6gngKGMm+31pXs1Y/Po7FTsFfvFA31xRHBze5aseO6EDAcoF7VSPrmqdFNgekvOFzTjNR6vfqP8ae7tbHmA7s9i0O8cxqW66qptxTVW8tGUEsJMIotTSUqAqvjmkkypWQ/NRgiJ55QWF/QBee7IWomnP4TfV4/nr0rXcXj2FnrLu4ten2nALehExOyIUUuToSnvYEvFd+Y5jIxRSUuDK/A9YYJ8a1pAKhELOVEVNw7JzdTmR+78SLuxaIdmhr49JSiwocy3N89xuNIWXvCV8q3IE73e/Z8xHZR2hCHDYufC+x3Q00wRxSAqFAbNSdwcjHZt8ioN6go2ohXtNBETO2I9TZZPP5yTYZ3UyG6gqwRIVSP3OtMeW3aEiVsrMBfpQCkq23rdKZCHZQcFKsW3XYDApd+wscBTw66e30Ec76x69hw53Hlvzs/jbm5/k/ue6+GfCrF2AJ3ZWOQZTqx+P9/pd2YBn+u1AZX5ku+Lelyqcn4BNzz4CFqzrK7ElnSebcOjOeMEkHkSlJOyajM2050em2CYixaHzO59HqiW+/Pa/hMFr+KKTgH94P+esWsw5r9SZ3v+xpIv33bKVP3ScCrvDsa89ei6zt7XhbK91NtsZ/cAllJ7cMwlH+32SnShPkSHProECKc/cxqWcDolVVaQ4WKMpBBOA7Won4D3/BIBQJVes0FbayR57FoEn3n/Y/QzeRCS6yUkGBQsrdjoorJdpIBT2LnoZvOEHMEdnICeT+tp3myJwO8tJypUqT7+0D8cWXSEWqETDfH2TQcuaQj4MNfYXHLanzU62F2og3vCIrTHhZfX+KkX2qTSbdg/BolNY+uxtXL3jH4H/IGXp6yyOVxOQUPXNIZZFzm6ju7xvmPkooQp4qQwLuvS5uPz4+YHg9RwLy7L5r8oFAEZTqLJbtdFV1FpcTzIUConKIB0pFycabuuHm0Y0haudX7J1cAh8rW/QCIWgVLa5Lpd8Ck58M/SMsdREqjNoPuVrCuLWago4HhXfiFM1jmb/fIlMqECAQ1UoiF552H74ZHFI2/nKBb368TI1K6z+iukJbJqmVAZ2osRisCysG0ywDNjCLBayk80DVW6881ke3rCbdgvw4A/VeXziJ2GE0KZBmx4Lfr1+iM3Vk3jsidnc+Oivgs+vsjfzD25Yvyex/THuV7ohSaWqeHp7QdddiqjCyWwHfqvjHB4fecVK5rQnuee5nVzWWYK79WfXXnQC1x3zKvjix/mL1Qoehf975Ro4MkxIGhdHXaxvYBFdNbVa1ZEaEeGa8hx+VD2L7BAkHCuYOB1b8BINHHZmYvYq+uHNJhwoF8FJoFyblBTYNVgMGpgE6n2lhFR202VFhEIxIhQu+jif/c123m9/B48yQ8Uy7ZVdDLhhc3rxG9X7zeBrhEI4MZedNBRg6ax0YDKB0AyU8DxYdmH4k1L6fPjlwnMkGCpV+NubnyTt2Xzscm0SqTpRs0/EfJSqr4hVh5PQ56icNz4Fc/79v44Xrn7Hqyn4iOhrtG8rA6TZNViEl1/PD395N3+0+2bI7SZphAJOouZeUBJOPaVEF3MqQ4EfQm+gcKsFrjz9SGR2lu9edxprltT+9rRnB6W7i5UqhVKVPrIsKOvFXpcXCgCruI/2pFvzzNRrChnJ0UaOvXYFTG+F4FypinY6R9uS9h495lNGshN26mizvO9T8IWCMZ+Km6TsZ0b6iZzW5E3V01Io7G/00T4jFMSPGirneP47H8Ar76WoHAYkw+92b8OvP/jFu1/i+v+9jVdW+zjdg4eeWsfZlgsILxYy4MDz1XkstHfyzM4SX/iFjghKm+imh6q1q4lB09B9Xs8snjruMxydsPmciQHPJBwWbtgCd8NZy9r51foBFlk7cE++Fv4Hvvqmk7j46LnwyXToEwCOWDgP/PI3VoI/OVsLkcuPnw/b7EAotHfMgm4TzuY3JBmLXbQZ53yg9v+Wpf00S84I3vJtxgOFMrPbEoHZxbUtPK+BXyPRBpaDW6nTFJwEeAky5OkbKLKoy0yg/kRo56BSosOKmKN8bdD81hULZ8FWnUE6VKowt9LHnswKPNuiWKniZbr1g9i33owlUtElEnFSMZP3ynm1FV98gZdwat12iYT+nX6kyRBJhgoV9gwVKZhkJoCqGzEp+kKhNAjZ2t4Vw7A9bQ/3z5O/uPE1j6imkNhPTQECoVCw07rvhAgPq+X8Eb+AfD9JU0BQ7HpNITSDtXfP4bwep7YopcmhERPGetqy4WaaTCLs51Aqa02hz2qnrfo0CceqzT8q7CObdEbUFGbTjyVK+0EqRsuoRHJw9myEIy4Y8ymqISLUA03B/Eb/nrCchO51ARGhMHnFJaalUNjf6CM3O/wGcwc24VKmbKUZcLpREfV9kCRvO2Mp6+/Wk8HqnirOQBIKsAc9GfxBzeccHuecVQt5/nWX8ve3PsW37y5wk3M5r/2rL5B8Zigw6Szo7YGdsHzRXJafd/jwAeb1jbO00+UkTxc129etIxeC1aibqhEKwaoHOGZJrZ26ZnWZ7NA3mJfVDURg7LWPWuXU62qHEbEZtyedQCh4tkUiWTcGO6FXom4Gq5zDsy0yCRsGtKZgJbKkKLCvUCbp79e3+RYHoFKkw8qFGWzFIUCCh+vSE5bCVp0vkCtW6KGPrcnZJFwtFNrTnq69ZFT9mgk0IkT9fgmr6oVCyRcKtQ+zmImxkwFK4lHFMl3lKpRNoUYAFY1qqfFnjGY+ShpHsxGQgaPbnF/bDbv7jcUe3gyzj6KTDRrf7KkkdQmQfD+uKTcibrIm811FhIKVnoVX3zHN76fRqF+BIWpuyperVKqKPquNdrWPjAvpGqEwgG0JmeiMVxrSGm1Bm4PnmkJ0KasMlQZZ3bm+YV0Gx0wkyzmv9LW0TTCAH33RcohzAAAgAElEQVQkTjI0H/mJoZOoKRyS0UevOn242rfI6qPXGWRpVnHGyiW89dxVwWfnHbuUD126kjNXalveHHsQL5nmZSvmsDezmKJyyC4+HgDHS2FZwu7BInkSvHT6R5FUV41qXPFLFkcjQ6KYGyBlVTiqokMu+zv1eIL91D8skbIZqxbXrSaTkXR7P8450RYRCmMsczFOklGhEGk079oWqWTk99hhpApeGkqD/IX7Pc4r3a1XwHYCy8vgSYUUedKuOSelvP6esXPXRJiVhmomVMvVv9mjRGmgjwx58qm5geBqTznhBFC3yo0K0ReMe2m4pmDMR27dI2YcxVnJB74lv1fEvnw50BSUrynYidrosFGFggcoPfH7YcJQqyn4pMYZfRTFCIWy2xb0Dd5dNcfM9wcrbavOp1DjME93B477AH8VP0LIp+9/gbDD4G7Vhi2KOW4epxopX2Oc4umon76UMwJBf3euCUtOSKVh50N90J7G77dK5FksWfpaWOZe77T1b7a9pO4ACFNiPjokhYI4iTCiQ3yHTklPOEM79coscjPuLJgqn8a3wNAucBKkPZtv9R/POYV/5IQTTDtFc+OfdaS+ea48SccTR+3NgWmgWStE8+AmrAqdag/Ky5Jz2mv3Y8Z3U/lcFEL1xDeH36/fr5sKJxbfJppoD80IkyQUMomoplArFGrMR9necBLzMlAc4jX8nFML9xqfQhInpa/fU8lreNu2T2p/RqWgf7vtQrVMm+QCu+2wyB1zPjwpUe7TfoN826JAcLUlXDCO7mFmlohPwTcF+vkJPs3MR9FJuWKEwkChzECxzL58Kexa5i8Y/CTB4PstRB8B5PcaTcGv0pqq/TzRXvM7xo0RCsprY89QkUpVsScQCnuDla7lJms10ugkl+rS9vpouZQWhEJ9CCvAdhNSvMDuR0zm8KBkQqEQqbhLKReYjiB09NrVUsPOh8AB1RRsYzayzfPaaY6vFyyCEjusazaJ5qNDUigAoUmlXoUu52sczVWEZ/v0qm9PKSoUkpxxeA9LZmX50FUXcORiY6c3N/6rT1zIc39/CfM79YWPCoWKLxSaZZSaiSMpppm8l6VkHF+uXSsUnncO4+2H/ZyB3rCs87Bm4iLh7/Vt48l2AtvKJAmFFXPbecc5yzh+YQdnHhGed9eR2hVstjfiIE1DaYhOK8dRXWJs5R52MpyoV/ffGT48TqgptJGj35j3tKYwfHL1KKN2rQeg3L4koim44QRQLxQiK3e/RPO8jtpz7gsFbwShoMw9tmugqKPSKipobyn+PeIk6sbdgvkI9Ao46lMIhILZV/oAaAkQCoVEO32DWqjt9XPy8/3B5HrxcYvBdqj4DtTo7zjiAi3QH/738L1xCgU/+XC+vScwQQ06XYHJLG1kURVL3xNGKFStyHjKhVqhEPUn7a9QCDQFIWkWQn74c4+lx+h45hpatl4EQexonhRSnbrJd7onNKP4eKGmULbTrNsxyNMv7eWlqj856NDT15+6mNefasLD+v0JNpwc3IjJKGo+CkwDzcxH5sFNSAVL8igvS7GsavdpHvbVy5fxlUe38fCyds4PDtzgQfJD4QJNIWojnxyh4DkWH7pUJ/A8v2OAT96qPeOebYGKPJTnf0jbekEL6KFdWNUiGZXTGp2TJJGuyxsIJpG0zvqtFEmRZ8Bqo7e6y4SyRiJHnNB85Jp2idK1hKSr74X2lKPvDWigKYTn63NvOJ2te4vUN6AqmFIq9T6FmofbLAr85DeAncYuL4mILyA6gY62uvc/z/eb6KOIxgHhvg6EPyGyHyvVwZ6hohYKyoy9sDc4/prDdfXTkpXArg4h0bLPy86HpWfr2lSbHoQL/qYln0I6MXz62mb6Fc619kDZQYlFx6zeGk2hqoS8lSQd0RTKmbl4+0zfh0pBa57BgboDv8P+awpmceamyCRd2FvATqTBTrDY3Qd5WDi7i8XdA1ByQkf3oaopiMirROTfRORGEbl4Qg/mX5xGNkIvG9zMdjKLbQk/fmQLm4ttFMRMCPXOWX/CaeK0ja4Yla8hjGo+KpMhR9XLUqzUrTyNNnDySu2o/s3zoRrc8EGq1xSaRNNMFlGB6VhSuxpedKoOcQV9jvwOZLnQ3NXRHnGedy6OCAVjbqmUSFFgyIoID2u4+ShjV0kPvcgu1UYy2xmYj9qTbnhv1Mfz+0LBzbD22AW87cy6EimMYD4SoWRMWraZ+LfsCUNndw3oSSDIhHaSdeMeRSj4Ar5arnM012sKB0ooaI3DSbVTrip2DxUZaKAp+OMqW/qvRH+HCFz8Ce3jePwmeO5nLfoUhk+UfkZ6L31QyiFOikSmMxAKKVtRxqJoJWs1hWjDmnKxVlOI+l4OlPnISQR5LZ6ji+zZJkv+4uOW8pu/PB8Re2Y6mkXkGyKyXUSeqHt/rYg8IyLrROSDAEqpHyml3g68E3jdhA4sEAoNLnLEp2Anspx1RA8/eWwL+4oV+lxz89SbXLwsHH6BbsbTgFqh4GsKTXrkmgfGkypZyVF1M5R8c0SdptA5ax6eY/H41ohTtaGm0GWSjeoKa8GBsS2PkahQcB2rbjUcEVJeOowA8mPG7UTtucv01GoKxnyUpEDejmoUkcnV/OY2t0pXYQsvqjlkE07oU0g6oVAYpin4TvDmPY6bCgWgYmL0XeMX2bQ7FAo7jVCwEhHzkWUTJNW15GiOjLPefOTftwdYU3AzerJ7aW+eCrYu0xHxKfjjqhqhMMw3Mn81/Ol9+vXQbh00EB13o0MbR7NthVpaAY8+lWUWu8Ow3EQ2IhSggk3BSuvVvxEKlahQqNQJhaip7UA5mp2w+VTCsWqDQfxraFkz1tF8A7A2+oaI2MCXgEuAVcDVIrIqsslHzOcTx0hCwcuEN6OX4ZTDunmxL8eOvQX2JGp9BwEi8Kb/Duue1xGdHGRUoWDs3aL7BpfdRpqCHp+V6WZhV4oNeyI3caMHqX0BtEVu/CnWFBw7fJBdOyIUxKp9ANyMrv8CtY7xqOmtnI+YG4y5pVpmllfmiMWREsMNHM1tTpU55a1sVHNoS7qkXBtLTGRLM/ORP9YRhUIFz7GGmZUAKmbl76baSLpWjVDYsEsL91S2Pfw9EvG5jOZojl7LaMLYRJmPFpwEx1xJZb7uLLZtr57My25bTfSRf74r5q/VaCHieCYAYlcYYt2CTyFacwq0X2FWdZeJRkvpe8gImaSjKGPT787RGqgxC3ldkRpUlWJt9JGvKbiZEa95S9RoCnr8rm3VNuTxr5XlzExNQSn1G6Au3oxTgHVKqeeVUkXgu8AVovkUcJtS6rf1+wIQketE5CEReWjHjh2NNmmNEYVCW7jC8rIsNGn2+wpl9qVMdcIxrq6jtmXxJ5mm5qNQKGTIUXYyEUezmWT8hyXdzaKudJgBGf0syss+DG/878iAfKEgk3rD+Qzzt/iTnT8JBh9GzpGK1NGJOun9WvcQmo8At7SPru7I9W1gm293SsxjJy+q2bQlHZKuRVvS1WWdmzmaA02heUZwoVRtqCVAGKMvXprOlKfLQxjWbR8g49kkU221xwqEQovmI/+7Tc1HB8jRnGyHK79OdpYuDOnnnpS8Nij0h45SM+5qIBSaCLdUlzYTBoEDI5iPzEo7GskGsF110VXpC5MZHS/YX9KqUsGi3+vVyZsD23WCZOf8cAf1jmb/XO2vluD/PtA+haj5KKopBAukiPlIJs/SP1U+hQVApHA+m8x7fwZcCFwpIu9s9EWl1FeVUmuUUmtmz94P+169T8HNhO/VaQqLusOJaShjhEIxUi+pBaLmo1L3EXr1MatB4hqE5iMqZEULhWJ9NIub1pN5op1F3SlK0ZiBZj4Fv5w1hOaj+kl4knCbaQrDzHINVmbRyQ7CCpYQmo8gjCTzH6gGmsJS2YYrFTaqXrIJh1MOm8UFK0yeR1Pz0eiaQrFSHe5kNgQ5GW6GzrQbxPcDbO3P09se+X2BUDDXd0zmo0bRRwfYfGToTOvj+ppCJaopRMp9V01DmaZCIT2rZU2hJqckwjbVRUd5Z0QoJIPJNWFrTWFfYi7s2wo7ntFVT6MJgpVCY5/C/voTIGI+StTUcQo0BT9pE7TZsDL5msJBFX2klPoC8IXRttvfMhfAcE0hM0s/cLndtbWPEtmwjAJQbDPRRvsilVFbIBp9VO06HP7qheYb12gKefY4ofkoWGGf8AZdPleERV3pWqHQSo13X1OYAn8C1PkUbAmjj+ojodxGQiGhzWEv+whselhHrJSi5qPIhOMLiXK+1mFrhM9cdL387aqTTMKpjSjzhUKyNgehJZ/CCJqC7fpCJR106Ysypz0BfqKfLyTHYz5yU5F8h7rktQMsFLoCoaAnsWqiHfJ7glpVPspcX7vZfZeepXOFWvAp+OaXek1hG11kS306sz1IZjRCwVJUsBhIzgUUbLhHBzZE77NysXahlOwA5MAIhcB8lAw0BdeWGmERYDlTEpI6VZrCZiBaSH6heW/y8O3Fvp093RM+KImsfvjEBi9DT9YLViWVDjNh+M7PFolqCtFVckP86KPKEAkpU7TTlExIaiBc5h0HJ18LwKLuFsxH9STqzBOTjGPVawq++aheU2hgYvNXU+d8QGtbpVzoU/CT14LvZ0JhEF1lm9d+YbqSlRqeU5DsgFd/DU544/Dj+/tuQqFcGZ7NXHdsvEwwmUaZ09ZIU2jVfFSvKTQocwEHXCh0pFxEQk2h6nVoR3OlUJebocdhN8uNGYum4A03H7UlHLapLiwq2jzkpIymkAel8KwqZWyGUqYUTH6Pvoei17Le0exnhh8I85FfQtxJho5m267xNQSINSWawlQJhQeBI0XkMBHxgKuAm1v9slLqFqXUdR0d4+wcBXDEhXDFl2D+ifohz/SEaqKXDStApnsQkcCvEJhgyk0yHpsQnXBqqkE2whcKJR0ZUbTSFCu67aRlDRcoi7rSYa0UaE0o+KvfScpRqEdEAuFYaz6qE1KN/C7RB8ckt9X6FCITo5sKJ8JobLzZR7vpcCWJJv6d416jW082Ov5IPoVyc/NRMB5jPgKMc1tv39ueGC4UrFbNR3U+hcDRPLGagm0JHSmX7canoBLt2nxULtRpCkYouM00hW4dfRRNRmyCf76i5qP2lBsksNH3gpmEzbEqJTypUlEWuXTEh9C9bLjvqhqWdsdJwYV/Cye9dYQzMAZSXeAkuXhVL39y1mF6/MmI+cjHmpqQ1Ak/koh8BzgP6BGRTcDfKqW+LiLvAe4AbOAbSqknx7DP/TcfOV7YLMTLaE3Btz37D/tbboE27UBb1J3mue0DpDLtcOHHYNl5YzucJYiAUrWmk4b45iNfKNhpShXV9HuLulOAUBYXR5VGdM4FBOajqREKoM9DqVKpNR+15FOICoUUoCBnurNFfQqgV8p2c02hTemigtZYokqc0TUF1xbak00eLzs0H3Wk9OuM55BNOgwWK1pTcH3BUa8pjGY+StS+bp8PKy+DpWea9yZGKIA2Ifmagkp26MieSrHmvCdT+py1pZvco+lunX2c79f38Qj+rnQjTSHpsKXf/DZV0feHL1jKeTxL+xQK6Yign3V4YzOl2GYfSTj+HaP9/NZZeBL0LOfI3jY+8koTdOmbs+vNR/5iZyZVSVVKXd3k/VuBW8e5z/2qkjqMl39SN0H5/c36BvZXV6YxChBoCtmEo3sbjxERwbN1DwG3ia05wHc0F/VEl7fSFIvV4eYNQ0fK5dTDumG7o0PpxuRTmBrzEYQmJNexwO9CNR5NAcIchnqfgpcOzUcNfAqZqtYUgryAlgbu1w9qril8+Q0nNf++HWoaXUZTyCYd2pIOW/uNT8FrEko61ugj24XX/Wf4npvRk0002uUAMSvj8cJOE4CRaNer7dyemuvV2a7Nlt1tTTQzX1j1bxperqUO3/zSESmu2J50eVQtoCo2lqqYc2COXyniWVWqYtPR3q4XgkM7ofvwsOKwkwpNkaku/fmBfkai18Onofkorn3UMiJymYh8tb+/f/SNW+GEq3XyzKnvhNff1HB14jubs81Wfy3gT+qj+hT8OPaCznDMWWmKlWpTTUFEuPEdp+O4TUwwjUhOraMZwvPhtRJ9FFWfoxOfVycU3NQI5qPh0Ufpiqk3Mxah0IJPYeTv+1pA6GjOJJxgkquNPvIdzeM0H9Vz8rXwxh/UmtIOED3Z8NiSMqbdwe3DBRU0/x2+Cbd/U/OQbcPR89v5u8uP5sJVYZ/09pRDAY/B7GHh8fxzUs7jUmHRrDZefeIC6Fiox9GxMDxWNuJMDlbvk7BwauhonpraR9NSKBwQn0Ij2nrh8PMbfnTOUbM5bVk3i7tHvlFHIhGdBEfCskBsHF8oSIpiuYrXioPaSQbhfyMP5mDQFHwhOYJPwZ8c2yI24GaaguXqCTeqETQzH1k6SS5pWqs6ybqw05FItOlcls4lo2/biIj5yA/lzCQc2owZZE5bQm+z8vKwSVGrmsJoQiE7Z8ymz1bpaYuUJg+Ews7ahUe9w7seX1PYu3nUe9OyhLecsbQmec0vyT7YvTI8XmA+0jWNEp6n/T1zVkLvMXryzc7R0UXzTggPEMkpmHBSTXwKh3pI6sHM8rltfPe60/drH77jcVSfAoDtYee1+SgnaUqV5uajAMttfZJ3EmYSnTpNwXV8R7NAtUn0kT/pt8+HflOwrD7sEvTK0k8yqjcfNbPH2wms6iBVJSRTYxD2Xhquf6I2K3wsBEIhS6epg5RN2MHkNqfd5I687j+Gf2es5qNJJKopWP4kN7AdOiKBhoHjfBShMLgDoqUnRiD6XPj+hcKso2HDLdom7wulcqG23/Glnwkzl70MfGAdPHojPGViXvwudweiQ91oNNIUxA4d3rH5aGQOuPlokgjMJaNN7gC2h5XXieBDaE1hdAe1M6rKHSCiTUhTqCm4DTWFJuajjki5imGOZrRQ8E0PNeajdCRyp24iMpPFEAmyyVEcuPWkOlvTyBpRYz7SY8gmHLrSHm3J0IxUQ7Pf0GzfMOlBBLMiQsFuM2aYSoFh9Zigufkq6gAfxafg42veloSlL8qzTSOtXevCY1bqhEKibXhmd3SsK14BV38XZq9gwonkLwREBUFsPhqZCTMfTTD+zes0CCsdhuMhJlZ7kFTrmkKLDxJgiuSN3xy2v/hCrqWQ1PZm5iMjNIZ2RjSFOqFgN3A0Q7CqzpHYL1/RmImYj7oiPoXrzlnGv76xiYO6VU1BJNQWJsPsEWF2Nhyb3RG5XmPyKUSq3x758paOG11sBd39ek1UT6ItkuFeJxQaUX/vLL9kcjL+/UZYUaEUHWdsPpqZeI6FZzcukjaM2SuCPg+DJClW9rWgKXhjUzMv/+cD05JxnLRkPkp16ol/zip0pVBVO8lEJz5/QmlqPqqbiHxNQSWGFVWbUPxxuBnaE775yGFRd7qmpErtdxr4RZrhJM0KfXI1haj5yG2foyeyarmxT6GZ+Si6bYtRfv5z4dlW6LfrnK9X+QvWwE7d55xyXvdJGOkZGUvr0wNNqrP2+GI3fj3BTEtNYTqbj0aNPPLxHYxAoWpRNFU3R8R2xmYOWnJGTdjtZBM4mp1RHM3vfRSOe50xJdX1Xoiay3zTQ/3nzUwvEU2hrZHJZqLwx+FlSLo2xy/q5Jj5o2i9jSKomuE0OZcTTFQoeI4T+gRqsqz9JLoRzve7H4APvthyhJSfA5RwbboyHrYlWsgvv0RHEwXRR8XRNYWoUJpsoXD2+3UkpE/UPBlrCiNzwPMUJgnPtkbPUfBZfFrwsliuUqqooNRGUyx30k0G+4MXWeE19SlAGCboZfRKr1kV1XrzkR+N1GxCdabSfCTBtfrxu89s8Tu0NlH5q83J1hTa9PFcW7Q23D4P9m6qMx+Z1800BYDZy8d0XD8HyLMtLj9+Pivntge+mppjlvM6GW1E81FUUxijn2l/OfW62v/XmI9mUPJaTIjWFFoUCpFmPYVylWK52jxD1uf4q6c0Q3msODVlLpokr0XxMmEyj0+N+agu+sgXGM0mVDs0H81tn0Rh2jZXR+SMxVY9JvNRk+6AE0zGs0k4Vugz8+uK1ZiP6sptHCB801HStTl2YZ3WFTiaD3JNoR6ZGkdzLBQmEd+n0BKRMLhipdqao7l+pXGQ49qW9otaZtWc7Kx1KNfjZYeXLHdH0BTcusS3+gfLTJ6rD59Patkk+lZOfw+suWZs32m1zAXo3yX2pK90RYSebILBogmj9HNLoqvvecfDkjOh58gDemzPsZo/H9FS6qP6FA4ioTBF0UfTUigckNpHU0BbwglC5lri7Xfxjhvupc1oCi1rGdME15bwN9mu9h2MFBPuZcHeU/ue7YU1aupDUutXpU00hXS2fXJ7Sjje2DPJrSaO+Eb4SYxTQE9bgtIe0ymvkabQsRDeNq7qNiPi2iMIhZrktfIYHM2TbD6qZ4rMR9NylpmuIanvu/AoPvfa41v/woITecY7mmK5SrEVTWGa4dp1mlOqc+Sb38sMnxRFQm2hPnktMB+N7FNoObdjKhlr9NEUmRFnZ73wPm1voClMECNq4c2S10baFqZeU5DY0TzjWTwrzWLGNgF5jmUczdXWTU/TBMceQzQWwGFn6y5Z9bgpXVnT1xT8VXW9+WhY9FHY1+CgZ0zmo6nTFK48aRHrdxkTX5upRDoJAsq1ZXRNoT55rRE1TvGDyXwUO5pjDJ5jUaxo89HM0xRkbCaxM9/bZEdhv2qgdfPRTNUU7MSUaQprj4mUpvCFwiSsuJOuHSau1eNP9Kb20bTRFOLktZhGeLYVhKTONJ/Cy1bMYXb2AExefv5C0KjEjbwf+f+wjGZfeMwwoZCepTuKTTWdi7RgmDXxvr8PvHx58wREy9LXfsw+hak2H8WO5paZro7m8eCbj2aio/mVx83nlceNEG3UKm5Kt870k51ETM6GmexHNR9NB6EwBvPRyz85PHR3KnBT8BdPT8qhzls+Z+QNnMTYy1xMuaM5rn3UMtPV0TwePMemUJmZjuYDhpseXtgs2iyp2YQ6ncxHjfpMNyMzq7aAYIwRCvkWhIITOninWlOICgWZvGd/WmoKhxKebTFUKJvXkxg2OZ2YdYTWFKLMOx7mHqtfNzO9TCdH8/zVsOi0Ka1VNa3x60GN5lMAbUIq56ZeKPjmI7EnNWQ6FgoHOQnHYsAXCrGm0JjLPq+bX0e55rbw9UwISV1yOlx7x1SPYvpie635FEA7m8u5STXZNMQf5ySPI55lDnK8iFCYaT6FA8pIK6lGPZohdCpOB59CzP7hJFvzKYC+L2xvchMaG9EsE3+iDzupR4sZM54dC4X9ppn5yA8/dKeB+Shm/3C8MQgFb+pNRxCajw5VoSAiy0Tk6yLy/akey8GE51iBZSQ2H42TwNFc93DFmsKhg5PUJiFVHX2SdbypjzyCsHT2JCauwQQLBRH5hohsF5En6t5fKyLPiMg6EfkggFLqeaXUtRM5nulIVBDMtIzmSSMISW2mKcRCYcZje1DUnQxHnWR989FUE5iPZpBQAG4A1kbfEBEb+BJwCbAKuFpEVk3wOKYtiahQiDWF8RHtrxBl/omw6NSRK7PGzAycJJR8odCKpnAQCIWZaD5SSv0G6Kt7+xRgndEMisB3gSsmchzTmaWzQnt37FMYJ92Hab9Bti7BacGJcO3PplVjophx4iSgOKBft+RoPhjMRzNQKDRhAfBi5P+bgAUiMktEvgKsFpEPNfuyiFwnIg+JyEM7duyY6LFOOdGGIbGmME6WnAEf3jI8wS3m0MFJRMxH08TRPEXmo4MmT0EptQt4ZwvbfVVEtgKXeZ530sSPbGo5ck42eD2miqIxMTEhTjJs0DRdHM1+FvMhoClsBhZF/r/QvNcyh1KZC8eOHc0xMfuNbRLSYPSV9zFXwglvmPgxjcYUmY+mQlN4EDhSRA5DC4OrgNePZQeHUkE8gIVdKTbtzum2lTExMWMn2l9itEl29UEgECAcp8yg6CMR+Q7wv8ByEdkkItcqpcrAe4A7gKeAm5RST07kOKY7l5ga9bFQiIkZJ9E+CVNdvqJVguijGeRTUEpd3eT9W4FxN2pVSt0C3LJmzZq3j3cf04kPXrKSc4+aw3ELO6d6KDEx05OxaAoHC4dQ9FHMGLEt4awje6Z6GDEx05doNNEkr7zHTSwUWkdELhORr/b390/1UGJiYqYDifbw9STb6MfNTExemygOpeijmJiYA8D8E8LX0858NIMczRNFrCnExMSMiXnHh6+njVCYmbWPJoRYU4iJiRkTfkMlmD5CITYfxcTExEwg81ebF2rEzQ4aYkdz68Tmo5iYmDGz7Dz9Nz9N5o1YKLRObD6KiYkZM+f9NVzyaVg1TYoyz8TktZiYmJiDBseDU98x1aNonVhTiImJiYkJmIm1jyaK2KcQExMz44mjj1on9inExMTMeCy/n0KsKcTExMTEBMlrsaYQExMTExObj2JiYmJiAuLaRzExMTExAbH5qHXi6KOYmJgZj8SO5paJo49iYmJmPHHyWkxMTExMQGw+iomJiYkJiKOPYmJiYmICfPORTO40HQuFmJiYmIORKfIpHDRVUkUkA3wZKAK/Ukp9e4qHFBMTEzN1zETzkYh8Q0S2i8gTde+vFZFnRGSdiHzQvP1q4PtKqbcDl0/kuGJiYmIOemZo9NENwNroGyJiA18CLgFWAVeLyCpgIfCi2awyweOKiYmJObgJoo9mUJ6CUuo3QF/d26cA65RSzyulisB3gSuATWjBMOK4ROQ6EXlIRB7asWPHRAw7JiYmZurJ9sK5H4Tll0zqYafCp7CAUCMALQxOBb4AfFFEXgHc0uzLSqmvishW4DLP806a0JHGxMTETBUicP6HJv2wB42jWSk1CLytxW1vAW5Zs2bN2yd2VDExMTGHFlMRkroZWBT5/0LzXsvEtY9iYmJiJoapEAoPAkeKyGEi4nFs42sAAAnoSURBVAFXATePZQdx7aOYmJiYiWGiQ1K/A/wvsFxENonItUqpMvAe4A7gKeAmpdSTY9xvrCnExMTETACilJrqMYybNWvWqIceemiqhxETExMzrRCRh5VSaxp9Ni3LXMSaQkxMTMzEMC2FQuxTiImJiZkYpqVQiDWFmJiYmIlhWvsURGQHsGEMX+kBdk7QcPaXeGzjIx7b+IjHNj5mytiWKKVmN/pgWguFsSIiDzVzrkw18djGRzy28RGPbXwcCmObluajmJiYmJiJIRYKMTExMTEBh5pQ+OpUD2AE4rGNj3hs4yMe2/iY8WM7pHwKMTExMTEjc6hpCjExMTExIxALhZiYmJiYgBknFETkNSLypIhURWRN3WcfMn2hnxGRlzf5/mEicr/Z7kZTyXUixnmjiDxi/q0XkUeabLdeRB43201KoScR+ZiIbI6M79Im2zXqtT3RY/uMiDwtIo+JyA9FpLPJdpN23kY7DyKSMNd7nbm3lk7keCLHXSQid4nI780z8d4G25wnIv2Ra/3RyRibOfaI10g0XzDn7TEROXGSxrU8cj4eEZG9IvK+um0m7bw16nUvIt0icqeIPGf+djX57lvMNs+JyFtaOqBSakb9A1YCy4FfAWsi768CHgUSwGHAHwC7wfdvAq4yr78CvGsSxvw54KNNPlsP9EzyOfwY8P5RtrHNOVwGeObcrpqEsV0MOOb1p4BPTeV5a+U8AH8KfMW8vgq4cZKu4zzgRPO6DXi2wdjOA34ymfdXq9cIuBS4DRDgNOD+KRijDbyETvaakvMGnAOcCDwRee/TwAfN6w82eg6AbuB587fLvO4a7XgzTlNQSj2llHqmwUdXAN9VShWUUi8A69D9ogNERICXAd83b/078KqJHK855muB70zkcSaAZr22JxSl1M+ULr8OcB9hX++popXzcAX6XgJ9b11grvuEopTaqpT6rXm9D12qfsFEH/cAcgXwLaW5D+gUkXmTPIYLgD8opcZSOeGAohr3uo/eU83mqZcDdyql+pRSu4E7gbWjHW/GCYURaNQbuv4BmQXsiUw6jbY50JwNbFNKPdfkcwX8TEQeFpHrJngsUd5jVPZvNFFNWzmfE8016JVkIybrvLVyHoJtzL3Vj77XJg1jsloN3N/g49NF5FERuU1Ejp7EYY12jQ6Ge+wqmi/Ypuq8AfQqpbaa1y8BvQ22Gdf5O2h6NI8FEfk5MLfBRx9WSv14ssfTjBbHeTUjawlnKaU2i8gc4E4RedqsHCZsbMC/AJ9AP7SfQJu3rtnfYx6IsfnnTUQ+DJSBbzfZzYSct+mIiGSBHwDvU0rtrfv4t2jTyIDxHf0IOHKShnZQXyPjT7wc+FCDj6fyvNWglFIicsByC6alUFBKXTiOr7XSG3oXWkV1zIpuzP2jo4w2ThFxgFcDJ42wj83m73YR+SHaXLHfD06r51BE/g34SYOP9rvXdjNaOG9vBV4JXKCM8bTBPibkvDWglfPgb7PJXPMO9L024YiIixYI31ZK/Xf951EhoZS6VUS+LCI9SqkJL/rWwjWasHusRS4BfquU2lb/wVSeN8M2EZmnlNpqTGrbG2yzGe378FmI9rWOyKFkProZuMpEghyGluoPRDcwE8xdwJXmrbcAE6l5XAg8rZTa1OhDEcmISJv/Gu1kfaLRtgeSOrvtHzU55n732h7n2NYCfwlcrpQaarLNZJ63Vs7Dzeh7CfS99ctmwuxAYvwWXweeUkr9vybbzPX9GyJyCnpOmHCB1eI1uhl4s4lCOg3oj5hMJoOmWvxUnbcI0Xuq2Tx1B3CxiHQZE/DF5r2RmQzv+WT+Q09im4ACsA24I/LZh9GRIs8Al0TevxWYb14vQwuLdcD3gMQEjvUG4J11780Hbo2M5VHz70m0+WQyzuF/AI8Dj5mbb1792Mz/L0VHtPxhEse2Dm0nfcT8+0r92Cb7vDU6D8DH0YILIGnupXXm3lo2SefqLLQJ8LHI+boUeKd/36H7pT9pztV9wBmTNLaG16hubAJ8yZzXx4lEE07C+DLoSb4j8t6UnDe0YNoKlMzcdi3aJ/UL4Dng50C32XYN8LXId68x99064G2tHC8ucxETExMTE3AomY9iYmJiYkYhFgoxMTExMQGxUIiJiYmJCYiFQkxMTExMQCwUYmJiYmICYqEQMy0RkUpdJculUz2mA4GIvFVEdojI18z/zxMRJSJ/EtnmBPPe+83/bxCRK+v2MzDCMVLmnBVFpGeifkvM9GRaZjTHxAA5pdQJjT4wSUWilKpO8pgOFDcqpd4T+f8T6KKJXzP/vxodHz8ulFI54AQRWT/uEcbMWGJNIWZGICJLRfc0+BZ6El0kIh8QkQdNYb+/i2z7YRF5VkTuFpHvRFbcvxLTg0NEevxJU0Rs0X0c/H29w7x/nvnO90X3ePh2JMv1ZBG51xRMe0BE2kTkNyJyQmQcd4vI8S38vA1AUkR6zf7X0rwQYP15+XhEm9osIt9s5Xsxhy6xphAzXUlJ2JjoBeB6dOmStyil7hORi83/T0Fnxt4sIucAg+hSFCeg7//fAg+Pcqxr0SUWThaRBHCPiPzMfLYaOBrYAtwDnCkiDwA3Aq9TSj0oIu1ADl1y4q3A+0TkKCCplGp1xf994DXA78yYC3Wff0ZEPlL/JaXUR4GPim5G9D/AF1s8XswhSiwUYqYrNeYj41PYoHTdfdB1Xi5GT6IAWbSQaAN+qEzdJBFppV7TxcBxEbt9h9lXEXhAmdpVRkgtRZfG3qqUehDC4mki8j3gb0TkA+jyAzeM4ffehBY0K9BlD86o+/wDSim/D0iNT8FoF/8J/D+l1GgCMOYQJxYKMTOJwchrAf4/pdS/RjeQuraKdZQJTarJun39mVKqppiYiJxH7Yq9wgjPlFJqSETuRDdIeS0jVMdt8N2XRKQEXAS8l+FCYSQ+BmxSSsWmo5hRiX0KMTOVO4BrRPcSQEQWiK7b/xvgVSYCpw24LPKd9YQT9ZV1+3qX6DLUiMhRprJnM54B5onIyWb7NtEls0E7i78APKh0N6yx8FHgr5RSlVa/ICKXoavx/vkYjxVziBJrCjEzEqXUz0RkJfC/xvc7ALxRKfVbEbkRHb2zHV362uezwE2iu4D9NPL+19Bmod8aU8wORmjTqpQqisjrgH8WkRTan3AhMKCUelhE9gJjXrUrpe4d63eA/4PutvWAOQ83Gz9DTExD4iqpMYc0IvIx9GT92Uk63nx0o5MVjUJmRTcQWlMXkjpRY1lvjjVZjWFipgGx+SgmZpIQkTejeyR/eIQcihxwiZ+8NkHj8CO3XGC65nLETBCxphATExMTExBrCjExMTExAbFQiImJiYkJiIVCTExMTExALBRiYmJiYgJioRATExMTE/D/AyDvLLR8M2ilAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" + "cell_type": "code", + "source": [ + "%%capture install_log\n", + "# Import bifrost, but attempt to auto-install if needed (and we're running on\n", + "# Colab). If something goes wrong, evaluate install_log.show() in a new block\n", + "# to retrieve the details.\n", + "try:\n", + " import bifrost\n", + "except ModuleNotFoundError:\n", + " try:\n", + " import google.colab\n", + " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", + " import bifrost\n", + " except ModuleNotFoundError:\n", + " print(\"Sorry, could not import bifrost and we're not on colab.\")" + ], + "metadata": { + "id": "yMAWWv40Qn9w" + }, + "id": "yMAWWv40Qn9w", + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Let's start by taking in a collection of time domain complex voltage data for 16 inputs, transforming it to the frequency domain, and creating integrated spectra. First, we need a time domain signal:" + ], + "metadata": { + "id": "gwCX2hrVQj7F" + }, + "id": "gwCX2hrVQj7F" + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f785410a", + "metadata": { + "id": "f785410a", + "outputId": "db9d1f13-b076-43e5-a0fc-e83feee878e9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + } + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9d7xdVZ3+/16n19vSG0lIICQUQQM66mAZ/YEI6jijwvwcdeSHvYzjFGbUUWbE0a9fyziAgoKIjhSlCIIgLTQpKaSQQHq7N7e3U3dfvz/W3vucc0tyE27Jyd3P65VX7j33nH3W2Xuf9azn+ZQlpJQECBAgQIAAAKGpHkCAAAECBDh+EJBCgAABAgTwEZBCgAABAgTwEZBCgAABAgTwEZBCgAABAgTwEZnqAbwazJw5Uy5ZsmSqhxEgQIAAdYX169f3SClnjfS3uiQFIcQlwCXLly9n3bp1Uz2cAAECBKgrCCH2j/a3urSPpJT3SSk/0djYONVDCRAgQIATCnVJCgECBAgQYGIQkEKAAAECBPBR9zGFAAECBJgomKZJa2srmqZN9VCOCYlEgoULFxKNRsf8GlHPvY9Wr14tg0BzgAABJgp79+4lm80yY8YMhBBTPZyjgpSS3t5e8vk8S5curfmbEGK9lHL1SK8L7KMAAQIEGAWaptUlIQAIIZgxY8ZRq5yAFAIECBDgMKhHQvBwLGMPSCFAgAA+pJTcub6VsmFP9VACTBHqkhSEEJcIIW4YHByc6qEECHBCYU9PkS//ZhOPvtI51UMJ4OLjH/84s2fP5owzzvAf+8Y3vsGCBQs4++yzOfvss3nggQfG7f3qkhSC4rUAASYGmqkUQqAUjh987GMf48EHHxz2+Je+9CU2btzIxo0bueiii8bt/eqSFAIECDAxMG2VjahbzhSPJICH888/n5aWlkl7v7qsUwgQIMDEwLQVGRgBKQzDVfdtZduh3Lgec9X8Br5+yenH9NprrrmGW265hdWrV/O9732P5ubmcRlToBQCBAjgw3TJIFAKxzc+/elPs3v3bjZu3Mi8efP48pe/PG7HDpRCgAABfBiBUhgVx7qinwjMmTPH//mKK67g4osvHrdjHzdKQQgREkJcLYT4HyHER6d6PAECTEdUYgpBoPl4Rnt7u//z3XffXZOZ9GoxoUpBCHETcDHQJaU8o+rxC4H/BsLAz6SU3wbeCywEeoHWiRxXgAABRkYQUzj+cNlll7FmzRp6enpYuHAhV111FWvWrGHjxo0IIViyZAnXX3/9uL3fRNtHNwPXALd4DwghwsC1wDtRk/9aIcS9wArgT1LK64UQvwUeneCxBQgQYAg8UghiCscPbr311mGPXX755RP2fhNqH0kpnwT6hjx8HrBLSrlHSmkAt6FUQivQ7z5nVO0qhPiEEGKdEGJdd3f3RAw7QIBpC08hBEph+mIqYgoLgINVv7e6j90FXCCE+B/gydFeLKW8QUq5Wkq5etasEbcYDRAgwDEiiCkEOG6yj6SUJWBMmijYTyFAgImBH1OwA6UwXTEVSqENWFT1+0L3sQDHIfqLBlfeuTloezBN4McUzIAUpiumghTWAqcIIZYKIWLApcC9R3OAoPfR5OH5vb3ctvYg29rHt5IzwPEJI1AK0x4TSgpCiFuBZ4EVQohWIcTlUkoL+BzwEPAycIeUcutRHjfokjpJKOhKIQSBx+kB03JjCoFSmLaY6Oyjy6SU86SUUSnlQinlje7jD0gpT5VSLpNSXn0Mxw2UwiShoJlAEHicLrAc1z4KlMJxhQcffJAVK1awfPlyvv3tb0/oex03Fc1Hg0ApTB6KbiwhyFufHrBMg6siPyel90z1UAK4sG2bz372s/zhD39g27Zt3HrrrWzbtm3C3q8uSSFQCpOHgm4BgX00XdBQ3MdHIw9zhvHiVA8lgIsXXniB5cuXc/LJJxOLxbj00kv53e9+N2Hvd9ykpAY4PlHQFCkESmGawNIBEJYxxQM5DvGHK6Fjy/gec+6Z8K7D20FtbW0sWlRJ2Fy4cCHPP//8+I6jCnWpFAL7aPJQ1D1SCGIK0wHSJYWwE5DCdEVdKgUp5X3AfatXr75iqsdyoiOwj6YZbFcpOPoUD+Q4xBFW9BOFBQsWcPBgpQlEa2srCxYsmLD3C5RCgMOioAf20bSCrRRCJFAKxw3OPfdcdu7cyd69ezEMg9tuu433vOc9E/Z+dUkKQaB58uDbR0He+rSAF0sIOQZSyikeTQCASCTCNddcwwUXXMDKlSv54Ac/yOmnT9yGP3VpHwWYPOSDmML0gmsfxTGxHEk0LKZ4QAEALrroIi666KJJea+6VAoBJg/FIKYwrSBc+yiGFViG0xR1SQpBTGHyUNSD4rXpBOErBSNYCExT1CUpBDGFyYHjyKpAc2AfTQeEHNXWRCmF4JoDdR1bOZax1yUpBJgclMzKpBCsGqcHQm7WUVyYwTUHEokEvb29dUkMUkp6e3tJJBJH9bog0BxgVHjxBAjso+mCkBtTiGMG1xxVPdza2kq9bv2bSCRYuHDhUb0mIIUAoyKvBaQw3eAphRiBUgCIRqMsXbp0qocxqQjsowCjoqhbLBNtPBP/PEm9a6qHE2ASEHZjCkopBDGF6Yi6JIUg+2hyUNAtThMHWSB6adYPTfVwAkwCwtJVCiKwj6Yr6pIUguyjyUFBt8iIsvol6Jo5LeA1wgtiCtMXdUkKASYHRd0iSwmodM8McGIjIispqUFMYXoiIIUAo6KgW2RdpSCCBmnTAhE/pmAESmGaIiCFAKOioFtkcEkhUArTAhEZ1ClMdwSkEGBUlHSbBqHsIy9/PcCJCyklUVQaclDRPH1x3JCCEOKtQoinhBA/EUK8darHEwCKhkVjSAMq+esBTlyYtiRGJSU1UArTExNKCkKIm4QQXUKIl4Y8fqEQYrsQYpcQ4kr3YQkUgATQOpHjCjA2lHQ7IIVpBNN2iPlKISCFo8E9L7bxtzc+j+3UXzuMoZhopXAzcGH1A0KIMHAt8C5gFXCZEGIV8JSU8l3AvwBXTfC4AowBJdP2A80hx8A5AW74AKPDtB1iwlUKwkI3rSO8IoCHHz22k6d29nDnhvpfz04oKUgpnwT6hjx8HrBLSrlHSmkAtwHvlVJ6y5J+ID7aMYUQnxBCrBNCrKvXfiT1glJVSmocE8MOVo4nMgzb8e0jANsMkgvGitcsbALg+3/cUfcKayp6Hy0ADlb93gq8XgjxfuACoAm4ZrQXSylvEEK0A5fEYrHXTehIpzmKhkXazT7yKlwT0fAUjyrAREHFFCrqwNDKUzia+oJHBB05jfbBMotnpKd4RMeO4ybQLKW8S0r5SSnlh6SUa47w3KCieRJQMmySUimFIBvlxIdp1SoFUw9IYazQqtrMa3W+n/lUkEIbsKjq94XuY2NG0PtocqDpBkmpJoY4Jnqd3+wBDg8VU6hSCkZACmNFdaFf2azvxdNUkMJa4BQhxFIhRAy4FLj3aA4QKIVJgl7wf4xhBTGFExxeTMGKKOvDCpTCmKFbNiGhfi4bASmMCiHErcCzwAohRKsQ4nIppQV8DngIeBm4Q0q59SiPGyiFSYAw8v7PcREohRMdpi2JY2FFs+r3gBTGDM10aErFACjXedbWhAaapZSXjfL4A8ADr+K49wH3rV69+opjPUaAIyNqFiCqfo4F/fVPeJiuUrBjWSh3YBvaVA+pbqBbNk3JKH1Fg7JR34un4ybQfDQIlMLEw7Ac4k7R/z3omnniw7Qcolg4MaUUbDMghbFCKQW1ggpiClOAIKYw8SgblcI18JRCQAonMkzTICwkTiwDgBOQwpihW3aVfRSQwqQjUAoTj6JR6ZBqxZuCTVemASy3WE26SsEJitfGDN2qKAUtCDRPPgKlMPEoGTZZt0OqnZzpFq/V980e4PDwlUFckYK0NKQMWpuMBZpp05gM7KMAJzBKVUpBpmYEMYVpANMLLMcbAIhKs+4nuMmAlBLdcsjEI0TDou7PWV2SQmAfTTyKuk1GlJEISDYTw6z7Ss0Ah0fPgEpBTjW0ACoNuajX9wQ3GTBsBykhEQ2TjIaDOoWpQGAfTTxKhkUDJZxYlkgsSQyLnGYe+YUB6hadfWqRFUup71Uck6Je3zn3kwEv1haPhEjGwjUtL+oRU9EQL0AdoGTYZCjjxDJEYgkSwqS/GOypcCKjsz+nfkgo+yiGSdEISOFI0E2Hk0QnSwf6SUYXBPZRgBMTJcMiI8oQb0BE4iSERV9ACic0el37yAs0K6VQ3xPcZEAzbX4V/RZ/sf6zNEbMwD6aCgQxhYlHUbfJUkIkshCOExMm/aWAFE5UaKZNvugWK7p1CnFhBUphDNAth5RQ6bvnsD1QClOBIKYw8SibKtAcSjRAJEaMQCmcyDjQV6p0SI0kcMJxEuhBTGEM0Eybbc5iAF5rb6r7mEJdkkKAiUdRt8gKjVCiESIJotIIYgonMPb1FCt7KUTiyHgjDZQoBfbREVFd1HmmsSlQCgFOTJS8NhdxZR+FkOSKQdfMExUH+krEvV3XwjFItdAkCoF9NAbopu3bR4uNnYT03BSP6NUhIIUAI6Lo7c8cz0LE7emilbGCPRVOSLT2l2mIutc2Ekckm2miGNhHY4BuOaRQpBBCkjKGbktfX6hLUggCzRMPzTBIoqvq1nAcUCmKA+WgVuFERGdOY17SJYBYhlCqhaZQgWKdZ9JMBnTLJoWGE0kBELaKR3jF8Y26JIUg0DzxKOX71Q9uoBlU++wgrnBiojOnMS/m2oPJZkg20ywCpTAWaKbKPrJTswEIm6UpHtGrQ12SQoCJR3HQlcDxLEQS6kdhBBlIJyg6czpzomWlCqNJSDbRSCGoUxgDfKWQUaQQsYt13UgwIIUAwyClpFQYUL/EsyrwiKsUSoF9dKJBSklXXqMlVFIqQah+V0l09HJ9r3onA5phq5hCWpFCGq2u28wHpBBgGAbLJjHPF41nIaJiCnGCArYTEf0lE9OWNImCIgXw/7dKvVM4svqAZRQJCYnIzgEgJfS6rmoOSCHAMLQPapVd1+KNVYHmoIDtRERnTrXMzsr8MFLo6OzAcerXCpkMOJpSU+GGuQBkKFOq41qF44oUhBBpIcQ6IcTFUz2W6YyOnEYWjxQqSqExagekcALCI4WklRtGClF9kF3dhakaWl1AGur8hLPKPkqhBUphNAghbhJCdAkhXhry+IVCiO1CiF1CiCur/vQvwB0TOaYAR0bHoKaa4UENKcxJC9r6gwK2Ew1deZVjHzOHk0KTKLB+f/9UDa0uIA3Xak00YodipIVW160uJlop3AxcWP2AECIMXAu8C1gFXCaEWCWEeCewDeia4DEFOAI6BjV/K04SDX6geXFjhB1d+SkcWYCJQJerFML6ACSb1IMuKSyIawEpHAGeUiCaxommSaPVdauLCd1PQUr5pBBiyZCHzwN2SSn3AAghbgPeC2SANIooykKIB6SU9RvCr2N0DGqcGjNAhiCa8pXCooYw+w+U0C2beCQ8xaMMMF7ozOnMSoIwS8OUwqpmm+v21XeF7kRDGK56jrmkIAL76GixADhY9XsrsEBK+RUp5d8DvwZ+OhohCCE+4cYd1nV3d0/CcKcfOnIas2OGso6E8OsUFmRD2I5kb099V2wGqEVnTmNZxi1S80ghngURZmWTzb7eEts7AoU4GkKm13I8hYxlSKOR1+q36O+4CjQDSClvllL+/jB/vwG4CtgQi8Umb2DTALYj+ZffbmbD/n5mRHR/A3fPPpqXUbfLzs4g8HgiobdosDChLCSfFNxaheVZk5CA328+NHUDPI7xwt4+CgW3AV4sQySRJYVG+2D9xt6mghTagEVVvy90HxszgjYXE4Nth3Lcvu4g85uSnNzgVEghPRMiSWYXthMSsLMzWDWeSMhrpqpmhgopAKRaSFo53rhsJvdtOlTXVboTAcNy+PCNz9PV69ZyRFNEklkawjoH++q36G8qSGEtcIoQYqkQIgZcCtx7NAcIGuJNDJ7fq27uWy4/j7lxw9+WkWgSTnknke33saQlyc6uQCmcSMhrFjPDrgXiBZoBEk1Q7ufCM+ayr7fE/t76negmAnt7ihhVHVKJpSGWpjGk01rHWXoTnZJ6K/AssEII0SqEuFxKaQGfAx4CXgbukFJunchxBBgbXtjbx+IZKeY0JEDPV0gBYNV7odDJuxoP8HJ7ffeLD1CLXNlULS6gVinE0mCUWDVfKcZdwWKgBjtcxTwn4XWXTUMsQzakBaQwGqSUl0kp50kpo1LKhVLKG93HH5BSniqlXCalvPoYjhvYR+MMx5Gs3dfHeUta1ANaTqWjejj1AgjHeUdoHft6SwwGPZBOCNiOpGjYNIXcCX8YKRRZNkvt2bw7KGKrwY7OPCEBHz9vjoq7haMQy5CUGq39pbq12467QHOAqcGu7gL9JZPzlrqkMFQpxLMwYxkn0Q7A5raBKRhlgPFGwc2SaZR5EOFKHAkUKZhFGpNRZmXjgVIYgh2deZbMTBOxSip1GyCWJu6UKBo2A3W6cKpLUghiCuOPA65ffOoclwiGkgJAw3waLZUGvOlgQAonAnKamrha9FZoXKiyjjy4SgFg2ax0oBSGYGdngVNnZ8EsQUypKeIZwtIiilW3FlJdkkJgH40/Bt0d1RqTUbBNsMq1q0aAhvlE8u2cPDPNptaAkE8EeKQwI78d5p5Z+8doqooUMuzqKtStJTLe0Eybfb1FTp2TAaMAMU8pKHJIoSykekRdkkKgFMYfNaSguymnw0hhARS7eO3CNJtbp5dSeOyVTn7+zN6pHsa4I1e2SKKRKuyHuWfV/jGWUatgx2H57Aw5zaKnEDREBDjQV8KRsGx2BoySUlXgk0KGcqAUJhOBUhh/eKTQkIyC7mYXjWAfAZzdqNGZ0ym4WzXu7i7U7aporLhzfRs3nUCk4DiS7/9xO3t7ipwmDiKQMPeM2id5q1+z5Aebg7iCQk9BpaHOysSVmop6pKD+f0NiH109PVM1vFeFuiSFAOODz/56Az94eAegSCEbjxAOiSqlMDIpLI0pldDWX8ayHd537TO8+TuP860HXp60sU82dMvBsk8A68S2QMuxt7fIjx7bxW1rD7AydED9bah95K1+zRILmpNApc32dIfXQr4lE6uNv7lK4Xv8gNX7rp+q4b0q1CUpBPbR+GDTwQHW7VfNznJlU6kEUOmoMAIpLABgfli9pm2gxPbOvN/n5UTupqlbNqY9yf0ZH/oKHFw7vsdc+1O45lxyrjLc3pFnldiHE2+ExkW1z/VWv0aBlpRqddIb7KcBVJFCOgb6YCV92yNSwCnX5/xUl6QQ2EfjA8106HZ76Q+WTRVPgIpSSAwPNAPMdFTlc1t/mRcPKNWwbFZ68ifNSYRhOZiTqRRsE569BnY+NC6H296R5+FtnRQPbYNCB/mSuu665bA8dAhmn1abeQSVCc4o0ZiMEg4J+gNSAKC3YJChRHMqphZRXvwtO9d/To8RqcvAfF2SQoDxgWbahyeFoYHmeAPEMmT0TmLhEK0DihRmZmIsnZmZ3ElzkqFbzuSSnunGaOwj57pbtsNtLxzAOsz4/vbG57nilnWs37YbgEK5RAj1/JkiRygzZ/iLvJiCUSQUEjSnor5S2NWV5/Ht03frE2OgnRcTnyS6/0n1ffEWUDOWwZe2UY42I2yjLmsVAlKYxtBM29203RlCCq7sHWofCQEN8xGdW3l9Qy+t/WVePNjP2YuaiUXE8a0UjFfX7tuY7JiC6WauOEduwfyn3b1cedcWnto5cmCzqFt05XUWNCWJ6sriswY72RK/nDeHtjBD5FXTw6Hwcu/dTWSaUzFfKVz7+G6uvHPzUX6oEwcy104UG9o3gbRrF1CNCyASJ4bFwTpMwDgiKQghwkKIVyZjMGNFEFN49bBsB8vdkL23YIxNKQA0L4F9T/FT7R/Y1drFnu4i55zURDQcOuxKdUrx8L/Dt+ZDvvOYD6FbNobtTJ4d4JHYGJRCb1GpvZ2j7IrnpUZ+9I2LaRbuc3KtpIXOmWIvjeQhNWP4C6OV7CNQ/rnnpXfmNEp6/W4k82pRKrlZWP371f9DrNZQNE5MmHWZlnpEUpBS2sB2IcRJkzCeMSGIKbx6aFZlAu/O64oUUlWkIMKqO+pQvPv78NZ/JSF1mge2APD202YTDYcmzD5av7+fon6Mm5a0roNn/lv9PHjw8M89DAyX8GxnkkjBVwpHJoW+onrO7q6R1ZCXLnzukhZmh9VkZpYUOSwPtRJCQmokpeDFFNRxW9Ix+kqKFLryOiXTrkvP/EjIaaZSROUBeOzqEYnZKHuksE/9P2QBFYkmiGGNe6r2S22DnPn1h/wtVCcCY7WPmoGtQohHhRD3ev8mbFQBJhzVG4u39pfQLadWKXi7rg1F0yJ4/SeRCM4Vr/C6xc2snNdANCz8iXM8sa+nyF/9+E9Hne7aMehuibjlt5UHS8e+raRuqs9m2hL6JqFe4Sjsoz5XKewapQ2Ft1pd2JSkEZVZZpaUyj5NuEQ5on00Aim4SqErp2E7EtOWSCn5xr1b2XK8VLkXuuHHbzrm6/Rvd23hc7dugF2PwJP/B9rWD3uOobmT/YCnFGoXqOFonHR4/Ftd7Okpktct9k1gG/OxksLXgIuB/wC+V/XvxEDnNnUjTSNUk4LX06YmJXUk68hDsplc9hTODW3nw29QAtKzj6SU47o/7Sa3crrLDYiPFX953TP8eM2uSiEeQKn3qI7hTXYvtQ1WlMLBtfCjs6F9M7/ffIiNY+gBNVA6howdP9BsqXuza3QH11MKo7WhaO0vEY+EmBnVCEt1bfI5FVtYLtwd1Uayj0Yghf6SQcmwyLlpyGXTJq9b3PynfTzy8tjsOduRXHXfVvb3TtC2rtvugc6XVPbWMWBPd5GevAFlN8U6V7vrnONIbMMjBbfGYwgpEEnQEHHGnRR093vrpRRPBMZEClLKJ4B9QNT9eS2wYcJGNdn49Qfhye9O9SgmFdWk4FWp1iiFoemoQ5A85c38WWw3F58xG4BISNlHd21oY+W/Pzhu+zh7q88lM1Jjfo1m2rQPqqpr9Dxk3DTB8tEphYI72T32SpevFOjerv7Pd3D1/S9z8zN7KegWWw+NvEp+fk8vr/vmI0dvI1TZR/Z1b4TrXl/79z1PQMdLAH7wd7BsjlhH0NpfZmFzElH1+ct5RWZx4U4uY4wpSFm7HWvZsH1rz+ujdCQcGijz82fUeZ0QeGSmH1v1dVdeV4sAzSX8fHvN3wfLJjHpLlJs93wPXURF4qQj9rjbR57tO9ZzfSwYEykIIa4Afgt4JXoLgHsmalBjGM/4Bpq1waNeRdY7NLNi9Xi2Q2MyClvvgf69wzOPhiC25M+I2iWi/SrFMepmHz2xQymujQdfRSHbptvg0f8AYMMBdZwjxStsR/L0zh5ue+GAn2ZbMCyVOdMwH0ToqO0j7xyVTdtXCtJbNRoFirrFisGn2Hb7N3j/dU9jVMVpWvtL7OoqcKCvhO1IvwvtmFGVkhouuZOnU6XA7vuisjaAvpKhKtEZuQ1Fa3+ZRS2pms/v6EOC0iPZR6EwRJLqHDqOKtRC1Tx4KJtVpFAeW9zHK3YsjaOirEGsUnR3tLAdSV9RV9dSc+eXIUqht2iQYAj5Dl1EhWOkQzat/eVxjbt4SmFwqpUC8FngTaAMSSnlTmD2RA3qSBj3QLOljyllcbBk8tbvPn5c52d353VeajsyWY6kFGbr++A3H4WubRBJHP4AGffyu2QaDYUw7crE0ftqGqdt+Q1s+CW6ZfPSIWX/HMmS+tlTe/jwjc9z5V1bWONen5JuVVRPsvmolYJ3jgqa5QeYhbdqNAqUTZu/6r6O8/b8D1dxg98LCuArd7/El+/Y6D82YiWwfZhJdKSYQtG1OKWEfIefJdZXNDjd3R3NswJfbs/x3YdewXEkB/tLLGxO1ix8MgyxNUZSCqAm2G33wrcXMSuqgpuvVJFCybAouFlI+TGuXr3nFY41eeBIiLgJEseQhtxb0HGkqkuh7CqFoaRQ0IeTwghKIRGyKBkq7Xu8oHtKYYwEfCwYKynoUkr/LAghIsCJkXYgJdj6mFYVB/pK7Ost8Xc/X3vcZl38611buPSG52pWrSPBWwVHw8L/ec6hxypPKByB+BLuXr7uFycaDuHIigXVfyw+uodcO5R6eam13/8cJXM4KVRfA69BGcCLrs9fNGxlIcQyatI7SjWojbAqE3k1QVhaAdOWCKnGd2lkDYXBSp1ANhEhr1n+JjZ9VaTQ2l/ixSfvg/9aCMXhY9rVVeB797+oPqNj4kg34J/vUP8bBdXa3PW1+4sGK+eqSakzp87D9x/ewbWP7+bXLxxgoGSysDlV8/nTVGWvxLIQiY98EmIpFUw1CsyW6vXbOytxGs08evuonFPkXKomBceGPWuGP7lzK/zsHZXWK2OBe03GrBRy7fC/H4TygB+70i17VPuor2iQrCYFEa5pbwFAOEZcqM/34oF+fv7M3uFzxs5H4PrzwRr7d0U/Xuwj4AkhxL8BSSHEO4HfAPdN2KgmE54nOIYbqDq75o/bjj3nfaLQPljmsVc6KejWEVtbexPeyTMz/mPZ/Q/DvNfAxT+Adx8hj8Db4N2V2JGwmrg8G6Pv1bRDyB8CafPguu3EIyEWtSQpG5WJZ/3+fgq6xdn/8TCPu760XkWCm904RMmzj+INkGw5ZvtooIoUwgU1MVvlPBEsWuxuuuKLATB69vvPa0hGyWnmiErhF3/ax10Pr1ETu3u8anzj3q3obsqjZRj0o66RLLj3nEfYRhHHkfSXDGZl4zSnon4m0uysmuS/es9LxCIh3rFydg0pZEWVUkiPohKgUsAGNLn7OL/SXmUfGY7/GXNlCzbf4Vt/I6JtA2+55zwWiw5fYQCw9W645b3DA+pt66F1LfTsHP2YQ+Gpq8MphTXfVu8J0LYOdj7Ejs3P0jagzosxglIwbVXV3ls0SIqqxIeRMvXc4jWAq+9/mavu20r3c7fVWoCHXlTFbwP7GSt06zgJNANXAt3AFuCTwAPAVydqUJMKy724Y5Ca3gUBeGbXOLfFtXQYOHIe/X/+ftuo9tXtaw/iSHV//mn34VfFmvtZrq8xnyMAACAASURBVP7LM/jKRSv5hze1EDm0DlZcBKs/Dov/7PAD8ZSCu5qKhdWtVDSGr4yPCmbZz/p47qUdXHTmPOZkE77/fNPTe7n0hmdp6y8zWDbZ4lpluukwtyFBMhr2LZSSbqvso3gGUi2VbJJRMFg2a+ohyiMohUix3R1mnnmilzAOu1LnAGD1HfCfl01EyGkWed07H5VJpKBbxB13UjZr883zmsnTu3r8laim6/RLFd+xBt0Vq0sO/YMD5DQTR0JzOsaMTNy37arttq9ctJLls7NDlEIVKYxUo+AhWgnwN6K+I9UEVzIs/5zldRM2/hqe+ZGvYoZh8CACh3miT5G2h/ZN6v/ikCxA7ziFo1iE+aRwmIXe+l+o+Bn43/1v/24dn/ylSj81bAfpxRTy7SAlX75jE1+49UX6hsYURkrKCMeIuMHoPT1FXiN2M/uhT6k0V/+zDal1GAO8hIfjIabwNuBXUsoPSCn/Wkr5U3m8+idHC18pjIUUKqvRQwPjXDyy9mdw3RsqJDUCpJT84k/7eKRapWg5uOFt0LmNx1/p4rwlLaya18Cfdh+etLxJY05DgivOP5kvLOtSPfWXv2Ns4403AMJfTXlKwaty9TZjkVLy1M5untxx5JTfNdu7GOysTKxxvY8Prl5EMhb2SWFHZx7TlhxyV3ReK2fNsklHHP46vcmX6QXNVPZRPKtI4Qj20Sd/uY5//91W/3ffPnKtsCgWkbI6r7Ze4CShyPmVxGvUC6qK4xoSUQzLoc89D301E6lNxlupW7X3kZeRkxTq+bqhM+AqBTvnqgp3ghRmyZ+gW9JRWtIxnxRymsnKeQ088g9v4SN/tth946qYQrVSGC2eADW2SNTIceHpc2v+XDZtZdPhKoWB/argrm3dyMdzSTCBURtT6Nqm/teGxMNM93s5gqIaFR4pHC77yNIqlfvu5JypstSkpGIf2QaUetl6aJDtHXn6igbZcNWkHB8hthlJELINGhIRoEqZDVTu72MihePIPvoIsEkI8ZwQ4rtu9k/zeA5ECLFSCPETIcRvhRCfHs9jHxbeJDyG9DWPpec2JGgfPEL+cdt6uPVvxu4X9u1VN8mQoBagHrvnMxQLOSxnSB1A/z44tAH2PkFnTuekGSneuGwGG/YP1ASTh8JLbYtH3VugfbPyRuecMeprahAKqRWSVokpQEUpdAyqL9jnfv0if3vjC3zkphcOe7jtHXk+9vO1PPLCRv+xGSLP6xY3k4yG/c+yp1tNEq0+KbgesOnw52zgP7VvsczNvbdNTfWliWUq9tFh1jL7e0t05SsTw9CYwhxRURqOlmeRUES3I7ICXUYJ5Vr9v2fdycC7T6oD7yXDrnj6Vu195GVOJVD/m4bhB+8cnxTU+8adsp+O2pKOMzMT81te5DSLmXGL5Tt+hvAsi1Kfv/KvngBHzDzyUO2VawN88y/V/TG3IeGfo5Km86XIb1ig70Z6anf/n0Y+nvt54xh8ofNr8NyP1eOdLhnrQ2IH3mJtpBiXpcOD/zrcFvQ+7+EWepZeIQX3u58WQ77T5QHIqs7AMtdG+6BGd16nt2jQGKn6bg2tUQAVo7EMFcsBku71JNc2/LMdFSlUEfAEYax1Ch+VUp4KvB84CFyLspMOCyHETUKILiHES0Mev1AIsV0IsUsIcaX7Hi9LKT8FfBCV6TQ5sD37qHDYCQMqF2TxjJQ/6Y2KvU/C9vuhb8/YxuHJ5uqbxsMr98PG/0XboQLBNal87kpT9u3lkvLdvKP0AKfOyWLYlbbYI34Wd8Jr2HQj/OFK6NgCs1ZA9AhZR9VINFUFmmuVQlde4+mdPdy/pX3Ul1fj1hfUCkrrq0ysM0N5YpEQKVcpOI706x/a3KIgbxLXLZsZIffL7U54IaNqs6BUi7rW5gi2hpRw/Vt4Y/nxGjU41D6aQ2Xyka5SMInQQQttcgaxQuXaLTD2cabYwyH3PqlWCpppV+ybIcrQWz179pFpGqrxGvgKwXF7OMWlRp8bYG9JxZiRjvvKIVc2OU++BI98vbJqL/X6rZ399z/rUjj1guHnxEMNKQwyMxPnT1e+nV/9f6puomTYLNv/G74YuZvPh+9EeG059j8z8vHcrKoEBqeZW5WdUuytBHOHKoXD2UeHNsJz18G+p2sf95SCPcr9L6UiJz3P9U/s5po/KuuqOvgewkHoOZi9Un3O3lZKhirUOzRQJhsxIeTW9YxiH2HrLGxOEhKwuNGdaqsXfZ5SGGtMYfsf+Oj+f1OHmWqlIIT4sBDielStwjuAa4A/H8NLbwYuHHKsMIpU3gWsAi4TQqxy//Ye4H5UzGJy4K3kpc21j2w97FM9pXDyrDS9ReOwK3Hfv+4fY6l90bV7Bkcghd5daogHngeGZOK4XzKzZw9/F7qf1/Y9QDIWBji8UjBtlok24o99HZ7/CRx8bvgevUdCssn/Eg9VCqYt+Zc7N7OgKckX3r4cwM8kGiybNc3zNNPmrg2KDGTVl2aO26cnGYtQMmwODZb9SbttiH2kWw4ZoX6OugG+lDfxxbNKKcDIFpJtQvtGXudsrcna8q631+5onnBJIZoGo8gi0cUhZlG2oE3OJFmqXLvXvPx/+Wb0Jj8rarh95E5AZu3qtKBZpGJhP5BpW6b/eYQ7MVo5NYGGcMgVFPE1p6PMyMQYKJlYLz/AWwoP0hB1r7830ZZ6/ZVv2nv/v/wJrHrv8HPiIZaGUEQpDHcBML8pqVJcAafUx5sPXAfAW0Nqct3DArU50EjN/DxSECZxqal7u6vqezeqfTSCUvCupT1EjR+pNYhjqQwlo8B//eEVEm58p9pSy+CS0ZzTAch3VBZ3OzrypEMmNMxTD4xU/R+Jg2Px/nPm86m3LGN5kzvVDo6kFMZICrsf5zXFZxA4x0VM4YfA2cBPgS9IKf+PlPLZI71ISvkkMDTl4zxgl5Ryj5vmehvwXvf590op3wX8v6MdUwjxCSHEOiHEuu7ucWhNUbWaeHLL4SdwTyksmaFWT4dVC56kHWv/lcMphR61ZWbskNqFq1wdoHOVQqhzM/NFH2mzj2RUkUK5mhSe/gH88i/VKunAc2iGzb9Gb0WEo4BUX8ah2zEeCYkmZR/17/MDp9Uqpm2gzD9ecCrNbu1CybBwHMnb/+8aXxkA/PCRneQ0i8UzUsRKnRBNoYXSzAqrCS8VC1M2LN86AvyYQndex3YkuuWQdSe6mLCIhUMVi8RLSYWRM5Dcc7hQdNeQgmbVkuocjxRmLEOYihQOylnolkObnElaq6giEc+SoeyLz/6SgfPEd2Hf05Rr7KPa1Wxes8gmImRCaqITjklUqHGEi2pidKq6vRbzym5pSsWY4Z5n+/kb+JB1D9mwO37PJqlSChnKOKHYyP2tqvHaj8BF31XnT6tktMUjIYSA7MArJOwCu515fhzkUetsN7NqhIncJYUMZZWdM3BArfhBFRgOTT317aNOegp6TbKHX3cylHyqSWEk+9Ydg3StqpR7LaqVQqNw33fWaRBNYXbv8v+W1y3SwvAJdlSlAFx4WjP/fOFpzEupG8GpJgXPsh4rKbhzRAyLgq6+SxOBsdpHM4GPAwngaiHEC0KIXx7jey5AWVAeWoEFQoi3CiF+5CqSUZWClPIGKeVqKeXqWbNmHeMQqlD1pbS1woiPe/BWqUtmKlI4dLi4wlErhcORgrohM72biWLV2kfuDR4pqokiofeSiHpKoapWoX2Tihu0b4KbLmBW/3rVDG3lJTBzhXrOvKNUColG9Tl/+nZW7lTF7kO7mb7v7AWkY8pfLxo2uqVS+jxbZXPrANc/uZtLz13Eu8+cR1rvRmbnkQ83MlNUSKFk2uypavjm2UeOVMVEulWZaKNYLGpJVgq0vOwjGLmAzV1pLhA9NZPO0IK5mSKHI6LQuBBhFpkv+mhzZqBbDofkTDJmnx9IDSez/mpcCDXO0OPfhJvfTdmsBJrL5QJv/s5j3LleKaWCbpGJR9SkA4SkRcIlhUipk6d2dCGrSMHW1eSViISYkVFpqE6hm4g0yESqlIJjK0J0V7dxYSEiseHnYigWvE5loyWaalbxQghS0TDSndiecVSswZGCTc7J6klDM4nAjyk0CfdaSgde+i1k56l2JKPYR7LQyYU/fIrrn6iyYz2Cdxd2//Lbzbz+W4/Upn0OjVFAVRwxD0jSripLU+bScxfxN68/yc+0ItkMLcsIDbGBE8JUCvSsS2HZ24e/h1f34b7XnKQ7gecPwfqblW3mEZ4+eMTMOPV5lZsQx1T1ixNU/DdW+6gBOAlYDCwBGoFxbYkppVwjpfyClPKTUsprjzCe8WtzUTX5S6OA7Ug2bt8N314MOx+ueapnx4xJKXg5zmMJItlWZbIaah8ZJRg8AHPOJOwYnC721U5WQ7JXwnbZX/mUTZt7Nx1SVoteUJ/VfZ+o1qe+DLE0nPkBtbI5WqWQbFJKqNRLprAfgYOhayxsTvKh1Yt4/B/fqiaPuCKpkm7559Bbke/fuIafR77DP7xtIQuak8wWfRipueRCjbQI9YVOxsJIqSppvdhFZ1VAuCuvo5uOHyiMYrFibrYSOIxnyQmV1rn/YKvydav3VnDvgfmiF6OKFGpIFZhBDj3eArEMESNPCzk6ZSNF3aJNusFal9QjyUafpOY31rYgr1YKD23cR2t/mQe3qiByXrfIJqKkXFIIS4tYSI0p5Bh8/qbHsHKdFKWadKRRJBISRMIhXylQ7CWOSdpXCjn3fpRq8nUhRitYGwnJSvzIfygWRri++AtyFQCdNHNIuqqsOEIGnEuazVS12WjfBIvfqBYZ+uj2UU9B81OQgWFK4fZ1B1XiQbVSKI9Qr+N+Z4R0SKL78ZWM0Pjs25Zz/ikzK0oh0QgzTiaVr13cJdBV/O3918OKdw1/D1cpePdWS0yNKWTrcP+X4YWfqphCzG0nUz1PHHoRfvfZSrGiB/d8evUPE1WrMFb76GngEmAz8CEp5Qop5UeP8T3bgOodwhe6j00NquwjYRR49OVOrrz5j2pFs/eJmqfqlsOq0D5OalbB2PbDkoLL/GOxj6pXr1UZLOr1qrcQZ30AgNNCB3zfHhjmSQNkTOW1FjSLL972IrevPVipgnW/lMIskkRTpPDmv4fPPKdWRUeDRJPf7z+hdfGJ8P3cXP482USU7/z1WSx1FVW1UvAsGW+XtgWdj/PW8CYaD65hYVOC5eIQueQCBkUjzW6bZ88Oe6Ujz/LZWYSozQnozGkqJVWqz/bVC5fzgdctqrKPsuwrq2u2bfdeuOsTcOfllQO490BSGKTMyiQy1D5qETn0WDPE0qT0TiLCoVc2ktNMenEtBK/tRzLrTvySk1pqm/mVDMufiHa0qS/6giZFHHnNJJuI+FZMSNrEsDnoKFV8dmgXSaOPA9LdPtMoEo+or/GMTAyQRPW+WlLQchX/PT1bZZkBhI+CFBKNNfYR1JJCW3oVuoxwUM6qnAtXKTiOrFgd5hCl4OKm1nnIRMMISkFNzsLSyFKubbToKYWhqr6aFIYeD2oWUhnKpN3MoBQaiWiYWCREgxdTSDZByzIatEPMSYd9ty0mjZoajmHw2sS491ZDpLp621Lzg1GAmSreVrNI2fBLePFXcP1bai04lxQSbhPDiYorjNU+OktK+RngXuDIvYIPj7XAKUKIpUKIGHCpe9wxY1x7H1V5jkk09vUWK5kZHTVJUySKrTwQ+zeS+x6lORX1fe0R4ZHCwH5wbB7Y0s66faNU1Lpfnj6ZwR6oJYW+/e4Ylqi4/iwGhmQfVb4QllSXM2Wq9+krGUipYhB6aVDdjO6XLGwWVAFONA3hqNpb9mjhVTUD8XInZ4V2cxIdZEI6PPQVP3UyFatWCooMPKXQWFSkGXvlHpba+2kWBQ5kXkM/DTTJXM3rD/aVmJ2Nk4m7ud9u2md418P8uf4USfe6LW2O0ZCMVgKH8Qx9tiKo7q52VU9w4NmKfK+6B2bZldXZSPZROdYCsbTfgrpHNpIrm+i4mSjuqjWaaiQkJCn0YaSg7CM1MbXEbFKxMJajzkdBU/aRl5IawSYqbF6QK7AJ8fHwg0Sw2OIsVQczir5dOCMdJ4lOxNGJYZEMuZOGXkUKqZbKKnYs9pGHIfYRKLIOm24yQMNM7rXfyOP2OfTKWlL40A3P8t0/ut1lXftoZqg2XfTWzpMwItnRs4+A2aKf/b3FykZHvlI4TKBZG10pgKofSLnXIiM0krEwsXC4Sik0wYzlhLE5pzFPS0qds6ijHb4/mG8fqbHF5RDiKvWp+695ifq92mrr2KIUXaFDZR4COI5/DWenFTNNVAbSWO2jM4QQLwJbgW1CiPVCiCMmtAshbgWeBVYIIVqFEJdLKS3gc8BDwMvAHVLKw6f9DD/u+NlHVUrhnaH1nLPpqkpmSMeWmiVpxLsJi93MbUz6SqE7r/Ombz/Gjs4qSVzuV0UttgG5Q3znwVe4/slR0lPdG+IlZylhrb9m9f/y5nU4UjCYWU4x3MgsMTjEPnK9dQTbQqcAkDTUzeMVTmmmQ1ePesx2ySrpEsewni1Hg6r87Gi5m8VuMdfZzlbVy367Cg2l3Um8MIJ91FxSpCB2PsS8zjXqPETPolc20GAPgJQkXaXRWzSYmYnTkFAT8MmzMggBp+y4gb+zf0PScScQSycdD1fIPZ6lX3fIyRR2sQ+n2KsmjgNurkTVJDHLrqzMvPhCGBuQtJCjHG2uaf3QIxtxJJjSXX27E1Qorp6TocwZCxs5b2mL/xrTrvjY58xPkYlH/P2fC7oKNFeTQgSLnEyzL7qc88NbsGSI+xxVcS6skq8UGpNRZrlpuXEMUiF3cqxWCqkZFTI4WqUw1D6KhglbRRwEzU3N/JP1KX5sv4cCSexQzL+v9/WWeLldEbxjuKQQrpBCIdzILjmfnEwNDzSbRT+gO0sMYtqy0o66VCGFmgB0dUxhCCnYjuS/H6zsLT07bvhWXpoyiUiIWCREE4XK53YXTGfEu5jltg+J2NrhlYJHvO78IqwyBpHK34vd6r5rUoWFZr5bFV06tqrZWPkeRQx7HkdKqfpquQuRQlF9/omqVRirfXQD8A9SysVSypOAL7uPHRZSysuklPOklFEp5UIp5Y3u4w9IKU+VUi6TUl59tIOeKKXwgfATnNv7Oxq9G6LUU5sf7eW4m2VmuBuOAOztKdI2UPZ77mCW1WQ9/2z1+8B+iro1+mYrrizcIt3VX1Va5szcS+yQC3mxQ2Mg1MxsMYDlyEqWjGsH/WjmN/hlwycAiGsuKbiFTJppk5Jq7B0daiWcGRdSqCiFkLRY4e7itchxx+96or5SMGw/I0q3HbAMmrQ2npNngKURfeb7tDKbbaUm2mULESzo3UUqGiaOQRibmdmYvxlQcypKSypGWmunURZISJcEbIN0LFIh92iagZJJv8wwR/RX6hf2PuU/38Nsp7JiKxs2IRzujv07X4/cwgyRoxxtqjlnPa5VYnpfeC8Txm09nhFlZmfj3HFFZT+EEI4f9zl9drRmK9O8ZpGJR0nIKlKQFiYRNoaUb/+ss8r37UNmyVcKoZBgaVKdg7CQlfOhDyGFY1EKySY1QVdl+iRjYSJmkRIJmtIxEtEQiWgIEJSjLT4paKbtF+95m9O0uEkEPad9mN82fRxJiD47MbJSaFHfi1muSbHHs5CqSKErV7USP4x91D5Y5tkdle/XvIRZoxQi4RCzDz7IFyJ3o6XmQSzNwZAipZXxbp8UQrY28na1HoYEmqVRpic8m/s4n8K8P/PJakNfFCOU4OaH17Liqw/yH7f8Hswi390c5zf9pzC49RFWfOV+3vt/KjsVxFDXIBI6QubYMWKspJCWUj7u/SKlXAO8itnk1WE8lYJdtSr3fFw/Hx2gYwvP7+nlBw/vqKzgzSKNyajv6RV09b/fqdNdURVSC9Uhuroo6vaI/YDe+t3HWbNBCaVtzhI1JjcPHcdhUfElNjjL2bC/n17RxCyhju2rBasM4Th/tF/HQNMZgCCm9QCSOV1PEcVCq0rX3HVATdzhkjv5vRpS8Owjd5LxUicX2G6IyO0o6tk9RaOiFC7p/AncdQUhbO4LvU1luFhltsXOoreo86A8D5swbLiFVCzMbbFv8k+RO5iVifu2UTYRpSkuaDB7aCRP3FMKtkkqppSCEU5DKKRIgSzLQ1XFdHufdM9hZUKZT5dvT2imw3tCf+Ks0F7eGNpKWugUI80qm8lFj1QLkwopuNfYVRNpNLLxiL/KA5hNJdMkgUkkLLAcB8eRKvsoEfHthgg2IWlhEuZ561QAHnTOoySVdSHMIrFI5Wt8WkPlsyS88zFUKXgK4aiUQm0DRFBKIWYXKcgkmXiEhkSUU+dkCYcEhUhTDSn0FHQGSyYDOaUEso76/9DS93Nv+J0AdJkJRWDVASOjCE1qdz8vDrHXS02uso86qvcsriaFfG3RW2dOJ06F2GbHTF8peIuIOZuvo03O5Nm3/C8Iwbef6CYvk7y+KUdICMLYCMdk76DDvZsO8cvn9nPt47v4rwde5so7N/PpX63nv/6oXIHP3PIsZ33jIR7ZvI8BM8rntU/xgwMn++9/x+Z+uuwMLSKn+i25lvWawTk85ZxJoyjytdcZfPENlQXYKTNi/PFL5/MXKydm94KxksIeIcTXhBBL3H9fBcZYqjv+GBeloA3Cs9dSyA9PWZtbTQpb7+GBF/dy3ZpdFVIwSqoLpksK3qYhvT4pqC99q6XG1947QNm0GRjSV31Pd4F9vSVe2rkbmzB7pcohb2tzM3Z7dpByCmyQp7LhwABdstFfLZVM98Y3NYgm6C7ozGhIQaqFSLmH80Ob+UzblXwhchemofuri65OtXpvsN2J6VUpBTcwvWB1zcPzPVJwyS3lkkJJt/2CsAsHb1fbJgKt4UVwwbfgnA/zZMO7yZUt2swGdjS+GTb+mmTYZonoYIHorrGPsokIi6KDhHCIC4u04Wa72AbpeIQMZYywkvgDJYN8qIHFwo0ZNCyodN6sshAXiB5fhemmwRcjdwKwIuSmjEaa/AnfkGEG3bWRdKtbpUcwnn0kymQSkRpLY6Go8o8tjUhIYNnSTyBojEHUWw1iE5YWFhHuK5/JN8yPcKf95xSpZB/FXaUAcHpTZeERs1zFq+cVKUSSqhV22I1/HE32kWcVVllIyViYqF2iIBOk4xHmNyU5ZXaWpmSUgVAzFLv9fZx7Cwbfe3g77T3qvou6nfgLTszvQntIi6oJ3VPkjqMWPQ0LAJgVKtCQiKhgs5RVgWajNhPQsRThzT1rWLVza3+pppldb2+3TwopWeZb924k0vMyjziv5e/u7uB1//kw92/poEO28OT6LTyxo9t//f9u6OYLt77I1+55ie8+tN3fpW9XV4Gyo67J6XOSvP+1Czm1JYwZUuf74tdXnPd/ee9qRHomM8gTDgn++WwDQhE+98GLecE5DYC/XdTLe06pXKvzFqU5dU4WcaQak2NE5MhPAVSNwlXAXah9FJ5yH6tf/O8H4ODzyCUXDvuTrxRWvQ82/opPxp7mQfsfcbzApFmiKRVloGQipaQ4pAmct4Jps5s5DSgW1esGyur53sX02m+fkiyQcxrpQ33x8r3uxNWq+gVtcE6h6+AAh0QDbxKDgKwEm60ydjhBz6AqqSc9G1Hs4pKI8uo/Gb6PbxXf5n82L4A2U7grvsP5okeC1zPn5LfAgUqvmzmmGyx3lYKXPVStFKrRHj1JSfH3XkvXLevI9ZUomzYvz3k3K3c8QcvAZr/YKZ2JV5qMJSIsilQIPG6718c2iEdCZISGHkqRQZ37UriBuGt/dETmM9doU5O1ayG2yxa/ViEZC3NG7mmWhjp53jmN14dUS+dCuGIf9dIIqGuZTqXABMPQ1HRdpRQyQ5TCQlGVqmlprn3k+IuLRrcSuSjjfuzBlGHKTpib3QYBNuqcCqNEIl1Z2y1LVwguanq9fQbVBOoV8HlkED5K+whqPPpkNELELFJAkcLPPrqaeCTE+67tp58GKB6oxJBsh709xdp9CICiEyVXVpPygaK3R/igOsceOSQaKYcyzA2XWNKcZuuhQdq7e5jnZr4d7Bng2h2V4rJndnay2gnxaGkl7+y4k/d/7w90akrZ65bDe0KVxVkLOSLCQZdR0kJn07qniYYqgfxsIkJv0WAw3MLZWY2vnbeKJqcfHoOP/PkKLn3t+TQkozQkor6NpwaVghvhs29eCKeeDjcKktEWaIV5cytNBZsbm9lrZ5kd7kGaNv0b7sFoOBWNCH1eFpc2UFNkmBQT1/cIjqAUhBAJIcTfA/+JCjK/Xkr5Oinl30spX8V+i68Or9o+6t0NB1XLiKZ9Dw778zzRq7JJPvgL+Jvf0Gx28fPYdzE1d9IxlH1kOWpyHm4fqVOzR1O+cqmkvpy2I/0NzwH+uLWD70ev4wLzUTpDc2mZpW4WbbALdvwR1v6MnMhyMDSfgm5x0MySFAYZyiTXXQ+//hCYGiUZRUp4+2lzIDML8u28M7SW58RrCOPwtlxl64vlDer9Z+Keu6qg6VGjeTF8+E544+eRVG7aFssN1rpKIRwSrIp28LZXrkI33DiHu9Jti52MU0VMDckovUUD05boabclg9ZFVNjEMWtiCg2JKAvFyG0rhBA0hnS0kKcUTLRoRYLvtt2UTj3vB5r3OPOUUnAnsguK99AqZ3G9dbH/unwVKXgkDpBNK39Z19wVqxtTSDNcKSwSVWmGpubaR9Lve9QQcRUolfPihGrXbyYRDBkmZNYqhYWxSgA35BVuefaRV8A3bkohRFyWKMokmXiYmZk42USU5lSMbtkAxW60qvTpHZ35YTuWrW3T/MXUfpcUbnp0I1+9Zwv/evtzAPz42Q66rBQxY4DNrYNsODDAB37we/8Yz+1o56zue7kgpBZRezoHMKTgGc4kisWFmd28/bTZfOyNSxAC4qIyhtOzini6pLo3br9QWVdb5FK++b4zcVnHKgAAIABJREFU+MGHVFxw4UlLmR8a5PI3L+WvzlTketKcmSyfnWV2NlFLCNXn1lOhZplIQt03nVZFnQ/YMfaVkyyIlbii4VnmG/v4oXYxuulgEMUKuXGWqs2YEqGJJYUjKYVfACZKGbwLWAn8/YSOaAyQUt4H3Ld69eorjukAXu/2UfCakHLGnP8+m1CigaQssSq0n1Vl1eOF9T/n9ae1cGl4EH1jjpntOq8V/aQGByC3CAbVSvnlorr4pVIlra6/aBAS8IVbX2TDgQGuj29hQ+Qcvpf5J2Y3NJAfTGIXuuHuT4DjcHv4Yv6f0+fxzK4eujR1454qWpn/vLuRyWkXM2hGWNSSZOW8LGTmwJbf0ATcbPwFyyL7mG1V0lxPTptQrOQ6E3sVSgH8VttOahZacZA4JhHhBsFLPcqvj8S5PfxVsj0lDuQ+TRhbZdec/898c/9biOcrHnJDIuqTa8htH5AoKcURw3QnnopSaGKEAinbAClZLg7SHTmdBSilYMab8UoXDjCHNwFOeYCQGwc4IObzJrGVXLEfzFbOMF/imujH2G3M9w+dC1Xso1y4QjLZdBoGQNM1tb6LefaRRjYeBbsSuxqqFCIhTymoa9Lo5rTnZYq5bmdWz56qRpk4IbtEoiqm0OBULZQ8UtDz6lp4SiF8DErBWzy4xWSW7aCZDhk0DpLlxQMDpGIRBssm6/b3c3Y4xnuiBp+7+Un/EJ05nUS8NjXz1xu6wSU/jwT/sG4HuxNRMqWDEIdQLE0/WVqqCt6+9ra54IrTd65o4dx9D7PfaOAh5zwuO3chka0Jrv78FfCdq/nsogNwkarW7y0axDdWlMLyZBE06KKJRXTDvqdxEk0c1GZjWI6vyJ30HGjrVLaVZyMfrnnkkEAzZplEVp3DQ3oCt9k633uijQVOAxmrn39ufJA94jQe5g0scS1MI5Llha17mNGYxe07QGKClcKRSGGVlPJMACHEjcDh+x/XC854v5o8b77osE/rajiDGRGN4V9HOOeV73FOFPjDz3g/8P44agfr71ee8/3+zwPwvo7/YV7sYfIyScMDt3PIjHPuXo3LVyxi1v5BhL2PJdo2WtIzyYoyCwbWg9EPf/Hv/OjRM/irTJx/umAF9/9ObdH49egt/nvo+R769RAXnj1X2VLL/gLaNvDU4Ewe186iJ9zIXLsquDq0wvPVxBSqILNzOViIM0sMMKO6WjXfAY2LyLrFQKZerqSKplooOFFiVYU9jcmoH2cMpdSkGy+6pCAsmlOxmpjCbGeE/jq2Ab27mUcPaxKv5SzUnghOWsVAHAS7TFUMphcHMPIFGoH+5EmggzNwAGLKj9+fOp3WwiwswkSwGawihVK0kmbakFHn0dC9mIJSCjOihsrIqaqO9mMKyRbXPlIxBc8+yoQ8pVCV3RIefhcWSRCxtRqlIKob/nnpndJWGzgtPd89ltsjKRSjN6+RK5sMli33/8q/6t9T+b38EPjG3S/y29sTvqr5QqxMgSS3rT3IbWsr3Wu8WoXO9gNApYo6QW1cLZ7MUCg7vPuseRzaomI8d3x0FZzyDt71bz8B4JPvOJNnf/sIS2IFvrT6VH7wyA7etjjsk0JTXFLGIOEqAGmbbhO/BMxZ5fcOA1XouMJVK7qM0mApgvaUAvueRs5/LQwIDLtCCiI7VylKbaDS7nxMKamuKjHLxJPq+W165bo+c0DjIy2zCRcN6N/NK/M+g9Yt/RTbciRLYaCHuF1EhqIIx/S3+ZwoHIkU/CsopbQmKrBxtBBCXAJcsnz58mM/yCzFu5aIossw6XmnQXull/82ZzEXbb+MD7/hJJLOQr4S+jm/tt7O30Qeg2Vv57nVP+CLv3iKGz54Ck+9tJu1r+ynMVTmh+89mdAf/hEci19Y7+SjEdUqw5Eh5oh+El29zC8N8JlIDtw+WDNlP1eXv6m6QAELDDeG/+h/8KxMIF9qIHOwhQ+lW8GsKBmAeNtznBmCmZnn4ZW90LgQ/vombrp1O6mixiBpVsqqjT2G9liJjg8pGKs/xc/u2cSnw/cyQ+TVcc2iaolcVa7vGCUaqtpP6Jbj79oG0JCs3JKRpLIsIgVFCumQRTgkKkohHmWG3c0h2cL86uQA24Q9KlnuxcjZXIYbz5mlSGFApmnT1JdWLwzwzPZDvBs4+bSzYdP/396Zh8lVlYn7/e5Wa+9bOvvCHghbCJsiCCKoiAsKOM44iAvOoM6MjqPjMjouM+6O+waiPxlBcEMFFQVEGBXCvocQliRk6SSd9FZd6/n9ce69dau6uru609WhyXmfJ0+6b92qe/rUvec7345eQJv1mOxUG0VsnpUe5qntDKt4KEgzXrk5TTqZ8C/tCwUvhUK4eE2XFtaRiJjQfJTqDDWFQqnc1rK5qP+WPlXWRLD0eINs7qRnk1ExUoyyeyTHY1sH2ZPJc9COLTRjY1GkMLK7/IAPb+enGyy+8YU/8onBIY4HfnJfH++76w81v0/Q12hJuLQkXJa7Wigd2unxBfs2JNHKv21YRbqQYaiU4Mq3HE93U4yWhMtXb17Ps2sfAOC7r13Ki68pawcpKx92d88ph0MWtnH7+p2cs2o+P9vaDQMgo3tYt30oDNtVbpLtxRSHlp6lu1nvwIf6+2gHcBKU8lmkMEoSPUeqVADLF5RNvboS6+M3wk0fZ+fwR8Poox0005zXAjoUCrkhZMFqeBRfU/Ar1Db7foDBbRFNof6QVPIj2LEUri3sUmVh0t3RwStPPBL8ijpbmw4nu6UYBjtkrBTJ0hDxXIZieh7OwMYwaKRRTCYUjhSRIDxH0D2aB/yflVJB6uLsstfmIwgfbEflGZEExJrYTjvdflHXIbRquG7rEIuLHlgR52w+Q7q5jW20szW2lIdtlz+WWqEEHzvsJbRtvZf8Q7/iP3ZfxAX2LfyvvIyP5c8H4GMnreSW66/ie85/wYVXw4/O5xp1Oj+3zuCM5QkueqJsnSssPYWr1qd4QYfHIa0Kx/Zg6/3UovfmSqve9wBqabdVTV24+ZP6wYk36xLA1f8HPzvxCStqypEXcO1PWrnQ1j0f6DlM99YdeLZizKXcSKRQXRO5Qin0EQChFgCQiMfATSF+PaiEb0sNzm+KO7Tlt3FfaQnz7ahQyMETN7PNnseGYjfFkmJPJo/l9yLepZrZlPEgBjt3buf+p7bzchtaFh4K94G15xnwtABxk61Ajs3WAmLFLPmSgngLeWUzkiibldJJfT8Vg0VABPHStFj+77Uczaku1NB2MlaRzbsz/HWD/hs2PX4fi4DH1EJeiu6F0JfRi0SgRY3kigx7cRJk+dPjO3jpl7SZ5hZvKxlpoVd24ahK+/2TsUNY0Z6muZSEIThsUScfX7WSZn/hj/5rirsVoa4MbYfPwflHd8H17wVgw2l3k7pplBesXMryA8qNenqa4zxYiIENxewg+Iu1QwFLlYXjqMR4ZpfWIFsSLqsOWAR3w+jwbn774FaSvpM9Q4wdxTTJ4kDYe3q07yn9IW1LGM5kiJGjzS1CDlSxoDUFgOb5Oh9lwy2w5T6Kso2Y5ChisUel6cnpDcs2VS7xYh14OtZNe8gWiqGm4ARCYWhr2T/kTCAUAhNdRFPATZBwbUbywhAp0gxz1aVnwDPad4JY9DcfRja/NSy+uUelaJZtpApF8qn5OAMb962moJSyJ3p9TuPEdQ0YVdTZlweczs3PdvGK7K9JSZYFPV0cWmhm8+4M7Up/+R2BfMyP0FbcSSd72DOSr2hAvnM4S1t2iKytF4lRvIqM2Z/ds5nj1VP6F7/F4L2FJdzJMg7vWMpDQ69k5TZd9WPX6Z/nE48+zqeOOoJDjl8MSqE+3sV9hUV8sfA6vu99Wn/OohPg1d/Q5oLsIGQH+Ppv7mZbXx8fc78/8Tw8cG256NhEWG5EUDRpx2NEeHheE2+zN3Os5Yd5BvHhG26G7Y+EH6NyI+Va9TU1hbJQiLu2vo7f5jIQCquXtPGSw3o4PHsXqZEnuK90Hqutx2iRIE8hCxv/wlNNx7OpP8PgqK4q6ab1wrWLptB+vXXbduxSFmxQzfMZUTGGtj3JHzbt4HQg3tQObOWq5BuIj26nUFQUvSZemfsEJ88/AZ7RprkgGmjrrgE2P97HnkyeF0uCp57azHU3PAp7NvL+YCpFr+w3Pl3gUNXPvVlt0vt/f9Gq4yMP3sMqO8azqrzQ5ms8ihlipGSUlGfzmfOOpCXhsuCnJVSqF3b4QlIsXYkUeM9Fb9BVUq/qhEfh8MXdHH7i0gm/9hCnapED/m51D7GbCyxf0FNxalvS0/c9UBgdIRAKoZPZf+4KVpyNu/xaSEmXNQcvhrvhmS3b+PPOnWHtqh15l36VxiuO0JPUG5PtTz2EJ220xdsZHhqmhRyWrT8/l8uxZ7gAA6N0N/Xq6Ks+XWbDGu0nbufJ4TJIAqekBU8fEa1s4Rpizk0VPgWv1d8APHV7uaXmhJpCpCBe0NTHTZL0HEZyBQYkTVoN681pEMXXfRhWLEWuWArzkPqLCRYyQlNplGzyaBKwzzWF5yQzYj4S0bHko3tQtgcv+Geuvv92Ttl2CymyLOju4nCaueauTazw44s7/AJt5Ebo+f07+aQ7yjOZExgazePaQr6o6BvMcUBumFHR2/Si5RGLPEj3btzNRfHKjN9hFSdXKpHwbOx0J2zTdu9rHtU3RmAuQYT8GR/no7/MYUWL1DbPh/ZyQgzAnX/u4uatfSTJ8m/uVbXnwE3CB5/VOx9fmGjBMhARMHuqjvnHRwd0XafRAcjuwcoO8u9uZEx7/Afn7h9UXPL8df/C+UHQy/+ez3+wCrvQAr9aCvFmDhlxeaOtk4XmbxsJw1oBHQpYKtLdHOc7F66E/zmKPanlfGvnK3i1/aeIUMhDdhC7vZutW0fDciSxZl8oqGZdUgHIDu0Kd14DOWGz6mTjU4/xeGEeL7Rtfnq/ttH/oq8H6IG7N/HYtgEeUUt45C9lX80X//A4l8Qc7n2qj8+s1663P3g2G0a2cfnGJzkkPrbuVWvHPNoGHifo1HjIvCYe3TrI65aOMty/lHx/+fFc2NkC2+F1xy7kzxt2ctrB3QzfFadDBvj7k5fy8lW+3b6Ug3Q7of892QnD23WpiKApzHQymoOdb2SDk9jl91UOKn36tCVdMn50WTE7Av6CG/oTEm0wsgMVWVRbky5daZ2MlRnaw+6RPN3+xOwuuPSjr9Ht+KW0d67n8WIvR5RsMpkM8ySH+Al/m3YO4uXgezc9znt7OvXV/fDuVhkiRo5R5TGoytffHtEUcDw8xyJXKIW9S+LtvlC49TPl8yYqIGlHzEfBnLkJkp7NcK7IbtJ0ym48yy4LhQXHhlFMgX+prxDnCBkkrTJsT8yjlXIOS6OYk0JhRsxHgPLSyOiecBeUjrsMqgS9AnhpehN6YR+qoSnYg5vpEYsHRrLEM9tZ1NbGhh3DukdufpgMMeKuRcGOES/4RdJ8wXGEtxVyhC0IR/wHKOHaxFv0g7FdtfKDO7XZJBQKgHPCJdx73fUcIJHCeTV2LEH3taAMQ00CJ7Nl6zj0SIG7qSJKceSHfsYnrW/yCvuvOkN57eVjzhuxm3AKI3hShEQbbcO76BjdAg/fC6MDLCrl+USgLNxU+d5YKQP/qUtXB60MW4BvuV9kmRXJXL3/agCWbPsdZ1ptfO+HT7JS4OrbdnA2MKCSoaZw97pnSEmerHK45Mp7uMLtpKfUxzaaGCDFzpGxD+CuodyYYy86qIv80w4HdHhc8+oTaUm4LP5pD0vTaV7+xrOQXRvgK3BN4RTOsu8k3TGf4w5cAPcUeNkR81i3bYiTVnSyqT9D09CT7GlbSb4/4kD2Hc0tCZfb/u3F3LdxNxvvirGEDDEnokUUMpU9g1NdWigsOKZ8LMxTmEJIarWNHGCjH3cSqwxrbk16jCrfme2XtehIefSUitqf4AsFOxL51prwsCwYVAlUdpDBbD40Hw0VPfqVvka7DCICS9RmfqPWcJAqUfR7OjhFv5+GlChiMTRa4LN/3sMnIczEbmeQZqfAqHK5vXQ4Z9g6eGNToJWd8I8AWij4jmbHErxki95E5UfgqDfCsW+C1mix5ypsFxC/BaxvLnUSJGM2mVyRfpUm7yS0DtXUCwvXwMpXEduiteag2N3WXIwWS8/hLruDXsBVjRUK9WY0Py8pOv6i6D8cTXGnHBsea6KnRQuFEd843xQ4SHPDSGYXzdYoC7f+nisG38KqFv3aPc/sppgdZljF6UjFKFoxYr7aPL81gVBiUcHfRftx/MP+5yc9m1Sbtl1uUR1hU/qoULAsIeHaDEacVbWqNcb9hSIow1BUNfwBe5O4Vo0IeTvJYyX/QTnobB0JNW8VWA73tumkq+s638ZHC3+vz3nbH/lb57N87pCr4H0bUB/azuNvfZzjRr/OadnPc8OJ/0upKhTzpnkXc3OqXL/+4dISWmWQWnTln+Xb3hf5zPAH+XXsg1yReRcAr3f+yIMxXTr7ve41vMP5JTEp8Kueb3OqfR+rrCd5o/MHOmWAb618mFfH1vKORU9zbtcW/mZFjsvPW0yMHN964zHYfv2Zd59xIHkcFjU7HLe0nYN6mnATTdj5Yd/RrLW+P5VWcaK6HPnHO/RCm89oR3OxxGguR48zArufIdu8PDRJAViuXmSD7HDPsXistIhlspVW3zFNqaTNO1Hh7ndaY+Fx5WNhnsIUNAURrWEUsgQJe0GuTxBpFdCWcskETl+/AN7JB3RywmL/efPzJbyEXug9W9dMijm2ftZyQwxkCjT53eeGVDzUFJxsP8uTWdpliCdUL8NFm3hJmz+d0ihCCUdKFLEZyhZ4eLBSYLXJIK1eiVHl8sPiS8Ljz6oOvr361/DST4Zjyvrmo4Rn678/7ZvJjnszLFoz+Xw5MT1fQRKemyDpavPRs8XWcvSa7cJbboQVLw41hUAo7CqWn9HtxWayyg37KTSKOakpzBRFN6UnwH84mmJOebH10vT6QmGo2mObG4JSgWaxiA9vwqPAsd5Gbk0t47LbnuTi5p0M2gvpTHuUhmPEyeM5Fp3pGIWdT+P6rSsD08iwr4kkPIfODq2mFpsWgB9d2BSvXBiTns1gPrKg19AU4r6mEIQGDpCiRTJYEYfnXiWu1cCxhN1F/Zlb8kk8dx5t22/FKhW4rb+Zo4DHNm0n7d/UF/3oUbYPZrnqzo389qGtDIwW/LpDrfSpVt5xM/yPexzn2jr2MKsc/mX7WbQkXDzvWQ4sPsHfOZ9nx1COz7vf4LX2nxhILgE3TvOex9h0yJt5+30H0BvPIdkB/utlS0iqYb7+m3tokhHe7vy6YvwHWc9SzUuf+AQvFSCoTDEIXAmPxaH0U5e1bpwBlWDedd3EZIi2jVfRf2UeN9lC+im/4N7a74Va4dH2E2x1V+hCi6UClPK4Vol8UXHalsv4VFGb23KtyylEGhRa/kKe9hsWxRyL35TW8B65loP6/wgcXzZTRAoV0roYLrwqLL0OTK/2EejNRyHr+ymKZU2h6j5qTXih+ajkL4gfeWGazh1ZHXHnm11iyTSOJbQk3TDLPyMJrNwQndmNnBm7BxTsKbr0K1/wjOxiVXIHDMKTqpf+0S0so+wTi5PDUkUKWOzJ5Hl8tAkif2YrQ6TtIrrwi8NdZ15L5r6fkXk6RjHdGwZTxHzz0UiuEPYDoXWRfn1+ROuaCDumhXS+HMKa8Gz6BrP8d/4CMivn8XdVbwkq3gZ11QYiJeY251JkccYEEMw0+7VQKDgpYqB9CgSagr/AxtLMa9Y/B8XHQvzwwpTKIH6C0JLiBm7514t4yxVrsbZnGMSlPeVRGo0TJ0fKs2lLerQ7kYUn8ClENAXx7Yte+6JQKAQF5QISns3O4RhKbEQVJ9QUAqEwTJwmq4RVHNE7vmJu3MS1fLE0Jk49+H1gtKB/H4kcHw3+L/CoLGZIxXn5/9vIBXaB97n65n4s1w0eJMiRkCxFJWwZKSuqr1g1n5aES3PC4VPX65IS3/ibYzj+kRXwsBYKMSlw74fOAMuCL1wKi0/meyes4Zyv3haaF5rbusIyIwsPPpZn13Xz0EieJR1JOk4+lZKCr11/PUrB6dY9PGkvYVchxutb19H3plv52mc/yKfcy9ii2tmmWtl+1re4fu06Dm1T7Ni5k1ZrhBcuinHD2nW8dU0Hv7/ncdzSMC9vTsEOXcws8/itxO1IlNevypFhF9k3cFHxBvhi+eVPP3omfaqV3tFyUtvSh77Gh91yItopQ7/hSetQDty9E57eRiqrF94+1cKybb8D3hcRChHzkRMb2xks9ClMVSjE9IYo2Fj4gRLVmkJr0i33l/DNR62/fw885TetSrT7w0ixoitNKVIAb9RKQXaIj9qXc6zS8zmcU+H3y8hODnV1SO8G1cvOUeGISG/lJLrzWhGbTf0ZhlSCQZUItfx2GSRtl/tf5Ocdw+0Di+DpJ0i45fsx8ClAucovr/iS1vjqDc13vLGagmezczjLTlrItSwd85aYP4agLPZAxCLw9GiSHC5eg81H+7VQqDYfnXPkfGTjfNgKeGnm+ZpC1q4dZZBgFGdUL0C9o0/SHHdZ0Z3G25phd8GjIx1D7Y4TE53tee5R82kvDerdUrwlrCI54rdWTHi27owFuO2Lw+tEzUegb1LPsfXDOLq7ZmZlcN/uCOopqQSt5EmjSzU0Fbezrl/xme+v9Rf78iI/UtVcppq4a+kFPK7DF+c1xzm4p4lN/Zu5Ux3C33T/lH8/YQkH943AX7R9/+hVR1F6RFiYhuywTni6+u0nccwnbuQdL1rBe196cPj537jlCfpH8px2SDfxbVV9uIs5GN6tO9Qt+EdS/s7558WTeeNpRxHfeBv0+74fN8HSzhT9z+zm5Uf0IiLYou3y2XyJAZLECkOkbRtxYni2RZ9vbuuVXdxVOpA9dg8ffvOReI7FW3+wllIJmnvn843ig1x02ul84aHb2TowylkXnMVTnzyM4c5VvL7vYi5YvZgPq2/DfVfBu+7WUSs/fQvXuWfxoLOKfz9jAdz6OdizkW3x5TyWaaU3kp1tFzIVmc/HDN7MMd7NcDdwN/QAtwVr+q474aMRQXBzpBr9X7+pzROxFj9qrBnW+0HxfY/Crg3l0OPJzEl2rFwltedw2OY3gKrSFOKuTcJ1yFlxKIwSJ4u98c/lE4JyG26CN520NCwTA5Czk1j5IbpkiGfcZXx6+BwO8x2zAGR2scLaqmtBJRewI6OwrLJQSUgOVSxQwA4DDLapNpokQ85K0CpDJK0CA0FElGuT9E02gR8Oyj6FQkmVj0+1EdUYTSFB0nPCasnR64Vz51SajwYipU7Wj8TJ4ZAsGU1hDDMSfQTkgzhjf8e0amErrFikhUKsibakjtVOxlMUCxZ2jbbUTdltINA1okMx57fESahRduZd3R7R1ZpCOuZwzpHzYe1d0Huktv+O6gSfQFNIuLZWUV/zHVT6BPirfv2ZXSMMBjv0TJ5127RjbXcpQRu7ueqe7fz4wdvLu/hMvlzpEx1lMUyCgcIwaYFnRhOstGBLxmJT/4h2irYnwxj16rh1/bsTHq9wbEa48+ldbNyV4ZJTlnP2Eb2w8QjwQ7A75i8l84hHMZehSTIMksTJFymWVGU8PDosdXcmr1XpeJWjvDAKm3TsPgtXh1rUg2o5nHIWXPXX8sLlJFjakeKeZ3aXo3OA1oSL12QxuCtJiwxTtFLgxPAcq5zEhN6lNcddOtL6/nBti6FCgd3+Q92SdP3+AXoRKYiDFHOM5IukPBukWYeDNs8PF5T7E8ezNnY8HHuyvsgv382CzDqu4zw6EkIqt4MDPnw3T28b5CP/8w1+5OkF/ofLP8Nlj9h86mWLOXG+y/BgPx+95s+80vo/Xmg/CAuO1Rrj07eP/WLu+O7Y/BTQgQDRYAAnXpWj4guRWIv+f2BTuV1sVDsY3KJLaMSatClThLakS64QQ/IZ1ljrkGh3tMDn4SZ5w/HlzQ9A3kmRGumnTQZ5Mnkyvx48gWU5be4puins4Z0c0zpMbriHnlQTo1vtCs9oPNQUyge3qjaWWjvZGV9MR2GIGEWySmsKMccKF+do/SLP1ppCSamy+WiqOB6s+005jNdNkvTssHdGsoZQKGsKvlBQZfPR4wMeOeViG/PRWGYq+ijv5xJUqNExfxHy0ogI85rjxByL7GCCpBqmaMV0XLtPj+oDgebhp+Gu77PCO4SE5BhWHu1Jj4IVI0aeJ3cM89cH17Fm4x08eMAldPb9JUz+DxzZb/jOX1jSkWJPpo1dww+E13j5lyvL/wZsy3m0AbtyNomUzbyWeLiDv+auTeGOZKdqZljFaW5qguFdHHrActjwNC9auZQXvfaUvZnCClw/3yD4nxbf6SwWTR3ztZ05P0KTjDCkEtj+bihWJRRaEi5J19Z25qgpBPQDtnmtzpuYt4pUqXwLxxxLm0b86pm4CV5+RK8uyNdbFi4L2vSObag/xUL6GLWKYHvEHKsii/j0ow+iOyJMgmqmuzO6X0PM0f9cW7AtoYhLsaBboCZjDlgt5egTP1fgxAO7WdShS0FHk59a1R7c0qjeXaMXqKIqz0smMY8nlUOp9xhY0YmdL3LNVTFuLa7ir/alcOSFsPhE+ObJ8PofwE/eqq/94g/BKf+qw3T98GF+/1F4+Bdw+Hm6dlVFuHFVWPLQtnIIcpRnIjv/H76m/LPlQKyZn+Q90qU9HL3tWn5QrYDc80P9/2PX60zjiCByLIs0I7QyRMn3PQQlxYuJTuzh7bSpPdDeS4fjVXYzwzcfqSKFSF7HA2o5PTEbZcXpsPtxlUXWt9XHXTvsDJhwqzSFQol8sURrcgoO+Si7/MoDD1yj/3fjFYIgUV1Ej7JgCjqOBprCbpVm00CenOdgl4z5qGFk/Vr7EhUKwSLk74QWtyfZk8kzLFooDNottEbq7SzwVXxLFeCX72JX4XT6ThINAAAgAElEQVRwtEnoSzc8SqebYY3kyBVLXP2/l3G8p/jAQwv4Zwd6bZ2UFNzYvS0JDl/QonflcZev3/IEoG3r0R18c8KlKeZgff9r8PTT/MMZh/MPR59Q8bctbE/y4Z8/yGG9zVyx/aXsUs2cEP8DDIMVFEabobpHAa5V3jUDOlrD9iDZQXdrmlE8XeVVtPnI8ss6jNEU4m5ZtY6NoynMO1w/ZEohond2IlJZI8hNcsaKHs44rDK56ovnH4Utwi2fT9NcGmHQKmhNwbZCcxtAT1d3hf04qFG0eyRPm79QxFwrVPmLloPyy3CnPBtcP449szv0Q51+aC8csFQfj9x3cZXFLY0ybKXDzy1Eoo8c1wNK4aISJPxto418rB136/0w/2j/5ITe9RezZX+T7UKqQ/9bsFoLhZWvgkPPoW6+dYou9jiyE05+Nxx0VllgVOWzPPHwk/SObK39Of1P+fOyC648r+KlIyEMbjpp6w+5wfsj8UfaeIFr4w08DQ8+HZ57Tu/1HG9XlmM7UDaTzPejKGsyv+p+O78oKT5e/BILeAa3lCCL/m7irhXOabX5aChbYCRXZH7rNHN4D38tbLkfdvoJnW6ShBcpgV1DA6neIO3xNYXdlr4vc7hYxnw08wxlC/zhkW1kN+VYAty3JcOvr7mPPZk8R+zazruAi/73Ee7IDjPs29f3eB5dFmzMJmmNfG9pGeXu0gG0MsRyayuL4yNQ0Lv/Ixe10pZpIT6YY6Hs4JMdvyFf6uXb776Y7hvvgYfvwUmkIatvlB9fciILWsu7x1sf7yNfUNoUU4tgwazpaNaDbE95XFHU4aCfdXzTQpAsM9NCwdF/R6gpWJbWFuItzGuJs1t5xMnSYo3SV0xjjdYWCi1JN9y9hZE0luM3YBmFZ+/RO2NAREh5DmFnwmjlz3GqWHY36eOjVorm0gg7pQB2CssSsGP0qzRtMjRGS3FsbWfePZKjJVE2PwQqf1HcUCgkPafchCjTXy6NYEUWmEjUWFxl8Eqj7Hb0dxN37XI3N8BxY0AmnBfLEm3iKJbIdByKu/WByuqdTkwnxdWKMJpOngJUhjAvOBaWnDTuqT8auJue9U+RS86jd+gh2o99Ddz1Pf3i+VfC1X8DK18NJ/xDhZZS/NW/YEci5J5RPSxVRbplbKX+12z5IlT5fD/vfROy0GXDg9abGSKBDDezNetxJP7iPAyvsJ/ksdJCWu57khWDNmda2+jaAaTmQ6yZDhmgLydkcqK/y+nw2sv0piLw97gJUl45nHQiTSEgCJHv9zcrRXErTXENYL8UClfd8Qyf+PUjvNkugQubBorcvn4HLQmXkncMf2h+Nd0LjuH8ZGBnd8jeqL+c5o7e8k7HZ11pIYe/4wfwk9N4QTwLz2pN4ZOvOpyu27qIPZznB63fIZHrhzdczfy2JCT0gi5eOny4k1U3xKuOWhAWSatJYG+fIHmtPVVeJK3gvAZpCk61pgA6ic2N05702Cox4ipHs2R4kq5QKFT7KN754gPYMejf+MHCnOzU0S5b79cRMAvL3d5SMTtUtyuFwsR5GFknTayY12U3nK5w7NtVqxYKVRmrnm1pTSGTpy0VCAU7HH/RchE/uSsVs8vvz/SXI3Yk8rdGNIUUo8RUhoLlhye7doWm4LoeUaEQjDVXLJHtPBweuiJM6As1BajtPJ5OnkIw3tBfM0HZaHRW81DJJVEa1fMb9Q0FSV/zjx4T73/nA+s44amvAXDfSV/h7Td18OKebm56dDuPHP87Eut+oYXI8ZdwpfNq4n/8GK+1/xS+/+bikZxm69L4VxVPo90eZVVaGBjZDlVr8Hvca+Gmazkc+LYH/Lb82uf9/0dxya9rgi+3VdUF8/0ssaYaNcMiTv1YM5z0Tvi/r0C8lYRXFm61hEJUU9AmLB2mm4u1QwYW97QZodAIggi4Ew5dAuvhVauX8bevOj1yxtmcXvWejXe0wh5It8+Dqk3LACntcEy0YvnF20aI05H2cONJYuTozm+EI18DS07UbwocdV6aZMwmN1IaE43wlhdWlq4Yw4SawlihIJ4vFNLdOtO1fZLPnyKBSaNCBT7pUkD7AotWnEQpR5oRBlUC2486qdYUDpnXDEFzqmAxSXVpoRA4UhdEhYITOtYrzEeTLFx5twmy0FzcDc7B4Vj6ci0czKaxmoIl5Isl+kdyHDqvOfxbA02hJC5OUS/MSc+pFAph9njkkYv4FBKSxStlyfuRbq5tcfrKBeA3FFs2r50VXQU6It9nzLEYykKxeyXcn4Wtvh8q0BTGm4Pp9FMI3hdUe51kblsTHkMlj/bCgK7VE2vWLVd/92Et4KGm0LYSZbNPvKULKFePlXR3ucpv6yJSsfk8XFpYsdj/sngiB8YHeGC0k08U/pbFzUnecfwKPvDTB7hYfs+HLe1Yv7xwFp8qvIF1HzoZKze2xMvP/vII23f0YeUGWd1mc3S3VdvPkqudOFn5Rzl6M/CtF/KKUoIDPN0rY8mtP4HWjogwaaKllOBUawMDKkk80cqGQZtt3hIOW30qtxx1Km03fHesf2eGeU4JBRF5FfByoBm4TCn1u0ZcJ0jsKviOZsudXI0uuX5InB9jTaxF21GBtvZOFrYltalj892ALlbWnvLIxpLEpIBbGCjv0CHi0E6R8puTVNsTJ/9DJtcU2pJRTcF/kL00/PPDNWv07w2OXWU+qkK5cRLFQVJkGCIZ0RQm+LuDhTkwee14XCdPRQRaOuYwHGR5Rk0ik2gKOb8TW7rQHy6QMceiL9daee3g4xyLfFGRG8nTmtRzd+KKDha16+so28XxxzFGUwjm3qptn06RJU6Wol1ebN979uHwFf3z8St6+MOqwyreEwhTaVuqD+zSLVhxIkKh1sIfHJty8lrk/MmEQtJlVHmk836/7ngLrHkrnPiPeld29mfgsHPHXiJeFgqxpg6gLyxfbTVFfEOpLjrjMXJV3U6SkkVUIcwGb095dPnRY9sKqaA2H1lcLNvDSncCnVRzx4YH+G3fVnblcvzTwQdy9BkH1f5Dx9QNi/68Z0y9sNyO7Uj/VhZKH8kt2+CZIf26H4jQClwRfGV5dKXjLHDbJ2m68yvhmsP3z9F5E1MNk62DhgsFEbkceAWwXSl1eOT4WcD/oOX8d5VS/62U+jnwcxFpAz4HNEYo+A/T7qK+WeyJqh0GBDu9YGFvWxzuzF538uHgBouAVkOUlyLm2JRiesGwKFUJhabwc1MxuxxtMxUm0hTcwKegHxrXlrL5yE1M3XRQB4EwqN75B4ibpHl0GzGVZVAlxvUpVJDqhjVvh+5DdcXVoe167qzye1KeQ8EP86s0H038vY7G9PdhUQoXvIqw1GqhYAm5QpHhXDEUClFtrmR5uL5QGKMp+MXeKsxHwTEgyShxlaUQzYmJCpAaAjyYNyfp3wfDfgCEM4mmEOQJJCco6FaL6GdNkvjWlvTI4NGq/KZO0bkUgePfXvN9bqp8ng6I6GPEr0JsN5fni1QXB3am+VMsRjRSPJrRDL5Q8MttR4MIRpU34WYk5lhhVvGEIalTrBv2yLo+3nS5do7fc8lLaEt5WkjmhiE7wOhgP2/46u9IS4bj5jls3raNl6xIcPrSuBYwd3xLf9CTt+oOknNRKABXAF8FwnKZImIDXwNegm4tc6eIXKeU8ssu8iH/9YYQOHN25fWDZnsT73oAujva4Vlo7fKdvs0LYNvD2lYc3PCRG+OUw3T8dTwR2a0GDyNUmo88p2YkwqQEn1HjwV/akWJ5V4qjFwdRFnZ5tzrJLm+6uKGmUFu4WV4y7DrWRysp3ywQG0ez0G+y4GWfgc136d+Ht2stLcKZK3vCDNApmY/ikR2iL0w82ypXzKzyKbi2FfbYbk2MFarKckOhkPIc8BLadFDhaI78re3L4P3PsO6H/8y8jTdgiaIYrdEfrftUQygEi5obLO5DflFAdxKfwvLT4O1/mrr5MPpZk/kUUi59KlbO7amOIhuHWLJ8npXSz9NwroAlYKcjmkK6m57mOB845yj4RflwkiyWKlZqCr5QuLN0MH3pg+kaeoyE5Co61lXjOZZfcqV2ktl0SUVDUoOfg4rNsTReupe71VOgoLVrPtc9+yyLlh3M6af5OVmZfnjgx/rndGVU3UzR8IJ4Sqlbgeq6wWuA9UqpDUqpHHAVcK5oPg3coJS6u9bnicjbRGStiKzt6+urdcqkBA6enXl9k9t1mI8Sab0Q2Wk/wzbRXjbfBEIhUnPmLS8+Qo83ulsdR1NIx5yaiSyTsuAY6DwIWhaMeakjHeOm95waxucnXDuyUDRKKEysKbjxVNgbeodqYSgwH7l13IaBqSPTPyah7aKTl/HuMw70zwtKOMQrF+AaFJMRoeDvfGOuxTXFU1h/ylcqdvKgzUcBgaZQOUYP1y/DnYz5RdQSbeM7mgHiLRSdFM1+2W8VFQpRQVCjR3Mwz17Sv/+G/OdhMk3BsqB31djjkxH9rIn6EwOL2pJhUTxgbBLiOCR8TSFLDC/m9zjPFvW9lY5kt6f8nyOaYcnySIgWCkGeQnvKo9M3HxWxufWYL1FoXsSfS4eF2nQtoqVlpvVsjkMgCERqm02DqDKAnuYYjiX0NEc1tMicVt2fM8W+qpK6ACLVvrS2sAB4J3AGcJ6IXFLrjUqpbyulViulVnd1ddU6ZVICTWFHTj9o1iQ3OFBO5Y+36Bsx1VFe2AMNIbqzDMxN0QeppqaQYl5LnHnN01io5x8Nl945NsErQnCTxaNCoZ6/dxo4gVAYZ+fvxcta0w7VEjoQPbuOhy46jxPtOoNFoh6TYKKt3LzGFzqebTFAmtwhrxpzumuVNaCaCU12uYJlaHIIhEKoKYzVCEsR30f05/K5UtMXEUQ9xVKB+cgXClFNYap+g4moMB9NfA8t7UyRkxr5P5OQaNbP0JDdFN5Pw7mCFoCpwARnlX17YSRVAuUmtPmIIkUsOlIeB3Sn8RyLNl+I221L2PXWtfyxdOSE5qMTlpc3cNMOSa1B8FmJCczFwbh6muP8+l0v5JVHljv8VXyfDRIKzylHs1Lqy8CXJztvb8tcJDw96U/mWrhHHcTRQdLPRAQ1490UnHe5Lgn9xC36WA3zUVhsrkIo1HI0p/mPMw8r28QbQMy1qjSFOhbMaRCYjcbTFOLJco2cHbTQFGQ016MpOHXuOiOLxGQkYy47aKGXXRU+BRhbbwoqHehLOsY6scXWPgWRsk9njKZQY3FXkT7ZNTUF261ZhM2zLWKOhVi2bnSTG9QahWVPr5HOZET9NZP4FFzbIplqIqxVV6f5KNWkn6GM3UyLfz+VlL/RiKX18+elylpgsEi6cZQVC81HynL4vw+8ONygdDXF6B/J0xR3wk1hdU5AlGMWl5/lmdQUwkS5Ca4dc20GswVijsXB8yqLDVYI+zrndKrsK01hMxDtULHQPzYrBDusHaPCm+1PVsS8j0uw83cTOgu0bUl5t1/DfIRbQ1NI1NYUmuKudjg1iLhr64grt7GaQpjRPI6m0N1R/vv7KjSFeoRCVFNoGv+8KWgKSc9hR9BmPDAf+fdGdWVaKJczft2xCzmoZ+wYxPHw0KWWw11gqCn4tvVq8xGV2oGqpSmMEzoac63ywhbMSfB3N8JUOAVNAaClOTJHdZqP4r7WM+q2VAjh8Od0V+UOORR+CZSbJCFZbIqUROePBN9D4FdoTrjhgjyRUHBsKzQRTnTeVKmVPV1NoCnUrDEWCPl0d82Nwkywr4TCncCBIrJMRDzgAuC6et+slPqlUuptLS31qaTVBF+IDgOt8wvvPEiHOAZNS2CsTyEwH9kxsP0HOgxFdCsXs4hQaDRx19IRV2EBwAZpCo7oXixW7ZvV8fMkVKxJF+qrJ/ooILowTmg+8nfXdQkFO2xCFDqa/bGkagiFc46cz6uOms/Hzl1Z8/MCTaFiZ5loqyhzUdPPEbkHKoWC/7fUMDlBWVMAyvdi6EuYZi7CRES1jjrMUm3+81lCxrTsHA/xv9tYU2eFUAjvkY4DKx3koWYY00KBLLbSQiFKEJbaHHdxbQvbkklDwN/qR5a1JGr4j6ZJ1Hw0HtEii2MI5r1BpiOYnZDUHwGnAp0isgn4D6XUZSJyKTqH0AYuV0o9NIXP3CvzUSD5M/liuIOYlKUvgA9srnyoY036gQ0e5MB8FO1TECzAyY5KyZ7uhqPfCAdUp8nNPHHH1oKw90ht9or6NmYQx7LKNYhq4c+TSnXDHsqO5nqEQnRnOqH5qH5N4ZjFbexId0OGiKagF9paD+SRi1r50gXjmxrF8XClSNqLvHcyRzOV5iOpEAqBv6P2wh537UiNqCASbRY0BTs2qRMfoL3VNwVJklQd5wP6b3ZTLJo/HyzBEm0+CiPazrtM+xTCMQXmowTYCRKMYFNEVQuFpnJ3RfBb306iAfzDqSs46/B5rOiauWZUtiW68vKEmoLvK6r1XASCOTWHhYJS6sJxjl8PXD/Nz9yrKqnxyGRPKWGs+sZuXqBr+wSLYGA+ijzk4U0b9SeAvvnPbVjUbQUXrFms8xWWLYRL/jT5G6bJcUvb6RvKjn+Cv1CLf0MPjtbOaK5J3ZpC/ULhiIUtcMxKuP3GSPKaXdN0VA8SdPCLruGJNm3rDxrg1Epei2qLscjPIlpbGCfJ8G2nLGf7oP+5wZyEYcfTbKQzERNFNNWgp0NrzjknzZT04Zd8LOwp7fptMUOtodphHWoKcV2aWvqxKY0RCss60yRcO0zmjLvWhNFHoOtqzaRACEh6EwukYFw1fW3PB02hEey9o7myGuK0edH74IR3RD7YNx9FNYWw3lBjduf1cPELls3KdV6+qreib8EYAqHQ1I1rS1hssC4TnmWVO8ZNpCk4ZRtzXQQPl7/QXbhmEcctnWJSl08Q2tziRoIGgntixI/KrmEKkohQsKqFmT2+UDh8QQsECVnVOSvhrn4mHc1VpqlJ6PA1hZbWjknOrGJNea8X9Eoed/NmRzQF33zkSpGSVM7z61cv5LRDuipqgrVNtyT2XpLyJg5BL2sKtXwKRijUZO81hfJkT7m0RBQvVbnLcxP6IYweCx7OfSgUnjMEC16qG8+2yBe1UBgv2W0MQSer2AS+pKmEpPpjAcKHbfXSdlYvnd53FZRLSdcSCkG4aA3zkUQ6l0msak9tOTVzFMZQXfKkdYmO5a93HuphippCoLVYdWb71vwIx4Ls+KVTKvJS3AQpP9xJVWlkjm3R21Kei8vedNy0NcK9pac5Vpl7UEVsQp9C4GhuTOIazFGhsLeaguXb9XKF0t5pCmMHphcBt5ZQmOJu6flIsEClu/Eci+FcEc+ZwAdRjRPTppgZ8inosYxNgpoutr9oNnuRugvBOHJ+c/la5qOIILCrWltiOfWNrbrkyVF/A0ecN26tpWkx1TyXwD9SZ+RRzY+YpJ5W1HwkXiQJUCZe2oJ6VfuC777puAnXnfiEPgVfMKeml6NVD/sq+miv2NvoIyj7FeqOPqqXRHs5pwHKD1DCaArhIpHqCh+KKWlqwQMxYUhq/dFHgO413HUo9NSOKJoKgfmoyYloCsEuP/ApyNi/14rcL5ZXy3xUx96tOiTVsmZWS4CxkU2TEVx/L+Lpa5ZjrzUmN47EUjQRCIUZfq5nkPaUN6GWEmgKNdcmOxKS2iDmpKYwE8Rdm4HRwsxqCgBn/VflQ+A1wcrX6LaH+ztN8/Si2HkQnqMd0lMSCsEDUZejuc6dYKoT/vEv9Y9hAlxPXzvtRDSFYEHPj+9otnxNIauc8DPKL7r1mY8mKI44Y0zZfLT3mkLwfE5uPkogXhpb/IKU44TxzgUm1BQWrYFDXgHzjmjY9efkzO2t+QjKzua98inUYsVplb9bFrzuezN7jblK21J4zzpId7Gp/9cAuuR4vQSLUT3mo0YujuNdupZPIRhPGH009pGzfaGQITZ2k2LXaz4avzjijDHVMNdAU6izxEXNjwiz5McxMYabgDgS1SCfw5rCZEzoU2hZCBdc2dDr78fmI7/X7UwLBcPE+Db8dj/y438uOKr+9zr1aApTNB/NIK5fbTfllNtJls1HfqhujcXKsW2GVUwLheodsVWn+SheFZLaCKYqcANNYS/MR+4k9bSiY7Iivpk5rSm4Ddqw1sncnbm9JO5NEPZlaDhXv/1E4q41PU2hrjIXs+9IDEw/KTuqKfiPWMHvn1zDfOTaFiPEGVE1NIW6Hc1VyWuNINQU6vQpJNvhrP/WZWGme0m7DvORWH4kYMSXN5MO9lkmLHMxg+U1psL+KxSm4+g0zBgHdE8jKcj2tI9mogc+Yk6YbZrTeqd6SHfk2sF48uM7mh1bGFExRvHGCoV0d33Zq0GYbiP/7qn6FKAyj2caeEH00XjPqWXBed+DhceVe27AuKVB5gLzWuK0JNyKJNvZZE7O3HPap2BoHE58cqdluluH/3YePDtjiuD55qMDd9wEfUug6+DK6COxahYxcyyL3cQZIUZ79Y749T+ob9c7K5rCNITCXjKp+QhgpV/mvO/R8rE5LBTOX72Ilx3eG2pJs82cXBFn0qdghMIcIt5S7tU80Tnv2wBLT56dMUUJtIK/fgP+/FX/WEQojLNQubawUXWxSXWNXfwSrRObywLCkNTZcDTPYOmMSZiscVMFzxPzkWNbDa2aPOn199mV9zETViI0PDd5yX9CfmRfj2J8ouUoFp9UeawwOm5EjGNbvDP/TgD+NN37Md0NR7welp0yvffXQ7T43CwxWYvXCiL5HqqeMF5DTfZboZAwjua5R422o88pog7hJb5QCBan/Oi4u1fHErJ+68pxHaqTYdnw2u9M7731MsXaRzOBO5mjOUqkvIzMYU1hX7PfbpNjJiTVMNNEhULrYv9YoClkxtUUavYNeC5iO3DipXDQ2bN2yembj/bb/e5es9/OnHE0G2acqPkocCgHx1Rp3B4E0Z5Ez2mhAPDST87q5epyNAdENYV6cjsMNXmO34G1EZFzROTbe/bsmfZnmOQ1w4wTOHtf8C/lY1Hb9ji7VxEJbebOOF3r9leCTOa6zEdOnGKwpBlNYdrMyRVxJqKPEl6DCuIZ9l8SbfCvG+D0j5SPVWgPE/QEtqypVYzdT5i0IF4UETJoJ7hlNIVpMyeFwkwQpJIbTcEwo6Sq2q5Gd6wTOD8dW4jto7j05zJTcjQDGQl6ohuhMF3225kzeQqGWSFoqVnKT6gpTDvq6HmO60whJBUYlTgoECMUps1+eycGtY+MpmBoOIEJaYLm9Y4l9TlT9zOCOal38zYqfstXYz6aNvvtzKV8oZDYR0WnDPsRtgt5JtUUbONkHkPgU6hXkzJCYe95zmxNRGS5iFwmItfOxvVecGAnHz93JUcsmL6z2mCoiyACaQKThmNL/b2q9yPcqUQfAaOW72g2Gc3TpqFCQUQuF5HtIvJg1fGzROQxEVkvIu8HUEptUEpd3MjxRIk5Nn974lIsszszNJrQfDRR9JHgmUi4MXhTSV4DspbRFPaWRmsKVwBnRQ+IiA18DTgbOAy4UEQOa/A4DIZ9RyAUJjEfGf/WWKYafRQIBcsxQmG6NPQuVErdCuyqOrwGWO9rBjngKuDcej9TRN4mImtFZG1fX98MjtZgaBBWHY5mW8LeAYYyTtCOs06hkAs0BWM+mjb7YmuyANgY+X0TsEBEOkTkm8DRIvKB8d6slPo28DHgbq+6ybnB8FykDk0h5thh7oyhzJRqHwE5S3fcs42mMG2eMzOnlNoJXFLnub8Efrl69eq3NnZUBsMMYE/uaP73lx0SRtoYyrQlPUSgOVHfUpWzjU9hb9kXM7cZWBT5faF/rG5movOawTBrWJM7mo9d0j5Lg5lbvPiQbq5/1wvpbamvh8Mut5cRFUN5dTQmMtRkX2xN7gQOFJFlIuIBFwDXTeUDZqL2kcEwawQltScwHxlqY1vCob2TtGCNcF/Tizgx+5WKiqmGqdHokNQfAX8GDhaRTSJysVKqAFwK/BZ4BPixUuqhKX7uXldJNRhmjToymg0zg9g2e0ibarN7QUPNR0qpC8c5fj1w/V58rvEpGOYOgS/BaAoNJxAGjonkmjZzcutiNAXDnCIwH5kibQ0nKBVinPbTZ07OnPEpGOYUdWQ0G2aGUFMw5qNpMyeFgtEUDHMKYz6aNUJNwVScnTZzcuaMpmCYU4Tmozn5uM0pbKMp7DXmLjUYGk0dGc2GmSHwJRhH8/SZk0LBmI8Mc4rAfGQczQ3H8luhmt4U02dOCgVjPjLMKULzkdEUGk2gIZjoo+ljZs5gaDTGfDRr2CZPYa8xQsFgaDSh+cg8bo3GhKTuPXPyLjU+BcOcwtQ+mjUCn4IxH02fOTlzxqdgmFOY5LVZw5S52HvmpFAwGOYUJvpo1rBtYz7aW4xQMBgajTEfzRq2MR/tNWbmDIZGY8xHs4aJPtp75qRQMI5mw5wirH00Jx+3OYWJPtp75uRdahzNhjmFSV6bNY5Y2MqaZe20Jr19PZQ5i/F8GQyNJjQfmcet0Ry7pI0fv/3EfT2MOc2c1BQMhjmFZTKaDXMHIxQMhkZjHM2GOYQRCgZDowlrH5nHzfDc5zlj5BSRFPB1IAfcopS6ch8PyWCYGSyjKRjmDg3duojI5SKyXUQerDp+log8JiLrReT9/uHXANcqpd4KvLKR4zIYZhXjaDbMIRqtz14BnBU9ICI28DXgbOAw4EIROQxYCGz0Tys2eFwGw+xhSmcb5hANFQpKqVuBXVWH1wDrlVIblFI54CrgXGATWjA0fFwGw6xizEeGOcS+WHwXUNYIQAuDBcBPgdeKyDeAX473ZhF5m4isFZG1fX19jR2pwTATGEezYQ7xnDFyKqWGgYvqOO/bIrIFOMfzvGMbPzKDYS8xIamGOcS+2LpsBhZFfl/oH6sbU+bCMKcIy1w8Z/ZgBsO47AuhcCdwoIgsExEPuAC4biofYAriGeYUYUE8oykYnvs0OrvwPbQAAAoySURBVCT1R8CfgYNFZJOIXKyUKgCXAr8FHgF+rJR6qJHjMBj2KW3L4IXvhQPO2NcjMRgmRZRS+3oM02b16tVq7dq1+3oYBoPBMKcQkbuUUqtrvTYnwyGM+chgMBgaw5wUCsbRbDAYDI1hTgoFg8FgMDSGOSkUjPnIYDAYGsOcFArGfGQwGAyNYU4KBYPBYDA0hjkpFIz5yGAwGBrDnBQKxnxkMBgMjWFOJ6+JSB/w9BTe0gnsaNBw9hYztulhxjY9zNimx/NlbEuUUl21XpjTQmGqiMja8bL49jVmbNPDjG16mLFNj/1hbHPSfGQwGAyGxmCEgsFgMBhC9jeh8O19PYAJMGObHmZs08OMbXo878e2X/kUDAaDwTAx+5umYDAYDIYJMELBYDAYDCHPO6EgIq8TkYdEpCQiq6te+4CIrBeRx0TkpeO8f5mI/NU/72q/ZWgjxnm1iNzr/3tKRO4d57ynROQB/7xZ6SgkIh8Vkc2R8b1snPPO8udyvYi8f5bG9lkReVRE7heRn4lI6zjnzdq8TTYPIhLzv+/1/r21tJHjiVx3kYjcLCIP+8/Eu2ucc6qI7Il81x+ZjbH5157wOxLNl/15u19EjpmlcR0cmY97RWRARP6p6pxZmzcRuVxEtovIg5Fj7SJyo4g87v/fNs573+Sf87iIvKmuCyqlnlf/gEOBg4FbgNWR44cB9wExYBnwBGDXeP+PgQv8n78JvGMWxvx54CPjvPYU0DnLc/hR4L2TnGP7c7gc8Py5PWwWxnYm4Pg/fxr49L6ct3rmAfgH4Jv+zxcAV8/S99gLHOP/3ASsqzG2U4Ffzeb9Ve93BLwMuAEQ4ATgr/tgjDawFZ3stU/mDTgFOAZ4MHLsM8D7/Z/fX+s5ANqBDf7/bf7PbZNd73mnKSilHlFKPVbjpXOBq5RSWaXUk8B6YE30BBER4MXAtf6h7wOvauR4/Wu+HvhRI6/TANYA65VSG5RSOeAq9Bw3FKXU75Tu8w3wF2Bho685CfXMw7noewn0vXW6/703FKXUFqXU3f7Pg+ie6Asafd0Z5FzgB0rzF6BVRHpneQynA08opaZSOWFGUUrdCuyqOhy9p8Zbp14K3KiU2qWU6gduBM6a7HrPO6EwAQuAjZHfNzH2AekAdkcWnVrnzDQvBLYppR4f53UF/E5E7hKRtzV4LFEu9VX2y8dRTeuZz0bzZvROshazNW/1zEN4jn9v7UHfa7OGb7I6GvhrjZdPFJH7ROQGEVk5i8Oa7Dt6LtxjFzD+hm1fzRtAj1Jqi//zVqCnxjnTmj9n78c2+4jI74F5NV76oFLqF7M9nvGoc5wXMrGW8AKl1GYR6QZuFJFH/Z1Dw8YGfAP4OPqh/TjavPXmvb3mTIwtmDcR+SBQAK4c52MaMm9zERFJAz8B/kkpNVD18t1o08iQ7zv6OXDgLA3tOf0d+f7EVwIfqPHyvpy3CpRSSkRmLLdgTgoFpdQZ03jbZmBR5PeF/rEoO9EqquPv6GqdUzeTjVNEHOA1wLETfMZm///tIvIztLlirx+ceudQRL4D/KrGS/XM57SoY97+HngFcLryjac1PqMh81aDeuYhOGeT/523oO+1hiMiLlogXKmU+mn161EhoZS6XkS+LiKdSqmGF32r4ztq2D1WJ2cDdyultlW/sC/nzWebiPQqpbb4JrXtNc7ZjPZ9BCxE+1onZH8yH10HXOBHgixDS/U7oif4C8zNwHn+oTcBjdQ8zgAeVUptqvWiiKREpCn4Ge1kfbDWuTNJld321eNc807gQNHRWh5azb5uFsZ2FvA+4JVKqZFxzpnNeatnHq5D30ug762bxhNmM4nvt7gMeEQp9YVxzpkX+DdEZA16TWi4wKrzO7oO+Ds/CukEYE/EZDIbjKvF76t5ixC9p8Zbp34LnCkibb4J+Ez/2MTMhvd8Nv+hF7FNQBbYBvw28toH0ZEijwFnR45fD8z3f16OFhbrgWuAWAPHegVwSdWx+cD1kbHc5/97CG0+mY05/H/AA8D9/s3XWz02//eXoSNanpjFsa1H20nv9f99s3pssz1vteYB+E+04AKI+/fSev/eWj5Lc/UCtAnw/sh8vQy4JLjvgEv9OboP7bg/aZbGVvM7qhqbAF/z5/UBItGEszC+FHqRb4kc2yfzhhZMW4C8v7ZdjPZJ/QF4HPg90O6fuxr4buS9b/bvu/XARfVcz5S5MBgMBkPI/mQ+MhgMBsMkGKFgMBgMhhAjFAwGg8EQYoSCwWAwGEKMUDAYDAZDiBEKhjmJiBSrKlku3ddjmglE5O9FpE9Evuv/fqqIKBF5S+Sco/xj7/V/v0JEzqv6nKEJrpHw5ywnIp2N+lsMc5M5mdFsMAAZpdRRtV7wk4pEKVWa5THNFFcrpS6N/P4gumjid/3fL0THx08LpVQGOEpEnpr2CA3PW4ymYHheICJLRfc0+AF6EV0kIv8qInf6hf0+Fjn3gyKyTkRuE5EfRXbct4jfg0NEOoNFU0Rs0X0cgs96u3/8VP8914ru8XBlJMv1OBH5P79g2h0i0iQit4rIUZFx3CYiR9bx5z0NxEWkx//8sxi/EGD1vPxnRJvaLCLfq+d9hv0XoykY5ioJKTcmehL4Z3Tpkjcppf4iImf6v69BZ8ZeJyKnAMPoUhRHoe//u4G7JrnWxegSC8eJSAy4XUR+5792NLASeBa4HThZRO4ArgbOV0rdKSLNQAZdcuLvgX8SkYOAuFKq3h3/tcDrgHv8MWerXv+siHyo+k1KqY8AHxHdjOhPwFfrvJ5hP8UIBcNcpcJ85PsUnla67j7oOi9nohdRgDRaSDQBP1N+3SQRqade05nAqojdvsX/rBxwh/JrV/lCaim6NPYWpdSdUC6eJiLXAB8WkX9Flx+4Ygp/74/RguYQdNmDk6pe/1elVNAHpMKn4GsXPwS+oJSaTAAa9nOMUDA8nxiO/CzAfymlvhU9QaraKlZRoGxSjVd91juVUhXFxETkVCp37EUmeKaUUiMiciO6QcrrmaA6bo33bhWRPPAS4N2MFQoT8VFgk1LKmI4Mk2J8CobnK78F3iy6lwAiskB03f5bgVf5EThNwDmR9zxFeaE+r+qz3iG6DDUicpBf2XM8HgN6ReQ4//wm0SWzQTuLvwzcqXQ3rKnwEeDflFLFet8gIuegq/G+a4rXMuynGE3B8LxEKfU7ETkU+LPv+x0C3qiUultErkZH72xHl74O+BzwY9FdwH4dOf5dtFnobt8U08cEbVqVUjkROR/4iogk0P6EM4AhpdRdIjIATHnXrpT6v6m+B/gXdLetO/x5uM73MxgMNTFVUg37NSLyUfRi/blZut58dKOTQ2qFzIpuILS6KiS1UWN5yr/WbDWGMcwBjPnIYJglROTv0D2SPzhBDkUGODtIXmvQOILILReYq7kchgZhNAWDwWAwhBhNwWAwGAwhRigYDAaDIcQIBYPBYDCEGKFgMBgMhhAjFAwGg8EQ8v8BJR9KvGBgyL8AAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "import numpy\n", + "\n", + "ninput = 16\n", + "nchan = 256\n", + "ntime = nchan*32\n", + "\n", + "def make_data(ntime, ninput):\n", + " time = numpy.arange(ntime) / 19.6e6\n", + " data = numpy.random.randn(ntime, ninput)\n", + " data = data + 1j*numpy.random.randn(ntime, ninput)\n", + "\n", + " for freq,amp in ((-5e6,2), (3e6,3), (8e6,1)):\n", + " for i in range(ninput):\n", + " data[:,i] += amp*(1+i/ninput)*numpy.exp(2j*numpy.pi*freq*time)\n", + " data = data.astype(numpy.complex64)\n", + " return time, data\n", + "\n", + "t, data = make_data(ntime, ninput)\n", + "\n", + "import pylab\n", + "fdata = numpy.fft.fft(data[:nchan], axis=0)\n", + "freq = numpy.fft.fftfreq(fdata.shape[0], d=1/19.6e6)\n", + "pylab.semilogy(freq/1e6, numpy.abs(fdata[:,ninput-1])**2,\n", + " label=str(ninput-1))\n", + "pylab.semilogy(freq/1e6, numpy.abs(fdata[:,0])**2,\n", + " label='0')\n", + "pylab.xlabel('Frequency [MHz]')\n", + "pylab.ylabel('Power')\n", + "pylab.legend(loc=0);" ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import bifrost, numpy\n", - "\n", - "ninput = 16\n", - "nchan = 256\n", - "ntime = nchan*32\n", - "\n", - "def make_data(ntime, ninput):\n", - " time = numpy.arange(ntime) / 19.6e6\n", - " data = numpy.random.randn(ntime, ninput)\n", - " data = data + 1j*numpy.random.randn(ntime, ninput)\n", - "\n", - " for freq,amp in ((-5e6,2), (3e6,3), (8e6,1)):\n", - " for i in range(ninput):\n", - " data[:,i] += amp*(1+i/ninput)*numpy.exp(2j*numpy.pi*freq*time)\n", - " data = data.astype(numpy.complex64)\n", - " return time, data\n", - "\n", - "t, data = make_data(ntime, ninput)\n", - "\n", - "import pylab\n", - "fdata = numpy.fft.fft(data[:nchan], axis=0)\n", - "freq = numpy.fft.fftfreq(fdata.shape[0], d=1/19.6e6)\n", - "pylab.semilogy(freq/1e6, numpy.abs(fdata[:,ninput-1])**2,\n", - " label=str(ninput-1))\n", - "pylab.semilogy(freq/1e6, numpy.abs(fdata[:,0])**2,\n", - " label='0')\n", - "pylab.xlabel('Frequency [MHz]')\n", - "pylab.ylabel('Power')\n", - "pylab.legend(loc=0)" - ] - }, - { - "cell_type": "markdown", - "id": "3867d3f8", - "metadata": {}, - "source": [ - "That seems to be working with a quick check of the data using `numpy.fft.fft` and we can even see the different tone amplitudes across the inputs.\n", - "\n", - "Now to translate this into Bifrost and do the integration in time:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "a6b958da", - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "" + "cell_type": "markdown", + "id": "3867d3f8", + "metadata": { + "id": "3867d3f8" + }, + "source": [ + "That seems to be working with a quick check of the data using `numpy.fft.fft` and we can even see the different tone amplitudes across the inputs.\n", + "\n", + "Now to translate this into Bifrost and do the integration in time:" ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" + "cell_type": "code", + "execution_count": 4, + "id": "a6b958da", + "metadata": { + "id": "a6b958da", + "outputId": "1bdae1d9-4fac-4fa9-8272-b0224faaec38", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + } + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "data = bifrost.ndarray(data, space='cuda')\n", + "data = data.reshape(-1,nchan,ninput)\n", + "fdata = bifrost.ndarray(shape=data.shape, dtype=data.dtype, space='cuda')\n", + "\n", + "fft = bifrost.fft.Fft()\n", + "fft.init(data, fdata, axes=1, apply_fftshift=True)\n", + "fft.execute(data, fdata)\n", + "\n", + "spectra = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", + " space='cuda')\n", + "bifrost.reduce(fdata, spectra, 'pwrmean')\n", + "\n", + "spectra = spectra.copy(space='system')\n", + "spectra = spectra[0,:,:]\n", + "bf_freq = numpy.fft.fftshift(freq)\n", + "pylab.semilogy(bf_freq/1e6, spectra[:,ninput-1],\n", + " label=str(ninput-1))\n", + "pylab.semilogy(bf_freq/1e6, spectra[:,0],\n", + " label='0')\n", + "pylab.xlabel('Frequency [MHz]')\n", + "pylab.ylabel('Power')\n", + "pylab.legend(loc=0);" ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "data = bifrost.ndarray(data, space='cuda')\n", - "data = data.reshape(-1,nchan,ninput)\n", - "fdata = bifrost.ndarray(shape=data.shape, dtype=data.dtype, space='cuda')\n", - "\n", - "fft = bifrost.fft.Fft()\n", - "fft.init(data, fdata, axes=1, apply_fftshift=True)\n", - "fft.execute(data, fdata)\n", - "\n", - "spectra = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", - " space='cuda')\n", - "bifrost.reduce(fdata, spectra, 'pwrmean')\n", - "\n", - "spectra = spectra.copy(space='system')\n", - "spectra = spectra[0,:,:]\n", - "bf_freq = numpy.fft.fftshift(freq)\n", - "pylab.semilogy(bf_freq/1e6, spectra[:,ninput-1],\n", - " label=str(ninput-1))\n", - "pylab.semilogy(bf_freq/1e6, spectra[:,0],\n", - " label='0')\n", - "pylab.xlabel('Frequency [MHz]')\n", - "pylab.ylabel('Power')\n", - "pylab.legend(loc=0)" - ] - }, - { - "cell_type": "markdown", - "id": "f9a5fe2f", - "metadata": {}, - "source": [ - "This works for a single batch of data, what we call a \"gulp\" in Bifrost. How do we extend this for working on a continuous stream of data? We can first start by wrapping everything in a `for` loop as a stand-in for continuous data:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "366ab2a4", - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "" + "cell_type": "markdown", + "id": "f9a5fe2f", + "metadata": { + "id": "f9a5fe2f" + }, + "source": [ + "This works for a single batch of data, what we call a \"gulp\" in Bifrost. How do we extend this for working on a continuous stream of data? We can first start by wrapping everything in a `for` loop as a stand-in for continuous data:" ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" + "cell_type": "code", + "execution_count": 6, + "id": "366ab2a4", + "metadata": { + "id": "366ab2a4", + "outputId": "3b43ad50-bf56-4e42-e7c9-67b8b0a76874", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + } + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "for gulp in range(5):\n", + " t, data_noise = make_data(ntime, ninput)\n", + " \n", + " data_gpu = bifrost.ndarray(data_noise, space='cuda')\n", + " data_gpu = data_gpu.reshape(-1,nchan,ninput)\n", + " fdata = bifrost.ndarray(shape=data_gpu.shape, dtype=data_gpu.dtype,\n", + " space='cuda')\n", + " \n", + " fft = bifrost.fft.Fft()\n", + " fft.init(data_gpu, fdata, axes=1, apply_fftshift=True)\n", + " fft.execute(data_gpu, fdata)\n", + " \n", + " spectra = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", + " space='cuda')\n", + " bifrost.reduce(fdata, spectra, 'pwrmean')\n", + "\n", + " spectra = spectra.copy(space='system')\n", + " spectra = spectra[0,:,:]\n", + " freq = numpy.fft.fftfreq(nchan, d=1/19.6e6)\n", + " bf_freq = numpy.fft.fftshift(freq)\n", + " pylab.semilogy(bf_freq/1e6, spectra[:,ninput-1],\n", + " label=f\"{ninput-1}@{gulp}\")\n", + " pylab.semilogy(bf_freq/1e6, spectra[:,0],\n", + " label=f\"0@{gulp}\")\n", + "pylab.xlabel('Frequency [MHz]')\n", + "pylab.ylabel('Power')\n", + "pylab.legend(loc=0);" ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "for gulp in range(5):\n", - " t, data_noise = make_data(ntime, ninput)\n", - " \n", - " data_gpu = bifrost.ndarray(data_noise, space='cuda')\n", - " data_gpu = data_gpu.reshape(-1,nchan,ninput)\n", - " fdata = bifrost.ndarray(shape=data_gpu.shape, dtype=data_gpu.dtype,\n", - " space='cuda')\n", - " \n", - " fft = bifrost.fft.Fft()\n", - " fft.init(data_gpu, fdata, axes=1, apply_fftshift=True)\n", - " fft.execute(data_gpu, fdata)\n", - " \n", - " spectra = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", - " space='cuda')\n", - " bifrost.reduce(fdata, spectra, 'pwrmean')\n", - "\n", - " spectra = spectra.copy(space='system')\n", - " spectra = spectra[0,:,:]\n", - " freq = numpy.fft.fftfreq(nchan, d=1/19.6e6)\n", - " bf_freq = numpy.fft.fftshift(freq)\n", - " pylab.semilogy(bf_freq/1e6, spectra[:,ninput-1],\n", - " label=f\"{ninput-1}@{gulp}\")\n", - " pylab.semilogy(bf_freq/1e6, spectra[:,0],\n", - " label=f\"0@{gulp}\")\n", - "pylab.xlabel('Frequency [MHz]')\n", - "pylab.ylabel('Power')\n", - "pylab.legend(loc=0)" - ] - }, - { - "cell_type": "markdown", - "id": "e258984c", - "metadata": {}, - "source": [ - "That works but it is not very efficient. For every gulp we are creating new arrays on both the CPU and GPU memories and creating new `bifrost.fft` instances. One way to deal with this is to pre-initialize the data arrays and the FFT function, and then use `bifrost.ndarray.copy_array` to copy data:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "cf2f6ec8", - "metadata": {}, - "outputs": [ + }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" + "cell_type": "markdown", + "id": "e258984c", + "metadata": { + "id": "e258984c" + }, + "source": [ + "That works but it is not very efficient. For every gulp we are creating new arrays on both the CPU and GPU memories and creating new `bifrost.fft` instances. One way to deal with this is to pre-initialize the data arrays and the FFT function, and then use `bifrost.ndarray.copy_array` to copy data:" ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "from bifrost.ndarray import copy_array\n", - "\n", - "data_gpu = bifrost.ndarray(shape=(ntime//nchan, nchan, ninput),\n", - " dtype=numpy.complex64,\n", - " space='cuda')\n", - "fdata = bifrost.ndarray(shape=data_gpu.shape, dtype=data_gpu.dtype,\n", - " space='cuda')\n", - "spectra_gpu = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", - " space='cuda')\n", - "spectra_cpu = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", - " space='system')\n", - "\n", - "fft = bifrost.fft.Fft()\n", - "fft.init(data_gpu, fdata, axes=1, apply_fftshift=True)\n", - "\n", - "for gulp in range(5):\n", - " t, data_noise = make_data(ntime, ninput)\n", - " data_noise = bifrost.ndarray(data_noise, space='system')\n", - " \n", - " data_gpu = data_gpu.reshape(ntime,ninput)\n", - " copy_array(data_gpu, data_noise)\n", - " data_gpu = data_gpu.reshape(-1,nchan,ninput)\n", - " \n", - " fft.execute(data_gpu, fdata)\n", - " \n", - " bifrost.reduce(fdata, spectra_gpu, 'pwrmean')\n", - "\n", - " copy_array(spectra_cpu, spectra_gpu)\n", - " \n", - " freq = numpy.fft.fftfreq(nchan, d=1/19.6e6)\n", - " bf_freq = numpy.fft.fftshift(freq)\n", - " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,ninput-1],\n", - " label=f\"{ninput-1}@{gulp}\")\n", - " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,0],\n", - " label=f\"0@{gulp}\")\n", - "pylab.xlabel('Frequency [MHz]')\n", - "pylab.ylabel('Power')\n", - "pylab.legend(loc=0)\n", - "\n", - "del data_gpu\n", - "del fdata\n", - "del spectra_gpu\n", - "del spectra_cpu\n", - "del fft" - ] - }, - { - "cell_type": "markdown", - "id": "04c8036a", - "metadata": {}, - "source": [ - "This works well if you have a fixed channelization or integration time. For pipelines where those parameters could change an alternative to pre-initilization is to wrap the data copies and FFT initialization in `try...except NameError` blocks:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "299a81ed", - "metadata": {}, - "outputs": [ + }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" + "cell_type": "code", + "execution_count": 7, + "id": "cf2f6ec8", + "metadata": { + "id": "cf2f6ec8", + "outputId": "caab2b3b-0833-4bc4-a468-1e7d8fb0d59e", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + } + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "from bifrost.ndarray import copy_array\n", + "\n", + "data_gpu = bifrost.ndarray(shape=(ntime//nchan, nchan, ninput),\n", + " dtype=numpy.complex64,\n", + " space='cuda')\n", + "fdata = bifrost.ndarray(shape=data_gpu.shape, dtype=data_gpu.dtype,\n", + " space='cuda')\n", + "spectra_gpu = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", + " space='cuda')\n", + "spectra_cpu = bifrost.ndarray(shape=(1,nchan,ninput), dtype=numpy.float32,\n", + " space='system')\n", + "\n", + "fft = bifrost.fft.Fft()\n", + "fft.init(data_gpu, fdata, axes=1, apply_fftshift=True)\n", + "\n", + "for gulp in range(5):\n", + " t, data_noise = make_data(ntime, ninput)\n", + " data_noise = bifrost.ndarray(data_noise, space='system')\n", + " \n", + " data_gpu = data_gpu.reshape(ntime,ninput)\n", + " copy_array(data_gpu, data_noise)\n", + " data_gpu = data_gpu.reshape(-1,nchan,ninput)\n", + " \n", + " fft.execute(data_gpu, fdata)\n", + " \n", + " bifrost.reduce(fdata, spectra_gpu, 'pwrmean')\n", + "\n", + " copy_array(spectra_cpu, spectra_gpu)\n", + " \n", + " freq = numpy.fft.fftfreq(nchan, d=1/19.6e6)\n", + " bf_freq = numpy.fft.fftshift(freq)\n", + " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,ninput-1],\n", + " label=f\"{ninput-1}@{gulp}\")\n", + " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,0],\n", + " label=f\"0@{gulp}\")\n", + "pylab.xlabel('Frequency [MHz]')\n", + "pylab.ylabel('Power')\n", + "pylab.legend(loc=0)\n", + "\n", + "del data_gpu\n", + "del fdata\n", + "del spectra_gpu\n", + "del spectra_cpu\n", + "del fft" + ] + }, + { + "cell_type": "markdown", + "id": "04c8036a", + "metadata": { + "id": "04c8036a" + }, + "source": [ + "This works well if you have a fixed channelization or integration time. For pipelines where those parameters could change an alternative to pre-initilization is to wrap the data copies and FFT initialization in `try...except NameError` blocks:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "299a81ed", + "metadata": { + "id": "299a81ed", + "outputId": "18cb8c81-ac93-4055-aae4-bee6bb2a9d60", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + } + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "from bifrost.ndarray import copy_array\n", + "\n", + "for gulp in range(5):\n", + " t, data_noise = make_data(ntime, ninput)\n", + " data_noise = bifrost.ndarray(data_noise, space='system')\n", + " \n", + " try:\n", + " data_gpu = data_gpu.reshape(*data_noise.shape)\n", + " copy_array(data_gpu, data_noise)\n", + " except NameError:\n", + " data_gpu = data_noise.copy(space='cuda')\n", + " data_gpu = data_gpu.reshape(-1,nchan,ninput)\n", + " \n", + " try:\n", + " fft.execute(data_gpu, fdata)\n", + " except NameError:\n", + " fdata = bifrost.ndarray(shape=data_gpu.shape,\n", + " dtype=data_gpu.dtype,\n", + " space='cuda')\n", + " \n", + " fft = bifrost.fft.Fft()\n", + " fft.init(data_gpu, fdata, axes=1, apply_fftshift=True)\n", + " fft.execute(data_gpu, fdata)\n", + " \n", + " try:\n", + " bifrost.reduce(fdata, spectra_gpu, 'pwrmean')\n", + " except NameError:\n", + " spectra_gpu = bifrost.ndarray(shape=(1,nchan,ninput),\n", + " dtype=numpy.float32,\n", + " space='cuda')\n", + " \n", + " bifrost.reduce(fdata, spectra_gpu, 'pwrmean')\n", + " \n", + " try:\n", + " copy_array(spectra_cpu, spectra_gpu)\n", + " except NameError:\n", + " spectra_cpu = spectra_gpu.copy(space='system')\n", + " \n", + " freq = numpy.fft.fftfreq(nchan, d=1/19.6e6)\n", + " bf_freq = numpy.fft.fftshift(freq)\n", + " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,ninput-1],\n", + " label=f\"{ninput-1}@{gulp}\")\n", + " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,0],\n", + " label=f\"0@{gulp}\")\n", + "pylab.xlabel('Frequency [MHz]')\n", + "pylab.ylabel('Power')\n", + "pylab.legend(loc=0)\n", + "\n", + "del fft\n", + "del data_gpu\n", + "del fdata\n", + "del spectra_gpu\n", + "del spectra_cpu" + ] + }, + { + "cell_type": "markdown", + "id": "d76f47db", + "metadata": { + "id": "d76f47db" + }, + "source": [ + "This structure allows you to initialize each array on the GPU only once and then reuse it as needed. The only catch is that you need to cleanup after you are done processing gulps. Otherwise, you can run into dimension mis-matches if the channel count or integration time changes.\n", + "\n", + "These two examples are what are called \"blocks\" in Bifrost terminology and represent \"atomic units\" of data processing. In the next section we will look at how Bifrost joins blocks together to build a pipeline." ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" } - ], - "source": [ - "from bifrost.ndarray import copy_array\n", - "\n", - "for gulp in range(5):\n", - " t, data_noise = make_data(ntime, ninput)\n", - " data_noise = bifrost.ndarray(data_noise, space='system')\n", - " \n", - " try:\n", - " data_gpu = data_gpu.reshape(*data_noise.shape)\n", - " copy_array(data_gpu, data_noise)\n", - " except NameError:\n", - " data_gpu = data_noise.copy(space='cuda')\n", - " data_gpu = data_gpu.reshape(-1,nchan,ninput)\n", - " \n", - " try:\n", - " fft.execute(data_gpu, fdata)\n", - " except NameError:\n", - " fdata = bifrost.ndarray(shape=data_gpu.shape,\n", - " dtype=data_gpu.dtype,\n", - " space='cuda')\n", - " \n", - " fft = bifrost.fft.Fft()\n", - " fft.init(data_gpu, fdata, axes=1, apply_fftshift=True)\n", - " fft.execute(data_gpu, fdata)\n", - " \n", - " try:\n", - " bifrost.reduce(fdata, spectra_gpu, 'pwrmean')\n", - " except NameError:\n", - " spectra_gpu = bifrost.ndarray(shape=(1,nchan,ninput),\n", - " dtype=numpy.float32,\n", - " space='cuda')\n", - " \n", - " bifrost.reduce(fdata, spectra_gpu, 'pwrmean')\n", - " \n", - " try:\n", - " copy_array(spectra_cpu, spectra_gpu)\n", - " except NameError:\n", - " spectra_cpu = spectra_gpu.copy(space='system')\n", - " \n", - " freq = numpy.fft.fftfreq(nchan, d=1/19.6e6)\n", - " bf_freq = numpy.fft.fftshift(freq)\n", - " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,ninput-1],\n", - " label=f\"{ninput-1}@{gulp}\")\n", - " pylab.semilogy(bf_freq/1e6, spectra_cpu[0,:,0],\n", - " label=f\"0@{gulp}\")\n", - "pylab.xlabel('Frequency [MHz]')\n", - "pylab.ylabel('Power')\n", - "pylab.legend(loc=0)\n", - "\n", - "del fft\n", - "del data_gpu\n", - "del fdata\n", - "del spectra_gpu\n", - "del spectra_cpu" - ] - }, - { - "cell_type": "markdown", - "id": "d76f47db", - "metadata": {}, - "source": [ - "This structure allows you to initialize each array on the GPU only once and then reuse it as needed. The only catch is that you need to cleanup after you are done processing gulps. Otherwise, you can run into dimension mis-matches if the channel count or integration time changes.\n", - "\n", - "These two examples are what are called \"blocks\" in Bifrost terminology and represent \"atomic units\" of data processing. In the next section we will look at how Bifrost joins blocks together to build a pipeline." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + }, + "colab": { + "name": "02_building_complexity.ipynb", + "provenance": [] + }, + "accelerator": "GPU", + "gpuClass": "standard" }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file From 2004a9290032ee6fd392ef248120258881edf7fa Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 27 Jun 2022 14:31:31 -0400 Subject: [PATCH 0695/1155] Colabify 03, fix a few typos. --- tutorial/03_putting_it_together.ipynb | 557 ++++++++++++++------------ 1 file changed, 311 insertions(+), 246 deletions(-) diff --git a/tutorial/03_putting_it_together.ipynb b/tutorial/03_putting_it_together.ipynb index 7f7f01af5..cb51882ec 100644 --- a/tutorial/03_putting_it_together.ipynb +++ b/tutorial/03_putting_it_together.ipynb @@ -1,254 +1,319 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "fcdf1912", - "metadata": {}, - "source": [ - "# Putting it Together\n", - "\n", - "In the previous section we introduced blocks, the fundamental building blocks of a pipeline in Bifrost. Now we will talk about how blocks are connected together and some of the considerations.\n", - "\n", - "In Bifrost blocks are connected together by circular memory buffers called \"rings\". Like a `bifrost.ndarray`, a ring exists in a memoy space: `system`, `cuda_host`, or `cuda`. A ring also has a size that is based on a integer number of segments of the gulp size for the ring. \n", - "\n", - "To create a ring in Bifrost:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "e8f5bda6", - "metadata": {}, - "outputs": [ + "cells": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "name: b'a_ring' , space: system\n" - ] - } - ], - "source": [ - "import bifrost\n", - "\n", - "ring = bifrost.ring.Ring(name=\"a_ring\", space=\"system\")\n", - "print('name:', ring.name, ', space:', ring.space)" - ] - }, - { - "cell_type": "markdown", - "id": "bac3cc61", - "metadata": {}, - "source": [ - "This creates a new ring, called `\"a_ring\"`, in the system memory space. Although the ring has been created it does not yet have any memory allocated to it. To allocate memory you `resize` it:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "705c4df0", - "metadata": {}, - "outputs": [], - "source": [ - "ring.resize(4096)" - ] - }, - { - "cell_type": "markdown", - "id": "de11b932", - "metadata": {}, - "source": [ - "This sets the gulp size for the ring to 4096 bytes and this call sets the total ring size to four, 4096 byte buffer. You can change the buffer fraction by adding in a second argument which is the total ring size. For example, to increase the buffer size to five segments:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "26c0d06f", - "metadata": {}, - "outputs": [], - "source": [ - "ring.resize(4096, 5*4096)" - ] - }, - { - "cell_type": "markdown", - "id": "9c8c0212", - "metadata": {}, - "source": [ - "Resizing a ring is a data-safe process and the contents of the ring are preserved.\n", - "\n", - "Rings in Bifrost are more than just a section of memory, though. It has a few other attributes that make it useful for representing a stream of data:\n", - "\n", - " * a timetag that denotes when the stream of data starts\n", - " * a header that stores metadata about the sequence\n", - " * they support single writer/multi-reader access for branching pipelines\n", - "\n", - "Let's use an example to look at these first two. In this we will write some data to the ring:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "f74b9145", - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "id": "fcdf1912", + "metadata": { + "id": "fcdf1912" + }, + "source": [ + "# Putting it Together\n", + "\n", + "In the previous section we introduced blocks, the fundamental building blocks of a pipeline in Bifrost. Now we will demonstrate how blocks are connected together and some of the considerations.\n", + "\n", + "\"Open" + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 @ [[ 38 117 68 ... 75 66 96]]\n", - "1 @ [[ 78 28 37 ... 70 121 75]]\n", - "2 @ [[ 88 41 106 ... 90 69 103]]\n", - "3 @ [[ 98 18 64 ... 34 65 101]]\n", - "4 @ [[ 90 115 10 ... 41 94 118]]\n", - "5 @ [[ 16 3 119 ... 28 88 31]]\n", - "6 @ [[ 32 78 32 ... 126 17 64]]\n", - "7 @ [[ 13 7 6 ... 109 103 116]]\n", - "8 @ [[ 50 12 67 ... 126 123 8]]\n", - "9 @ [[ 79 8 118 ... 114 97 95]]\n", - "10 @ [[87 28 74 ... 2 74 63]]\n", - "11 @ [[ 1 94 123 ... 41 14 112]]\n", - "12 @ [[ 0 45 96 ... 51 102 49]]\n", - "13 @ [[54 88 56 ... 74 20 30]]\n", - "14 @ [[ 23 98 101 ... 126 51 21]]\n", - "15 @ [[ 49 1 101 ... 100 40 36]]\n", - "16 @ [[97 25 50 ... 90 83 38]]\n", - "17 @ [[ 90 105 85 ... 66 81 19]]\n", - "18 @ [[ 5 80 81 ... 11 16 111]]\n", - "19 @ [[ 65 125 4 ... 25 97 11]]\n" - ] - } - ], - "source": [ - "import json, numpy, time\n", - "\n", - "ring = bifrost.ring.Ring(name=\"another_ring\", space=\"system\")\n", - "\n", - "with ring.begin_writing() as output_ring:\n", - " time_tag = int(time.time()*1e9)\n", - " hdr = {'time_tag': time_tag,\n", - " 'metadata': 'here',\n", - " 'more_metadata': 'there'}\n", - " hdr_str = json.dumps(hdr)\n", - " \n", - " gulp_size = 4096\n", - " ring.resize(gulp_size, 5*gulp_size)\n", - " \n", - " with output_ring.begin_sequence(time_tag=hdr['time_tag'],\n", - " header=hdr_str) as output_seq:\n", - " for i in range(20):\n", - " with output_seq.reserve(gulp_size) as output_span:\n", - " data = output_span.data_view(numpy.int8)\n", - " data[...] = (numpy.random.rand(gulp_size)\\\n", - " *127).astype(numpy.int8)\n", - " print(i, '@', data[:5])" - ] - }, - { - "cell_type": "markdown", - "id": "21f9db4d", - "metadata": {}, - "source": [ - "Here we:\n", - "\n", - " 1. Ready the ring for writing with `ring.begin_writing()`.\n", - " 2. Once the ring is ready for writing, we define the time tag for the first sample and a dictionary of metadata. The time tag is expected to be an integer and the dictionary is dumped to a JSON object.\n", - " 3. Start a \"sequence\" on the ring using that time tag and JSON object. \n", - " * In Bifrost a sequence is a stream of data with a single observational setup.\n", - " 4. Loop over spans, also called gulps, in the output sequence and writes data to the ring.\n", - " * Writing uses a `data_view` of the span/gulp that exposes it as a `bifrost.ndarray`.\n", - "\n", - "Reading from a ring follows a similar sequence:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "223c1f23", - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "%%capture install_log\n", + "# Import bifrost, but attempt to auto-install if needed (and we're running on\n", + "# Colab). If something goes wrong, evaluate install_log.show() in a new block\n", + "# to retrieve the details.\n", + "try:\n", + " import bifrost\n", + "except ModuleNotFoundError:\n", + " try:\n", + " import google.colab\n", + " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", + " import bifrost\n", + " except ModuleNotFoundError:\n", + " print(\"Sorry, could not import bifrost and we're not on colab.\")" + ], + "metadata": { + "id": "peQUakK6aJPV" + }, + "id": "peQUakK6aJPV", + "execution_count": 1, + "outputs": [] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "1619206567011656448\n", - "{'time_tag': 1619206567011656448, 'metadata': 'here', 'more_metadata': 'there'}\n", - "12 @ [[ 0 45 96 ... 51 102 49]]\n", - "13 @ [[54 88 56 ... 74 20 30]]\n", - "14 @ [[ 23 98 101 ... 126 51 21]]\n", - "15 @ [[ 49 1 101 ... 100 40 36]]\n", - "16 @ [[97 25 50 ... 90 83 38]]\n", - "17 @ [[ 90 105 85 ... 66 81 19]]\n", - "18 @ [[ 5 80 81 ... 11 16 111]]\n", - "19 @ [[ 65 125 4 ... 25 97 11]]\n" - ] + "cell_type": "markdown", + "source": [ + "In Bifrost blocks are connected together by circular memory buffers called \"rings\". Like a `bifrost.ndarray`, a ring exists in a memory space: `system`, `cuda_host`, or `cuda`. A ring also has a size that is based on a integer number of segments of the gulp size for the ring.\n", + "\n", + "To create a ring in Bifrost:" + ], + "metadata": { + "id": "wTG9NYJcaFdo" + }, + "id": "wTG9NYJcaFdo" }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:9: DeprecationWarning: generator 'ReadSequence.read' raised StopIteration\n", - " if __name__ == '__main__':\n", - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:1: DeprecationWarning: generator 'Ring.read' raised StopIteration\n", - " \"\"\"Entry point for launching an IPython kernel.\n" - ] + "cell_type": "code", + "execution_count": 2, + "id": "e8f5bda6", + "metadata": { + "id": "e8f5bda6", + "outputId": "e3efb2d4-75ec-410e-af51-92d53b26ea58", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "name: b'a_ring' , space: system\n" + ] + } + ], + "source": [ + "ring = bifrost.ring.Ring(name=\"a_ring\", space=\"system\")\n", + "print('name:', ring.name, ', space:', ring.space)" + ] + }, + { + "cell_type": "markdown", + "id": "bac3cc61", + "metadata": { + "id": "bac3cc61" + }, + "source": [ + "This creates a new ring, called `\"a_ring\"`, in the system memory space. Although the ring has been created it does not yet have any memory allocated to it. To allocate memory you `resize` it:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "705c4df0", + "metadata": { + "id": "705c4df0" + }, + "outputs": [], + "source": [ + "ring.resize(4096)" + ] + }, + { + "cell_type": "markdown", + "id": "de11b932", + "metadata": { + "id": "de11b932" + }, + "source": [ + "This sets the gulp size for the ring to 4096 bytes and this call sets the total ring size to four, 4096 byte buffer. You can change the buffer fraction by adding in a second argument which is the total ring size. For example, to increase the buffer size to five segments:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "26c0d06f", + "metadata": { + "id": "26c0d06f" + }, + "outputs": [], + "source": [ + "ring.resize(4096, 5*4096)" + ] + }, + { + "cell_type": "markdown", + "id": "9c8c0212", + "metadata": { + "id": "9c8c0212" + }, + "source": [ + "Resizing a ring is a data-safe process and the contents of the ring are preserved.\n", + "\n", + "Rings in Bifrost are more than just a section of memory, though. It has a few other attributes that make it useful for representing a stream of data:\n", + "\n", + " * a timetag that denotes when the stream of data starts\n", + " * a header that stores metadata about the sequence\n", + " * they support single writer/multi-reader access for branching pipelines\n", + "\n", + "Let's use an example to look at these first two. In this we will write some data to the ring:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f74b9145", + "metadata": { + "id": "f74b9145", + "outputId": "bbb06dcf-b257-4840-a629-d4ed3b56288e", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "0 @ [[120 29 45 ... 68 113 43]]\n", + "1 @ [[ 41 69 98 ... 65 62 112]]\n", + "2 @ [[ 16 77 117 ... 20 56 38]]\n", + "3 @ [[ 74 63 107 ... 82 101 122]]\n", + "4 @ [[ 30 76 106 ... 93 97 78]]\n", + "5 @ [[ 33 119 119 ... 67 12 32]]\n", + "6 @ [[106 101 24 ... 89 104 62]]\n", + "7 @ [[26 6 1 ... 75 32 17]]\n", + "8 @ [[101 66 103 ... 116 34 112]]\n", + "9 @ [[ 14 31 70 ... 23 109 119]]\n", + "10 @ [[101 119 26 ... 3 74 43]]\n", + "11 @ [[ 76 109 16 ... 31 46 66]]\n", + "12 @ [[ 10 42 90 ... 99 38 126]]\n", + "13 @ [[ 42 86 40 ... 109 57 96]]\n", + "14 @ [[ 13 61 5 ... 13 2 113]]\n", + "15 @ [[ 86 82 79 ... 98 119 17]]\n", + "16 @ [[ 12 66 117 ... 16 75 20]]\n", + "17 @ [[ 68 50 3 ... 114 22 95]]\n", + "18 @ [[ 58 98 60 ... 73 108 86]]\n", + "19 @ [[ 6 56 76 ... 115 107 44]]\n" + ] + } + ], + "source": [ + "import json, numpy, time\n", + "\n", + "ring = bifrost.ring.Ring(name=\"another_ring\", space=\"system\")\n", + "\n", + "with ring.begin_writing() as output_ring:\n", + " time_tag = int(time.time()*1e9)\n", + " hdr = {'time_tag': time_tag,\n", + " 'metadata': 'here',\n", + " 'more_metadata': 'there'}\n", + " hdr_str = json.dumps(hdr)\n", + " \n", + " gulp_size = 4096\n", + " ring.resize(gulp_size, 5*gulp_size)\n", + " \n", + " with output_ring.begin_sequence(time_tag=hdr['time_tag'],\n", + " header=hdr_str) as output_seq:\n", + " for i in range(20):\n", + " with output_seq.reserve(gulp_size) as output_span:\n", + " data = output_span.data_view(numpy.int8)\n", + " data[...] = (numpy.random.rand(gulp_size)\\\n", + " *127).astype(numpy.int8)\n", + " print(i, '@', data[:5])" + ] + }, + { + "cell_type": "markdown", + "id": "21f9db4d", + "metadata": { + "id": "21f9db4d" + }, + "source": [ + "Here we:\n", + "\n", + " 1. Ready the ring for writing with `ring.begin_writing()`.\n", + " 2. Once the ring is ready for writing, we define the time tag for the first sample and a dictionary of metadata. The time tag is expected to be an integer and the dictionary is dumped to a JSON object.\n", + " 3. Start a \"sequence\" on the ring using that time tag and JSON object. \n", + " * In Bifrost a sequence is a stream of data with a single observational setup.\n", + " 4. Loop over spans, also called gulps, in the output sequence and writes data to the ring.\n", + " * Writing uses a `data_view` of the span/gulp that exposes it as a `bifrost.ndarray`.\n", + "\n", + "Reading from a ring follows a similar sequence:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "223c1f23", + "metadata": { + "id": "223c1f23", + "outputId": "47e90b11-3029-436f-d82c-df3295b32bc2", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "1656354526479179008\n", + "{'time_tag': 1656354526479179008, 'metadata': 'here', 'more_metadata': 'there'}\n", + "12 @ [[ 10 42 90 ... 99 38 126]]\n", + "13 @ [[ 42 86 40 ... 109 57 96]]\n", + "14 @ [[ 13 61 5 ... 13 2 113]]\n", + "15 @ [[ 86 82 79 ... 98 119 17]]\n", + "16 @ [[ 12 66 117 ... 16 75 20]]\n", + "17 @ [[ 68 50 3 ... 114 22 95]]\n", + "18 @ [[ 58 98 60 ... 73 108 86]]\n", + "19 @ [[ 6 56 76 ... 115 107 44]]\n" + ] + } + ], + "source": [ + "for input_seq in ring.read(guarantee=True):\n", + " hdr = json.loads(input_seq.header.tobytes())\n", + " print(input_seq.time_tag)\n", + " print(hdr)\n", + " \n", + " gulp_size = 4096\n", + " \n", + " i = -1\n", + " for input_span in input_seq.read(gulp_size):\n", + " i += 1\n", + " if input_span.size < gulp_size:\n", + " continue\n", + " data = input_span.data_view(numpy.int8)\n", + " print(i, '@', data[:10])" + ] + }, + { + "cell_type": "markdown", + "id": "e11cf55d", + "metadata": { + "id": "e11cf55d" + }, + "source": [ + "Here we:\n", + "\n", + " 1. Open the ring for reading with `ring.read()` and get an iterator over sequences in that ring.\n", + " * This ring was opened with `gaurantee=True` which tells Bifrost that spans that are being read from cannot be overwriten with new data until the reader releases the span.\n", + " 2. For the sequence we can access its `time_tag` and metadata header.\n", + " 3. Loop over spans/gulps within that sequence until the iterator is exhausted.\n", + " * It is possible that a span returned by `input_seq.read()` is smaller than the gulp size, particuarlly at the end of a sequence. It is a good idea to check the size of the span before trying to use it.\n", + " 4. For each span, do the processing that is required.\n", + "\n", + "In the next section we will talk about how to build a complete pipeline from these pieces. " + ] } - ], - "source": [ - "for input_seq in ring.read(guarantee=True):\n", - " hdr = json.loads(input_seq.header.tobytes())\n", - " print(input_seq.time_tag)\n", - " print(hdr)\n", - " \n", - " gulp_size = 4096\n", - " \n", - " i = -1\n", - " for input_span in input_seq.read(gulp_size):\n", - " i += 1\n", - " if input_span.size < gulp_size:\n", - " continue\n", - " data = input_span.data_view(numpy.int8)\n", - " print(i, '@', data[:10])" - ] - }, - { - "cell_type": "markdown", - "id": "e11cf55d", - "metadata": {}, - "source": [ - "Here we:\n", - "\n", - " 1. Open the ring for reading with `ring.read()` and get an iterator over sequences in that ring.\n", - " * This ring was opened with `gaurantee=True` which tells Bifrost that spans that are being read from cannot be overwriten with new data until the reader releases the span.\n", - " 2. For the sequence we can access its time_tag and metadata header.\n", - " 3. Loop over spans/gulps within that sequence until the iterator is exhausted.\n", - " * It is possible that a span returned by `input_seq.read()` is smaller than the gulp size, particuarlly at the end of a sequence. It is a good idea to check the size of the span before trying to use it.\n", - " 4. For each span, do the processing that is required.\n", - "\n", - "In the next section we will talk about how to build a complete pipeline from these pieces. " - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + }, + "colab": { + "name": "03_putting_it_together.ipynb", + "provenance": [] + }, + "accelerator": "GPU", + "gpuClass": "standard" }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file From cd10672c6ba578a860bfd367d6761b16c3492a9c Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 27 Jun 2022 15:01:30 -0400 Subject: [PATCH 0696/1155] Colabify 04; slighty change install structure; don't require CUDA for this one --- tutorial/04_pipelines.ipynb | 850 +++++++++++++++++++----------------- 1 file changed, 447 insertions(+), 403 deletions(-) diff --git a/tutorial/04_pipelines.ipynb b/tutorial/04_pipelines.ipynb index e5a5d7a7e..625106621 100644 --- a/tutorial/04_pipelines.ipynb +++ b/tutorial/04_pipelines.ipynb @@ -1,416 +1,460 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "9f6562f1", - "metadata": {}, - "source": [ - "# Building Pipelines\n", - "\n", - "We now have all of the pieces needed to build a complete pipeline in the Bifrost framework. Although it is hard to run a full multi-threaded Bifrost pipeline inside a Jupyter notebook we will look at a few examples.\n", - "\n", - "Let's start with a simple pipeline that generates random data in one block and writes it to disk in another. The generator block looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "423032b3", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import json\n", - "import time\n", - "import numpy\n", - "import threading\n", - "\n", - "import bifrost\n", - "\n", - "class GeneratorOp(object):\n", - " def __init__(self, oring, ntime_gulp=250, \n", - " shutdown_event=None, core=None):\n", - " self.oring = oring\n", - " self.ntime_gulp = ntime_gulp\n", - " if shutdown_event is None:\n", - " shutdown_event = threading.Event()\n", - " self.shutdown_event = shutdown_event\n", - " self.core = core\n", - " \n", - " def shutdown(self):\n", - " self.shutdown_event.set()\n", - " \n", - " def main(self):\n", - " with self.oring.begin_writing() as oring:\n", - " navg = 24\n", - " tint = navg / 25e3\n", - " tgulp = tint * self.ntime_gulp\n", - " nbeam = 1\n", - " chan0 = 1234\n", - " nchan = 16*184\n", - " npol = 4\n", - " \n", - " ohdr = {'time_tag': int(int(time.time())*196e6),\n", - " 'seq0': 0, \n", - " 'chan0': chan0,\n", - " 'cfreq0': chan0*25e3,\n", - " 'bw': nchan*25e3,\n", - " 'navg': navg,\n", - " 'nbeam': nbeam,\n", - " 'nchan': nchan,\n", - " 'npol': npol,\n", - " 'pols': 'XX,YY,CR,CI',\n", - " 'complex': False,\n", - " 'nbit': 32}\n", - " ohdr_str = json.dumps(ohdr)\n", - " \n", - " ogulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", - " oshape = (self.ntime_gulp,nbeam,nchan,npol)\n", - " self.oring.resize(ogulp_size)\n", - " \n", - " prev_time = time.time()\n", - " with oring.begin_sequence(time_tag=ohdr['time_tag'], header=ohdr_str) as oseq:\n", - " while not self.shutdown_event.is_set():\n", - " with oseq.reserve(ogulp_size) as ospan:\n", - " \n", - " odata = ospan.data_view(numpy.float32).reshape(oshape)\n", - " odata[...] = numpy.random.randn(*oshape)\n", - " \n", - " curr_time = time.time()\n", - " while curr_time - prev_time < tgulp:\n", - " time.sleep(0.01)\n", - " curr_time = time.time()" - ] - }, - { - "cell_type": "markdown", - "id": "518b71ec", - "metadata": {}, - "source": [ - "The `GeneratorOp` block is implemented as an object with a `main` method that is intended to be launched via `threading.Thread`. This setup is consistent with the Bifrost asychronous model where each block is asynchronous but operations on spans/gulps within a particular block are synchronous. The `__init__` method sets up the block and defines the ring that is to be used and the CPU core that the `main` method will be bound to when `main` is started. The `main` method does the heavy lifting here. Inside this method:\n", - "\n", - " 1. The output ring is prepared for writing.\n", - " 2. The parameters of the generated data (number of time samples, number of channels, etc.) and other meta data are defined and dumped to a JSON object.\n", - " 3. The output sequence is started.\n", - " 4. The innermost loops starts and puts random data into the output sequence span by span until a shutdown event breaks out of this loop. The speed of iteration through this inner loop is controlled by a call to `time.sleep` so that the data rate can be limited.\n", - "\n", - "The writer block looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "0bb566f8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "class WriterOp(object):\n", - " def __init__(self, iring, ntime_gulp=250, guarantee=True, core=None):\n", - " self.iring = iring\n", - " self.ntime_gulp = ntime_gulp\n", - " self.guarantee = guarantee\n", - " self.core = core\n", - " \n", - " def main(self):\n", - " for iseq in self.iring.read(guarantee=self.guarantee):\n", - " ihdr = json.loads(iseq.header.tostring())\n", - " \n", - " print(\"Writer: Start of new sequence:\", str(ihdr))\n", - " \n", - " time_tag = ihdr['time_tag']\n", - " navg = ihdr['navg']\n", - " nbeam = ihdr['nbeam']\n", - " chan0 = ihdr['chan0']\n", - " nchan = ihdr['nchan']\n", - " chan_bw = ihdr['bw'] / nchan\n", - " npol = ihdr['npol']\n", - " pols = ihdr['pols']\n", - " pols = pols.replace('CR', 'XY_real')\n", - " pols = pols.replace('CI', 'XY_imag')\n", - " \n", - " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", - " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", - " \n", - " prev_time = time.time()\n", - " iseq_spans = iseq.read(igulp_size)\n", - " for ispan in iseq_spans:\n", - " if ispan.size < igulp_size:\n", - " continue # Ignore final gulp\n", - " \n", - " idata = ispan.data_view(numpy.float32).reshape(ishape)\n", - " with open(f\"{time_tag}.dat\", 'wb') as fh:\n", - " fh.write(idata.tobytes())\n", - " print(' ', fh.name, '@', os.path.getsize(fh.name))\n", - " \n", - " time_tag += navg * self.ntime_gulp * (int(196e6) // int(25e3))" - ] - }, - { - "cell_type": "markdown", - "id": "e614dedf", - "metadata": {}, - "source": [ - "The `WriterOp` block is structured in the same was as `GeneratorOp` block but uses the \"input ring\" structure for accessing data.\n", - "\n", - "To run these two blocks as a pipeline you would using the following inside a `if __name__ == '__main__':` block:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "7dfa4ef3", - "metadata": {}, - "outputs": [ + "cells": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:10: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.\n", - " # Remove the CWD from sys.path while we load stuff.\n" - ] + "cell_type": "markdown", + "id": "9f6562f1", + "metadata": { + "id": "9f6562f1" + }, + "source": [ + "# Building Pipelines\n", + "\n", + "\"Open\n", + "\n", + "We now have all of the pieces needed to build a complete pipeline in the Bifrost framework. Although it is hard to run a full multi-threaded Bifrost pipeline inside a Jupyter notebook we will look at a few examples." + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Writer: Start of new sequence: {'time_tag': 317552125968000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', 'complex': False, 'nbit': 32}\n", - " 317552125968000000.dat @ 11776000\n", - " 317552126015040000.dat @ 11776000\n", - " 317552126062080000.dat @ 11776000\n", - " 317552126109120000.dat @ 11776000\n", - " 317552126156160000.dat @ 11776000\n", - " 317552126203200000.dat @ 11776000\n", - " 317552126250240000.dat @ 11776000\n", - " 317552126297280000.dat @ 11776000\n", - " 317552126344320000.dat @ 11776000\n", - " 317552126391360000.dat @ 11776000\n", - " 317552126438400000.dat @ 11776000\n", - " 317552126485440000.dat @ 11776000\n", - " 317552126532480000.dat @ 11776000\n", - " 317552126579520000.dat @ 11776000\n", - " 317552126626560000.dat @ 11776000\n", - " 317552126673600000.dat @ 11776000\n", - " 317552126720640000.dat @ 11776000\n", - " 317552126767680000.dat @ 11776000\n", - "Done\n" - ] + "cell_type": "code", + "source": [ + "%%capture install_log\n", + "# Import bifrost, but attempt to auto-install if needed (and we're running on\n", + "# Colab). If something goes wrong, evaluate install_log.show() in a new block\n", + "# to retrieve the details.\n", + "try:\n", + " import bifrost\n", + "except ModuleNotFoundError as exn:\n", + " try:\n", + " import google.colab\n", + " except ModuleNotFoundError:\n", + " raise exn\n", + " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " !(cd ~/bifrost && ./configure --disable-cuda && make -j all && sudo make install)\n", + " import bifrost" + ], + "metadata": { + "id": "DQLLqB44cSUy" + }, + "id": "DQLLqB44cSUy", + "execution_count": 1, + "outputs": [] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:30: DeprecationWarning: generator 'ReadSequence.read' raised StopIteration\n", - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:9: DeprecationWarning: generator 'Ring.read' raised StopIteration\n", - " if __name__ == '__main__':\n" - ] - } - ], - "source": [ - "write_ring = bifrost.ring.Ring(name=\"write\")\n", - "\n", - "ops = []\n", - "ops.append(GeneratorOp(write_ring, ntime_gulp=250, core=0))\n", - "ops.append(WriterOp(write_ring, ntime_gulp=250, core=1))\n", - "\n", - "threads = [threading.Thread(target=op.main) for op in ops]\n", - "for thread in threads:\n", - " thread.start()\n", - " \n", - "# Don't run forever\n", - "time.sleep(3)\n", - "ops[0].shutdown()\n", - "\n", - "for thread in threads:\n", - " thread.join()\n", - "print(\"Done\")" - ] - }, - { - "cell_type": "markdown", - "id": "abc15540", - "metadata": {}, - "source": [ - "This creates the ring that connects the two blocks, creates the `threading.Thread` instances that run each block, and starts the blocks.\n", - "\n", - "If you wanted to insert a third block between `GeneratorOp` and `WriterOp` it might look like:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "6519c569", - "metadata": {}, - "outputs": [], - "source": [ - "class CopyOp(object):\n", - " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", - " self.iring = iring\n", - " self.oring = oring\n", - " self.ntime_gulp = ntime_gulp\n", - " self.guarantee = guarantee\n", - " self.core = core\n", - " \n", - " def main(self):\n", - " with self.oring.begin_writing() as oring:\n", - " for iseq in self.iring.read(guarantee=self.guarantee):\n", - " ihdr = json.loads(iseq.header.tostring())\n", - " \n", - " print(\"Copy: Start of new sequence:\", str(ihdr))\n", - " \n", - " time_tag = ihdr['time_tag']\n", - " navg = ihdr['navg']\n", - " nbeam = ihdr['nbeam']\n", - " chan0 = ihdr['chan0']\n", - " nchan = ihdr['nchan']\n", - " chan_bw = ihdr['bw'] / nchan\n", - " npol = ihdr['npol']\n", - " pols = ihdr['pols']\n", - " pols = pols.replace('CR', 'XY_real')\n", - " pols = pols.replace('CI', 'XY_imag')\n", - "\n", - " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", - " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", - " self.iring.resize(igulp_size, igulp_size*5)\n", - " \n", - " ogulp_size = igulp_size\n", - " oshape = ishape\n", - " self.oring.resize(ogulp_size)\n", - " \n", - " ohdr = ihdr.copy()\n", - " ohdr_str = json.dumps(ohdr)\n", - " \n", - " iseq_spans = iseq.read(igulp_size)\n", - " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", - " for ispan in iseq_spans:\n", - " if ispan.size < igulp_size:\n", - " continue # Ignore final gulp\n", - " \n", - " with oseq.reserve(ogulp_size) as ospan:\n", - " idata = ispan.data_view(numpy.float32)\n", - " odata = ospan.data_view(numpy.float32) \n", - " odata[...] = idata" - ] - }, - { - "cell_type": "markdown", - "id": "8fc149b7", - "metadata": {}, - "source": [ - "This `CopyOp` block combines the characteristics of reading and writing from rings to copy data from one ring to the other." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "094130bc", - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "source": [ + "Let's start with a simple pipeline that generates random data in one block and writes it to disk in another. The generator block looks like:" + ], + "metadata": { + "id": "vzyE5ZgOcBwE" + }, + "id": "vzyE5ZgOcBwE" + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "423032b3", + "metadata": { + "id": "423032b3" + }, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "import time\n", + "import numpy\n", + "import threading\n", + "\n", + "class GeneratorOp(object):\n", + " def __init__(self, oring, ntime_gulp=250, \n", + " shutdown_event=None, core=None):\n", + " self.oring = oring\n", + " self.ntime_gulp = ntime_gulp\n", + " if shutdown_event is None:\n", + " shutdown_event = threading.Event()\n", + " self.shutdown_event = shutdown_event\n", + " self.core = core\n", + " \n", + " def shutdown(self):\n", + " self.shutdown_event.set()\n", + " \n", + " def main(self):\n", + " with self.oring.begin_writing() as oring:\n", + " navg = 24\n", + " tint = navg / 25e3\n", + " tgulp = tint * self.ntime_gulp\n", + " nbeam = 1\n", + " chan0 = 1234\n", + " nchan = 16*184\n", + " npol = 4\n", + " \n", + " ohdr = {'time_tag': int(int(time.time())*196e6),\n", + " 'seq0': 0, \n", + " 'chan0': chan0,\n", + " 'cfreq0': chan0*25e3,\n", + " 'bw': nchan*25e3,\n", + " 'navg': navg,\n", + " 'nbeam': nbeam,\n", + " 'nchan': nchan,\n", + " 'npol': npol,\n", + " 'pols': 'XX,YY,CR,CI',\n", + " 'complex': False,\n", + " 'nbit': 32}\n", + " ohdr_str = json.dumps(ohdr)\n", + " \n", + " ogulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " oshape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " self.oring.resize(ogulp_size)\n", + " \n", + " prev_time = time.time()\n", + " with oring.begin_sequence(time_tag=ohdr['time_tag'], header=ohdr_str) as oseq:\n", + " while not self.shutdown_event.is_set():\n", + " with oseq.reserve(ogulp_size) as ospan:\n", + " \n", + " odata = ospan.data_view(numpy.float32).reshape(oshape)\n", + " odata[...] = numpy.random.randn(*oshape)\n", + " \n", + " curr_time = time.time()\n", + " while curr_time - prev_time < tgulp:\n", + " time.sleep(0.01)\n", + " curr_time = time.time()" + ] + }, + { + "cell_type": "markdown", + "id": "518b71ec", + "metadata": { + "id": "518b71ec" + }, + "source": [ + "The `GeneratorOp` block is implemented as an object with a `main` method that is intended to be launched via `threading.Thread`. This setup is consistent with the Bifrost asychronous model where each block is asynchronous but operations on spans/gulps within a particular block are synchronous. The `__init__` method sets up the block and defines the ring that is to be used and the CPU core that the `main` method will be bound to when `main` is started. The `main` method does the heavy lifting here. Inside this method:\n", + "\n", + " 1. The output ring is prepared for writing.\n", + " 2. The parameters of the generated data (number of time samples, number of channels, etc.) and other meta data are defined and dumped to a JSON object.\n", + " 3. The output sequence is started.\n", + " 4. The innermost loops starts and puts random data into the output sequence span by span until a shutdown event breaks out of this loop. The speed of iteration through this inner loop is controlled by a call to `time.sleep` so that the data rate can be limited.\n", + "\n", + "The writer block looks like:" + ] + }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:12: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.\n", - " if sys.path[0] == '':\n", - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:10: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.\n", - " # Remove the CWD from sys.path while we load stuff.\n" - ] + "cell_type": "code", + "execution_count": 4, + "id": "0bb566f8", + "metadata": { + "id": "0bb566f8" + }, + "outputs": [], + "source": [ + "class WriterOp(object):\n", + " def __init__(self, iring, ntime_gulp=250, guarantee=True, core=None):\n", + " self.iring = iring\n", + " self.ntime_gulp = ntime_gulp\n", + " self.guarantee = guarantee\n", + " self.core = core\n", + " \n", + " def main(self):\n", + " for iseq in self.iring.read(guarantee=self.guarantee):\n", + " ihdr = json.loads(iseq.header.tostring())\n", + " \n", + " print(\"Writer: Start of new sequence:\", str(ihdr))\n", + " \n", + " time_tag = ihdr['time_tag']\n", + " navg = ihdr['navg']\n", + " nbeam = ihdr['nbeam']\n", + " chan0 = ihdr['chan0']\n", + " nchan = ihdr['nchan']\n", + " chan_bw = ihdr['bw'] / nchan\n", + " npol = ihdr['npol']\n", + " pols = ihdr['pols']\n", + " pols = pols.replace('CR', 'XY_real')\n", + " pols = pols.replace('CI', 'XY_imag')\n", + " \n", + " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " \n", + " prev_time = time.time()\n", + " iseq_spans = iseq.read(igulp_size)\n", + " for ispan in iseq_spans:\n", + " if ispan.size < igulp_size:\n", + " continue # Ignore final gulp\n", + " \n", + " idata = ispan.data_view(numpy.float32).reshape(ishape)\n", + " with open(f\"{time_tag}.dat\", 'wb') as fh:\n", + " fh.write(idata.tobytes())\n", + " print(' ', fh.name, '@', os.path.getsize(fh.name))\n", + " \n", + " time_tag += navg * self.ntime_gulp * (int(196e6) // int(25e3))" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Copy: Start of new sequence: {'time_tag': 317552126948000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', 'complex': False, 'nbit': 32}\n", - "Writer: Start of new sequence: {'time_tag': 317552126948000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', 'complex': False, 'nbit': 32}\n", - " 317552126948000000.dat @ 11776000\n", - " 317552126995040000.dat @ 11776000\n", - " 317552127042080000.dat @ 11776000\n", - " 317552127089120000.dat @ 11776000\n", - " 317552127136160000.dat @ 11776000\n", - " 317552127183200000.dat @ 11776000\n", - " 317552127230240000.dat @ 11776000\n", - " 317552127277280000.dat @ 11776000\n", - " 317552127324320000.dat @ 11776000\n", - " 317552127371360000.dat @ 11776000\n", - " 317552127418400000.dat @ 11776000\n", - " 317552127465440000.dat @ 11776000\n", - " 317552127512480000.dat @ 11776000\n", - " 317552127559520000.dat @ 11776000\n", - " 317552127606560000.dat @ 11776000\n", - " 317552127653600000.dat @ 11776000\n", - " 317552127700640000.dat @ 11776000\n", - " 317552127747680000.dat @ 11776000\n", - " 317552127794720000.dat @ 11776000\n", - " 317552127841760000.dat @ 11776000\n", - " 317552127888800000.dat @ 11776000\n", - " 317552127935840000.dat @ 11776000\n", - " 317552127982880000.dat @ 11776000\n", - "Done\n" - ] + "cell_type": "markdown", + "id": "e614dedf", + "metadata": { + "id": "e614dedf" + }, + "source": [ + "The `WriterOp` block is structured in the same was as `GeneratorOp` block but uses the \"input ring\" structure for accessing data.\n", + "\n", + "To run these two blocks as a pipeline you would using the following inside a `if __name__ == '__main__':` block:" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:40: DeprecationWarning: generator 'ReadSequence.read' raised StopIteration\n", - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:11: DeprecationWarning: generator 'Ring.read' raised StopIteration\n", - " # This is added back by InteractiveShellApp.init_path()\n", - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:30: DeprecationWarning: generator 'ReadSequence.read' raised StopIteration\n", - "/home/jdowell/.local/lib/python3.6/site-packages/ipykernel_launcher.py:9: DeprecationWarning: generator 'Ring.read' raised StopIteration\n", - " if __name__ == '__main__':\n" - ] + "cell_type": "code", + "execution_count": 5, + "id": "7dfa4ef3", + "metadata": { + "id": "7dfa4ef3", + "outputId": "b172367c-8c1a-4b99-d58b-f915a814fd2b", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:10: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.\n", + " # Remove the CWD from sys.path while we load stuff.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Writer: Start of new sequence: {'time_tag': 324645856752000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', 'complex': False, 'nbit': 32}\n", + " 324645856752000000.dat @ 11776000\n", + " 324645856799040000.dat @ 11776000\n", + " 324645856846080000.dat @ 11776000\n", + " 324645856893120000.dat @ 11776000\n", + " 324645856940160000.dat @ 11776000\n", + " 324645856987200000.dat @ 11776000\n", + " 324645857034240000.dat @ 11776000\n", + " 324645857081280000.dat @ 11776000\n", + " 324645857128320000.dat @ 11776000\n", + " 324645857175360000.dat @ 11776000\n", + " 324645857222400000.dat @ 11776000\n", + " 324645857269440000.dat @ 11776000\n", + " 324645857316480000.dat @ 11776000\n", + " 324645857363520000.dat @ 11776000\n", + " 324645857410560000.dat @ 11776000\n", + " 324645857457600000.dat @ 11776000\n", + " 324645857504640000.dat @ 11776000\n", + " 324645857551680000.dat @ 11776000\n", + " 324645857598720000.dat @ 11776000\n", + "Done\n" + ] + } + ], + "source": [ + "write_ring = bifrost.ring.Ring(name=\"write\")\n", + "\n", + "ops = []\n", + "ops.append(GeneratorOp(write_ring, ntime_gulp=250, core=0))\n", + "ops.append(WriterOp(write_ring, ntime_gulp=250, core=1))\n", + "\n", + "threads = [threading.Thread(target=op.main) for op in ops]\n", + "for thread in threads:\n", + " thread.start()\n", + " \n", + "# Don't run forever\n", + "time.sleep(3)\n", + "ops[0].shutdown()\n", + "\n", + "for thread in threads:\n", + " thread.join()\n", + "print(\"Done\")" + ] + }, + { + "cell_type": "markdown", + "id": "abc15540", + "metadata": { + "id": "abc15540" + }, + "source": [ + "This creates the ring that connects the two blocks, creates the `threading.Thread` instances that run each block, and starts the blocks.\n", + "\n", + "If you wanted to insert a third block between `GeneratorOp` and `WriterOp` it might look like:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "6519c569", + "metadata": { + "id": "6519c569" + }, + "outputs": [], + "source": [ + "class CopyOp(object):\n", + " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", + " self.iring = iring\n", + " self.oring = oring\n", + " self.ntime_gulp = ntime_gulp\n", + " self.guarantee = guarantee\n", + " self.core = core\n", + " \n", + " def main(self):\n", + " with self.oring.begin_writing() as oring:\n", + " for iseq in self.iring.read(guarantee=self.guarantee):\n", + " ihdr = json.loads(iseq.header.tostring())\n", + " \n", + " print(\"Copy: Start of new sequence:\", str(ihdr))\n", + " \n", + " time_tag = ihdr['time_tag']\n", + " navg = ihdr['navg']\n", + " nbeam = ihdr['nbeam']\n", + " chan0 = ihdr['chan0']\n", + " nchan = ihdr['nchan']\n", + " chan_bw = ihdr['bw'] / nchan\n", + " npol = ihdr['npol']\n", + " pols = ihdr['pols']\n", + " pols = pols.replace('CR', 'XY_real')\n", + " pols = pols.replace('CI', 'XY_imag')\n", + "\n", + " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " self.iring.resize(igulp_size, igulp_size*5)\n", + " \n", + " ogulp_size = igulp_size\n", + " oshape = ishape\n", + " self.oring.resize(ogulp_size)\n", + " \n", + " ohdr = ihdr.copy()\n", + " ohdr_str = json.dumps(ohdr)\n", + " \n", + " iseq_spans = iseq.read(igulp_size)\n", + " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", + " for ispan in iseq_spans:\n", + " if ispan.size < igulp_size:\n", + " continue # Ignore final gulp\n", + " \n", + " with oseq.reserve(ogulp_size) as ospan:\n", + " idata = ispan.data_view(numpy.float32)\n", + " odata = ospan.data_view(numpy.float32) \n", + " odata[...] = idata" + ] + }, + { + "cell_type": "markdown", + "id": "8fc149b7", + "metadata": { + "id": "8fc149b7" + }, + "source": [ + "This `CopyOp` block combines the characteristics of reading and writing from rings to copy data from one ring to the other." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "094130bc", + "metadata": { + "id": "094130bc", + "outputId": "1f631a9f-5ba4-417e-cfc7-5bf644193787", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:12: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.\n", + " if sys.path[0] == '':\n", + "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:10: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.\n", + " # Remove the CWD from sys.path while we load stuff.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Copy: Start of new sequence: {'time_tag': 324645857340000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', 'complex': False, 'nbit': 32}\n", + "Writer: Start of new sequence: {'time_tag': 324645857340000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', 'complex': False, 'nbit': 32}\n", + " 324645857340000000.dat @ 11776000\n", + " 324645857387040000.dat @ 11776000\n", + " 324645857434080000.dat @ 11776000\n", + " 324645857481120000.dat @ 11776000\n", + " 324645857528160000.dat @ 11776000\n", + " 324645857575200000.dat @ 11776000\n", + " 324645857622240000.dat @ 11776000\n", + " 324645857669280000.dat @ 11776000\n", + " 324645857716320000.dat @ 11776000\n", + " 324645857763360000.dat @ 11776000\n", + " 324645857810400000.dat @ 11776000\n", + " 324645857857440000.dat @ 11776000\n", + " 324645857904480000.dat @ 11776000\n", + " 324645857951520000.dat @ 11776000\n", + " 324645857998560000.dat @ 11776000\n", + " 324645858045600000.dat @ 11776000\n", + " 324645858092640000.dat @ 11776000\n", + " 324645858139680000.dat @ 11776000\n", + "Done\n" + ] + } + ], + "source": [ + "copy_ring = bifrost.ring.Ring(name=\"copy\")\n", + "write_ring = bifrost.ring.Ring(name=\"write\")\n", + "\n", + "ops = []\n", + "ops.append(GeneratorOp(copy_ring, ntime_gulp=250, core=0))\n", + "ops.append(CopyOp(copy_ring, write_ring, ntime_gulp=250, core=1))\n", + "ops.append(WriterOp(write_ring, ntime_gulp=250, core=2))\n", + "\n", + "threads = [threading.Thread(target=op.main) for op in ops]\n", + "for thread in threads:\n", + " thread.start()\n", + " \n", + "# Don't run forever\n", + "time.sleep(3)\n", + "ops[0].shutdown()\n", + "\n", + "for thread in threads:\n", + " thread.join()\n", + "print(\"Done\")" + ] + }, + { + "cell_type": "markdown", + "id": "916ef6f2", + "metadata": { + "id": "916ef6f2" + }, + "source": [ + "These examples should provide a starting point for building pipelines in Bifrost. Although the examples run purely on the CPU, GPU versions can also be create, either through copying to GPU memory within each block or by using rings in the `cuda` memory space. If `cuda` rings the user needs to ensure that all memory copies to/from the ring are executed before the span is released. Otherwise, corruption of the ring's contents can happen. In the next section we will look at logging from inside the blocks to help understand performance." + ] } - ], - "source": [ - "copy_ring = bifrost.ring.Ring(name=\"copy\")\n", - "write_ring = bifrost.ring.Ring(name=\"write\")\n", - "\n", - "ops = []\n", - "ops.append(GeneratorOp(copy_ring, ntime_gulp=250, core=0))\n", - "ops.append(CopyOp(copy_ring, write_ring, ntime_gulp=250, core=1))\n", - "ops.append(WriterOp(write_ring, ntime_gulp=250, core=2))\n", - "\n", - "threads = [threading.Thread(target=op.main) for op in ops]\n", - "for thread in threads:\n", - " thread.start()\n", - " \n", - "# Don't run forever\n", - "time.sleep(3)\n", - "ops[0].shutdown()\n", - "\n", - "for thread in threads:\n", - " thread.join()\n", - "print(\"Done\")" - ] - }, - { - "cell_type": "markdown", - "id": "916ef6f2", - "metadata": {}, - "source": [ - "These examples should provide a starting point for building pipelines in Bifrost. Although the examples run purely on the CPU, GPU versions can also be create, either through copying to GPU memory within each block or by using rings in the 'cuda' memory space. If 'cuda' rings the user needs to ensure that all memory copies to/from the ring are executed before the span is released. Otherwise, corruption of the ring's contents can happen. In the next section we will look at logging from inside the blocks to help understand performance." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + }, + "colab": { + "name": "04_pipelines.ipynb", + "provenance": [] + }, + "gpuClass": "standard" }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file From 67725068c433d841452b5ed898e1df95c60730fe Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 27 Jun 2022 15:03:11 -0400 Subject: [PATCH 0697/1155] Update link for "Open in colab" button in 04 --- tutorial/04_pipelines.ipynb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tutorial/04_pipelines.ipynb b/tutorial/04_pipelines.ipynb index 625106621..918432ba2 100644 --- a/tutorial/04_pipelines.ipynb +++ b/tutorial/04_pipelines.ipynb @@ -9,7 +9,7 @@ "source": [ "# Building Pipelines\n", "\n", - "\"Open\n", + "\"Open\n", "\n", "We now have all of the pieces needed to build a complete pipeline in the Bifrost framework. Although it is hard to run a full multi-threaded Bifrost pipeline inside a Jupyter notebook we will look at a few examples." ] @@ -205,11 +205,11 @@ "execution_count": 5, "id": "7dfa4ef3", "metadata": { - "id": "7dfa4ef3", - "outputId": "b172367c-8c1a-4b99-d58b-f915a814fd2b", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "id": "7dfa4ef3", + "outputId": "b172367c-8c1a-4b99-d58b-f915a814fd2b" }, "outputs": [ { @@ -353,11 +353,11 @@ "execution_count": 7, "id": "094130bc", "metadata": { - "id": "094130bc", - "outputId": "1f631a9f-5ba4-417e-cfc7-5bf644193787", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "id": "094130bc", + "outputId": "1f631a9f-5ba4-417e-cfc7-5bf644193787" }, "outputs": [ { From b6fa95c7100e214e087ed1998d8404cff07378c7 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 27 Jun 2022 16:41:27 -0400 Subject: [PATCH 0698/1155] Set encoding=utf-8 for opening notebook Should fix this error that I'm seeing in tests? UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 709: ordinal not in range(128) --- test/test_tutorial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_tutorial.py b/test/test_tutorial.py index b315bdd5e..9bd8304ba 100644 --- a/test/test_tutorial.py +++ b/test/test_tutorial.py @@ -40,7 +40,7 @@ def run_notebook(notebook_path, run_path=None, kernel_name=None): nb_name, _ = os.path.splitext(os.path.basename(notebook_path)) dirname = os.path.dirname(notebook_path) - with open(notebook_path) as f: + with open(notebook_path, encoding='utf-8') as f: nb = nbformat.read(f, as_version=4) cleanup = False From c29c5e39729658e36911a92d6558dce44af30674 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 27 Jun 2022 19:30:58 -0400 Subject: [PATCH 0699/1155] Corresponding write encoding to fix UnicodeEncodeError --- test/test_tutorial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_tutorial.py b/test/test_tutorial.py index 9bd8304ba..346cb1908 100644 --- a/test/test_tutorial.py +++ b/test/test_tutorial.py @@ -54,7 +54,7 @@ def run_notebook(notebook_path, run_path=None, kernel_name=None): proc.preprocess(nb, {'metadata': {'path': run_path}}) output_path = os.path.join(dirname, '{}_all_output.ipynb'.format(nb_name)) - with open(output_path, mode='wt') as f: + with open(output_path, mode='wt', encoding='utf-8') as f: nbformat.write(nb, f) errors = [] for cell in nb.cells: From 4c780145416d6196248e1971b8808a5f8ed40aaa Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 28 Jun 2022 11:53:04 -0400 Subject: [PATCH 0700/1155] Colabify tutorial 05, minor typo and typesetting fixes --- tutorial/05_block_logging.ipynb | 503 ++++++++++++++++++-------------- 1 file changed, 277 insertions(+), 226 deletions(-) diff --git a/tutorial/05_block_logging.ipynb b/tutorial/05_block_logging.ipynb index 6ce367856..180548924 100644 --- a/tutorial/05_block_logging.ipynb +++ b/tutorial/05_block_logging.ipynb @@ -1,228 +1,279 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "4548b5b3", - "metadata": {}, - "source": [ - "# Block Logging\n", - "\n", - "In the previous section we looked at how to put blocks and rings together to build a simple pipeline. In this section we will look at the tools Bifrost provides to analyze pipeline performance and how to integrate those into blocks.\n", - "\n", - "Let's start with the `CopyOp` block from the previous section:" - ] + "cells": [ + { + "cell_type": "markdown", + "id": "4548b5b3", + "metadata": { + "id": "4548b5b3" + }, + "source": [ + "# Block Logging\n", + "\n", + "\"Open\n", + "\n", + "In the previous section we looked at how to put blocks and rings together to build a simple pipeline. In this section we will look at the tools Bifrost provides to analyze pipeline performance and how to integrate those into blocks.\n" + ] + }, + { + "cell_type": "code", + "source": [ + "%%capture install_log\n", + "# Import bifrost, but attempt to auto-install if needed (and we're running on\n", + "# Colab). If something goes wrong, evaluate install_log.show() in a new block\n", + "# to retrieve the details.\n", + "try:\n", + " import bifrost\n", + "except ModuleNotFoundError as exn:\n", + " try:\n", + " import google.colab\n", + " except ModuleNotFoundError:\n", + " raise exn\n", + " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " !(cd ~/bifrost && ./configure --disable-cuda && make -j all && sudo make install)\n", + " import bifrost" + ], + "metadata": { + "id": "OE9pYXXj-rkG" + }, + "id": "OE9pYXXj-rkG", + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "\n", + "Let's start with the `CopyOp` block from the previous section:" + ], + "metadata": { + "id": "kaj6t0I--pz6" + }, + "id": "kaj6t0I--pz6" + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "84820717", + "metadata": { + "id": "84820717" + }, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "import time\n", + "import numpy\n", + "import threading\n", + "\n", + "class CopyOp(object):\n", + " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", + " self.iring = iring\n", + " self.oring = oring\n", + " self.ntime_gulp = ntime_gulp\n", + " self.guarantee = guarantee\n", + " self.core = core\n", + " \n", + " def main(self):\n", + " with self.oring.begin_writing() as oring:\n", + " for iseq in self.iring.read(guarantee=self.guarantee):\n", + " ihdr = json.loads(iseq.header.tostring())\n", + " \n", + " print(\"Copy: Start of new sequence:\", str(ihdr))\n", + " \n", + " time_tag = ihdr['time_tag']\n", + " navg = ihdr['navg']\n", + " nbeam = ihdr['nbeam']\n", + " chan0 = ihdr['chan0']\n", + " nchan = ihdr['nchan']\n", + " chan_bw = ihdr['bw'] / nchan\n", + " npol = ihdr['npol']\n", + " pols = ihdr['pols']\n", + " pols = pols.replace('CR', 'XY_real')\n", + " pols = pols.replace('CI', 'XY_imag')\n", + "\n", + " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " self.iring.resize(igulp_size, igulp_size*5)\n", + " \n", + " ogulp_size = igulp_size\n", + " oshape = ishape\n", + " self.oring.resize(ogulp_size)\n", + " \n", + " ohdr = ihdr.copy()\n", + " ohdr_str = json.dumps(ohdr)\n", + " \n", + " iseq_spans = iseq.read(igulp_size)\n", + " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", + " for ispan in iseq_spans:\n", + " if ispan.size < igulp_size:\n", + " continue # Ignore final gulp\n", + " \n", + " with oseq.reserve(ogulp_size) as ospan:\n", + " idata = ispan.data_view(numpy.float32)\n", + " odata = ospan.data_view(numpy.float32) \n", + " odata[...] = idata" + ] + }, + { + "cell_type": "markdown", + "id": "18cdb7e1", + "metadata": { + "id": "18cdb7e1" + }, + "source": [ + "If we want to know how this block is performing we can add timing statements to it and record the values using Bifrost's `bifrost.proclog` functionality. This provides a lightweight logger that records information to `/dev/shm/bifrost` where it can be accessed.\n", + "\n", + "To add logging to this block we would update it with:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "cfea96e1", + "metadata": { + "id": "cfea96e1" + }, + "outputs": [], + "source": [ + "from bifrost.proclog import ProcLog\n", + "from bifrost.affinity import get_core, set_core\n", + "\n", + "class CopyOp(object):\n", + " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", + " self.iring = iring\n", + " self.oring = oring\n", + " self.ntime_gulp = ntime_gulp\n", + " self.guarantee = guarantee\n", + " self.core = core\n", + " \n", + " # ProcLog updates:\n", + " self.bind_proclog = ProcLog(type(self).__name__+\"/bind\")\n", + " self.in_proclog = ProcLog(type(self).__name__+\"/in\")\n", + " self.out_proclog = ProcLog(type(self).__name__+\"/out\")\n", + " self.size_proclog = ProcLog(type(self).__name__+\"/size\")\n", + " self.sequence_proclog = ProcLog(type(self).__name__+\"/sequence0\")\n", + " self.perf_proclog = ProcLog(type(self).__name__+\"/perf\")\n", + " \n", + " self.in_proclog.update( {'nring':1, 'ring0':self.iring.name})\n", + " self.out_proclog.update( {'nring':1, 'ring0':self.oring.name})\n", + " self.size_proclog.update({'nseq_per_gulp': self.ntime_gulp})\n", + " \n", + " def main(self):\n", + " set_core(self.core)\n", + " self.bind_proclog.update({'ncore': 1, \n", + " 'core0': get_core(),})\n", + " \n", + " with self.oring.begin_writing() as oring:\n", + " for iseq in self.iring.read(guarantee=self.guarantee):\n", + " ihdr = json.loads(iseq.header.tostring())\n", + " \n", + " self.sequence_proclog.update(ihdr)\n", + " \n", + " print(\"Copy: Start of new sequence:\", str(ihdr))\n", + " \n", + " time_tag = ihdr['time_tag']\n", + " navg = ihdr['navg']\n", + " nbeam = ihdr['nbeam']\n", + " chan0 = ihdr['chan0']\n", + " nchan = ihdr['nchan']\n", + " chan_bw = ihdr['bw'] / nchan\n", + " npol = ihdr['npol']\n", + " pols = ihdr['pols']\n", + " pols = pols.replace('CR', 'XY_real')\n", + " pols = pols.replace('CI', 'XY_imag')\n", + "\n", + " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " self.iring.resize(igulp_size, igulp_size*5)\n", + " \n", + " ogulp_size = igulp_size\n", + " oshape = ishape\n", + " self.oring.resize(ogulp_size)\n", + " \n", + " ohdr = ihdr.copy()\n", + " ohdr_str = json.dumps(ohdr)\n", + " \n", + " prev_time = time.time()\n", + " iseq_spans = iseq.read(igulp_size)\n", + " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", + " for ispan in iseq_spans:\n", + " if ispan.size < igulp_size:\n", + " continue # Ignore final gulp\n", + " curr_time = time.time()\n", + " acquire_time = curr_time - prev_time\n", + " prev_time = curr_time\n", + " \n", + " with oseq.reserve(ogulp_size) as ospan:\n", + " curr_time = time.time()\n", + " reserve_time = curr_time - prev_time\n", + " prev_time = curr_time\n", + " \n", + " idata = ispan.data_view(numpy.float32)\n", + " odata = ospan.data_view(numpy.float32) \n", + " odata[...] = idata\n", + " \n", + " curr_time = time.time()\n", + " process_time = curr_time - prev_time\n", + " prev_time = curr_time\n", + " self.perf_proclog.update({'acquire_time': acquire_time, \n", + " 'reserve_time': reserve_time, \n", + " 'process_time': process_time,})" + ] + }, + { + "cell_type": "markdown", + "id": "5c784a96", + "metadata": { + "id": "5c784a96" + }, + "source": [ + "In the `__init__` method of `CopyOp` we define all of the logging monitoring points:\n", + "\n", + " * `bind_proclog` — CPU and GPU binding information\n", + " * `in_proclog` — input ring(s), if any\n", + " * `out_proclog` — output ring(s), if any\n", + " * `size_proclog` — gulp size in use\n", + " * `sequence_proclog` — metadata for the current sequence being processed\n", + " * `perf_proclog` — block performance timing, consisting of:\n", + " * `acquire_time` — time spent waiting to read a span\n", + " * `reserve_time` — time spect waiting to acquire an output span for writing\n", + " * `process_time` — time spent processing data (basically everything else)\n", + "\n", + "For some of these monitoring points, like in, out, and size, the values are known when the block is created and they can be saved during initalization. For others, like sequence and perf, they can only be determined while running inside `main`.\n", + "\n", + "In addition to these explict monitoring points, Bifrost also creates monitoring points for the rings that capture their names, sizes, and space. All of this information is recorded to `/dev/shm/bifrost` in a per-process, per-block/ring fashion. The path would be:\n", + "\n", + " /dev/shm/bifrost///\n", + "\n", + "Bifrost provides tools, like the top-like utility `like_top.py`, that can tap into this information and provide real time information about a running pipeline. The `bifrost.proclog` module also provides methods for accessing these data in a programmatic way." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + }, + "colab": { + "name": "05_block_logging.ipynb", + "provenance": [] + } }, - { - "cell_type": "code", - "execution_count": 1, - "id": "84820717", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import json\n", - "import time\n", - "import numpy\n", - "import threading\n", - "\n", - "import bifrost\n", - "\n", - "class CopyOp(object):\n", - " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", - " self.iring = iring\n", - " self.oring = oring\n", - " self.ntime_gulp = ntime_gulp\n", - " self.guarantee = guarantee\n", - " self.core = core\n", - " \n", - " def main(self):\n", - " with self.oring.begin_writing() as oring:\n", - " for iseq in self.iring.read(guarantee=self.guarantee):\n", - " ihdr = json.loads(iseq.header.tostring())\n", - " \n", - " print(\"Copy: Start of new sequence:\", str(ihdr))\n", - " \n", - " time_tag = ihdr['time_tag']\n", - " navg = ihdr['navg']\n", - " nbeam = ihdr['nbeam']\n", - " chan0 = ihdr['chan0']\n", - " nchan = ihdr['nchan']\n", - " chan_bw = ihdr['bw'] / nchan\n", - " npol = ihdr['npol']\n", - " pols = ihdr['pols']\n", - " pols = pols.replace('CR', 'XY_real')\n", - " pols = pols.replace('CI', 'XY_imag')\n", - "\n", - " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", - " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", - " self.iring.resize(igulp_size, igulp_size*5)\n", - " \n", - " ogulp_size = igulp_size\n", - " oshape = ishape\n", - " self.oring.resize(ogulp_size)\n", - " \n", - " ohdr = ihdr.copy()\n", - " ohdr_str = json.dumps(ohdr)\n", - " \n", - " iseq_spans = iseq.read(igulp_size)\n", - " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", - " for ispan in iseq_spans:\n", - " if ispan.size < igulp_size:\n", - " continue # Ignore final gulp\n", - " \n", - " with oseq.reserve(ogulp_size) as ospan:\n", - " idata = ispan.data_view(numpy.float32)\n", - " odata = ospan.data_view(numpy.float32) \n", - " odata[...] = idata" - ] - }, - { - "cell_type": "markdown", - "id": "18cdb7e1", - "metadata": {}, - "source": [ - "If we want to know how this block is performing we can add timing statements to it and record the values using Bifrost's `bifrost.proclog` functionality. This provides a lightweight logger that records information to `/dev/shm/bifrost` where it can be accessed.\n", - "\n", - "To add logging to this block we would update it with:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "cfea96e1", - "metadata": {}, - "outputs": [], - "source": [ - "from bifrost.proclog import ProcLog\n", - "from bifrost.affinity import get_core, set_core\n", - "\n", - "class CopyOp(object):\n", - " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", - " self.iring = iring\n", - " self.oring = oring\n", - " self.ntime_gulp = ntime_gulp\n", - " self.guarantee = guarantee\n", - " self.core = core\n", - " \n", - " self.bind_proclog = ProcLog(type(self).__name__+\"/bind\")\n", - " self.in_proclog = ProcLog(type(self).__name__+\"/in\")\n", - " self.out_proclog = ProcLog(type(self).__name__+\"/out\")\n", - " self.size_proclog = ProcLog(type(self).__name__+\"/size\")\n", - " self.sequence_proclog = ProcLog(type(self).__name__+\"/sequence0\")\n", - " self.perf_proclog = ProcLog(type(self).__name__+\"/perf\")\n", - " \n", - " self.in_proclog.update( {'nring':1, 'ring0':self.iring.name})\n", - " self.out_proclog.update( {'nring':1, 'ring0':self.oring.name})\n", - " self.size_proclog.update({'nseq_per_gulp': self.ntime_gulp})\n", - " \n", - " def main(self):\n", - " set_core(self.core)\n", - " self.bind_proclog.update({'ncore': 1, \n", - " 'core0': get_core(),})\n", - " \n", - " with self.oring.begin_writing() as oring:\n", - " for iseq in self.iring.read(guarantee=self.guarantee):\n", - " ihdr = json.loads(iseq.header.tostring())\n", - " \n", - " self.sequence_proclog.update(ihdr)\n", - " \n", - " print(\"Copy: Start of new sequence:\", str(ihdr))\n", - " \n", - " time_tag = ihdr['time_tag']\n", - " navg = ihdr['navg']\n", - " nbeam = ihdr['nbeam']\n", - " chan0 = ihdr['chan0']\n", - " nchan = ihdr['nchan']\n", - " chan_bw = ihdr['bw'] / nchan\n", - " npol = ihdr['npol']\n", - " pols = ihdr['pols']\n", - " pols = pols.replace('CR', 'XY_real')\n", - " pols = pols.replace('CI', 'XY_imag')\n", - "\n", - " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", - " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", - " self.iring.resize(igulp_size, igulp_size*5)\n", - " \n", - " ogulp_size = igulp_size\n", - " oshape = ishape\n", - " self.oring.resize(ogulp_size)\n", - " \n", - " ohdr = ihdr.copy()\n", - " ohdr_str = json.dumps(ohdr)\n", - " \n", - " prev_time = time.time()\n", - " iseq_spans = iseq.read(igulp_size)\n", - " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", - " for ispan in iseq_spans:\n", - " if ispan.size < igulp_size:\n", - " continue # Ignore final gulp\n", - " curr_time = time.time()\n", - " acquire_time = curr_time - prev_time\n", - " prev_time = curr_time\n", - " \n", - " with oseq.reserve(ogulp_size) as ospan:\n", - " curr_time = time.time()\n", - " reserve_time = curr_time - prev_time\n", - " prev_time = curr_time\n", - " \n", - " idata = ispan.data_view(numpy.float32)\n", - " odata = ospan.data_view(numpy.float32) \n", - " odata[...] = idata\n", - " \n", - " curr_time = time.time()\n", - " process_time = curr_time - prev_time\n", - " prev_time = curr_time\n", - " self.perf_proclog.update({'acquire_time': acquire_time, \n", - " 'reserve_time': reserve_time, \n", - " 'process_time': process_time,})" - ] - }, - { - "cell_type": "markdown", - "id": "5c784a96", - "metadata": {}, - "source": [ - "In the `__init__` method of `CopyOp` we define all of the logging monitoring points:\n", - "\n", - " * bind_proclog - CPU and GPU binding information\n", - " * in_proclog - input ring(s), if any\n", - " * out_proclog - output ring(s), if any\n", - " * size_proclog - gulp size in use\n", - " * sequence_proclog - metadata for the current sequence being processed\n", - " * perf_proclog - block performance timing, consisting of:\n", - " * acquire_time - time spent waiting to read a span\n", - " * reserve_time - time spect waiting to acquire an output span for writing\n", - " * process_time - time spent processing data (basically everything else)\n", - "\n", - "For some of these monitoring points, like in, out, and size, the values are known when the block is created and they can be saved during initalization. For others, like sequence and perf, they can only be determined while running inside `main`.\n", - "\n", - "In addition to these explict monitoring points, Bifrost also creates monitoring points for the rings that capture their names, sizes, and space. All of this information is recorder to `/dev/shm/bifrost` in a per-process, per-block/ring fashion. The path would be:\n", - "\n", - " /dev/shm/bifrost/// Date: Tue, 28 Jun 2022 12:48:54 -0400 Subject: [PATCH 0701/1155] Colabify tutorial 07 --- tutorial/07_high_level_api.ipynb | 842 +++++++++++++++++-------------- 1 file changed, 455 insertions(+), 387 deletions(-) diff --git a/tutorial/07_high_level_api.ipynb b/tutorial/07_high_level_api.ipynb index fb0fb8715..2b383af55 100644 --- a/tutorial/07_high_level_api.ipynb +++ b/tutorial/07_high_level_api.ipynb @@ -1,391 +1,459 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "diverse-space", - "metadata": {}, - "source": [ - "# High Level Python API\n", - "\n", - "Up until now we have been using the low level Python API that Bifrost has to show the inner workings of the framework and how to build a pipeline. However, Bifrost also has a high level Python API that makes building blocks and pipelines easier with less code. In this section we will look at this interface.\n", - "\n", - "The general idea of the high-level API is to allow a pipeline to be built out of processing blocks that are connected together like Lego. For example, here is a pipeline that reads from a sigproc file, performs a fast dispersion measure transform, and then writes out the data to disk:\n", - "\n", - "```python\n", - "import bifrost as bf\n", - "import sys\n", - "\n", - "filenames = sys.argv[1:]\n", - "\n", - "print(\"Building pipeline\")\n", - "data = bf.blocks.read_sigproc(filenames, gulp_nframe=128)\n", - "data = bf.blocks.copy(data, 'cuda')\n", - "data = bf.blocks.transpose(data, ['pol', 'freq', 'time'])\n", - "data = bf.blocks.fdmt(data, max_dm=100.)\n", - "data = bf.blocks.copy(data, 'cuda_host')\n", - "bf.blocks.write_sigproc(data)\n", - "\n", - "print(\"Running pipeline\")\n", - "bf.get_default_pipeline().run()\n", - "print(\"All done\")\n", - "```\n", - "\n", - "Here we are continually passing the block's output, `data`, to the next block in the pipeline. At runtime, the blocks are connected together (as a directed graph) with ring buffers in between. \n", - "\n", - "### Creating a transform block\n", - "\n", - "Many common processing operations have bifrost blocks, but it likely that you will need to make a custom block at some stage. To see how, let's start by revisiting the `CopyOp` block from the pipelines section:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "black-cruise", - "metadata": {}, - "outputs": [], - "source": [ - "class CopyOp(object):\n", - " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", - " self.iring = iring\n", - " self.oring = oring\n", - " self.ntime_gulp = ntime_gulp\n", - " self.guarantee = guarantee\n", - " self.core = core\n", - " \n", - " def main(self):\n", - " with self.oring.begin_writing() as oring:\n", - " for iseq in self.iring.read(guarantee=self.guarantee):\n", - " ihdr = json.loads(iseq.header.tostring())\n", - " \n", - " print(\"Copy: Start of new sequence:\", str(ihdr))\n", - " \n", - " time_tag = ihdr['time_tag']\n", - " navg = ihdr['navg']\n", - " nbeam = ihdr['nbeam']\n", - " chan0 = ihdr['chan0']\n", - " nchan = ihdr['nchan']\n", - " chan_bw = ihdr['bw'] / nchan\n", - " npol = ihdr['npol']\n", - " pols = ihdr['pols']\n", - " pols = pols.replace('CR', 'XY_real')\n", - " pols = pols.replace('CI', 'XY_imag')\n", - "\n", - " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", - " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", - " self.iring.resize(igulp_size, igulp_size*5)\n", - " \n", - " ogulp_size = igulp_size\n", - " oshape = ishape\n", - " self.oring.resize(ogulp_size)\n", - " \n", - " ohdr = ihdr.copy()\n", - " ohdr_str = json.dumps(ohdr)\n", - " \n", - " iseq_spans = iseq.read(igulp_size)\n", - " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", - " for ispan in iseq_spans:\n", - " if ispan.size < igulp_size:\n", - " continue # Ignore final gulp\n", - " \n", - " with oseq.reserve(ogulp_size) as ospan:\n", - " idata = ispan.data_view(numpy.float32)\n", - " odata = ospan.data_view(numpy.float32) \n", - " odata[...] = idata" - ] - }, - { - "cell_type": "markdown", - "id": "fiscal-coverage", - "metadata": {}, - "source": [ - "There is a lot of setup in here and iteration control that is common across many of the blocks that we have looked at. In the high level API much of this can be abstracted away using the classes defined in `bifrost.pipelines`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "intelligent-retailer", - "metadata": {}, - "outputs": [], - "source": [ - "import copy\n", - "\n", - "from bifrost import pipeline\n", - "\n", - "class NewCopyOp(pipeline.TransformBlock):\n", - " def __init__(self, iring, *args, **kwargs):\n", - " super(NewCopyOp, self).__init__(iring, *args, **kwargs)\n", - " \n", - " def on_sequence(self, iseq):\n", - " ihdr = iseq.header\n", - " print(\"Copy: Start of new sequence:\", str(ihdr))\n", - " \n", - " ohdr = copy.deepcopy(iseq.header)\n", - " return ohdr\n", - "\n", - " def on_data(self, ispan, ospan):\n", - " in_nframe = ispan.nframe\n", - " out_nframe = in_nframe\n", - "\n", - " idata = ispan.data\n", - " odata = ospan.data\n", - "\n", - " odata[...] = idata\n", - " return out_nframe" - ] - }, - { - "cell_type": "markdown", - "id": "unique-basement", - "metadata": {}, - "source": [ - "That is much more compact. The key things in this new class are:\n", - " 1. the `on_sequence` method is called whenever a new sequence starts and is used to update the header for the output ring buffer and\n", - " 2. the `on_data` method is called for each span/gulp that is processed.\n", - "\n", - "Put another way, the `on_sequence` happens when there is new *metadata*, and `on_data` happens whenever there is new *data* to process. For example, `on_sequence` may be called when reading a new file, or starting an observation.\n", - " \n" - ] - }, - { - "cell_type": "markdown", - "id": "communist-worse", - "metadata": {}, - "source": [ - "### Creating a source block\n", - "\n", - " Similarly, we can translate the `GeneratorOp` and `WriterOp` blocks as well using sub-classes of `bifrost.pipeline.SourceBlock` and `bifrost.pipeline.SinkBlock`, respectively:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "grand-central", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import time\n", - "import numpy\n", - "\n", - "class NewGeneratorOp(pipeline.SourceBlock):\n", - " def __init__(self, ntime_gulp, *args, **kwargs):\n", - " super(NewGeneratorOp, self).__init__(['generator',], 1,\n", - " *args, **kwargs)\n", - " \n", - " self.ntime_gulp = ntime_gulp\n", - " self.ngulp_done = 0\n", - " self.ngulp_max = 10\n", - " \n", - " self.navg = 24\n", - " tint = self.navg / 25e3\n", - " self.tgulp = tint * self.ntime_gulp\n", - " self.nbeam = 1\n", - " self.chan0 = 1234\n", - " self.nchan = 16*184\n", - " self.npol = 4\n", - " \n", - " def create_reader(self, name):\n", - " self.ngulp_done = 0\n", - " \n", - " class Random(object):\n", - " def __init__(self, name):\n", - " self.name = name\n", - " def __enter__(self):\n", - " return self\n", - " def __exit__(self, type, value, tb):\n", - " return True\n", - " def read(self, *args):\n", - " return numpy.random.randn(*args)\n", - " \n", - " return Random(name)\n", - " \n", - " def on_sequence(self, reader, name):\n", - " ohdr = {'time_tag': int(int(time.time())*196e6),\n", - " 'seq0': 0, \n", - " 'chan0': self.chan0,\n", - " 'cfreq0': self.chan0*25e3,\n", - " 'bw': self.nchan*25e3,\n", - " 'navg': self.navg,\n", - " 'nbeam': self.nbeam,\n", - " 'nchan': self.nchan,\n", - " 'npol': self.npol,\n", - " 'pols': 'XX,YY,CR,CI',\n", - " }\n", - " ohdr['_tensor'] = {'dtype': 'f32',\n", - " 'shape': [-1,\n", - " self.ntime_gulp,\n", - " self.nbeam,\n", - " self.nchan,\n", - " self.npol]\n", - " }\n", - " return [ohdr,]\n", - " \n", - " def on_data(self, reader, ospans):\n", - " indata = reader.read(self.ntime_gulp, self.nbeam, self.nchan, self.npol)\n", - " time.sleep(self.tgulp)\n", - "\n", - " if indata.shape[0] == self.ntime_gulp \\\n", - " and self.ngulp_done < self.ngulp_max:\n", - " ospans[0].data[...] = indata\n", - " self.ngulp_done += 1\n", - " return [1]\n", - " else:\n", - " return [0] " - ] - }, - { - "cell_type": "markdown", - "id": "essential-burst", - "metadata": {}, - "source": [ - "For the `bifrost.pipeline.SourceBlock` we need have slightly different requirements on `on_sequence` and `on_data`. Plus, we also need to define a `create_reader` method that returns a context manager (a class with `__enter__` and `__exit__` methods). \n", - "\n", - "For `on_sequence` we need to accept two arguments: a context manager created by `create_reader` and an identifying name (although it is not used here). \n", - "\n", - "For `on_data` we also have two arguments now, the context manager and a list of output spans. In here we need to grab the data from `reader` and put it into the appropriate part of the output spans.\n", - "\n", - "### The all-important bifrost `_tensor` dictionary\n", - "\n", - "We also see in `on_sequence` here that the header dictionary has a new required `_tensor` key. This key is the key to automatically chaining blocks together into a pipeline since it defines the data type and dimensionality for the spans/gulps. At a minimum, the `_tensor` must define the data dtype and shape:\n", - "\n", - "```python\n", - " '_tensor': {\n", - " 'dtype': self.dtype,\n", - " 'shape': [-1, self.gulp_size],\n", - " },\n", - "```\n", - "\n", - "The first index of shape is -1, to indicate that this is a single gulp from the data stream. \n", - "\n", - "However, most block require three additional keywords: \n", - "* `labels`, which give human-friendly names to each axis (e.g. 'time' or 'frequency').\n", - "* `scales`, which defines the start value and step size for each axis (e.g. `[1420, 0.1]` sets start value 1420, step size 0.1).\n", - "* `units`, which defines the units for each axis (e.g. 's' or 'MHz'). These are parsed using [Pint](https://pint.readthedocs.io/en/stable/), and can be used for consistency checking. For example, the `bf.views.merge_axes` view won't allow axes to merge if they have different units, say 'MHz' and 'Jy'. If you attempted to merge axes with 'MHz' and 'kHz' units, this would be allowed, and the corresponding `scales` are updated consistently.\n", - "\n", - "Here is another example `_tensor` with all keywords:\n", - "\n", - "```python\n", - " t0 = 1620192408.005579 # unix timestamp from when writing this tutorial\n", - " dt = 0.1 # 0.1 second step size\n", - " '_tensor': {\n", - " 'dtype': 'cf32'\n", - " 'shape': [-1, 1024, 4],\n", - " 'labels': ['time', 'frequency', 'pol'],\n", - " 'units': ['s', 'MHz', ''],\n", - " 'scales': [[t0, dt], [1420, 0.1], [None, None]]\n", - " }\n", - "```\n", - "\n", - "A transform block reads the tensor metadata, and must output a copy of the tensor with any required changes to shape/scale/units etc. \n", - "\n", - "### Creating a sink block\n", - "\n", - "We can also translate the original `WriterOp`:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "hispanic-toddler", - "metadata": {}, - "outputs": [], - "source": [ - "class NewWriterOp(pipeline.SinkBlock):\n", - " def __init__(self, iring, *args, **kwargs):\n", - " super(NewWriterOp, self).__init__(iring, *args, **kwargs)\n", - " \n", - " self.time_tag = None\n", - " self.navg = 0\n", - " self.nbeam = 0\n", - " self.nchan = 0\n", - " self.npol = 0\n", - " \n", - " def on_sequence(self, iseq):\n", - " ihdr = iseq.header\n", - " print(\"Writer: Start of new sequence:\", str(ihdr))\n", - " \n", - " self.time_tag = iseq.time_tag\n", - " self.navg = ihdr['navg']\n", - " self.nbeam = ihdr['nbeam']\n", - " self.nchan = ihdr['nchan']\n", - " self.npol = ihdr['npol']\n", - "\n", - " def on_data(self, ispan):\n", - " idata = ispan.data.view(numpy.float32)\n", - " idata = idata.reshape(-1, self.nbeam, self.nchan, self.npol)\n", - " \n", - " with open(f\"{self.time_tag}.dat\", 'wb') as fh:\n", - " fh.write(idata.tobytes())\n", - " print(' ', fh.name, '@', os.path.getsize(fh.name))\n", - " self.time_tag += self.navg * idata.shape[0] * (int(196e6) // int(25e3))" - ] - }, - { - "cell_type": "markdown", - "id": "arbitrary-dynamics", - "metadata": {}, - "source": [ - "Since this is a data sink we only have one argument for `on_data` which gives the block the current data span/gulp.\n", - "\n", - "We then can put these new blocks all together and launch them under Bifrost's default pipeline with:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "objective-principal", - "metadata": {}, - "outputs": [ + "cells": [ + { + "cell_type": "markdown", + "id": "diverse-space", + "metadata": { + "id": "diverse-space" + }, + "source": [ + "# High Level Python API\n", + "\n", + "\"Open\n", + "\n", + "Up until now we have been using the low level Python API that Bifrost has to show the inner workings of the framework and how to build a pipeline. However, Bifrost also has a high level Python API that makes building blocks and pipelines easier with less code. In this section we will look at this interface.\n", + "\n", + "The general idea of the high-level API is to allow a pipeline to be built out of processing blocks that are connected together like Lego. For example, here is a pipeline that reads from a sigproc file, performs a fast dispersion measure transform, and then writes out the data to disk:\n", + "\n", + "```python\n", + "import bifrost as bf\n", + "import sys\n", + "\n", + "filenames = sys.argv[1:]\n", + "\n", + "print(\"Building pipeline\")\n", + "data = bf.blocks.read_sigproc(filenames, gulp_nframe=128)\n", + "data = bf.blocks.copy(data, 'cuda')\n", + "data = bf.blocks.transpose(data, ['pol', 'freq', 'time'])\n", + "data = bf.blocks.fdmt(data, max_dm=100.)\n", + "data = bf.blocks.copy(data, 'cuda_host')\n", + "bf.blocks.write_sigproc(data)\n", + "\n", + "print(\"Running pipeline\")\n", + "bf.get_default_pipeline().run()\n", + "print(\"All done\")\n", + "```\n", + "\n", + "Here we are continually passing the block's output, `data`, to the next block in the pipeline. At runtime, the blocks are connected together (as a directed graph) with ring buffers in between.\n" + ] + }, + { + "cell_type": "code", + "source": [ + "%%capture install_log\n", + "# Import bifrost, but attempt to auto-install if needed (and we're running on\n", + "# Colab). If something goes wrong, evaluate install_log.show() in a new block\n", + "# to retrieve the details.\n", + "try:\n", + " import bifrost\n", + "except ModuleNotFoundError as exn:\n", + " try:\n", + " import google.colab\n", + " except ModuleNotFoundError:\n", + " raise exn\n", + " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " !(cd ~/bifrost && ./configure --disable-cuda && make -j all && sudo make install)\n", + " import bifrost" + ], + "metadata": { + "id": "kIQelikFM5mZ" + }, + "id": "kIQelikFM5mZ", + "execution_count": 1, + "outputs": [] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Copy: Start of new sequence: {'time_tag': 317553970916000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', '_tensor': {'dtype': 'f32', 'shape': [-1, 250, 1, 2944, 4]}, 'name': 'unnamed-sequence-0', 'gulp_nframe': 1}\n", - "Writer: Start of new sequence: {'time_tag': 317553970916000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', '_tensor': {'dtype': 'f32', 'shape': [-1, 250, 1, 2944, 4]}, 'name': 'unnamed-sequence-0', 'gulp_nframe': 1}\n", - " 317553970916000000.dat @ 11776000\n", - " 317553970963040000.dat @ 11776000\n", - " 317553971010080000.dat @ 11776000\n", - " 317553971057120000.dat @ 11776000\n", - " 317553971104160000.dat @ 11776000\n", - " 317553971151200000.dat @ 11776000\n", - " 317553971198240000.dat @ 11776000\n", - " 317553971245280000.dat @ 11776000\n", - " 317553971292320000.dat @ 11776000\n", - " 317553971339360000.dat @ 11776000\n" - ] + "cell_type": "markdown", + "source": [ + "\n", + "### Creating a transform block\n", + "\n", + "Many common processing operations have bifrost blocks, but it likely that you will need to make a custom block at some stage. To see how, let's start by revisiting the `CopyOp` block from the pipelines section:" + ], + "metadata": { + "id": "obSTqcFKM4WV" + }, + "id": "obSTqcFKM4WV" + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "black-cruise", + "metadata": { + "id": "black-cruise" + }, + "outputs": [], + "source": [ + "class CopyOp(object):\n", + " def __init__(self, iring, oring, ntime_gulp=250, guarantee=True, core=-1):\n", + " self.iring = iring\n", + " self.oring = oring\n", + " self.ntime_gulp = ntime_gulp\n", + " self.guarantee = guarantee\n", + " self.core = core\n", + " \n", + " def main(self):\n", + " with self.oring.begin_writing() as oring:\n", + " for iseq in self.iring.read(guarantee=self.guarantee):\n", + " ihdr = json.loads(iseq.header.tostring())\n", + " \n", + " print(\"Copy: Start of new sequence:\", str(ihdr))\n", + " \n", + " time_tag = ihdr['time_tag']\n", + " navg = ihdr['navg']\n", + " nbeam = ihdr['nbeam']\n", + " chan0 = ihdr['chan0']\n", + " nchan = ihdr['nchan']\n", + " chan_bw = ihdr['bw'] / nchan\n", + " npol = ihdr['npol']\n", + " pols = ihdr['pols']\n", + " pols = pols.replace('CR', 'XY_real')\n", + " pols = pols.replace('CI', 'XY_imag')\n", + "\n", + " igulp_size = self.ntime_gulp*nbeam*nchan*npol*4 # float32\n", + " ishape = (self.ntime_gulp,nbeam,nchan,npol)\n", + " self.iring.resize(igulp_size, igulp_size*5)\n", + " \n", + " ogulp_size = igulp_size\n", + " oshape = ishape\n", + " self.oring.resize(ogulp_size)\n", + " \n", + " ohdr = ihdr.copy()\n", + " ohdr_str = json.dumps(ohdr)\n", + " \n", + " iseq_spans = iseq.read(igulp_size)\n", + " with oring.begin_sequence(time_tag=time_tag, header=ohdr_str) as oseq:\n", + " for ispan in iseq_spans:\n", + " if ispan.size < igulp_size:\n", + " continue # Ignore final gulp\n", + " \n", + " with oseq.reserve(ogulp_size) as ospan:\n", + " idata = ispan.data_view(numpy.float32)\n", + " odata = ospan.data_view(numpy.float32) \n", + " odata[...] = idata" + ] + }, + { + "cell_type": "markdown", + "id": "fiscal-coverage", + "metadata": { + "id": "fiscal-coverage" + }, + "source": [ + "There is a lot of setup in here and iteration control that is common across many of the blocks that we have looked at. In the high level API much of this can be abstracted away using the classes defined in `bifrost.pipelines`:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "intelligent-retailer", + "metadata": { + "id": "intelligent-retailer" + }, + "outputs": [], + "source": [ + "import copy\n", + "\n", + "from bifrost import pipeline\n", + "\n", + "class NewCopyOp(pipeline.TransformBlock):\n", + " def __init__(self, iring, *args, **kwargs):\n", + " super(NewCopyOp, self).__init__(iring, *args, **kwargs)\n", + " \n", + " def on_sequence(self, iseq):\n", + " ihdr = iseq.header\n", + " print(\"Copy: Start of new sequence:\", str(ihdr))\n", + " \n", + " ohdr = copy.deepcopy(iseq.header)\n", + " return ohdr\n", + "\n", + " def on_data(self, ispan, ospan):\n", + " in_nframe = ispan.nframe\n", + " out_nframe = in_nframe\n", + "\n", + " idata = ispan.data\n", + " odata = ospan.data\n", + "\n", + " odata[...] = idata\n", + " return out_nframe" + ] + }, + { + "cell_type": "markdown", + "id": "unique-basement", + "metadata": { + "id": "unique-basement" + }, + "source": [ + "That is much more compact. The key things in this new class are:\n", + " 1. the `on_sequence` method is called whenever a new sequence starts and is used to update the header for the output ring buffer and\n", + " 2. the `on_data` method is called for each span/gulp that is processed.\n", + "\n", + "Put another way, the `on_sequence` happens when there is new *metadata*, and `on_data` happens whenever there is new *data* to process. For example, `on_sequence` may be called when reading a new file, or starting an observation.\n", + " \n" + ] + }, + { + "cell_type": "markdown", + "id": "communist-worse", + "metadata": { + "id": "communist-worse" + }, + "source": [ + "### Creating a source block\n", + "\n", + " Similarly, we can translate the `GeneratorOp` and `WriterOp` blocks as well using sub-classes of `bifrost.pipeline.SourceBlock` and `bifrost.pipeline.SinkBlock`, respectively:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "grand-central", + "metadata": { + "id": "grand-central" + }, + "outputs": [], + "source": [ + "import os\n", + "import time\n", + "import numpy\n", + "\n", + "class NewGeneratorOp(pipeline.SourceBlock):\n", + " def __init__(self, ntime_gulp, *args, **kwargs):\n", + " super(NewGeneratorOp, self).__init__(['generator',], 1,\n", + " *args, **kwargs)\n", + " \n", + " self.ntime_gulp = ntime_gulp\n", + " self.ngulp_done = 0\n", + " self.ngulp_max = 10\n", + " \n", + " self.navg = 24\n", + " tint = self.navg / 25e3\n", + " self.tgulp = tint * self.ntime_gulp\n", + " self.nbeam = 1\n", + " self.chan0 = 1234\n", + " self.nchan = 16*184\n", + " self.npol = 4\n", + " \n", + " def create_reader(self, name):\n", + " self.ngulp_done = 0\n", + " \n", + " class Random(object):\n", + " def __init__(self, name):\n", + " self.name = name\n", + " def __enter__(self):\n", + " return self\n", + " def __exit__(self, type, value, tb):\n", + " return True\n", + " def read(self, *args):\n", + " return numpy.random.randn(*args)\n", + " \n", + " return Random(name)\n", + " \n", + " def on_sequence(self, reader, name):\n", + " ohdr = {'time_tag': int(int(time.time())*196e6),\n", + " 'seq0': 0, \n", + " 'chan0': self.chan0,\n", + " 'cfreq0': self.chan0*25e3,\n", + " 'bw': self.nchan*25e3,\n", + " 'navg': self.navg,\n", + " 'nbeam': self.nbeam,\n", + " 'nchan': self.nchan,\n", + " 'npol': self.npol,\n", + " 'pols': 'XX,YY,CR,CI',\n", + " }\n", + " ohdr['_tensor'] = {'dtype': 'f32',\n", + " 'shape': [-1,\n", + " self.ntime_gulp,\n", + " self.nbeam,\n", + " self.nchan,\n", + " self.npol]\n", + " }\n", + " return [ohdr,]\n", + " \n", + " def on_data(self, reader, ospans):\n", + " indata = reader.read(self.ntime_gulp, self.nbeam, self.nchan, self.npol)\n", + " time.sleep(self.tgulp)\n", + "\n", + " if indata.shape[0] == self.ntime_gulp \\\n", + " and self.ngulp_done < self.ngulp_max:\n", + " ospans[0].data[...] = indata\n", + " self.ngulp_done += 1\n", + " return [1]\n", + " else:\n", + " return [0] " + ] + }, + { + "cell_type": "markdown", + "id": "essential-burst", + "metadata": { + "id": "essential-burst" + }, + "source": [ + "For the `bifrost.pipeline.SourceBlock` we need have slightly different requirements on `on_sequence` and `on_data`. Plus, we also need to define a `create_reader` method that returns a context manager (a class with `__enter__` and `__exit__` methods). \n", + "\n", + "For `on_sequence` we need to accept two arguments: a context manager created by `create_reader` and an identifying name (although it is not used here). \n", + "\n", + "For `on_data` we also have two arguments now, the context manager and a list of output spans. In here we need to grab the data from `reader` and put it into the appropriate part of the output spans.\n", + "\n", + "### The all-important bifrost `_tensor` dictionary\n", + "\n", + "We also see in `on_sequence` here that the header dictionary has a new required `_tensor` key. This key is the key to automatically chaining blocks together into a pipeline since it defines the data type and dimensionality for the spans/gulps. At a minimum, the `_tensor` must define the data dtype and shape:\n", + "\n", + "```python\n", + " '_tensor': {\n", + " 'dtype': self.dtype,\n", + " 'shape': [-1, self.gulp_size],\n", + " },\n", + "```\n", + "\n", + "The first index of shape is -1, to indicate that this is a single gulp from the data stream. \n", + "\n", + "However, most block require three additional keywords: \n", + "* `labels`, which give human-friendly names to each axis (e.g. 'time' or 'frequency').\n", + "* `scales`, which defines the start value and step size for each axis (e.g. `[1420, 0.1]` sets start value 1420, step size 0.1).\n", + "* `units`, which defines the units for each axis (e.g. 's' or 'MHz'). These are parsed using [Pint](https://pint.readthedocs.io/en/stable/), and can be used for consistency checking. For example, the `bf.views.merge_axes` view won't allow axes to merge if they have different units, say 'MHz' and 'Jy'. If you attempted to merge axes with 'MHz' and 'kHz' units, this would be allowed, and the corresponding `scales` are updated consistently.\n", + "\n", + "Here is another example `_tensor` with all keywords:\n", + "\n", + "```python\n", + " t0 = 1620192408.005579 # unix timestamp from when writing this tutorial\n", + " dt = 0.1 # 0.1 second step size\n", + " '_tensor': {\n", + " 'dtype': 'cf32'\n", + " 'shape': [-1, 1024, 4],\n", + " 'labels': ['time', 'frequency', 'pol'],\n", + " 'units': ['s', 'MHz', ''],\n", + " 'scales': [[t0, dt], [1420, 0.1], [None, None]]\n", + " }\n", + "```\n", + "\n", + "A transform block reads the tensor metadata, and must output a copy of the tensor with any required changes to shape/scale/units etc. \n", + "\n", + "### Creating a sink block\n", + "\n", + "We can also translate the original `WriterOp`:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "hispanic-toddler", + "metadata": { + "id": "hispanic-toddler" + }, + "outputs": [], + "source": [ + "class NewWriterOp(pipeline.SinkBlock):\n", + " def __init__(self, iring, *args, **kwargs):\n", + " super(NewWriterOp, self).__init__(iring, *args, **kwargs)\n", + " \n", + " self.time_tag = None\n", + " self.navg = 0\n", + " self.nbeam = 0\n", + " self.nchan = 0\n", + " self.npol = 0\n", + " \n", + " def on_sequence(self, iseq):\n", + " ihdr = iseq.header\n", + " print(\"Writer: Start of new sequence:\", str(ihdr))\n", + " \n", + " self.time_tag = iseq.time_tag\n", + " self.navg = ihdr['navg']\n", + " self.nbeam = ihdr['nbeam']\n", + " self.nchan = ihdr['nchan']\n", + " self.npol = ihdr['npol']\n", + "\n", + " def on_data(self, ispan):\n", + " idata = ispan.data.view(numpy.float32)\n", + " idata = idata.reshape(-1, self.nbeam, self.nchan, self.npol)\n", + " \n", + " with open(f\"{self.time_tag}.dat\", 'wb') as fh:\n", + " fh.write(idata.tobytes())\n", + " print(' ', fh.name, '@', os.path.getsize(fh.name))\n", + " self.time_tag += self.navg * idata.shape[0] * (int(196e6) // int(25e3))" + ] + }, + { + "cell_type": "markdown", + "id": "arbitrary-dynamics", + "metadata": { + "id": "arbitrary-dynamics" + }, + "source": [ + "Since this is a data sink we only have one argument for `on_data` which gives the block the current data span/gulp.\n", + "\n", + "We then can put these new blocks all together and launch them under Bifrost's default pipeline with:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "objective-principal", + "metadata": { + "id": "objective-principal", + "outputId": "b4c6067b-2b11-49c2-c5ab-490d6bc01a78", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Copy: Start of new sequence: {'time_tag': 324661240792000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', '_tensor': {'dtype': 'f32', 'shape': [-1, 250, 1, 2944, 4]}, 'name': 'unnamed-sequence-0', 'gulp_nframe': 1}\n", + "Writer: Start of new sequence: {'time_tag': 324661240792000000, 'seq0': 0, 'chan0': 1234, 'cfreq0': 30850000.0, 'bw': 73600000.0, 'navg': 24, 'nbeam': 1, 'nchan': 2944, 'npol': 4, 'pols': 'XX,YY,CR,CI', '_tensor': {'dtype': 'f32', 'shape': [-1, 250, 1, 2944, 4]}, 'name': 'unnamed-sequence-0', 'gulp_nframe': 1}\n", + " 324661240792000000.dat @ 11776000\n", + " 324661240839040000.dat @ 11776000\n", + " 324661240886080000.dat @ 11776000\n", + " 324661240933120000.dat @ 11776000\n", + " 324661240980160000.dat @ 11776000\n", + " 324661241027200000.dat @ 11776000\n", + " 324661241074240000.dat @ 11776000\n", + " 324661241121280000.dat @ 11776000\n", + " 324661241168320000.dat @ 11776000\n", + " 324661241215360000.dat @ 11776000\n" + ] + } + ], + "source": [ + "b_gen = NewGeneratorOp(250)\n", + "b_cpy = NewCopyOp(b_gen)\n", + "b_out = NewWriterOp(b_cpy)\n", + "\n", + "p = pipeline.get_default_pipeline()\n", + "p.run()\n", + "del p" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + }, + "colab": { + "name": "07_high_level_api.ipynb", + "provenance": [] } - ], - "source": [ - "b_gen = NewGeneratorOp(250)\n", - "b_cpy = NewCopyOp(b_gen)\n", - "b_out = NewWriterOp(b_cpy)\n", - "\n", - "p = pipeline.get_default_pipeline()\n", - "p.run()\n", - "del p" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file From 7d91311e66a62c99295004e361221a0f063d9175 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Jul 2022 15:01:49 -0600 Subject: [PATCH 0702/1155] Tag the installation key with 'c01ab' when we are running in Google Colab. --- python/bifrost/telemetry/__init__.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/python/bifrost/telemetry/__init__.py b/python/bifrost/telemetry/__init__.py index e3e4a674c..3a77c282b 100644 --- a/python/bifrost/telemetry/__init__.py +++ b/python/bifrost/telemetry/__init__.py @@ -63,8 +63,14 @@ _INSTALL_KEY = os.path.join(_CACHE_DIR, 'install.key') if not os.path.exists(_INSTALL_KEY): with open(_INSTALL_KEY, 'w') as fh: - fh.write(str(uuid.uuid4())) - + install_id = str(uuid.uuid4()) + try: + import google.colab + install_id = 'c01ab' + install_id[5:] + except ImportError: + pass + fh.write(install_id) + with open(_INSTALL_KEY, 'r') as fh: _INSTALL_KEY = fh.read().rstrip() From d07fd47c0b32ba229e248d7cfff29ce7d1269a0c Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 7 Jul 2022 18:29:33 -0400 Subject: [PATCH 0703/1155] Colabify 06, but it's causing a crash --- tutorial/06_data_capture.ipynb | 1068 ++++++++++++++++++++++++-------- 1 file changed, 813 insertions(+), 255 deletions(-) diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index a5fccf272..d505520bd 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -1,259 +1,817 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "4336558d", - "metadata": {}, - "source": [ - "# Data Capture\n", - "\n", - "*NOTE: This section of the tutorial previews a new packet capture interface that is currently under development at https://github.com/jaycedowell/bifrost/tree/disk-readers*\n", - "\n", - "Next we will look at how to use Bifrost to work with packetized data, either from the network or from packets recorded to a file. This is done through the `bifrost.packet_capture` module:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "372e7e14", - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "import ctypes\n", - "import threading\n", - "\n", - "import bifrost\n", - "from bifrost.address import Address\n", - "from bifrost.udp_socket import UDPSocket\n", - "from bifrost.packet_capture import PacketCaptureCallback, UDPCapture\n", - "\n", - "addr = Address('127.0.0.1', 10000)\n", - "sock = UDPSocket()\n", - "sock.bind(addr)\n", - "sock.timeout = 5.0\n", - "\n", - "class CaptureOp(object):\n", - " def __init__(self, log, oring, sock, nsrc=16, src0=0, max_size=9000, ntime_gulp=250, ntime_slot=25000, core=-1):\n", - " self.log = log\n", - " self.oring = oring\n", - " self.sock = sock\n", - " self.nsrc = nsrc\n", - " self.src0 = src0\n", - " self.max_size = max_size\n", - " self.ntime_gulp = ntime_gulp\n", - " self.ntime_slot = ntime_slot\n", - " self.core = core\n", - " self.shutdown_event = threading.Event()\n", - "\n", - " def shutdown(self):\n", - " self.shutdown_event.set()\n", - "\n", - " def seq_callback(\n", - " self, seq0, chan0, nchan, nsrc, time_tag_ptr, hdr_ptr, hdr_size_ptr):\n", - " timestamp0 = int((self.utc_start - ADP_EPOCH).total_seconds())\n", - " time_tag0 = timestamp0 * int(FS)\n", - " time_tag = time_tag0 + seq0 * (int(FS) // int(CHAN_BW))\n", - " print(\"++++++++++++++++ seq0 =\", seq0)\n", - " print(\" time_tag =\", time_tag)\n", - " time_tag_ptr[0] = time_tag\n", - " hdr = {\n", - " \"time_tag\": time_tag,\n", - " \"seq0\": seq0,\n", - " \"chan0\": chan0,\n", - " \"nchan\": nchan,\n", - " \"cfreq\": (chan0 + 0.5 * (nchan - 1)) * CHAN_BW,\n", - " \"bw\": nchan * CHAN_BW,\n", - " \"nstand\": nsrc * 16,\n", - " \"npol\": 2,\n", - " \"complex\": True,\n", - " \"nbit\": 4,\n", - " \"axes\": \"time,chan,stand,pol\",\n", - " }\n", - " print(\"******** CFREQ:\", hdr[\"cfreq\"])\n", - " hdr_str = json.dumps(hdr)\n", - " self.header_buf = ctypes.create_string_buffer(hdr_str)\n", - " hdr_ptr[0] = ctypes.cast(self.header_buf, ctypes.c_void_p)\n", - " hdr_size_ptr[0] = len(hdr_str)\n", - " return 0\n", - "\n", - " def main(self):\n", - " seq_callback = PacketCaptureCallback()\n", - " seq_callback.set_chips(self.seq_callback)\n", - " with UDPCapture('chips', self.sock, self.nsrc, self.src0, self.max_size,\n", - " self.ntime_gulp, self.ntime_slot, sequence_callback=seq_callback,\n", - " core=self.core) as capture:\n", - " while not self.shutdown_event.is_set():\n", - " status = capture.recv()\n", - " del capture" - ] - }, - { - "cell_type": "markdown", - "id": "3048e76d", - "metadata": {}, - "source": [ - "This block implements data capture of the [CHIPS format](https://github.com/jaycedowell/bifrost/blob/disk-readers/src/formats/chips.hpp#L36) from the network. The snippet starts out by creating a socket that will be used to receive the data on using `bifrost.address.Address` and `bifrost.udp_socket.UDPSocket`. The capture block looks similar to other blocks that we have looked at but there are a few things to note.\n", - " 1. This block accepts many more keywords than the previous block. These extra keywords are used to control the packet capture and data ordering when it is copied into the ring buffer. They are:\n", - " * `nsrc` - The number of packet sources to expect data from,\n", - " * `src0` - The source ID number for the first packet socket,\n", - " * `max_size` - The maximum packet size to accept. This is usually set to 9000 to allow for jumbo packets,\n", - " * `ntime_gulp` - This controls the internal buffer size used by the packet capture. Bifrost keeps two buffers open and releases them to the output ring as data from new gulps is received.\n", - " * `ntime_slot` - The approximate number of packet sets (a packet from all `nsrc` sources) per second. This is used by Bifrost to determine the boundaries in the gulps.\n", - " 2. There is a an internal `threading.Event` instance that is used as a signal for telling the `CaptureOp` block to stop. Without the capture would run indefinitely.\n", - " 3. There is a `seq_callback` method that is called by Bifrost when the packet sequence changes. This method accepts a format-specific number of arguments and returns a JSON-packed header that sent to the ring.\n", - " 4. The `main` method implements the packet capture by calling a collection of Bifrost classes:\n", - " * First, a new `PacketCaptureCallback` instance is created and then the callback for the CHIPS format is set to `CaptureOp.seq_callback`. This redies the method for Bifrost to use it when the sequence changes.\n", - " * Next, a new `UDPCapture` instance is created for the packet format with the relevant source/data parameters. This is used as a context for this packet capture itself.\n", - " * Finally, `UDPCapture.recv` is called repeatedly to receive and process packets. This method returns an integer after a gulp has been released to the ring. This interger stores the current state of the capture.\n", - "\n", - "As mentioned before, Bifrost also works with reading packets from a file using the `bifrost.packet_capture.DiskReader` class. This works similar to `UDPCapture` but the packet format specifiers require extra information in order to read packets from disk. For example, a CHIPS capture of 132 channels is specified as \"chips\" for `UDPCapture` but as \"chips_132\" for `DiskReader`." - ] - }, - { - "cell_type": "markdown", - "id": "52efad41", - "metadata": {}, - "source": [ - "## Writing Data\n", - "\n", - "Related to this capture interface is the `bifrost.packet_writer` module. This implments the reverse of the capture in that it takes data from a ring and write it to the network or disk.\n", - "\n", - "Let's look at an example of writing binary data in the [LWA TBN format](https://fornax.phys.unm.edu/lwa/trac/wiki/DP_Formats#TBNOutputInterface), a stream of 8+8-bit complex integers:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "a67846f0", - "metadata": {}, - "outputs": [ + "cells": [ + { + "cell_type": "markdown", + "id": "4336558d", + "metadata": { + "id": "4336558d" + }, + "source": [ + "# Data Capture\n", + "\n", + "*NOTE: This section of the tutorial previews a new packet capture interface that is currently under development at https://github.com/jaycedowell/bifrost/tree/disk-readers*\n", + "\n", + "\"Open\n", + "\n", + "Next we will look at how to use Bifrost to work with packetized data, either from the network or from packets recorded to a file. This is done through the `bifrost.packet_capture` module." + ] + }, + { + "cell_type": "code", + "source": [ + "%%capture install_log\n", + "# Import bifrost, but attempt to auto-install if needed (and we're running on\n", + "# Colab). If something goes wrong, evaluate install_log.show() in a new block\n", + "# to retrieve the details.\n", + "try:\n", + " import bifrost\n", + "except ModuleNotFoundError as exn:\n", + " try:\n", + " import google.colab\n", + " except ModuleNotFoundError:\n", + " raise exn\n", + " !sudo apt-get -qq install exuberant-ctags libopenblas-dev librdmacm-dev software-properties-common build-essential\n", + " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", + " ![ -d ~/bifrost/.git ] || git clone --branch ibverb-support https://github.com/ledatelescope/bifrost ~/bifrost\n", + " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", + " import bifrost" + ], + "metadata": { + "id": "2w7kFngftyj2" + }, + "id": "2w7kFngftyj2", + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "install_log.show()" + ], + "metadata": { + "id": "lItRteDeugFr", + "outputId": "40ddf1df-8a9f-47d6-a859-a771ba4f2d38", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "id": "lItRteDeugFr", + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "debconf: unable to initialize frontend: Dialog\n", + "debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76, <> line 1.)\n", + "debconf: falling back to frontend: Readline\n", + "debconf: unable to initialize frontend: Readline\n", + "debconf: (This frontend requires a controlling tty.)\n", + "debconf: falling back to frontend: Teletype\n", + "dpkg-preconfigure: unable to re-open stdin: \n", + "Selecting previously unselected package exuberant-ctags.\n", + "(Reading database ... \r(Reading database ... 5%\r(Reading database ... 10%\r(Reading database ... 15%\r(Reading database ... 20%\r(Reading database ... 25%\r(Reading database ... 30%\r(Reading database ... 35%\r(Reading database ... 40%\r(Reading database ... 45%\r(Reading database ... 50%\r(Reading database ... 55%\r(Reading database ... 60%\r(Reading database ... 65%\r(Reading database ... 70%\r(Reading database ... 75%\r(Reading database ... 80%\r(Reading database ... 85%\r(Reading database ... 90%\r(Reading database ... 95%\r(Reading database ... 100%\r(Reading database ... 155700 files and directories currently installed.)\n", + "Preparing to unpack .../exuberant-ctags_1%3a5.9~svn20110310-11_amd64.deb ...\n", + "Unpacking exuberant-ctags (1:5.9~svn20110310-11) ...\n", + "Setting up exuberant-ctags (1:5.9~svn20110310-11) ...\n", + "update-alternatives: using /usr/bin/ctags-exuberant to provide /usr/bin/ctags (ctags) in auto mode\n", + "update-alternatives: using /usr/bin/ctags-exuberant to provide /usr/bin/etags (etags) in auto mode\n", + "Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n", + " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Installing backend dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Preparing wheel metadata ... \u001b[?25l\u001b[?25hdone\n", + "\u001b[?25l\r\u001b[K |█▋ | 10 kB 30.0 MB/s eta 0:00:01\r\u001b[K |███▏ | 20 kB 35.5 MB/s eta 0:00:01\r\u001b[K |████▊ | 30 kB 13.6 MB/s eta 0:00:01\r\u001b[K |██████▎ | 40 kB 7.1 MB/s eta 0:00:01\r\u001b[K |███████▉ | 51 kB 6.4 MB/s eta 0:00:01\r\u001b[K |█████████▍ | 61 kB 7.6 MB/s eta 0:00:01\r\u001b[K |███████████ | 71 kB 8.6 MB/s eta 0:00:01\r\u001b[K |████████████▌ | 81 kB 8.4 MB/s eta 0:00:01\r\u001b[K |██████████████ | 92 kB 9.3 MB/s eta 0:00:01\r\u001b[K |███████████████▋ | 102 kB 7.9 MB/s eta 0:00:01\r\u001b[K |█████████████████▏ | 112 kB 7.9 MB/s eta 0:00:01\r\u001b[K |██████████████████▊ | 122 kB 7.9 MB/s eta 0:00:01\r\u001b[K |████████████████████▎ | 133 kB 7.9 MB/s eta 0:00:01\r\u001b[K |█████████████████████▉ | 143 kB 7.9 MB/s eta 0:00:01\r\u001b[K |███████████████████████▍ | 153 kB 7.9 MB/s eta 0:00:01\r\u001b[K |█████████████████████████ | 163 kB 7.9 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▋ | 174 kB 7.9 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▏ | 184 kB 7.9 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▊ | 194 kB 7.9 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▎| 204 kB 7.9 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 209 kB 7.9 MB/s \n", + "\u001b[?25h\u001b[?25l\r\u001b[K |██▌ | 10 kB 31.4 MB/s eta 0:00:01\r\u001b[K |█████ | 20 kB 41.0 MB/s eta 0:00:01\r\u001b[K |███████▌ | 30 kB 49.2 MB/s eta 0:00:01\r\u001b[K |██████████ | 40 kB 55.3 MB/s eta 0:00:01\r\u001b[K |████████████▋ | 51 kB 58.0 MB/s eta 0:00:01\r\u001b[K |███████████████ | 61 kB 62.2 MB/s eta 0:00:01\r\u001b[K |█████████████████▋ | 71 kB 63.1 MB/s eta 0:00:01\r\u001b[K |████████████████████▏ | 81 kB 63.8 MB/s eta 0:00:01\r\u001b[K |██████████████████████▋ | 92 kB 66.2 MB/s eta 0:00:01\r\u001b[K |█████████████████████████▏ | 102 kB 68.0 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▋ | 112 kB 68.0 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▏ | 122 kB 68.0 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 130 kB 68.0 MB/s \n", + "\u001b[?25h Building wheel for ctypesgen (PEP 517) ... \u001b[?25l\u001b[?25hdone\n", + "Cloning into '/root/bifrost'...\n", + "remote: Enumerating objects: 12929, done.\u001b[K\n", + "remote: Counting objects: 0% (1/3552)\u001b[K\rremote: Counting objects: 1% (36/3552)\u001b[K\rremote: Counting objects: 2% (72/3552)\u001b[K\rremote: Counting objects: 3% (107/3552)\u001b[K\rremote: Counting objects: 4% (143/3552)\u001b[K\rremote: Counting objects: 5% (178/3552)\u001b[K\rremote: Counting objects: 6% (214/3552)\u001b[K\rremote: Counting objects: 7% (249/3552)\u001b[K\rremote: Counting objects: 8% (285/3552)\u001b[K\rremote: Counting objects: 9% (320/3552)\u001b[K\rremote: Counting objects: 10% (356/3552)\u001b[K\rremote: Counting objects: 11% (391/3552)\u001b[K\rremote: Counting objects: 12% (427/3552)\u001b[K\rremote: Counting objects: 13% (462/3552)\u001b[K\rremote: Counting objects: 14% (498/3552)\u001b[K\rremote: Counting objects: 15% (533/3552)\u001b[K\rremote: Counting objects: 16% (569/3552)\u001b[K\rremote: Counting objects: 17% (604/3552)\u001b[K\rremote: Counting objects: 18% (640/3552)\u001b[K\rremote: Counting objects: 19% (675/3552)\u001b[K\rremote: Counting objects: 20% (711/3552)\u001b[K\rremote: Counting objects: 21% (746/3552)\u001b[K\rremote: Counting objects: 22% (782/3552)\u001b[K\rremote: Counting objects: 23% (817/3552)\u001b[K\rremote: Counting objects: 24% (853/3552)\u001b[K\rremote: Counting objects: 25% (888/3552)\u001b[K\rremote: Counting objects: 26% (924/3552)\u001b[K\rremote: Counting objects: 27% (960/3552)\u001b[K\rremote: Counting objects: 28% (995/3552)\u001b[K\rremote: Counting objects: 29% (1031/3552)\u001b[K\rremote: Counting objects: 30% (1066/3552)\u001b[K\rremote: Counting objects: 31% (1102/3552)\u001b[K\rremote: Counting objects: 32% (1137/3552)\u001b[K\rremote: Counting objects: 33% (1173/3552)\u001b[K\rremote: Counting objects: 34% (1208/3552)\u001b[K\rremote: Counting objects: 35% (1244/3552)\u001b[K\rremote: Counting objects: 36% (1279/3552)\u001b[K\rremote: Counting objects: 37% (1315/3552)\u001b[K\rremote: Counting objects: 38% (1350/3552)\u001b[K\rremote: Counting objects: 39% (1386/3552)\u001b[K\rremote: Counting objects: 40% (1421/3552)\u001b[K\rremote: Counting objects: 41% (1457/3552)\u001b[K\rremote: Counting objects: 42% (1492/3552)\u001b[K\rremote: Counting objects: 43% (1528/3552)\u001b[K\rremote: Counting objects: 44% (1563/3552)\u001b[K\rremote: Counting objects: 45% (1599/3552)\u001b[K\rremote: Counting objects: 46% (1634/3552)\u001b[K\rremote: Counting objects: 47% (1670/3552)\u001b[K\rremote: Counting objects: 48% (1705/3552)\u001b[K\rremote: Counting objects: 49% (1741/3552)\u001b[K\rremote: Counting objects: 50% (1776/3552)\u001b[K\rremote: Counting objects: 51% (1812/3552)\u001b[K\rremote: Counting objects: 52% (1848/3552)\u001b[K\rremote: Counting objects: 53% (1883/3552)\u001b[K\rremote: Counting objects: 54% (1919/3552)\u001b[K\rremote: Counting objects: 55% (1954/3552)\u001b[K\rremote: Counting objects: 56% (1990/3552)\u001b[K\rremote: Counting objects: 57% (2025/3552)\u001b[K\rremote: Counting objects: 58% (2061/3552)\u001b[K\rremote: Counting objects: 59% (2096/3552)\u001b[K\rremote: Counting objects: 60% (2132/3552)\u001b[K\rremote: Counting objects: 61% (2167/3552)\u001b[K\rremote: Counting objects: 62% (2203/3552)\u001b[K\rremote: Counting objects: 63% (2238/3552)\u001b[K\rremote: Counting objects: 64% (2274/3552)\u001b[K\rremote: Counting objects: 65% (2309/3552)\u001b[K\rremote: Counting objects: 66% (2345/3552)\u001b[K\rremote: Counting objects: 67% (2380/3552)\u001b[K\rremote: Counting objects: 68% (2416/3552)\u001b[K\rremote: Counting objects: 69% (2451/3552)\u001b[K\rremote: Counting objects: 70% (2487/3552)\u001b[K\rremote: Counting objects: 71% (2522/3552)\u001b[K\rremote: Counting objects: 72% (2558/3552)\u001b[K\rremote: Counting objects: 73% (2593/3552)\u001b[K\rremote: Counting objects: 74% (2629/3552)\u001b[K\rremote: Counting objects: 75% (2664/3552)\u001b[K\rremote: Counting objects: 76% (2700/3552)\u001b[K\rremote: Counting objects: 77% (2736/3552)\u001b[K\rremote: Counting objects: 78% (2771/3552)\u001b[K\rremote: Counting objects: 79% (2807/3552)\u001b[K\rremote: Counting objects: 80% (2842/3552)\u001b[K\rremote: Counting objects: 81% (2878/3552)\u001b[K\rremote: Counting objects: 82% (2913/3552)\u001b[K\rremote: Counting objects: 83% (2949/3552)\u001b[K\rremote: Counting objects: 84% (2984/3552)\u001b[K\rremote: Counting objects: 85% (3020/3552)\u001b[K\rremote: Counting objects: 86% (3055/3552)\u001b[K\rremote: Counting objects: 87% (3091/3552)\u001b[K\rremote: Counting objects: 88% (3126/3552)\u001b[K\rremote: Counting objects: 89% (3162/3552)\u001b[K\rremote: Counting objects: 90% (3197/3552)\u001b[K\rremote: Counting objects: 91% (3233/3552)\u001b[K\rremote: Counting objects: 92% (3268/3552)\u001b[K\rremote: Counting objects: 93% (3304/3552)\u001b[K\rremote: Counting objects: 94% (3339/3552)\u001b[K\rremote: Counting objects: 95% (3375/3552)\u001b[K\rremote: Counting objects: 96% (3410/3552)\u001b[K\rremote: Counting objects: 97% (3446/3552)\u001b[K\rremote: Counting objects: 98% (3481/3552)\u001b[K\rremote: Counting objects: 99% (3517/3552)\u001b[K\rremote: Counting objects: 100% (3552/3552)\u001b[K\rremote: Counting objects: 100% (3552/3552), done.\u001b[K\n", + "remote: Compressing objects: 0% (1/1156)\u001b[K\rremote: Compressing objects: 1% (12/1156)\u001b[K\rremote: Compressing objects: 2% (24/1156)\u001b[K\rremote: Compressing objects: 3% (35/1156)\u001b[K\rremote: Compressing objects: 4% (47/1156)\u001b[K\rremote: Compressing objects: 5% (58/1156)\u001b[K\rremote: Compressing objects: 6% (70/1156)\u001b[K\rremote: Compressing objects: 7% (81/1156)\u001b[K\rremote: Compressing objects: 8% (93/1156)\u001b[K\rremote: Compressing objects: 9% (105/1156)\u001b[K\rremote: Compressing objects: 10% (116/1156)\u001b[K\rremote: Compressing objects: 11% (128/1156)\u001b[K\rremote: Compressing objects: 12% (139/1156)\u001b[K\rremote: Compressing objects: 13% (151/1156)\u001b[K\rremote: Compressing objects: 14% (162/1156)\u001b[K\rremote: Compressing objects: 15% (174/1156)\u001b[K\rremote: Compressing objects: 16% (185/1156)\u001b[K\rremote: Compressing objects: 17% (197/1156)\u001b[K\rremote: Compressing objects: 18% (209/1156)\u001b[K\rremote: Compressing objects: 19% (220/1156)\u001b[K\rremote: Compressing objects: 20% (232/1156)\u001b[K\rremote: Compressing objects: 21% (243/1156)\u001b[K\rremote: Compressing objects: 22% (255/1156)\u001b[K\rremote: Compressing objects: 23% (266/1156)\u001b[K\rremote: Compressing objects: 24% (278/1156)\u001b[K\rremote: Compressing objects: 25% (289/1156)\u001b[K\rremote: Compressing objects: 26% (301/1156)\u001b[K\rremote: Compressing objects: 27% (313/1156)\u001b[K\rremote: Compressing objects: 28% (324/1156)\u001b[K\rremote: Compressing objects: 29% (336/1156)\u001b[K\rremote: Compressing objects: 30% (347/1156)\u001b[K\rremote: Compressing objects: 31% (359/1156)\u001b[K\rremote: Compressing objects: 32% (370/1156)\u001b[K\rremote: Compressing objects: 33% (382/1156)\u001b[K\rremote: Compressing objects: 34% (394/1156)\u001b[K\rremote: Compressing objects: 35% (405/1156)\u001b[K\rremote: Compressing objects: 36% (417/1156)\u001b[K\rremote: Compressing objects: 37% (428/1156)\u001b[K\rremote: Compressing objects: 38% (440/1156)\u001b[K\rremote: Compressing objects: 39% (451/1156)\u001b[K\rremote: Compressing objects: 40% (463/1156)\u001b[K\rremote: Compressing objects: 41% (474/1156)\u001b[K\rremote: Compressing objects: 42% (486/1156)\u001b[K\rremote: Compressing objects: 43% (498/1156)\u001b[K\rremote: Compressing objects: 44% (509/1156)\u001b[K\rremote: Compressing objects: 45% (521/1156)\u001b[K\rremote: Compressing objects: 46% (532/1156)\u001b[K\rremote: Compressing objects: 47% (544/1156)\u001b[K\rremote: Compressing objects: 48% (555/1156)\u001b[K\rremote: Compressing objects: 49% (567/1156)\u001b[K\rremote: Compressing objects: 50% (578/1156)\u001b[K\rremote: Compressing objects: 51% (590/1156)\u001b[K\rremote: Compressing objects: 52% (602/1156)\u001b[K\rremote: Compressing objects: 53% (613/1156)\u001b[K\rremote: Compressing objects: 54% (625/1156)\u001b[K\rremote: Compressing objects: 55% (636/1156)\u001b[K\rremote: Compressing objects: 56% (648/1156)\u001b[K\rremote: Compressing objects: 57% (659/1156)\u001b[K\rremote: Compressing objects: 58% (671/1156)\u001b[K\rremote: Compressing objects: 59% (683/1156)\u001b[K\rremote: Compressing objects: 60% (694/1156)\u001b[K\rremote: Compressing objects: 61% (706/1156)\u001b[K\rremote: Compressing objects: 62% (717/1156)\u001b[K\rremote: Compressing objects: 63% (729/1156)\u001b[K\rremote: Compressing objects: 64% (740/1156)\u001b[K\rremote: Compressing objects: 65% (752/1156)\u001b[K\rremote: Compressing objects: 66% (763/1156)\u001b[K\rremote: Compressing objects: 67% (775/1156)\u001b[K\rremote: Compressing objects: 68% (787/1156)\u001b[K\rremote: Compressing objects: 69% (798/1156)\u001b[K\rremote: Compressing objects: 70% (810/1156)\u001b[K\rremote: Compressing objects: 71% (821/1156)\u001b[K\rremote: Compressing objects: 72% (833/1156)\u001b[K\rremote: Compressing objects: 73% (844/1156)\u001b[K\rremote: Compressing objects: 74% (856/1156)\u001b[K\rremote: Compressing objects: 75% (867/1156)\u001b[K\rremote: Compressing objects: 76% (879/1156)\u001b[K\rremote: Compressing objects: 77% (891/1156)\u001b[K\rremote: Compressing objects: 78% (902/1156)\u001b[K\rremote: Compressing objects: 79% (914/1156)\u001b[K\rremote: Compressing objects: 80% (925/1156)\u001b[K\rremote: Compressing objects: 81% (937/1156)\u001b[K\rremote: Compressing objects: 82% (948/1156)\u001b[K\rremote: Compressing objects: 83% (960/1156)\u001b[K\rremote: Compressing objects: 84% (972/1156)\u001b[K\rremote: Compressing objects: 85% (983/1156)\u001b[K\rremote: Compressing objects: 86% (995/1156)\u001b[K\rremote: Compressing objects: 87% (1006/1156)\u001b[K\rremote: Compressing objects: 88% (1018/1156)\u001b[K\rremote: Compressing objects: 89% (1029/1156)\u001b[K\rremote: Compressing objects: 90% (1041/1156)\u001b[K\rremote: Compressing objects: 91% (1052/1156)\u001b[K\rremote: Compressing objects: 92% (1064/1156)\u001b[K\rremote: Compressing objects: 93% (1076/1156)\u001b[K\rremote: Compressing objects: 94% (1087/1156)\u001b[K\rremote: Compressing objects: 95% (1099/1156)\u001b[K\rremote: Compressing objects: 96% (1110/1156)\u001b[K\rremote: Compressing objects: 97% (1122/1156)\u001b[K\rremote: Compressing objects: 98% (1133/1156)\u001b[K\rremote: Compressing objects: 99% (1145/1156)\u001b[K\rremote: Compressing objects: 100% (1156/1156)\u001b[K\rremote: Compressing objects: 100% (1156/1156), done.\u001b[K\n", + "Receiving objects: 0% (1/12929) \rReceiving objects: 1% (130/12929) \rReceiving objects: 2% (259/12929) \rReceiving objects: 3% (388/12929) \rReceiving objects: 4% (518/12929) \rReceiving objects: 5% (647/12929) \rReceiving objects: 6% (776/12929) \rReceiving objects: 7% (906/12929) \rReceiving objects: 8% (1035/12929) \rReceiving objects: 9% (1164/12929) \rReceiving objects: 10% (1293/12929) \rReceiving objects: 11% (1423/12929) \rReceiving objects: 12% (1552/12929) \rReceiving objects: 13% (1681/12929) \rReceiving objects: 14% (1811/12929) \rReceiving objects: 15% (1940/12929) \rReceiving objects: 16% (2069/12929) \rReceiving objects: 17% (2198/12929) \rReceiving objects: 18% (2328/12929) \rReceiving objects: 19% (2457/12929) \rReceiving objects: 20% (2586/12929) \rReceiving objects: 21% (2716/12929) \rReceiving objects: 22% (2845/12929) \rReceiving objects: 23% (2974/12929) \rReceiving objects: 24% (3103/12929) \rReceiving objects: 25% (3233/12929) \rReceiving objects: 26% (3362/12929) \rReceiving objects: 27% (3491/12929) \rReceiving objects: 28% (3621/12929) \rReceiving objects: 29% (3750/12929) \rReceiving objects: 30% (3879/12929) \rReceiving objects: 31% (4008/12929) \rReceiving objects: 32% (4138/12929) \rReceiving objects: 33% (4267/12929) \rReceiving objects: 34% (4396/12929) \rReceiving objects: 35% (4526/12929) \rReceiving objects: 36% (4655/12929) \rReceiving objects: 37% (4784/12929) \rReceiving objects: 38% (4914/12929) \rReceiving objects: 39% (5043/12929) \rReceiving objects: 40% (5172/12929) \rReceiving objects: 41% (5301/12929) \rReceiving objects: 42% (5431/12929) \rReceiving objects: 43% (5560/12929) \rReceiving objects: 44% (5689/12929) \rReceiving objects: 45% (5819/12929) \rReceiving objects: 46% (5948/12929) \rReceiving objects: 47% (6077/12929) \rReceiving objects: 48% (6206/12929) \rReceiving objects: 49% (6336/12929) \rReceiving objects: 50% (6465/12929) \rReceiving objects: 51% (6594/12929) \rReceiving objects: 52% (6724/12929) \rReceiving objects: 53% (6853/12929) \rReceiving objects: 54% (6982/12929) \rReceiving objects: 55% (7111/12929) \rReceiving objects: 56% (7241/12929) \rReceiving objects: 57% (7370/12929) \rReceiving objects: 58% (7499/12929) \rReceiving objects: 59% (7629/12929) \rReceiving objects: 60% (7758/12929) \rReceiving objects: 61% (7887/12929) \rReceiving objects: 62% (8016/12929) \rReceiving objects: 63% (8146/12929) \rReceiving objects: 64% (8275/12929) \rReceiving objects: 65% (8404/12929) \rReceiving objects: 66% (8534/12929) \rReceiving objects: 67% (8663/12929) \rReceiving objects: 68% (8792/12929) \rReceiving objects: 69% (8922/12929) \rReceiving objects: 70% (9051/12929) \rReceiving objects: 71% (9180/12929) \rReceiving objects: 72% (9309/12929) \rReceiving objects: 73% (9439/12929) \rReceiving objects: 74% (9568/12929) \rReceiving objects: 75% (9697/12929) \rReceiving objects: 76% (9827/12929) \rReceiving objects: 77% (9956/12929) \rReceiving objects: 78% (10085/12929) \rReceiving objects: 79% (10214/12929) \rReceiving objects: 80% (10344/12929) \rReceiving objects: 81% (10473/12929) \rReceiving objects: 82% (10602/12929) \rReceiving objects: 83% (10732/12929) \rReceiving objects: 84% (10861/12929) \rReceiving objects: 85% (10990/12929) \rReceiving objects: 86% (11119/12929) \rReceiving objects: 87% (11249/12929) \rReceiving objects: 88% (11378/12929) \rReceiving objects: 89% (11507/12929) \rReceiving objects: 90% (11637/12929) \rReceiving objects: 91% (11766/12929) \rReceiving objects: 92% (11895/12929) \rReceiving objects: 93% (12024/12929) \rReceiving objects: 94% (12154/12929) \rReceiving objects: 95% (12283/12929) \rReceiving objects: 96% (12412/12929) \rReceiving objects: 97% (12542/12929) \rReceiving objects: 98% (12671/12929) \rReceiving objects: 99% (12800/12929) \rremote: Total 12929 (delta 2356), reused 3329 (delta 2231), pack-reused 9377\u001b[K\n", + "Receiving objects: 100% (12929/12929) \rReceiving objects: 100% (12929/12929), 6.89 MiB | 23.53 MiB/s, done.\n", + "Resolving deltas: 0% (0/8985) \rResolving deltas: 1% (113/8985) \rResolving deltas: 2% (181/8985) \rResolving deltas: 3% (277/8985) \rResolving deltas: 4% (428/8985) \rResolving deltas: 5% (486/8985) \rResolving deltas: 6% (568/8985) \rResolving deltas: 7% (644/8985) \rResolving deltas: 8% (783/8985) \rResolving deltas: 9% (827/8985) \rResolving deltas: 10% (918/8985) \rResolving deltas: 11% (1019/8985) \rResolving deltas: 12% (1080/8985) \rResolving deltas: 13% (1198/8985) \rResolving deltas: 14% (1264/8985) \rResolving deltas: 15% (1360/8985) \rResolving deltas: 16% (1485/8985) \rResolving deltas: 17% (1542/8985) \rResolving deltas: 18% (1627/8985) \rResolving deltas: 19% (1725/8985) \rResolving deltas: 20% (1814/8985) \rResolving deltas: 21% (1889/8985) \rResolving deltas: 22% (2036/8985) \rResolving deltas: 23% (2069/8985) \rResolving deltas: 24% (2162/8985) \rResolving deltas: 25% (2294/8985) \rResolving deltas: 26% (2391/8985) \rResolving deltas: 27% (2437/8985) \rResolving deltas: 29% (2614/8985) \rResolving deltas: 30% (2746/8985) \rResolving deltas: 31% (2789/8985) \rResolving deltas: 33% (3009/8985) \rResolving deltas: 34% (3072/8985) \rResolving deltas: 35% (3164/8985) \rResolving deltas: 36% (3301/8985) \rResolving deltas: 37% (3366/8985) \rResolving deltas: 38% (3419/8985) \rResolving deltas: 40% (3596/8985) \rResolving deltas: 41% (3697/8985) \rResolving deltas: 42% (3780/8985) \rResolving deltas: 45% (4109/8985) \rResolving deltas: 46% (4153/8985) \rResolving deltas: 47% (4235/8985) \rResolving deltas: 48% (4352/8985) \rResolving deltas: 49% (4425/8985) \rResolving deltas: 51% (4604/8985) \rResolving deltas: 53% (4778/8985) \rResolving deltas: 56% (5090/8985) \rResolving deltas: 57% (5153/8985) \rResolving deltas: 58% (5229/8985) \rResolving deltas: 59% (5337/8985) \rResolving deltas: 60% (5400/8985) \rResolving deltas: 61% (5482/8985) \rResolving deltas: 62% (5587/8985) \rResolving deltas: 63% (5662/8985) \rResolving deltas: 64% (5757/8985) \rResolving deltas: 65% (5880/8985) \rResolving deltas: 66% (5937/8985) \rResolving deltas: 67% (6033/8985) \rResolving deltas: 69% (6252/8985) \rResolving deltas: 70% (6311/8985) \rResolving deltas: 71% (6392/8985) \rResolving deltas: 72% (6491/8985) \rResolving deltas: 73% (6566/8985) \rResolving deltas: 74% (6649/8985) \rResolving deltas: 78% (7024/8985) \rResolving deltas: 80% (7265/8985) \rResolving deltas: 81% (7364/8985) \rResolving deltas: 82% (7391/8985) \rResolving deltas: 83% (7478/8985) \rResolving deltas: 84% (7550/8985) \rResolving deltas: 85% (7669/8985) \rResolving deltas: 86% (7732/8985) \rResolving deltas: 87% (7817/8985) \rResolving deltas: 88% (7932/8985) \rResolving deltas: 89% (8006/8985) \rResolving deltas: 90% (8127/8985) \rResolving deltas: 91% (8200/8985) \rResolving deltas: 92% (8279/8985) \rResolving deltas: 93% (8374/8985) \rResolving deltas: 94% (8480/8985) \rResolving deltas: 95% (8536/8985) \rResolving deltas: 96% (8642/8985) \rResolving deltas: 97% (8719/8985) \rResolving deltas: 98% (8806/8985) \rResolving deltas: 99% (8901/8985) \rResolving deltas: 100% (8985/8985) \rResolving deltas: 100% (8985/8985), done.\n", + "checking build system type... x86_64-unknown-linux-gnu\n", + "checking host system type... x86_64-unknown-linux-gnu\n", + "checking how to print strings... printf\n", + "checking for gcc... gcc\n", + "checking whether the C compiler works... yes\n", + "checking for C compiler default output file name... a.out\n", + "checking for suffix of executables... \n", + "checking whether we are cross compiling... no\n", + "checking for suffix of object files... o\n", + "checking whether the compiler supports GNU C... yes\n", + "checking whether gcc accepts -g... yes\n", + "checking for gcc option to enable C11 features... none needed\n", + "checking for a sed that does not truncate output... /bin/sed\n", + "checking for grep that handles long lines and -e... /bin/grep\n", + "checking for egrep... /bin/grep -E\n", + "checking for fgrep... /bin/grep -F\n", + "checking for ld used by gcc... /usr/bin/ld\n", + "checking if the linker (/usr/bin/ld) is GNU ld... yes\n", + "checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B\n", + "checking the name lister (/usr/bin/nm -B) interface... BSD nm\n", + "checking whether ln -s works... yes\n", + "checking the maximum length of command line arguments... 1572864\n", + "checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format... func_convert_file_noop\n", + "checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop\n", + "checking for /usr/bin/ld option to reload object files... -r\n", + "checking for objdump... objdump\n", + "checking how to recognize dependent libraries... pass_all\n", + "checking for dlltool... no\n", + "checking how to associate runtime and link libraries... printf %s\\n\n", + "checking for g++... g++\n", + "checking whether the compiler supports GNU C++... yes\n", + "checking whether g++ accepts -g... yes\n", + "checking for g++ option to enable C++11 features... none needed\n", + "checking for ar... ar\n", + "checking for archiver @FILE support... @\n", + "checking for strip... strip\n", + "checking for ranlib... ranlib\n", + "checking for gawk... no\n", + "checking for mawk... mawk\n", + "checking command to parse /usr/bin/nm -B output from gcc object... ok\n", + "checking for sysroot... no\n", + "checking for a working dd... /bin/dd\n", + "checking how to truncate binary pipes... /bin/dd bs=4096 count=1\n", + "./configure: line 7430: /usr/bin/file: No such file or directory\n", + "checking for mt... no\n", + "checking if : is a manifest tool... no\n", + "checking for stdio.h... yes\n", + "checking for stdlib.h... yes\n", + "checking for string.h... yes\n", + "checking for inttypes.h... yes\n", + "checking for stdint.h... yes\n", + "checking for strings.h... yes\n", + "checking for sys/stat.h... yes\n", + "checking for sys/types.h... yes\n", + "checking for unistd.h... yes\n", + "checking for dlfcn.h... yes\n", + "checking for objdir... .libs\n", + "checking if gcc supports -fno-rtti -fno-exceptions... no\n", + "checking for gcc option to produce PIC... -fPIC -DPIC\n", + "checking if gcc PIC flag -fPIC -DPIC works... yes\n", + "checking if gcc static flag -static works... yes\n", + "checking if gcc supports -c -o file.o... yes\n", + "checking if gcc supports -c -o file.o... (cached) yes\n", + "checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes\n", + "checking whether -lc should be explicitly linked in... no\n", + "checking dynamic linker characteristics... GNU/Linux ld.so\n", + "checking how to hardcode library paths into programs... immediate\n", + "checking whether stripping libraries is possible... yes\n", + "checking if libtool supports shared libraries... yes\n", + "checking whether to build shared libraries... yes\n", + "checking whether to build static libraries... yes\n", + "checking how to run the C++ preprocessor... g++ -E\n", + "checking for ld used by g++... /usr/bin/ld\n", + "checking if the linker (/usr/bin/ld) is GNU ld... yes\n", + "checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes\n", + "checking for g++ option to produce PIC... -fPIC -DPIC\n", + "checking if g++ PIC flag -fPIC -DPIC works... yes\n", + "checking if g++ static flag -static works... yes\n", + "checking if g++ supports -c -o file.o... yes\n", + "checking if g++ supports -c -o file.o... (cached) yes\n", + "checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes\n", + "checking dynamic linker characteristics... (cached) GNU/Linux ld.so\n", + "checking how to hardcode library paths into programs... immediate\n", + "checking for gcc... (cached) gcc\n", + "checking whether the compiler supports GNU C... (cached) yes\n", + "checking whether gcc accepts -g... (cached) yes\n", + "checking for gcc option to enable C11 features... (cached) none needed\n", + "checking whether the compiler supports GNU C++... (cached) yes\n", + "checking whether g++ accepts -g... (cached) yes\n", + "checking for g++ option to enable C++11 features... (cached) none needed\n", + "checking for gawk... (cached) mawk\n", + "checking for a sed that does not truncate output... (cached) /bin/sed\n", + "checking for a BSD-compatible install... /usr/bin/install -c\n", + "checking whether ln -s works... yes\n", + "checking whether make sets $(MAKE)... yes\n", + "checking whether ctags executable path has been provided... no\n", + "checking for ctags... /usr/bin/ctags\n", + "checking whether /usr/bin/ctags is exuberant... yes\n", + "checking for inline... inline\n", + "checking whether g++ supports C++20 features with -std=c++20... no\n", + "checking whether g++ supports C++20 features with +std=c++20... no\n", + "checking whether g++ supports C++20 features with -h std=c++20... no\n", + "configure: No compiler with C++20 support was found\n", + "checking whether g++ supports C++17 features with -std=c++17... yes\n", + "checking for C++ std::filesystem support... no\n", + "checking for C++ std::string::ends_with support... no\n", + "checking for memset... yes\n", + "checking for rint... yes\n", + "checking for socket... yes\n", + "checking for recvmsg... yes\n", + "checking for sqrt... yes\n", + "checking for strerror... yes\n", + "checking for arpa/inet.h... yes\n", + "checking for netdb.h... yes\n", + "checking for netinet/in.h... yes\n", + "checking for sys/file.h... yes\n", + "checking for sys/ioctl.h... yes\n", + "checking for sys/socket.h... yes\n", + "checking for _Bool... no\n", + "checking for stdbool.h that conforms to C99... yes\n", + "checking for GNU libc compatible malloc... yes\n", + "checking for OpenMP flag of C++ compiler... -fopenmp\n", + "checking for ptrdiff_t... yes\n", + "checking for int16_t... yes\n", + "checking for int32_t... yes\n", + "checking for int64_t... yes\n", + "checking for int8_t... yes\n", + "checking for pid_t... yes\n", + "checking for size_t... yes\n", + "checking for ssize_t... yes\n", + "checking for uint16_t... yes\n", + "checking for uint32_t... yes\n", + "checking for uint64_t... yes\n", + "checking for uint8_t... yes\n", + "checking for long double with more range or precision than double... yes\n", + "checking for numa_node_of_cpu in -lnuma... yes\n", + "checking for hwloc_topology_init in -lhwloc... yes\n", + "checking for ibv_query_device in -libverbs... yes\n", + "checking for rdma_get_devices in -lrdmacm... yes\n", + "checking for nvcc... /usr/local/cuda/bin/nvcc\n", + "checking for nvprune... /usr/local/cuda/bin/nvprune\n", + "checking for cuobjdump... /usr/local/cuda/bin/cuobjdump\n", + "checking for a working CUDA installation... yes - v11.1\n", + "checking for CUDA CXX standard support... C++17\n", + "checking for valid CUDA architectures... found: 35 37 50 52 53 60 61 62 70 72 75 80 86\n", + "checking which CUDA architectures to target... 70 75\n", + "checking for valid requested CUDA architectures... yes\n", + "checking for Pascal-style CUDA managed memory... yes\n", + "checking for /dev/shm... yes\n", + "checking if the compiler accepts '-march=native'... yes\n", + "checking whether python executable path has been provided... no\n", + "checking for python... /usr/local/bin/python\n", + "checking whether /usr/local/bin/python as ctypesgen... yes\n", + "checking whether docker executable path has been provided... no\n", + "checking for docker... no\n", + "checking for doxygen... no\n", + "configure: WARNING: doxygen not found - will not generate any doxygen documentation\n", + "checking for perl... /usr/bin/perl\n", + "configure: creating ./config.status\n", + "config.status: creating config.mk\n", + "config.status: creating Makefile\n", + "config.status: creating src/Makefile\n", + "config.status: creating python/Makefile\n", + "config.status: creating share/bifrost.pc\n", + "config.status: creating src/bifrost/config.h\n", + "config.status: executing libtool commands\n", + "\n", + "configure: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms\n", + "\n", + "configure: cuda: yes - v11.1 - 70 75\n", + "configure: numa: yes\n", + "configure: hwloc: yes\n", + "configure: libvma: no\n", + "configure: libverbs: yes\n", + "configure: librdmacm: yes\n", + "configure: python bindings: yes\n", + "configure: memory alignment: 4096\n", + "configure: logging directory: /dev/shm/bifrost\n", + "configure: options: native map_cache\n", + "\n", + "Bifrost is now ready to be compiled. Please run 'make'\n", + "\n", + "make -C src all\n", + "make[1]: Entering directory '/root/bifrost/src'\n", + "Building C++ source file memory.cpp\n", + "Building C++ source file affinity.cpp\n", + "Building C++ source file testsuite.cpp\n", + "Building C++ source file ring_impl.cpp\n", + "Building C++ source file array.cpp\n", + "Building C++ source file fileutils.cpp\n", + "Building C++ source file ring.cpp\n", + "Building C++ source file cuda.cpp\n", + "Building C++ source file unpack.cpp\n", + "Building C++ source file proclog.cpp\n", + "Building C++ source file address.cpp\n", + "Building C++ source file hw_locality.cpp\n", + "Building C++ source file packet_capture.cpp\n", + "Building C++ source file udp_socket.cpp\n", + "Building C++ source file quantize.cpp\n", + "Building C++ source file common.cpp\n", + "Building C++ source file packet_writer.cpp\n", + "Building CUDA source file transpose.cu\n", + "Building C++ source file rdma.cpp\n", + "Building CUDA source file fft.cu\n", + "Building CUDA source file fdmt.cu\n", + "Building C++ source file trace.cpp\n", + "Building CUDA source file linalg.cu\n", + "Building CUDA source file reduce.cu\n", + "Building CUDA source file linalg_kernels.cu\n", + "Building CUDA source file romein.cu\n", + "Building CUDA source file romein_kernels.cu\n", + "Building CUDA source file fir.cu\n", + "Building CUDA source file guantize.cu\n", + "Generating libbifrost.version\n", + "Building CUDA source file gunpack.cu\n", + "Building JIT version of ArrayIndexer.cuh\n", + "Building JIT version of int_fastdiv.h\n", + "Building JIT version of ShapeIndexer.cuh\n", + "Building JIT version of Vector.hpp\n", + "Building JIT version of IndexArray.cuh\n", + "Building JIT version of Complex.hpp\n", + "Building C++ source file map.cpp\n", + "In file included from \u001b[01m\u001b[Kpacket_capture.hpp:290:0\u001b[m\u001b[K,\n", + " from \u001b[01m\u001b[Kpacket_capture.cpp:29\u001b[m\u001b[K:\n", + "\u001b[01m\u001b[Kib_verbs.hpp:\u001b[m\u001b[K In member function ‘\u001b[01m\u001b[Kvoid \n", + " Verbs::get_interface_name(char*)\u001b[m\u001b[K’:\n", + "\u001b[01m\u001b[Kib_verbs.hpp:189:44:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kunknown option \n", + " after ‘\u001b[01m\u001b[K#pragma GCC diagnostic\u001b[m\u001b[K’ kind \n", + " [\u001b[01;35m\u001b[K-Wpragmas\u001b[m\u001b[K]\n", + " #pragma GCC diagnostic ignored \u001b[01;35m\u001b[K\"-Wstringop-truncation\"\n", + "\u001b[m\u001b[K\n", + " \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~\n", + "\u001b[m\u001b[K\n", + "\u001b[01m\u001b[Kib_verbs.hpp:204:48:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kunknown option \n", + " after ‘\u001b[01m\u001b[K#pragma GCC diagnostic\u001b[m\u001b[K’ kind \n", + " [\u001b[01;35m\u001b[K-Wpragmas\u001b[m\u001b[K]\n", + " #pragma GCC diagnostic ignored \u001b[01;35m\u001b[K\"-Wstringop-truncatio\n", + "n\"\u001b[m\u001b[K\n", + " \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~\n", + "~~\u001b[m\u001b[K\n", + "In file included from \u001b[01m\u001b[Kpacket_capture.cpp:29:0\u001b[m\u001b[K:\n", + "\u001b[01m\u001b[Kpacket_capture.hpp:\u001b[m\u001b[K In member function ‘\u001b[01m\u001b[Kvirtual bool \n", + " BFpacketcapture_cor_impl::has_sequence_changed(const PacketDesc*)\u001b[m\u001b[K’:\n", + "\u001b[01m\u001b[Kpacket_capture.hpp:839:37:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kcomparison \n", + " between signed and unsigned integer expressions \n", + " [\u001b[01;35m\u001b[K-Wsign-compare\u001b[m\u001b[K]\n", + " || (\u001b[01;35m\u001b[Kpkt->decimation != _navg\u001b[m\u001b[K));\n", + " \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~^~~~~~~~\u001b[m\u001b[K\n", + "In file included from \u001b[01m\u001b[Kpacket_writer.hpp:190:0\u001b[m\u001b[K,\n", + " from \u001b[01m\u001b[Kpacket_writer.cpp:29\u001b[m\u001b[K:\n", + "\u001b[01m\u001b[Kib_verbs.hpp:\u001b[m\u001b[K In member function ‘\u001b[01m\u001b[Kvoid \n", + " Verbs::get_interface_name(char*)\u001b[m\u001b[K’:\n", + "\u001b[01m\u001b[Kib_verbs.hpp:189:44:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kunknown option \n", + " after ‘\u001b[01m\u001b[K#pragma GCC diagnostic\u001b[m\u001b[K’ kind \n", + " [\u001b[01;35m\u001b[K-Wpragmas\u001b[m\u001b[K]\n", + " #pragma GCC diagnostic ignored \u001b[01;35m\u001b[K\"-Wstringop-truncation\"\n", + "\u001b[m\u001b[K\n", + " \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~\n", + "\u001b[m\u001b[K\n", + "\u001b[01m\u001b[Kib_verbs.hpp:204:48:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kunknown option \n", + " after ‘\u001b[01m\u001b[K#pragma GCC diagnostic\u001b[m\u001b[K’ kind \n", + " [\u001b[01;35m\u001b[K-Wpragmas\u001b[m\u001b[K]\n", + " #pragma GCC diagnostic ignored \u001b[01;35m\u001b[K\"-Wstringop-truncatio\n", + "n\"\u001b[m\u001b[K\n", + " \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~\n", + "~~\u001b[m\u001b[K\n", + "Linking _cuda_device_link.o\n", + "\u001b[01m\u001b[Ktranspose.cu:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[KBFstatus \n", + " transpose_simple(const BFarray*, const BFarray*, const int*)\u001b[m\u001b[K’:\n", + "\u001b[01m\u001b[Ktranspose.cu:319:32:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Kaxes_inverted\u001b[m\u001b[K’\n", + " may be used uninitialized in this function \n", + " [\u001b[01;35m\u001b[K-Wmaybe-uninitialized\u001b[m\u001b[K]\n", + " func_str += hex_digits[a\u001b[01;35m\u001b[Kxes[0]]\u001b[m\u001b[K;\n", + " \u001b[01;35m\u001b[K~~~~~~^\u001b[m\u001b[K\n", + "Linking libbifrost.so.0.10\n", + "Successfully built libbifrost.so.0.10\n", + "make[1]: Leaving directory '/root/bifrost/src'\n", + "make -C python build\n", + "make[1]: Entering directory '/root/bifrost/python'\n", + "# Build the libbifrost wrapper\n", + "/usr/local/bin/python -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -lbifrost -I../src ../src/bifrost/address.h ../src/bifrost/memory.h ../src/bifrost/reduce.h ../src/bifrost/io.h ../src/bifrost/ring.h ../src/bifrost/rdma.h ../src/bifrost/cuda.h ../src/bifrost/fdmt.h ../src/bifrost/transpose.h ../src/bifrost/testsuite.h ../src/bifrost/config.h ../src/bifrost/linalg.h ../src/bifrost/common.h ../src/bifrost/unpack.h ../src/bifrost/udp_socket.h ../src/bifrost/affinity.h ../src/bifrost/packet_capture.h ../src/bifrost/fft.h ../src/bifrost/map.h ../src/bifrost/proclog.h ../src/bifrost/array.h ../src/bifrost/quantize.h ../src/bifrost/fir.h ../src/bifrost/romein.h ../src/bifrost/packet_writer.h -o bifrost/libbifrost_generated.py\n", + "INFO: Status: Preprocessing /tmp/tmpr1s5282d.h\n", + "INFO: Status: gcc -E -U __GNUC__ -dD -I\"../src\" \"-D__extension__=\" \"-D__const=const\" \"-D__asm__(x)=\" \"-D__asm(x)=\" \"-DCTYPESGEN=1\" \"/tmp/tmpr1s5282d.h\"\n", + "INFO: Status: Parsing /tmp/tmpr1s5282d.h\n", + "ERROR: /usr/include/x86_64-linux-gnu/sys/cdefs.h:240: Syntax error at '\\n'\n", + "INFO: Status: Processing description list.\n", + "WARNING: Could not load library \"bifrost\". Okay, I'll try to load it at runtime instead. \n", + "INFO: Status: Writing to bifrost/libbifrost_generated.py.\n", + "INFO: Status: Wrapping complete.\n", + "# WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p)\n", + "/bin/sed -i.orig -e 's/POINTER(c_char)/c_char_p/g' bifrost/libbifrost_generated.py\n", + "# WAR for a buggy WAR in ctypesgen that breaks type checking and auto-byref functionality\n", + "/bin/sed -i.orig -e 's/def POINTER/def POINTER_not_used/' bifrost/libbifrost_generated.py\n", + "# WAR for a buggy WAR in ctypesgen that breaks string buffer arguments (e.g., as in address.py)\n", + "/bin/sed -i.orig -e 's/class String/String = c_char_p\\nclass String_not_used/' bifrost/libbifrost_generated.py\n", + "/bin/sed -i.orig -e 's/String.from_param/String_not_used.from_param/g' bifrost/libbifrost_generated.py\n", + "/bin/sed -i.orig -e 's/def ReturnString/ReturnString = c_char_p\\ndef ReturnString_not_used/' bifrost/libbifrost_generated.py\n", + "/bin/sed -i.orig -e '/errcheck = ReturnString/s/^/#/' bifrost/libbifrost_generated.py\n", + "/usr/local/bin/python setup.py build \n", + "running build\n", + "running build_py\n", + "creating build\n", + "creating build/lib\n", + "creating build/lib/bifrost\n", + "copying bifrost/ring.py -> build/lib/bifrost\n", + "copying bifrost/map.py -> build/lib/bifrost\n", + "copying bifrost/DataType.py -> build/lib/bifrost\n", + "copying bifrost/temp_storage.py -> build/lib/bifrost\n", + "copying bifrost/sigproc2.py -> build/lib/bifrost\n", + "copying bifrost/affinity.py -> build/lib/bifrost\n", + "copying bifrost/block_chainer.py -> build/lib/bifrost\n", + "copying bifrost/sigproc.py -> build/lib/bifrost\n", + "copying bifrost/header_standard.py -> build/lib/bifrost\n", + "copying bifrost/block.py -> build/lib/bifrost\n", + "copying bifrost/packet_writer.py -> build/lib/bifrost\n", + "copying bifrost/udp_socket.py -> build/lib/bifrost\n", + "copying bifrost/transpose.py -> build/lib/bifrost\n", + "copying bifrost/romein.py -> build/lib/bifrost\n", + "copying bifrost/core.py -> build/lib/bifrost\n", + "copying bifrost/device.py -> build/lib/bifrost\n", + "copying bifrost/Space.py -> build/lib/bifrost\n", + "copying bifrost/__init__.py -> build/lib/bifrost\n", + "copying bifrost/reduce.py -> build/lib/bifrost\n", + "copying bifrost/address.py -> build/lib/bifrost\n", + "copying bifrost/memory.py -> build/lib/bifrost\n", + "copying bifrost/units.py -> build/lib/bifrost\n", + "copying bifrost/ring2.py -> build/lib/bifrost\n", + "copying bifrost/unpack.py -> build/lib/bifrost\n", + "copying bifrost/fdmt.py -> build/lib/bifrost\n", + "copying bifrost/quantize.py -> build/lib/bifrost\n", + "copying bifrost/pipeline.py -> build/lib/bifrost\n", + "copying bifrost/psrdada.py -> build/lib/bifrost\n", + "copying bifrost/packet_capture.py -> build/lib/bifrost\n", + "copying bifrost/proclog.py -> build/lib/bifrost\n", + "copying bifrost/ndarray.py -> build/lib/bifrost\n", + "copying bifrost/dtype.py -> build/lib/bifrost\n", + "copying bifrost/GPUArray.py -> build/lib/bifrost\n", + "copying bifrost/guppi_raw.py -> build/lib/bifrost\n", + "copying bifrost/libbifrost.py -> build/lib/bifrost\n", + "copying bifrost/linalg.py -> build/lib/bifrost\n", + "copying bifrost/rdma.py -> build/lib/bifrost\n", + "copying bifrost/libbifrost_generated.py -> build/lib/bifrost\n", + "copying bifrost/fft.py -> build/lib/bifrost\n", + "copying bifrost/portaudio.py -> build/lib/bifrost\n", + "copying bifrost/fir.py -> build/lib/bifrost\n", + "creating build/lib/bifrost/version\n", + "copying bifrost/version/__init__.py -> build/lib/bifrost/version\n", + "copying bifrost/version/__main__.py -> build/lib/bifrost/version\n", + "creating build/lib/bifrost/telemetry\n", + "copying bifrost/telemetry/__init__.py -> build/lib/bifrost/telemetry\n", + "copying bifrost/telemetry/__main__.py -> build/lib/bifrost/telemetry\n", + "creating build/lib/bifrost/views\n", + "copying bifrost/views/__init__.py -> build/lib/bifrost/views\n", + "copying bifrost/views/basic_views.py -> build/lib/bifrost/views\n", + "creating build/lib/bifrost/blocks\n", + "copying bifrost/blocks/correlate.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/binary_io.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/sigproc.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/convert_visibilities.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/audio.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/reverse.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/print_header.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/transpose.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/scrunch.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/detect.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/__init__.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/reduce.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/unpack.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/copy.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/fdmt.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/quantize.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/fftshift.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/psrdada.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/wav.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/serialize.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/guppi_raw.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/fft.py -> build/lib/bifrost/blocks\n", + "copying bifrost/blocks/accumulate.py -> build/lib/bifrost/blocks\n", + "running build_scripts\n", + "creating build/scripts-3.7\n", + "copying and adjusting ../tools/pipeline2dot.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/like_top.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/like_ps.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/like_pmap.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/setirq.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/getsiblings.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/getirq.py -> build/scripts-3.7\n", + "copying and adjusting ../tools/like_bmon.py -> build/scripts-3.7\n", + "changing mode of build/scripts-3.7/pipeline2dot.py from 644 to 755\n", + "changing mode of build/scripts-3.7/like_top.py from 644 to 755\n", + "changing mode of build/scripts-3.7/like_ps.py from 644 to 755\n", + "changing mode of build/scripts-3.7/like_pmap.py from 644 to 755\n", + "changing mode of build/scripts-3.7/setirq.py from 644 to 755\n", + "changing mode of build/scripts-3.7/getsiblings.py from 644 to 755\n", + "changing mode of build/scripts-3.7/getirq.py from 644 to 755\n", + "changing mode of build/scripts-3.7/like_bmon.py from 644 to 755\n", + "make[1]: Leaving directory '/root/bifrost/python'\n", + "mkdir -p /usr/local/lib\n", + "cp lib/libbifrost.so.0.10 /usr/local/lib/libbifrost.so.0.10\n", + "ln -f -s libbifrost.so.0.10 /usr/local/lib/libbifrost.so.0\n", + "ln -f -s libbifrost.so.0.10 /usr/local/lib/libbifrost.so\n", + "mkdir -p /usr/local/include/bifrost\n", + "cp src/bifrost/address.h src/bifrost/memory.h src/bifrost/reduce.h src/bifrost/io.h src/bifrost/ring.h src/bifrost/rdma.h src/bifrost/cuda.h src/bifrost/fdmt.h src/bifrost/transpose.h src/bifrost/testsuite.h src/bifrost/config.h src/bifrost/linalg.h src/bifrost/common.h src/bifrost/unpack.h src/bifrost/udp_socket.h src/bifrost/affinity.h src/bifrost/packet_capture.h src/bifrost/fft.h src/bifrost/map.h src/bifrost/proclog.h src/bifrost/array.h src/bifrost/quantize.h src/bifrost/fir.h src/bifrost/romein.h src/bifrost/packet_writer.h /usr/local/include/bifrost/\n", + "mkdir -p /usr/local/share/bifrost\n", + "cp share/bifrost.m4 /usr/local/share/bifrost/\n", + "mkdir -p /usr/local/lib/pkgconfig\n", + "cp share/bifrost.pc /usr/local/lib/pkgconfig/\n", + "make -C python install\n", + "make[1]: Entering directory '/root/bifrost/python'\n", + "/usr/local/bin/python setup.py build \n", + "running build\n", + "running build_py\n", + "running build_scripts\n", + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Processing /root/bifrost/python\n", + "\u001b[33m DEPRECATION: A future pip version will change local packages to be built in-place without first copying to a temporary directory. We recommend you use --use-feature=in-tree-build to test your packages with this new behavior before it becomes the default.\n", + " pip 21.3 will remove support for this functionality. You can find discussion regarding this at https://github.com/pypa/pip/issues/7555.\u001b[0m\n", + "Requirement already satisfied: numpy>=1.8.1 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (1.21.6)\n", + "Requirement already satisfied: contextlib2>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.5.5)\n", + "Requirement already satisfied: pint>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.18)\n", + "Requirement already satisfied: graphviz>=0.5.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.10.1)\n", + "Collecting ctypesgen==1.0.2\n", + " Downloading ctypesgen-1.0.2-py2.py3-none-any.whl (476 kB)\n", + "\u001b[?25l\r\u001b[K |▊ | 10 kB 28.9 MB/s eta 0:00:01\r\u001b[K |█▍ | 20 kB 17.9 MB/s eta 0:00:01\r\u001b[K |██ | 30 kB 14.7 MB/s eta 0:00:01\r\u001b[K |██▊ | 40 kB 13.4 MB/s eta 0:00:01\r\u001b[K |███▍ | 51 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████▏ | 61 kB 8.6 MB/s eta 0:00:01\r\u001b[K |████▉ | 71 kB 9.0 MB/s eta 0:00:01\r\u001b[K |█████▌ | 81 kB 8.8 MB/s eta 0:00:01\r\u001b[K |██████▏ | 92 kB 9.7 MB/s eta 0:00:01\r\u001b[K |██████▉ | 102 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████▋ | 112 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████▎ | 122 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████ | 133 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████▋ | 143 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████▎ | 153 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████ | 163 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████▊ | 174 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████▍ | 184 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████ | 194 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████▊ | 204 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████▍ | 215 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████▏ | 225 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████▉ | 235 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████▌ | 245 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████████▏ | 256 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████████▉ | 266 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████▋ | 276 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████████▎ | 286 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████ | 296 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████▋ | 307 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████████████▎ | 317 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████████ | 327 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████████▊ | 337 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████████████▍ | 348 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████████ | 358 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████████▊ | 368 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████████████████▍ | 378 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▏ | 389 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▉ | 399 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▌ | 409 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▏ | 419 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▉ | 430 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▌ | 440 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▎ | 450 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████ | 460 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▋| 471 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 476 kB 8.1 MB/s \n", + "\u001b[?25hRequirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (3.2.2)\n", + "Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from pint>=0.7.0->bifrost==0.10.0) (21.3)\n", + "Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from pint>=0.7.0->bifrost==0.10.0) (4.11.4)\n", + "Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->pint>=0.7.0->bifrost==0.10.0) (4.1.1)\n", + "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->pint>=0.7.0->bifrost==0.10.0) (3.8.0)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (0.11.0)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (3.0.9)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (1.4.3)\n", + "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (2.8.2)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->bifrost==0.10.0) (1.15.0)\n", + "Building wheels for collected packages: bifrost\n", + " Building wheel for bifrost (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for bifrost: filename=bifrost-0.10.0-py3-none-any.whl size=188597 sha256=3b35187305e5b3677bd4b17518d0e3ec6c227824e01373ada32f88c20b5ca402\n", + " Stored in directory: /tmp/pip-ephem-wheel-cache-dg1tyaur/wheels/35/b7/11/a795b9aa4b1dfc3b2091f793f70becd9333a0b79216d208fd5\n", + "Successfully built bifrost\n", + "Installing collected packages: ctypesgen, bifrost\n", + " Attempting uninstall: ctypesgen\n", + " Found existing installation: ctypesgen 1.0.3.dev98+g2120dbf\n", + " Uninstalling ctypesgen-1.0.3.dev98+g2120dbf:\n", + " Successfully uninstalled ctypesgen-1.0.3.dev98+g2120dbf\n", + "Successfully installed bifrost-0.10.0 ctypesgen-1.0.2\n", + "*************************************************************************\n", + "By default Bifrost installs with basic Python telemetry enabled in order\n", + "to help inform how the software is used for future development. You can\n", + "opt out of telemetry collection using:\n", + "python -m bifrost.telemetry --disable\n", + "*************************************************************************\n", + "\n", + "If you have trouble importing Bifrost from Python you may need\n", + "to set LD_LIBRARY_PATH to /usr/local/lib or have your\n", + "system administrator add this directory to '/etc/ld.so.conf'.\n", + "\n", + "make[1]: Leaving directory '/root/bifrost/python'\n", + "Libraries have been installed in:\n", + " /usr/local/lib\n", + "\n", + "If you ever happen to want to link against installed libraries\n", + "in a given directory, LIBDIR, you must either use libtool, and\n", + "specify the full pathname of the library, or use the '-LLIBDIR'\n", + "flag during linking and do at least one of the following:\n", + " - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable\n", + " during execution\n", + " - add LIBDIR to the 'LD_RUN_PATH' environment variable\n", + " during linking\n", + " - use the '-Wl,-rpath -Wl,LIBDIR' linker flag\n", + " - have your system administrator add LIBDIR to '/etc/ld.so.conf'\n", + "\n", + "See any operating system documentation about shared libraries for\n", + "more information, such as the ld(1) and ld.so(8) manual pages.\n" + ] + } + ] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Input:\n", - " 0 @ 0 : (-13.042428970336914-12.23082447052002j) -> (-13, -12)\n", - " 1 @ 0 : (6.989960670471191+7.241285800933838j) -> (7, 7)\n", - " 2 @ 0 : (6.997556686401367+3.1934947967529297j) -> (7, 3)\n", - " 3 @ 0 : (19.13669776916504+3.609508991241455j) -> (19, 4)\n", - " 4 @ 0 : (-8.871187210083008+3.9164607524871826j) -> (-9, 4)\n", - "Output:\n", - "[(-13, -12), (7, 7), (7, 3), (19, 4), (-9, 4)]\n" - ] + "cell_type": "code", + "execution_count": 6, + "id": "372e7e14", + "metadata": { + "id": "372e7e14" + }, + "outputs": [], + "source": [ + "import json\n", + "import ctypes\n", + "import threading\n", + "\n", + "from bifrost.address import Address\n", + "from bifrost.udp_socket import UDPSocket\n", + "from bifrost.packet_capture import PacketCaptureCallback, UDPCapture\n", + "\n", + "addr = Address('127.0.0.1', 10000)\n", + "sock = UDPSocket()\n", + "sock.bind(addr)\n", + "sock.timeout = 5.0\n", + "\n", + "class CaptureOp(object):\n", + " def __init__(self, log, oring, sock, nsrc=16, src0=0, max_size=9000, ntime_gulp=250, ntime_slot=25000, core=-1):\n", + " self.log = log\n", + " self.oring = oring\n", + " self.sock = sock\n", + " self.nsrc = nsrc\n", + " self.src0 = src0\n", + " self.max_size = max_size\n", + " self.ntime_gulp = ntime_gulp\n", + " self.ntime_slot = ntime_slot\n", + " self.core = core\n", + " self.shutdown_event = threading.Event()\n", + "\n", + " def shutdown(self):\n", + " self.shutdown_event.set()\n", + "\n", + " def seq_callback(\n", + " self, seq0, chan0, nchan, nsrc, time_tag_ptr, hdr_ptr, hdr_size_ptr):\n", + " timestamp0 = int((self.utc_start - ADP_EPOCH).total_seconds())\n", + " time_tag0 = timestamp0 * int(FS)\n", + " time_tag = time_tag0 + seq0 * (int(FS) // int(CHAN_BW))\n", + " print(\"++++++++++++++++ seq0 =\", seq0)\n", + " print(\" time_tag =\", time_tag)\n", + " time_tag_ptr[0] = time_tag\n", + " hdr = {\n", + " \"time_tag\": time_tag,\n", + " \"seq0\": seq0,\n", + " \"chan0\": chan0,\n", + " \"nchan\": nchan,\n", + " \"cfreq\": (chan0 + 0.5 * (nchan - 1)) * CHAN_BW,\n", + " \"bw\": nchan * CHAN_BW,\n", + " \"nstand\": nsrc * 16,\n", + " \"npol\": 2,\n", + " \"complex\": True,\n", + " \"nbit\": 4,\n", + " \"axes\": \"time,chan,stand,pol\",\n", + " }\n", + " print(\"******** CFREQ:\", hdr[\"cfreq\"])\n", + " hdr_str = json.dumps(hdr)\n", + " self.header_buf = ctypes.create_string_buffer(hdr_str)\n", + " hdr_ptr[0] = ctypes.cast(self.header_buf, ctypes.c_void_p)\n", + " hdr_size_ptr[0] = len(hdr_str)\n", + " return 0\n", + "\n", + " def main(self):\n", + " seq_callback = PacketCaptureCallback()\n", + " seq_callback.set_chips(self.seq_callback)\n", + " with UDPCapture('chips', self.sock, self.nsrc, self.src0, self.max_size,\n", + " self.ntime_gulp, self.ntime_slot, sequence_callback=seq_callback,\n", + " core=self.core) as capture:\n", + " while not self.shutdown_event.is_set():\n", + " status = capture.recv()\n", + " del capture" + ] + }, + { + "cell_type": "markdown", + "id": "3048e76d", + "metadata": { + "id": "3048e76d" + }, + "source": [ + "This block implements data capture of the [CHIPS format](https://github.com/jaycedowell/bifrost/blob/disk-readers/src/formats/chips.hpp#L36) from the network. The snippet starts out by creating a socket that will be used to receive the data on using `bifrost.address.Address` and `bifrost.udp_socket.UDPSocket`. The capture block looks similar to other blocks that we have looked at but there are a few things to note.\n", + " 1. This block accepts many more keywords than the previous block. These extra keywords are used to control the packet capture and data ordering when it is copied into the ring buffer. They are:\n", + " * `nsrc` - The number of packet sources to expect data from,\n", + " * `src0` - The source ID number for the first packet socket,\n", + " * `max_size` - The maximum packet size to accept. This is usually set to 9000 to allow for jumbo packets,\n", + " * `ntime_gulp` - This controls the internal buffer size used by the packet capture. Bifrost keeps two buffers open and releases them to the output ring as data from new gulps is received.\n", + " * `ntime_slot` - The approximate number of packet sets (a packet from all `nsrc` sources) per second. This is used by Bifrost to determine the boundaries in the gulps.\n", + " 2. There is a an internal `threading.Event` instance that is used as a signal for telling the `CaptureOp` block to stop. Without the capture would run indefinitely.\n", + " 3. There is a `seq_callback` method that is called by Bifrost when the packet sequence changes. This method accepts a format-specific number of arguments and returns a JSON-packed header that sent to the ring.\n", + " 4. The `main` method implements the packet capture by calling a collection of Bifrost classes:\n", + " * First, a new `PacketCaptureCallback` instance is created and then the callback for the CHIPS format is set to `CaptureOp.seq_callback`. This redies the method for Bifrost to use it when the sequence changes.\n", + " * Next, a new `UDPCapture` instance is created for the packet format with the relevant source/data parameters. This is used as a context for this packet capture itself.\n", + " * Finally, `UDPCapture.recv` is called repeatedly to receive and process packets. This method returns an integer after a gulp has been released to the ring. This interger stores the current state of the capture.\n", + "\n", + "As mentioned before, Bifrost also works with reading packets from a file using the `bifrost.packet_capture.DiskReader` class. This works similar to `UDPCapture` but the packet format specifiers require extra information in order to read packets from disk. For example, a CHIPS capture of 132 channels is specified as \"chips\" for `UDPCapture` but as \"chips_132\" for `DiskReader`." + ] + }, + { + "cell_type": "markdown", + "id": "52efad41", + "metadata": { + "id": "52efad41" + }, + "source": [ + "## Writing Data\n", + "\n", + "Related to this capture interface is the `bifrost.packet_writer` module. This implments the reverse of the capture in that it takes data from a ring and write it to the network or disk.\n", + "\n", + "Let's look at an example of writing binary data in the [LWA TBN format](https://fornax.phys.unm.edu/lwa/trac/wiki/DP_Formats#TBNOutputInterface), a stream of 8+8-bit complex integers:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a67846f0", + "metadata": { + "id": "a67846f0" + }, + "outputs": [], + "source": [ + "import time\n", + "import numpy\n", + "from bifrost.packet_writer import HeaderInfo, DiskWriter\n", + "\n", + "with open('output.dat', 'wb') as fh:\n", + " bfo = DiskWriter('tbn', fh, core=0)\n", + " desc = HeaderInfo()\n", + " desc.set_tuning(int(round(38e6 / 196e6 * 2**32)))\n", + " desc.set_gain(20)\n", + " \n", + " time_tag = int(time.time()*196e6)\n", + " \n", + " data = numpy.random.randn(16, 512*10)\n", + " data = data + 1j*numpy.random.randn(*data.shape)\n", + " for i in range(16):\n", + " data[i,:] *= 4\n", + " data = bifrost.ndarray(data.astype(numpy.complex64))\n", + " \n", + " qdata = bifrost.ndarray(shape=data.shape, dtype='ci8')\n", + " bifrost.quantize.quantize(data, qdata, scale=2)\n", + " print('Input:')\n", + " for i in range(5):\n", + " print(' ', i, '@', 0, ':', data[0,i]*2, '->', qdata[0,i])\n", + " \n", + " qdata = qdata.reshape(16, -1, 512)\n", + " qdata = qdata.transpose(1,0,2).copy()\n", + " \n", + " bfo.send(desc, time_tag, qdata.shape[0]*1960, 0, 1, qdata)\n", + " \n", + "import struct\n", + "print('Output:')\n", + "with open('output.dat', 'rb') as fh:\n", + " packet_header = fh.read(24)\n", + " packet_payload = fh.read(512*2)\n", + " packet_payload = struct.unpack('<1024b', packet_payload)\n", + " i, q = packet_payload[0::2], packet_payload[1::2]\n", + " print(list(zip(i,q))[:5])\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "52762b36", + "metadata": { + "id": "52762b36" + }, + "source": [ + "The flow here is:\n", + " 1. Opening a file in binary write mode and creating new `DiskWriter` and `HeaderInfo` instances. `DiskWriter` is what actually writes the formatted data to disk and `HeaderInfo` is a metadata helper used to fill in the packet headers as they are written.\n", + " 2. Setting the \"tuning\" and \"gain\" parameters for the output headers. These are values that are common to all of the packets written.\n", + " 3. Creating a time tag for the first sample and a collection of complex data that will go into the packets.\n", + " 4. Converting the complex data into the 8+8-bit integer format expected for TBN data. The `DiskWriter` instances are data type-aware.\n", + " 5. Reshaping `qdata` so that it has axes of (packet number, output index, samples per packet).\n", + " 6. Actually writing the data to disk with `DiskWriter.send`. This method takes in:\n", + " * a `HeaderInfo` instance used to population the header,\n", + " * a starting time tag value,\n", + " * a time tag increment to apply when moving to the next packet,\n", + " * an output naming starting index,\n", + " * a output naming increment to apply when moving to the next output name, and\n", + " * the data itself.\n", + "\n", + "After this we re-open the file and read in the data to verify that what is written matches what was put in. Since the data is 8+8-bit complex this is easy to do with some information about the packet structure and the `struct` module.\n", + "\n", + "To write to the network rather than a file you would:\n", + " 1. Swap the open filehandle with a `bifrost.udp_socket.UDPSocket` instance and\n", + " 2. Trade `bifrost.packet_writer.DiskWriter` for `bifrost.packet_writer.UDPTransmit`." + ] + }, + { + "cell_type": "markdown", + "id": "f8c48a43", + "metadata": { + "id": "f8c48a43" + }, + "source": [ + "## Adding a New Packet Format\n", + "\n", + "Adding a new packet format to Bifrost is a straightforward task:\n", + " 1. Add a new `.hpp` file to `bifrost/src/formats`. This file should contain:\n", + " * the header format for the packet, \n", + " * a sub-class of the C++ `PacketDecoder` class that implements a packet validator,\n", + " * a sub-class of the C++ `PacketProcessor` class that implements an unpacket to take the payload for a valid packet and place it in the correct position inside a ring buffer, and\n", + " * *optionally*, a sub-class of the C++ `PacketHeaderFiller` class that can be used when creating packets from Bifrost.\n", + " 2. Add the new format to `packet_capture.hpp`. This has three parts:\n", + " * Add a new method to the C++ class `BFpacketcapture_callback_impl` to handle the sequence change callback.\n", + " * Add new sub-class of the C++ `BFpacketcapture_impl` class that implements the format and defines how Bifrost detects changes in the packet sequence.\n", + " * Update the C++ function `BFpacketcapture_create` to expose the new packet format.\n", + " 3. Add the new format callback helper to `packet_capture.cpp`.\n", + " 4. Update `bifrost/packet_capture.h` to expose the new callback to the Python API.\n", + " 5. *Optionally*, add support for writing packets:\n", + " * Add the new format to `packet_writer.hpp` by adding a new sub-class of the C++ `BFpacketwriter_impl` class.\n", + " * Update the C++ `BFpacketwriter_create` function to expose the new packet format." + ] } - ], - "source": [ - "import time\n", - "import numpy\n", - "from bifrost.packet_writer import HeaderInfo, DiskWriter\n", - "\n", - "with open('output.dat', 'wb') as fh:\n", - " bfo = DiskWriter('tbn', fh, core=0)\n", - " desc = HeaderInfo()\n", - " desc.set_tuning(int(round(38e6 / 196e6 * 2**32)))\n", - " desc.set_gain(20)\n", - " \n", - " time_tag = int(time.time()*196e6)\n", - " \n", - " data = numpy.random.randn(16, 512*10)\n", - " data = data + 1j*numpy.random.randn(*data.shape)\n", - " for i in range(16):\n", - " data[i,:] *= 4\n", - " data = bifrost.ndarray(data.astype(numpy.complex64))\n", - " \n", - " qdata = bifrost.ndarray(shape=data.shape, dtype='ci8')\n", - " bifrost.quantize.quantize(data, qdata, scale=2)\n", - " print('Input:')\n", - " for i in range(5):\n", - " print(' ', i, '@', 0, ':', data[0,i]*2, '->', qdata[0,i])\n", - " \n", - " qdata = qdata.reshape(16, -1, 512)\n", - " qdata = qdata.transpose(1,0,2).copy()\n", - " \n", - " bfo.send(desc, time_tag, qdata.shape[0]*1960, 0, 1, qdata)\n", - " \n", - "import struct\n", - "print('Output:')\n", - "with open('output.dat', 'rb') as fh:\n", - " packet_header = fh.read(24)\n", - " packet_payload = fh.read(512*2)\n", - " packet_payload = struct.unpack('<1024b', packet_payload)\n", - " i, q = packet_payload[0::2], packet_payload[1::2]\n", - " print(list(zip(i,q))[:5])\n", - " " - ] - }, - { - "cell_type": "markdown", - "id": "52762b36", - "metadata": {}, - "source": [ - "The flow here is:\n", - " 1. Opening a file in binary write mode and creating new `DiskWriter` and `HeaderInfo` instances. `DiskWriter` is what actually writes the formatted data to disk and `HeaderInfo` is a metadata helper used to fill in the packet headers as they are written.\n", - " 2. Setting the \"tuning\" and \"gain\" parameters for the output headers. These are values that are common to all of the packets written.\n", - " 3. Creating a time tag for the first sample and a collection of complex data that will go into the packets.\n", - " 4. Converting the complex data into the 8+8-bit integer format expected for TBN data. The `DiskWriter` instances are data type-aware.\n", - " 5. Reshaping `qdata` so that it has axes of (packet number, output index, samples per packet).\n", - " 6. Actually writing the data to disk with `DiskWriter.send`. This method takes in:\n", - " * a `HeaderInfo` instance used to population the header,\n", - " * a starting time tag value,\n", - " * a time tag increment to apply when moving to the next packet,\n", - " * an output naming starting index,\n", - " * a output naming increment to apply when moving to the next output name, and\n", - " * the data itself.\n", - "\n", - "After this we re-open the file and read in the data to verify that what is written matches what was put in. Since the data is 8+8-bit complex this is easy to do with some information about the packet structure and the `struct` module.\n", - "\n", - "To write to the network rather than a file you would:\n", - " 1. Swap the open filehandle with a `bifrost.udp_socket.UDPSocket` instance and\n", - " 2. Trade `bifrost.packet_writer.DiskWriter` for `bifrost.packet_writer.UDPTransmit`." - ] - }, - { - "cell_type": "markdown", - "id": "f8c48a43", - "metadata": {}, - "source": [ - "## Adding a New Packet Format\n", - "\n", - "Adding a new packet format to Bifrost is a straightforward task:\n", - " 1. Add a new `.hpp` file to `bifrost/src/formats`. This file should contain:\n", - " * the header format for the packet, \n", - " * a sub-class of the C++ `PacketDecoder` class that implements a packet validator,\n", - " * a sub-class of the C++ `PacketProcessor` class that implements an unpacket to take the payload for a valid packet and place it in the correct position inside a ring buffer, and\n", - " * *optionally*, a sub-class of the C++ `PacketHeaderFiller` class that can be used when creating packets from Bifrost.\n", - " 2. Add the new format to `packet_capture.hpp`. This has three parts:\n", - " * Add a new method to the C++ class `BFpacketcapture_callback_impl` to handle the sequence change callback.\n", - " * Add new sub-class of the C++ `BFpacketcapture_impl` class that implements the format and defines how Bifrost detects changes in the packet sequence.\n", - " * Update the C++ function `BFpacketcapture_create` to expose the new packet format.\n", - " 3. Add the new format callback helper to `packet_capture.cpp`.\n", - " 4. Update `bifrost/packet_capture.h` to expose the new callback to the Python API.\n", - " 5. *Optionally*, add support for writing packets:\n", - " * Add the new format to `packet_writer.hpp` by adding a new sub-class of the C++ `BFpacketwriter_impl` class.\n", - " * Update the C++ `BFpacketwriter_create` function to expose the new packet format." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + }, + "colab": { + "name": "06_data_capture.ipynb", + "provenance": [] + }, + "accelerator": "GPU", + "gpuClass": "standard" }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file From d27ef958cc053935d2601c11592157b5250caaeb Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 7 Jul 2022 22:34:52 -0400 Subject: [PATCH 0704/1155] Colabify 06 with --disable-hwloc --- tutorial/06_data_capture.ipynb | 564 ++------------------------------- 1 file changed, 29 insertions(+), 535 deletions(-) diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index d505520bd..bbea52062 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -9,11 +9,11 @@ "source": [ "# Data Capture\n", "\n", - "*NOTE: This section of the tutorial previews a new packet capture interface that is currently under development at https://github.com/jaycedowell/bifrost/tree/disk-readers*\n", - "\n", "\"Open\n", "\n", - "Next we will look at how to use Bifrost to work with packetized data, either from the network or from packets recorded to a file. This is done through the `bifrost.packet_capture` module." + "Next we will look at how to use Bifrost to work with packetized data, either from the network or from packets recorded to a file. This is done through the `bifrost.packet_capture` module.\n", + "\n", + "**NOTE:** This section of the tutorial previews a new packet capture interface that is currently under development in the `ibverb-support` branch." ] }, { @@ -33,544 +33,19 @@ " !sudo apt-get -qq install exuberant-ctags libopenblas-dev librdmacm-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", " ![ -d ~/bifrost/.git ] || git clone --branch ibverb-support https://github.com/ledatelescope/bifrost ~/bifrost\n", - " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", + " !(cd ~/bifrost && ./configure --disable-hwloc && make -j all && sudo make install)\n", " import bifrost" ], "metadata": { "id": "2w7kFngftyj2" }, "id": "2w7kFngftyj2", - "execution_count": 4, + "execution_count": 6, "outputs": [] }, { "cell_type": "code", - "source": [ - "install_log.show()" - ], - "metadata": { - "id": "lItRteDeugFr", - "outputId": "40ddf1df-8a9f-47d6-a859-a771ba4f2d38", - "colab": { - "base_uri": "https://localhost:8080/" - } - }, - "id": "lItRteDeugFr", - "execution_count": 5, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "debconf: unable to initialize frontend: Dialog\n", - "debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76, <> line 1.)\n", - "debconf: falling back to frontend: Readline\n", - "debconf: unable to initialize frontend: Readline\n", - "debconf: (This frontend requires a controlling tty.)\n", - "debconf: falling back to frontend: Teletype\n", - "dpkg-preconfigure: unable to re-open stdin: \n", - "Selecting previously unselected package exuberant-ctags.\n", - "(Reading database ... \r(Reading database ... 5%\r(Reading database ... 10%\r(Reading database ... 15%\r(Reading database ... 20%\r(Reading database ... 25%\r(Reading database ... 30%\r(Reading database ... 35%\r(Reading database ... 40%\r(Reading database ... 45%\r(Reading database ... 50%\r(Reading database ... 55%\r(Reading database ... 60%\r(Reading database ... 65%\r(Reading database ... 70%\r(Reading database ... 75%\r(Reading database ... 80%\r(Reading database ... 85%\r(Reading database ... 90%\r(Reading database ... 95%\r(Reading database ... 100%\r(Reading database ... 155700 files and directories currently installed.)\n", - "Preparing to unpack .../exuberant-ctags_1%3a5.9~svn20110310-11_amd64.deb ...\n", - "Unpacking exuberant-ctags (1:5.9~svn20110310-11) ...\n", - "Setting up exuberant-ctags (1:5.9~svn20110310-11) ...\n", - "update-alternatives: using /usr/bin/ctags-exuberant to provide /usr/bin/ctags (ctags) in auto mode\n", - "update-alternatives: using /usr/bin/ctags-exuberant to provide /usr/bin/etags (etags) in auto mode\n", - "Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n", - " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", - " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", - " Installing backend dependencies ... \u001b[?25l\u001b[?25hdone\n", - " Preparing wheel metadata ... \u001b[?25l\u001b[?25hdone\n", - "\u001b[?25l\r\u001b[K |█▋ | 10 kB 30.0 MB/s eta 0:00:01\r\u001b[K |███▏ | 20 kB 35.5 MB/s eta 0:00:01\r\u001b[K |████▊ | 30 kB 13.6 MB/s eta 0:00:01\r\u001b[K |██████▎ | 40 kB 7.1 MB/s eta 0:00:01\r\u001b[K |███████▉ | 51 kB 6.4 MB/s eta 0:00:01\r\u001b[K |█████████▍ | 61 kB 7.6 MB/s eta 0:00:01\r\u001b[K |███████████ | 71 kB 8.6 MB/s eta 0:00:01\r\u001b[K |████████████▌ | 81 kB 8.4 MB/s eta 0:00:01\r\u001b[K |██████████████ | 92 kB 9.3 MB/s eta 0:00:01\r\u001b[K |███████████████▋ | 102 kB 7.9 MB/s eta 0:00:01\r\u001b[K |█████████████████▏ | 112 kB 7.9 MB/s eta 0:00:01\r\u001b[K |██████████████████▊ | 122 kB 7.9 MB/s eta 0:00:01\r\u001b[K |████████████████████▎ | 133 kB 7.9 MB/s eta 0:00:01\r\u001b[K |█████████████████████▉ | 143 kB 7.9 MB/s eta 0:00:01\r\u001b[K |███████████████████████▍ | 153 kB 7.9 MB/s eta 0:00:01\r\u001b[K |█████████████████████████ | 163 kB 7.9 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▋ | 174 kB 7.9 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▏ | 184 kB 7.9 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▊ | 194 kB 7.9 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▎| 204 kB 7.9 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 209 kB 7.9 MB/s \n", - "\u001b[?25h\u001b[?25l\r\u001b[K |██▌ | 10 kB 31.4 MB/s eta 0:00:01\r\u001b[K |█████ | 20 kB 41.0 MB/s eta 0:00:01\r\u001b[K |███████▌ | 30 kB 49.2 MB/s eta 0:00:01\r\u001b[K |██████████ | 40 kB 55.3 MB/s eta 0:00:01\r\u001b[K |████████████▋ | 51 kB 58.0 MB/s eta 0:00:01\r\u001b[K |███████████████ | 61 kB 62.2 MB/s eta 0:00:01\r\u001b[K |█████████████████▋ | 71 kB 63.1 MB/s eta 0:00:01\r\u001b[K |████████████████████▏ | 81 kB 63.8 MB/s eta 0:00:01\r\u001b[K |██████████████████████▋ | 92 kB 66.2 MB/s eta 0:00:01\r\u001b[K |█████████████████████████▏ | 102 kB 68.0 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▋ | 112 kB 68.0 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▏ | 122 kB 68.0 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 130 kB 68.0 MB/s \n", - "\u001b[?25h Building wheel for ctypesgen (PEP 517) ... \u001b[?25l\u001b[?25hdone\n", - "Cloning into '/root/bifrost'...\n", - "remote: Enumerating objects: 12929, done.\u001b[K\n", - "remote: Counting objects: 0% (1/3552)\u001b[K\rremote: Counting objects: 1% (36/3552)\u001b[K\rremote: Counting objects: 2% (72/3552)\u001b[K\rremote: Counting objects: 3% (107/3552)\u001b[K\rremote: Counting objects: 4% (143/3552)\u001b[K\rremote: Counting objects: 5% (178/3552)\u001b[K\rremote: Counting objects: 6% (214/3552)\u001b[K\rremote: Counting objects: 7% (249/3552)\u001b[K\rremote: Counting objects: 8% (285/3552)\u001b[K\rremote: Counting objects: 9% (320/3552)\u001b[K\rremote: Counting objects: 10% (356/3552)\u001b[K\rremote: Counting objects: 11% (391/3552)\u001b[K\rremote: Counting objects: 12% (427/3552)\u001b[K\rremote: Counting objects: 13% (462/3552)\u001b[K\rremote: Counting objects: 14% (498/3552)\u001b[K\rremote: Counting objects: 15% (533/3552)\u001b[K\rremote: Counting objects: 16% (569/3552)\u001b[K\rremote: Counting objects: 17% (604/3552)\u001b[K\rremote: Counting objects: 18% (640/3552)\u001b[K\rremote: Counting objects: 19% (675/3552)\u001b[K\rremote: Counting objects: 20% (711/3552)\u001b[K\rremote: Counting objects: 21% (746/3552)\u001b[K\rremote: Counting objects: 22% (782/3552)\u001b[K\rremote: Counting objects: 23% (817/3552)\u001b[K\rremote: Counting objects: 24% (853/3552)\u001b[K\rremote: Counting objects: 25% (888/3552)\u001b[K\rremote: Counting objects: 26% (924/3552)\u001b[K\rremote: Counting objects: 27% (960/3552)\u001b[K\rremote: Counting objects: 28% (995/3552)\u001b[K\rremote: Counting objects: 29% (1031/3552)\u001b[K\rremote: Counting objects: 30% (1066/3552)\u001b[K\rremote: Counting objects: 31% (1102/3552)\u001b[K\rremote: Counting objects: 32% (1137/3552)\u001b[K\rremote: Counting objects: 33% (1173/3552)\u001b[K\rremote: Counting objects: 34% (1208/3552)\u001b[K\rremote: Counting objects: 35% (1244/3552)\u001b[K\rremote: Counting objects: 36% (1279/3552)\u001b[K\rremote: Counting objects: 37% (1315/3552)\u001b[K\rremote: Counting objects: 38% (1350/3552)\u001b[K\rremote: Counting objects: 39% (1386/3552)\u001b[K\rremote: Counting objects: 40% (1421/3552)\u001b[K\rremote: Counting objects: 41% (1457/3552)\u001b[K\rremote: Counting objects: 42% (1492/3552)\u001b[K\rremote: Counting objects: 43% (1528/3552)\u001b[K\rremote: Counting objects: 44% (1563/3552)\u001b[K\rremote: Counting objects: 45% (1599/3552)\u001b[K\rremote: Counting objects: 46% (1634/3552)\u001b[K\rremote: Counting objects: 47% (1670/3552)\u001b[K\rremote: Counting objects: 48% (1705/3552)\u001b[K\rremote: Counting objects: 49% (1741/3552)\u001b[K\rremote: Counting objects: 50% (1776/3552)\u001b[K\rremote: Counting objects: 51% (1812/3552)\u001b[K\rremote: Counting objects: 52% (1848/3552)\u001b[K\rremote: Counting objects: 53% (1883/3552)\u001b[K\rremote: Counting objects: 54% (1919/3552)\u001b[K\rremote: Counting objects: 55% (1954/3552)\u001b[K\rremote: Counting objects: 56% (1990/3552)\u001b[K\rremote: Counting objects: 57% (2025/3552)\u001b[K\rremote: Counting objects: 58% (2061/3552)\u001b[K\rremote: Counting objects: 59% (2096/3552)\u001b[K\rremote: Counting objects: 60% (2132/3552)\u001b[K\rremote: Counting objects: 61% (2167/3552)\u001b[K\rremote: Counting objects: 62% (2203/3552)\u001b[K\rremote: Counting objects: 63% (2238/3552)\u001b[K\rremote: Counting objects: 64% (2274/3552)\u001b[K\rremote: Counting objects: 65% (2309/3552)\u001b[K\rremote: Counting objects: 66% (2345/3552)\u001b[K\rremote: Counting objects: 67% (2380/3552)\u001b[K\rremote: Counting objects: 68% (2416/3552)\u001b[K\rremote: Counting objects: 69% (2451/3552)\u001b[K\rremote: Counting objects: 70% (2487/3552)\u001b[K\rremote: Counting objects: 71% (2522/3552)\u001b[K\rremote: Counting objects: 72% (2558/3552)\u001b[K\rremote: Counting objects: 73% (2593/3552)\u001b[K\rremote: Counting objects: 74% (2629/3552)\u001b[K\rremote: Counting objects: 75% (2664/3552)\u001b[K\rremote: Counting objects: 76% (2700/3552)\u001b[K\rremote: Counting objects: 77% (2736/3552)\u001b[K\rremote: Counting objects: 78% (2771/3552)\u001b[K\rremote: Counting objects: 79% (2807/3552)\u001b[K\rremote: Counting objects: 80% (2842/3552)\u001b[K\rremote: Counting objects: 81% (2878/3552)\u001b[K\rremote: Counting objects: 82% (2913/3552)\u001b[K\rremote: Counting objects: 83% (2949/3552)\u001b[K\rremote: Counting objects: 84% (2984/3552)\u001b[K\rremote: Counting objects: 85% (3020/3552)\u001b[K\rremote: Counting objects: 86% (3055/3552)\u001b[K\rremote: Counting objects: 87% (3091/3552)\u001b[K\rremote: Counting objects: 88% (3126/3552)\u001b[K\rremote: Counting objects: 89% (3162/3552)\u001b[K\rremote: Counting objects: 90% (3197/3552)\u001b[K\rremote: Counting objects: 91% (3233/3552)\u001b[K\rremote: Counting objects: 92% (3268/3552)\u001b[K\rremote: Counting objects: 93% (3304/3552)\u001b[K\rremote: Counting objects: 94% (3339/3552)\u001b[K\rremote: Counting objects: 95% (3375/3552)\u001b[K\rremote: Counting objects: 96% (3410/3552)\u001b[K\rremote: Counting objects: 97% (3446/3552)\u001b[K\rremote: Counting objects: 98% (3481/3552)\u001b[K\rremote: Counting objects: 99% (3517/3552)\u001b[K\rremote: Counting objects: 100% (3552/3552)\u001b[K\rremote: Counting objects: 100% (3552/3552), done.\u001b[K\n", - "remote: Compressing objects: 0% (1/1156)\u001b[K\rremote: Compressing objects: 1% (12/1156)\u001b[K\rremote: Compressing objects: 2% (24/1156)\u001b[K\rremote: Compressing objects: 3% (35/1156)\u001b[K\rremote: Compressing objects: 4% (47/1156)\u001b[K\rremote: Compressing objects: 5% (58/1156)\u001b[K\rremote: Compressing objects: 6% (70/1156)\u001b[K\rremote: Compressing objects: 7% (81/1156)\u001b[K\rremote: Compressing objects: 8% (93/1156)\u001b[K\rremote: Compressing objects: 9% (105/1156)\u001b[K\rremote: Compressing objects: 10% (116/1156)\u001b[K\rremote: Compressing objects: 11% (128/1156)\u001b[K\rremote: Compressing objects: 12% (139/1156)\u001b[K\rremote: Compressing objects: 13% (151/1156)\u001b[K\rremote: Compressing objects: 14% (162/1156)\u001b[K\rremote: Compressing objects: 15% (174/1156)\u001b[K\rremote: Compressing objects: 16% (185/1156)\u001b[K\rremote: Compressing objects: 17% (197/1156)\u001b[K\rremote: Compressing objects: 18% (209/1156)\u001b[K\rremote: Compressing objects: 19% (220/1156)\u001b[K\rremote: Compressing objects: 20% (232/1156)\u001b[K\rremote: Compressing objects: 21% (243/1156)\u001b[K\rremote: Compressing objects: 22% (255/1156)\u001b[K\rremote: Compressing objects: 23% (266/1156)\u001b[K\rremote: Compressing objects: 24% (278/1156)\u001b[K\rremote: Compressing objects: 25% (289/1156)\u001b[K\rremote: Compressing objects: 26% (301/1156)\u001b[K\rremote: Compressing objects: 27% (313/1156)\u001b[K\rremote: Compressing objects: 28% (324/1156)\u001b[K\rremote: Compressing objects: 29% (336/1156)\u001b[K\rremote: Compressing objects: 30% (347/1156)\u001b[K\rremote: Compressing objects: 31% (359/1156)\u001b[K\rremote: Compressing objects: 32% (370/1156)\u001b[K\rremote: Compressing objects: 33% (382/1156)\u001b[K\rremote: Compressing objects: 34% (394/1156)\u001b[K\rremote: Compressing objects: 35% (405/1156)\u001b[K\rremote: Compressing objects: 36% (417/1156)\u001b[K\rremote: Compressing objects: 37% (428/1156)\u001b[K\rremote: Compressing objects: 38% (440/1156)\u001b[K\rremote: Compressing objects: 39% (451/1156)\u001b[K\rremote: Compressing objects: 40% (463/1156)\u001b[K\rremote: Compressing objects: 41% (474/1156)\u001b[K\rremote: Compressing objects: 42% (486/1156)\u001b[K\rremote: Compressing objects: 43% (498/1156)\u001b[K\rremote: Compressing objects: 44% (509/1156)\u001b[K\rremote: Compressing objects: 45% (521/1156)\u001b[K\rremote: Compressing objects: 46% (532/1156)\u001b[K\rremote: Compressing objects: 47% (544/1156)\u001b[K\rremote: Compressing objects: 48% (555/1156)\u001b[K\rremote: Compressing objects: 49% (567/1156)\u001b[K\rremote: Compressing objects: 50% (578/1156)\u001b[K\rremote: Compressing objects: 51% (590/1156)\u001b[K\rremote: Compressing objects: 52% (602/1156)\u001b[K\rremote: Compressing objects: 53% (613/1156)\u001b[K\rremote: Compressing objects: 54% (625/1156)\u001b[K\rremote: Compressing objects: 55% (636/1156)\u001b[K\rremote: Compressing objects: 56% (648/1156)\u001b[K\rremote: Compressing objects: 57% (659/1156)\u001b[K\rremote: Compressing objects: 58% (671/1156)\u001b[K\rremote: Compressing objects: 59% (683/1156)\u001b[K\rremote: Compressing objects: 60% (694/1156)\u001b[K\rremote: Compressing objects: 61% (706/1156)\u001b[K\rremote: Compressing objects: 62% (717/1156)\u001b[K\rremote: Compressing objects: 63% (729/1156)\u001b[K\rremote: Compressing objects: 64% (740/1156)\u001b[K\rremote: Compressing objects: 65% (752/1156)\u001b[K\rremote: Compressing objects: 66% (763/1156)\u001b[K\rremote: Compressing objects: 67% (775/1156)\u001b[K\rremote: Compressing objects: 68% (787/1156)\u001b[K\rremote: Compressing objects: 69% (798/1156)\u001b[K\rremote: Compressing objects: 70% (810/1156)\u001b[K\rremote: Compressing objects: 71% (821/1156)\u001b[K\rremote: Compressing objects: 72% (833/1156)\u001b[K\rremote: Compressing objects: 73% (844/1156)\u001b[K\rremote: Compressing objects: 74% (856/1156)\u001b[K\rremote: Compressing objects: 75% (867/1156)\u001b[K\rremote: Compressing objects: 76% (879/1156)\u001b[K\rremote: Compressing objects: 77% (891/1156)\u001b[K\rremote: Compressing objects: 78% (902/1156)\u001b[K\rremote: Compressing objects: 79% (914/1156)\u001b[K\rremote: Compressing objects: 80% (925/1156)\u001b[K\rremote: Compressing objects: 81% (937/1156)\u001b[K\rremote: Compressing objects: 82% (948/1156)\u001b[K\rremote: Compressing objects: 83% (960/1156)\u001b[K\rremote: Compressing objects: 84% (972/1156)\u001b[K\rremote: Compressing objects: 85% (983/1156)\u001b[K\rremote: Compressing objects: 86% (995/1156)\u001b[K\rremote: Compressing objects: 87% (1006/1156)\u001b[K\rremote: Compressing objects: 88% (1018/1156)\u001b[K\rremote: Compressing objects: 89% (1029/1156)\u001b[K\rremote: Compressing objects: 90% (1041/1156)\u001b[K\rremote: Compressing objects: 91% (1052/1156)\u001b[K\rremote: Compressing objects: 92% (1064/1156)\u001b[K\rremote: Compressing objects: 93% (1076/1156)\u001b[K\rremote: Compressing objects: 94% (1087/1156)\u001b[K\rremote: Compressing objects: 95% (1099/1156)\u001b[K\rremote: Compressing objects: 96% (1110/1156)\u001b[K\rremote: Compressing objects: 97% (1122/1156)\u001b[K\rremote: Compressing objects: 98% (1133/1156)\u001b[K\rremote: Compressing objects: 99% (1145/1156)\u001b[K\rremote: Compressing objects: 100% (1156/1156)\u001b[K\rremote: Compressing objects: 100% (1156/1156), done.\u001b[K\n", - "Receiving objects: 0% (1/12929) \rReceiving objects: 1% (130/12929) \rReceiving objects: 2% (259/12929) \rReceiving objects: 3% (388/12929) \rReceiving objects: 4% (518/12929) \rReceiving objects: 5% (647/12929) \rReceiving objects: 6% (776/12929) \rReceiving objects: 7% (906/12929) \rReceiving objects: 8% (1035/12929) \rReceiving objects: 9% (1164/12929) \rReceiving objects: 10% (1293/12929) \rReceiving objects: 11% (1423/12929) \rReceiving objects: 12% (1552/12929) \rReceiving objects: 13% (1681/12929) \rReceiving objects: 14% (1811/12929) \rReceiving objects: 15% (1940/12929) \rReceiving objects: 16% (2069/12929) \rReceiving objects: 17% (2198/12929) \rReceiving objects: 18% (2328/12929) \rReceiving objects: 19% (2457/12929) \rReceiving objects: 20% (2586/12929) \rReceiving objects: 21% (2716/12929) \rReceiving objects: 22% (2845/12929) \rReceiving objects: 23% (2974/12929) \rReceiving objects: 24% (3103/12929) \rReceiving objects: 25% (3233/12929) \rReceiving objects: 26% (3362/12929) \rReceiving objects: 27% (3491/12929) \rReceiving objects: 28% (3621/12929) \rReceiving objects: 29% (3750/12929) \rReceiving objects: 30% (3879/12929) \rReceiving objects: 31% (4008/12929) \rReceiving objects: 32% (4138/12929) \rReceiving objects: 33% (4267/12929) \rReceiving objects: 34% (4396/12929) \rReceiving objects: 35% (4526/12929) \rReceiving objects: 36% (4655/12929) \rReceiving objects: 37% (4784/12929) \rReceiving objects: 38% (4914/12929) \rReceiving objects: 39% (5043/12929) \rReceiving objects: 40% (5172/12929) \rReceiving objects: 41% (5301/12929) \rReceiving objects: 42% (5431/12929) \rReceiving objects: 43% (5560/12929) \rReceiving objects: 44% (5689/12929) \rReceiving objects: 45% (5819/12929) \rReceiving objects: 46% (5948/12929) \rReceiving objects: 47% (6077/12929) \rReceiving objects: 48% (6206/12929) \rReceiving objects: 49% (6336/12929) \rReceiving objects: 50% (6465/12929) \rReceiving objects: 51% (6594/12929) \rReceiving objects: 52% (6724/12929) \rReceiving objects: 53% (6853/12929) \rReceiving objects: 54% (6982/12929) \rReceiving objects: 55% (7111/12929) \rReceiving objects: 56% (7241/12929) \rReceiving objects: 57% (7370/12929) \rReceiving objects: 58% (7499/12929) \rReceiving objects: 59% (7629/12929) \rReceiving objects: 60% (7758/12929) \rReceiving objects: 61% (7887/12929) \rReceiving objects: 62% (8016/12929) \rReceiving objects: 63% (8146/12929) \rReceiving objects: 64% (8275/12929) \rReceiving objects: 65% (8404/12929) \rReceiving objects: 66% (8534/12929) \rReceiving objects: 67% (8663/12929) \rReceiving objects: 68% (8792/12929) \rReceiving objects: 69% (8922/12929) \rReceiving objects: 70% (9051/12929) \rReceiving objects: 71% (9180/12929) \rReceiving objects: 72% (9309/12929) \rReceiving objects: 73% (9439/12929) \rReceiving objects: 74% (9568/12929) \rReceiving objects: 75% (9697/12929) \rReceiving objects: 76% (9827/12929) \rReceiving objects: 77% (9956/12929) \rReceiving objects: 78% (10085/12929) \rReceiving objects: 79% (10214/12929) \rReceiving objects: 80% (10344/12929) \rReceiving objects: 81% (10473/12929) \rReceiving objects: 82% (10602/12929) \rReceiving objects: 83% (10732/12929) \rReceiving objects: 84% (10861/12929) \rReceiving objects: 85% (10990/12929) \rReceiving objects: 86% (11119/12929) \rReceiving objects: 87% (11249/12929) \rReceiving objects: 88% (11378/12929) \rReceiving objects: 89% (11507/12929) \rReceiving objects: 90% (11637/12929) \rReceiving objects: 91% (11766/12929) \rReceiving objects: 92% (11895/12929) \rReceiving objects: 93% (12024/12929) \rReceiving objects: 94% (12154/12929) \rReceiving objects: 95% (12283/12929) \rReceiving objects: 96% (12412/12929) \rReceiving objects: 97% (12542/12929) \rReceiving objects: 98% (12671/12929) \rReceiving objects: 99% (12800/12929) \rremote: Total 12929 (delta 2356), reused 3329 (delta 2231), pack-reused 9377\u001b[K\n", - "Receiving objects: 100% (12929/12929) \rReceiving objects: 100% (12929/12929), 6.89 MiB | 23.53 MiB/s, done.\n", - "Resolving deltas: 0% (0/8985) \rResolving deltas: 1% (113/8985) \rResolving deltas: 2% (181/8985) \rResolving deltas: 3% (277/8985) \rResolving deltas: 4% (428/8985) \rResolving deltas: 5% (486/8985) \rResolving deltas: 6% (568/8985) \rResolving deltas: 7% (644/8985) \rResolving deltas: 8% (783/8985) \rResolving deltas: 9% (827/8985) \rResolving deltas: 10% (918/8985) \rResolving deltas: 11% (1019/8985) \rResolving deltas: 12% (1080/8985) \rResolving deltas: 13% (1198/8985) \rResolving deltas: 14% (1264/8985) \rResolving deltas: 15% (1360/8985) \rResolving deltas: 16% (1485/8985) \rResolving deltas: 17% (1542/8985) \rResolving deltas: 18% (1627/8985) \rResolving deltas: 19% (1725/8985) \rResolving deltas: 20% (1814/8985) \rResolving deltas: 21% (1889/8985) \rResolving deltas: 22% (2036/8985) \rResolving deltas: 23% (2069/8985) \rResolving deltas: 24% (2162/8985) \rResolving deltas: 25% (2294/8985) \rResolving deltas: 26% (2391/8985) \rResolving deltas: 27% (2437/8985) \rResolving deltas: 29% (2614/8985) \rResolving deltas: 30% (2746/8985) \rResolving deltas: 31% (2789/8985) \rResolving deltas: 33% (3009/8985) \rResolving deltas: 34% (3072/8985) \rResolving deltas: 35% (3164/8985) \rResolving deltas: 36% (3301/8985) \rResolving deltas: 37% (3366/8985) \rResolving deltas: 38% (3419/8985) \rResolving deltas: 40% (3596/8985) \rResolving deltas: 41% (3697/8985) \rResolving deltas: 42% (3780/8985) \rResolving deltas: 45% (4109/8985) \rResolving deltas: 46% (4153/8985) \rResolving deltas: 47% (4235/8985) \rResolving deltas: 48% (4352/8985) \rResolving deltas: 49% (4425/8985) \rResolving deltas: 51% (4604/8985) \rResolving deltas: 53% (4778/8985) \rResolving deltas: 56% (5090/8985) \rResolving deltas: 57% (5153/8985) \rResolving deltas: 58% (5229/8985) \rResolving deltas: 59% (5337/8985) \rResolving deltas: 60% (5400/8985) \rResolving deltas: 61% (5482/8985) \rResolving deltas: 62% (5587/8985) \rResolving deltas: 63% (5662/8985) \rResolving deltas: 64% (5757/8985) \rResolving deltas: 65% (5880/8985) \rResolving deltas: 66% (5937/8985) \rResolving deltas: 67% (6033/8985) \rResolving deltas: 69% (6252/8985) \rResolving deltas: 70% (6311/8985) \rResolving deltas: 71% (6392/8985) \rResolving deltas: 72% (6491/8985) \rResolving deltas: 73% (6566/8985) \rResolving deltas: 74% (6649/8985) \rResolving deltas: 78% (7024/8985) \rResolving deltas: 80% (7265/8985) \rResolving deltas: 81% (7364/8985) \rResolving deltas: 82% (7391/8985) \rResolving deltas: 83% (7478/8985) \rResolving deltas: 84% (7550/8985) \rResolving deltas: 85% (7669/8985) \rResolving deltas: 86% (7732/8985) \rResolving deltas: 87% (7817/8985) \rResolving deltas: 88% (7932/8985) \rResolving deltas: 89% (8006/8985) \rResolving deltas: 90% (8127/8985) \rResolving deltas: 91% (8200/8985) \rResolving deltas: 92% (8279/8985) \rResolving deltas: 93% (8374/8985) \rResolving deltas: 94% (8480/8985) \rResolving deltas: 95% (8536/8985) \rResolving deltas: 96% (8642/8985) \rResolving deltas: 97% (8719/8985) \rResolving deltas: 98% (8806/8985) \rResolving deltas: 99% (8901/8985) \rResolving deltas: 100% (8985/8985) \rResolving deltas: 100% (8985/8985), done.\n", - "checking build system type... x86_64-unknown-linux-gnu\n", - "checking host system type... x86_64-unknown-linux-gnu\n", - "checking how to print strings... printf\n", - "checking for gcc... gcc\n", - "checking whether the C compiler works... yes\n", - "checking for C compiler default output file name... a.out\n", - "checking for suffix of executables... \n", - "checking whether we are cross compiling... no\n", - "checking for suffix of object files... o\n", - "checking whether the compiler supports GNU C... yes\n", - "checking whether gcc accepts -g... yes\n", - "checking for gcc option to enable C11 features... none needed\n", - "checking for a sed that does not truncate output... /bin/sed\n", - "checking for grep that handles long lines and -e... /bin/grep\n", - "checking for egrep... /bin/grep -E\n", - "checking for fgrep... /bin/grep -F\n", - "checking for ld used by gcc... /usr/bin/ld\n", - "checking if the linker (/usr/bin/ld) is GNU ld... yes\n", - "checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B\n", - "checking the name lister (/usr/bin/nm -B) interface... BSD nm\n", - "checking whether ln -s works... yes\n", - "checking the maximum length of command line arguments... 1572864\n", - "checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format... func_convert_file_noop\n", - "checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop\n", - "checking for /usr/bin/ld option to reload object files... -r\n", - "checking for objdump... objdump\n", - "checking how to recognize dependent libraries... pass_all\n", - "checking for dlltool... no\n", - "checking how to associate runtime and link libraries... printf %s\\n\n", - "checking for g++... g++\n", - "checking whether the compiler supports GNU C++... yes\n", - "checking whether g++ accepts -g... yes\n", - "checking for g++ option to enable C++11 features... none needed\n", - "checking for ar... ar\n", - "checking for archiver @FILE support... @\n", - "checking for strip... strip\n", - "checking for ranlib... ranlib\n", - "checking for gawk... no\n", - "checking for mawk... mawk\n", - "checking command to parse /usr/bin/nm -B output from gcc object... ok\n", - "checking for sysroot... no\n", - "checking for a working dd... /bin/dd\n", - "checking how to truncate binary pipes... /bin/dd bs=4096 count=1\n", - "./configure: line 7430: /usr/bin/file: No such file or directory\n", - "checking for mt... no\n", - "checking if : is a manifest tool... no\n", - "checking for stdio.h... yes\n", - "checking for stdlib.h... yes\n", - "checking for string.h... yes\n", - "checking for inttypes.h... yes\n", - "checking for stdint.h... yes\n", - "checking for strings.h... yes\n", - "checking for sys/stat.h... yes\n", - "checking for sys/types.h... yes\n", - "checking for unistd.h... yes\n", - "checking for dlfcn.h... yes\n", - "checking for objdir... .libs\n", - "checking if gcc supports -fno-rtti -fno-exceptions... no\n", - "checking for gcc option to produce PIC... -fPIC -DPIC\n", - "checking if gcc PIC flag -fPIC -DPIC works... yes\n", - "checking if gcc static flag -static works... yes\n", - "checking if gcc supports -c -o file.o... yes\n", - "checking if gcc supports -c -o file.o... (cached) yes\n", - "checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes\n", - "checking whether -lc should be explicitly linked in... no\n", - "checking dynamic linker characteristics... GNU/Linux ld.so\n", - "checking how to hardcode library paths into programs... immediate\n", - "checking whether stripping libraries is possible... yes\n", - "checking if libtool supports shared libraries... yes\n", - "checking whether to build shared libraries... yes\n", - "checking whether to build static libraries... yes\n", - "checking how to run the C++ preprocessor... g++ -E\n", - "checking for ld used by g++... /usr/bin/ld\n", - "checking if the linker (/usr/bin/ld) is GNU ld... yes\n", - "checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes\n", - "checking for g++ option to produce PIC... -fPIC -DPIC\n", - "checking if g++ PIC flag -fPIC -DPIC works... yes\n", - "checking if g++ static flag -static works... yes\n", - "checking if g++ supports -c -o file.o... yes\n", - "checking if g++ supports -c -o file.o... (cached) yes\n", - "checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes\n", - "checking dynamic linker characteristics... (cached) GNU/Linux ld.so\n", - "checking how to hardcode library paths into programs... immediate\n", - "checking for gcc... (cached) gcc\n", - "checking whether the compiler supports GNU C... (cached) yes\n", - "checking whether gcc accepts -g... (cached) yes\n", - "checking for gcc option to enable C11 features... (cached) none needed\n", - "checking whether the compiler supports GNU C++... (cached) yes\n", - "checking whether g++ accepts -g... (cached) yes\n", - "checking for g++ option to enable C++11 features... (cached) none needed\n", - "checking for gawk... (cached) mawk\n", - "checking for a sed that does not truncate output... (cached) /bin/sed\n", - "checking for a BSD-compatible install... /usr/bin/install -c\n", - "checking whether ln -s works... yes\n", - "checking whether make sets $(MAKE)... yes\n", - "checking whether ctags executable path has been provided... no\n", - "checking for ctags... /usr/bin/ctags\n", - "checking whether /usr/bin/ctags is exuberant... yes\n", - "checking for inline... inline\n", - "checking whether g++ supports C++20 features with -std=c++20... no\n", - "checking whether g++ supports C++20 features with +std=c++20... no\n", - "checking whether g++ supports C++20 features with -h std=c++20... no\n", - "configure: No compiler with C++20 support was found\n", - "checking whether g++ supports C++17 features with -std=c++17... yes\n", - "checking for C++ std::filesystem support... no\n", - "checking for C++ std::string::ends_with support... no\n", - "checking for memset... yes\n", - "checking for rint... yes\n", - "checking for socket... yes\n", - "checking for recvmsg... yes\n", - "checking for sqrt... yes\n", - "checking for strerror... yes\n", - "checking for arpa/inet.h... yes\n", - "checking for netdb.h... yes\n", - "checking for netinet/in.h... yes\n", - "checking for sys/file.h... yes\n", - "checking for sys/ioctl.h... yes\n", - "checking for sys/socket.h... yes\n", - "checking for _Bool... no\n", - "checking for stdbool.h that conforms to C99... yes\n", - "checking for GNU libc compatible malloc... yes\n", - "checking for OpenMP flag of C++ compiler... -fopenmp\n", - "checking for ptrdiff_t... yes\n", - "checking for int16_t... yes\n", - "checking for int32_t... yes\n", - "checking for int64_t... yes\n", - "checking for int8_t... yes\n", - "checking for pid_t... yes\n", - "checking for size_t... yes\n", - "checking for ssize_t... yes\n", - "checking for uint16_t... yes\n", - "checking for uint32_t... yes\n", - "checking for uint64_t... yes\n", - "checking for uint8_t... yes\n", - "checking for long double with more range or precision than double... yes\n", - "checking for numa_node_of_cpu in -lnuma... yes\n", - "checking for hwloc_topology_init in -lhwloc... yes\n", - "checking for ibv_query_device in -libverbs... yes\n", - "checking for rdma_get_devices in -lrdmacm... yes\n", - "checking for nvcc... /usr/local/cuda/bin/nvcc\n", - "checking for nvprune... /usr/local/cuda/bin/nvprune\n", - "checking for cuobjdump... /usr/local/cuda/bin/cuobjdump\n", - "checking for a working CUDA installation... yes - v11.1\n", - "checking for CUDA CXX standard support... C++17\n", - "checking for valid CUDA architectures... found: 35 37 50 52 53 60 61 62 70 72 75 80 86\n", - "checking which CUDA architectures to target... 70 75\n", - "checking for valid requested CUDA architectures... yes\n", - "checking for Pascal-style CUDA managed memory... yes\n", - "checking for /dev/shm... yes\n", - "checking if the compiler accepts '-march=native'... yes\n", - "checking whether python executable path has been provided... no\n", - "checking for python... /usr/local/bin/python\n", - "checking whether /usr/local/bin/python as ctypesgen... yes\n", - "checking whether docker executable path has been provided... no\n", - "checking for docker... no\n", - "checking for doxygen... no\n", - "configure: WARNING: doxygen not found - will not generate any doxygen documentation\n", - "checking for perl... /usr/bin/perl\n", - "configure: creating ./config.status\n", - "config.status: creating config.mk\n", - "config.status: creating Makefile\n", - "config.status: creating src/Makefile\n", - "config.status: creating python/Makefile\n", - "config.status: creating share/bifrost.pc\n", - "config.status: creating src/bifrost/config.h\n", - "config.status: executing libtool commands\n", - "\n", - "configure: WARNING: This version of cuFFT may have unexpected behavior for complex-to-real transforms\n", - "\n", - "configure: cuda: yes - v11.1 - 70 75\n", - "configure: numa: yes\n", - "configure: hwloc: yes\n", - "configure: libvma: no\n", - "configure: libverbs: yes\n", - "configure: librdmacm: yes\n", - "configure: python bindings: yes\n", - "configure: memory alignment: 4096\n", - "configure: logging directory: /dev/shm/bifrost\n", - "configure: options: native map_cache\n", - "\n", - "Bifrost is now ready to be compiled. Please run 'make'\n", - "\n", - "make -C src all\n", - "make[1]: Entering directory '/root/bifrost/src'\n", - "Building C++ source file memory.cpp\n", - "Building C++ source file affinity.cpp\n", - "Building C++ source file testsuite.cpp\n", - "Building C++ source file ring_impl.cpp\n", - "Building C++ source file array.cpp\n", - "Building C++ source file fileutils.cpp\n", - "Building C++ source file ring.cpp\n", - "Building C++ source file cuda.cpp\n", - "Building C++ source file unpack.cpp\n", - "Building C++ source file proclog.cpp\n", - "Building C++ source file address.cpp\n", - "Building C++ source file hw_locality.cpp\n", - "Building C++ source file packet_capture.cpp\n", - "Building C++ source file udp_socket.cpp\n", - "Building C++ source file quantize.cpp\n", - "Building C++ source file common.cpp\n", - "Building C++ source file packet_writer.cpp\n", - "Building CUDA source file transpose.cu\n", - "Building C++ source file rdma.cpp\n", - "Building CUDA source file fft.cu\n", - "Building CUDA source file fdmt.cu\n", - "Building C++ source file trace.cpp\n", - "Building CUDA source file linalg.cu\n", - "Building CUDA source file reduce.cu\n", - "Building CUDA source file linalg_kernels.cu\n", - "Building CUDA source file romein.cu\n", - "Building CUDA source file romein_kernels.cu\n", - "Building CUDA source file fir.cu\n", - "Building CUDA source file guantize.cu\n", - "Generating libbifrost.version\n", - "Building CUDA source file gunpack.cu\n", - "Building JIT version of ArrayIndexer.cuh\n", - "Building JIT version of int_fastdiv.h\n", - "Building JIT version of ShapeIndexer.cuh\n", - "Building JIT version of Vector.hpp\n", - "Building JIT version of IndexArray.cuh\n", - "Building JIT version of Complex.hpp\n", - "Building C++ source file map.cpp\n", - "In file included from \u001b[01m\u001b[Kpacket_capture.hpp:290:0\u001b[m\u001b[K,\n", - " from \u001b[01m\u001b[Kpacket_capture.cpp:29\u001b[m\u001b[K:\n", - "\u001b[01m\u001b[Kib_verbs.hpp:\u001b[m\u001b[K In member function ‘\u001b[01m\u001b[Kvoid \n", - " Verbs::get_interface_name(char*)\u001b[m\u001b[K’:\n", - "\u001b[01m\u001b[Kib_verbs.hpp:189:44:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kunknown option \n", - " after ‘\u001b[01m\u001b[K#pragma GCC diagnostic\u001b[m\u001b[K’ kind \n", - " [\u001b[01;35m\u001b[K-Wpragmas\u001b[m\u001b[K]\n", - " #pragma GCC diagnostic ignored \u001b[01;35m\u001b[K\"-Wstringop-truncation\"\n", - "\u001b[m\u001b[K\n", - " \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~\n", - "\u001b[m\u001b[K\n", - "\u001b[01m\u001b[Kib_verbs.hpp:204:48:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kunknown option \n", - " after ‘\u001b[01m\u001b[K#pragma GCC diagnostic\u001b[m\u001b[K’ kind \n", - " [\u001b[01;35m\u001b[K-Wpragmas\u001b[m\u001b[K]\n", - " #pragma GCC diagnostic ignored \u001b[01;35m\u001b[K\"-Wstringop-truncatio\n", - "n\"\u001b[m\u001b[K\n", - " \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~\n", - "~~\u001b[m\u001b[K\n", - "In file included from \u001b[01m\u001b[Kpacket_capture.cpp:29:0\u001b[m\u001b[K:\n", - "\u001b[01m\u001b[Kpacket_capture.hpp:\u001b[m\u001b[K In member function ‘\u001b[01m\u001b[Kvirtual bool \n", - " BFpacketcapture_cor_impl::has_sequence_changed(const PacketDesc*)\u001b[m\u001b[K’:\n", - "\u001b[01m\u001b[Kpacket_capture.hpp:839:37:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kcomparison \n", - " between signed and unsigned integer expressions \n", - " [\u001b[01;35m\u001b[K-Wsign-compare\u001b[m\u001b[K]\n", - " || (\u001b[01;35m\u001b[Kpkt->decimation != _navg\u001b[m\u001b[K));\n", - " \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~^~~~~~~~\u001b[m\u001b[K\n", - "In file included from \u001b[01m\u001b[Kpacket_writer.hpp:190:0\u001b[m\u001b[K,\n", - " from \u001b[01m\u001b[Kpacket_writer.cpp:29\u001b[m\u001b[K:\n", - "\u001b[01m\u001b[Kib_verbs.hpp:\u001b[m\u001b[K In member function ‘\u001b[01m\u001b[Kvoid \n", - " Verbs::get_interface_name(char*)\u001b[m\u001b[K’:\n", - "\u001b[01m\u001b[Kib_verbs.hpp:189:44:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kunknown option \n", - " after ‘\u001b[01m\u001b[K#pragma GCC diagnostic\u001b[m\u001b[K’ kind \n", - " [\u001b[01;35m\u001b[K-Wpragmas\u001b[m\u001b[K]\n", - " #pragma GCC diagnostic ignored \u001b[01;35m\u001b[K\"-Wstringop-truncation\"\n", - "\u001b[m\u001b[K\n", - " \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~\n", - "\u001b[m\u001b[K\n", - "\u001b[01m\u001b[Kib_verbs.hpp:204:48:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kunknown option \n", - " after ‘\u001b[01m\u001b[K#pragma GCC diagnostic\u001b[m\u001b[K’ kind \n", - " [\u001b[01;35m\u001b[K-Wpragmas\u001b[m\u001b[K]\n", - " #pragma GCC diagnostic ignored \u001b[01;35m\u001b[K\"-Wstringop-truncatio\n", - "n\"\u001b[m\u001b[K\n", - " \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~\n", - "~~\u001b[m\u001b[K\n", - "Linking _cuda_device_link.o\n", - "\u001b[01m\u001b[Ktranspose.cu:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[KBFstatus \n", - " transpose_simple(const BFarray*, const BFarray*, const int*)\u001b[m\u001b[K’:\n", - "\u001b[01m\u001b[Ktranspose.cu:319:32:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Kaxes_inverted\u001b[m\u001b[K’\n", - " may be used uninitialized in this function \n", - " [\u001b[01;35m\u001b[K-Wmaybe-uninitialized\u001b[m\u001b[K]\n", - " func_str += hex_digits[a\u001b[01;35m\u001b[Kxes[0]]\u001b[m\u001b[K;\n", - " \u001b[01;35m\u001b[K~~~~~~^\u001b[m\u001b[K\n", - "Linking libbifrost.so.0.10\n", - "Successfully built libbifrost.so.0.10\n", - "make[1]: Leaving directory '/root/bifrost/src'\n", - "make -C python build\n", - "make[1]: Entering directory '/root/bifrost/python'\n", - "# Build the libbifrost wrapper\n", - "/usr/local/bin/python -c 'from ctypesgen import main as ctypeswrap; ctypeswrap.main()' -lbifrost -I../src ../src/bifrost/address.h ../src/bifrost/memory.h ../src/bifrost/reduce.h ../src/bifrost/io.h ../src/bifrost/ring.h ../src/bifrost/rdma.h ../src/bifrost/cuda.h ../src/bifrost/fdmt.h ../src/bifrost/transpose.h ../src/bifrost/testsuite.h ../src/bifrost/config.h ../src/bifrost/linalg.h ../src/bifrost/common.h ../src/bifrost/unpack.h ../src/bifrost/udp_socket.h ../src/bifrost/affinity.h ../src/bifrost/packet_capture.h ../src/bifrost/fft.h ../src/bifrost/map.h ../src/bifrost/proclog.h ../src/bifrost/array.h ../src/bifrost/quantize.h ../src/bifrost/fir.h ../src/bifrost/romein.h ../src/bifrost/packet_writer.h -o bifrost/libbifrost_generated.py\n", - "INFO: Status: Preprocessing /tmp/tmpr1s5282d.h\n", - "INFO: Status: gcc -E -U __GNUC__ -dD -I\"../src\" \"-D__extension__=\" \"-D__const=const\" \"-D__asm__(x)=\" \"-D__asm(x)=\" \"-DCTYPESGEN=1\" \"/tmp/tmpr1s5282d.h\"\n", - "INFO: Status: Parsing /tmp/tmpr1s5282d.h\n", - "ERROR: /usr/include/x86_64-linux-gnu/sys/cdefs.h:240: Syntax error at '\\n'\n", - "INFO: Status: Processing description list.\n", - "WARNING: Could not load library \"bifrost\". Okay, I'll try to load it at runtime instead. \n", - "INFO: Status: Writing to bifrost/libbifrost_generated.py.\n", - "INFO: Status: Wrapping complete.\n", - "# WAR for 'const char**' being generated as POINTER(POINTER(c_char)) instead of POINTER(c_char_p)\n", - "/bin/sed -i.orig -e 's/POINTER(c_char)/c_char_p/g' bifrost/libbifrost_generated.py\n", - "# WAR for a buggy WAR in ctypesgen that breaks type checking and auto-byref functionality\n", - "/bin/sed -i.orig -e 's/def POINTER/def POINTER_not_used/' bifrost/libbifrost_generated.py\n", - "# WAR for a buggy WAR in ctypesgen that breaks string buffer arguments (e.g., as in address.py)\n", - "/bin/sed -i.orig -e 's/class String/String = c_char_p\\nclass String_not_used/' bifrost/libbifrost_generated.py\n", - "/bin/sed -i.orig -e 's/String.from_param/String_not_used.from_param/g' bifrost/libbifrost_generated.py\n", - "/bin/sed -i.orig -e 's/def ReturnString/ReturnString = c_char_p\\ndef ReturnString_not_used/' bifrost/libbifrost_generated.py\n", - "/bin/sed -i.orig -e '/errcheck = ReturnString/s/^/#/' bifrost/libbifrost_generated.py\n", - "/usr/local/bin/python setup.py build \n", - "running build\n", - "running build_py\n", - "creating build\n", - "creating build/lib\n", - "creating build/lib/bifrost\n", - "copying bifrost/ring.py -> build/lib/bifrost\n", - "copying bifrost/map.py -> build/lib/bifrost\n", - "copying bifrost/DataType.py -> build/lib/bifrost\n", - "copying bifrost/temp_storage.py -> build/lib/bifrost\n", - "copying bifrost/sigproc2.py -> build/lib/bifrost\n", - "copying bifrost/affinity.py -> build/lib/bifrost\n", - "copying bifrost/block_chainer.py -> build/lib/bifrost\n", - "copying bifrost/sigproc.py -> build/lib/bifrost\n", - "copying bifrost/header_standard.py -> build/lib/bifrost\n", - "copying bifrost/block.py -> build/lib/bifrost\n", - "copying bifrost/packet_writer.py -> build/lib/bifrost\n", - "copying bifrost/udp_socket.py -> build/lib/bifrost\n", - "copying bifrost/transpose.py -> build/lib/bifrost\n", - "copying bifrost/romein.py -> build/lib/bifrost\n", - "copying bifrost/core.py -> build/lib/bifrost\n", - "copying bifrost/device.py -> build/lib/bifrost\n", - "copying bifrost/Space.py -> build/lib/bifrost\n", - "copying bifrost/__init__.py -> build/lib/bifrost\n", - "copying bifrost/reduce.py -> build/lib/bifrost\n", - "copying bifrost/address.py -> build/lib/bifrost\n", - "copying bifrost/memory.py -> build/lib/bifrost\n", - "copying bifrost/units.py -> build/lib/bifrost\n", - "copying bifrost/ring2.py -> build/lib/bifrost\n", - "copying bifrost/unpack.py -> build/lib/bifrost\n", - "copying bifrost/fdmt.py -> build/lib/bifrost\n", - "copying bifrost/quantize.py -> build/lib/bifrost\n", - "copying bifrost/pipeline.py -> build/lib/bifrost\n", - "copying bifrost/psrdada.py -> build/lib/bifrost\n", - "copying bifrost/packet_capture.py -> build/lib/bifrost\n", - "copying bifrost/proclog.py -> build/lib/bifrost\n", - "copying bifrost/ndarray.py -> build/lib/bifrost\n", - "copying bifrost/dtype.py -> build/lib/bifrost\n", - "copying bifrost/GPUArray.py -> build/lib/bifrost\n", - "copying bifrost/guppi_raw.py -> build/lib/bifrost\n", - "copying bifrost/libbifrost.py -> build/lib/bifrost\n", - "copying bifrost/linalg.py -> build/lib/bifrost\n", - "copying bifrost/rdma.py -> build/lib/bifrost\n", - "copying bifrost/libbifrost_generated.py -> build/lib/bifrost\n", - "copying bifrost/fft.py -> build/lib/bifrost\n", - "copying bifrost/portaudio.py -> build/lib/bifrost\n", - "copying bifrost/fir.py -> build/lib/bifrost\n", - "creating build/lib/bifrost/version\n", - "copying bifrost/version/__init__.py -> build/lib/bifrost/version\n", - "copying bifrost/version/__main__.py -> build/lib/bifrost/version\n", - "creating build/lib/bifrost/telemetry\n", - "copying bifrost/telemetry/__init__.py -> build/lib/bifrost/telemetry\n", - "copying bifrost/telemetry/__main__.py -> build/lib/bifrost/telemetry\n", - "creating build/lib/bifrost/views\n", - "copying bifrost/views/__init__.py -> build/lib/bifrost/views\n", - "copying bifrost/views/basic_views.py -> build/lib/bifrost/views\n", - "creating build/lib/bifrost/blocks\n", - "copying bifrost/blocks/correlate.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/binary_io.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/sigproc.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/convert_visibilities.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/audio.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/reverse.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/print_header.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/transpose.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/scrunch.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/detect.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/__init__.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/reduce.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/unpack.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/copy.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/fdmt.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/quantize.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/fftshift.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/psrdada.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/wav.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/serialize.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/guppi_raw.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/fft.py -> build/lib/bifrost/blocks\n", - "copying bifrost/blocks/accumulate.py -> build/lib/bifrost/blocks\n", - "running build_scripts\n", - "creating build/scripts-3.7\n", - "copying and adjusting ../tools/pipeline2dot.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/like_top.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/like_ps.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/like_pmap.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/setirq.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/getsiblings.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/getirq.py -> build/scripts-3.7\n", - "copying and adjusting ../tools/like_bmon.py -> build/scripts-3.7\n", - "changing mode of build/scripts-3.7/pipeline2dot.py from 644 to 755\n", - "changing mode of build/scripts-3.7/like_top.py from 644 to 755\n", - "changing mode of build/scripts-3.7/like_ps.py from 644 to 755\n", - "changing mode of build/scripts-3.7/like_pmap.py from 644 to 755\n", - "changing mode of build/scripts-3.7/setirq.py from 644 to 755\n", - "changing mode of build/scripts-3.7/getsiblings.py from 644 to 755\n", - "changing mode of build/scripts-3.7/getirq.py from 644 to 755\n", - "changing mode of build/scripts-3.7/like_bmon.py from 644 to 755\n", - "make[1]: Leaving directory '/root/bifrost/python'\n", - "mkdir -p /usr/local/lib\n", - "cp lib/libbifrost.so.0.10 /usr/local/lib/libbifrost.so.0.10\n", - "ln -f -s libbifrost.so.0.10 /usr/local/lib/libbifrost.so.0\n", - "ln -f -s libbifrost.so.0.10 /usr/local/lib/libbifrost.so\n", - "mkdir -p /usr/local/include/bifrost\n", - "cp src/bifrost/address.h src/bifrost/memory.h src/bifrost/reduce.h src/bifrost/io.h src/bifrost/ring.h src/bifrost/rdma.h src/bifrost/cuda.h src/bifrost/fdmt.h src/bifrost/transpose.h src/bifrost/testsuite.h src/bifrost/config.h src/bifrost/linalg.h src/bifrost/common.h src/bifrost/unpack.h src/bifrost/udp_socket.h src/bifrost/affinity.h src/bifrost/packet_capture.h src/bifrost/fft.h src/bifrost/map.h src/bifrost/proclog.h src/bifrost/array.h src/bifrost/quantize.h src/bifrost/fir.h src/bifrost/romein.h src/bifrost/packet_writer.h /usr/local/include/bifrost/\n", - "mkdir -p /usr/local/share/bifrost\n", - "cp share/bifrost.m4 /usr/local/share/bifrost/\n", - "mkdir -p /usr/local/lib/pkgconfig\n", - "cp share/bifrost.pc /usr/local/lib/pkgconfig/\n", - "make -C python install\n", - "make[1]: Entering directory '/root/bifrost/python'\n", - "/usr/local/bin/python setup.py build \n", - "running build\n", - "running build_py\n", - "running build_scripts\n", - "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", - "Processing /root/bifrost/python\n", - "\u001b[33m DEPRECATION: A future pip version will change local packages to be built in-place without first copying to a temporary directory. We recommend you use --use-feature=in-tree-build to test your packages with this new behavior before it becomes the default.\n", - " pip 21.3 will remove support for this functionality. You can find discussion regarding this at https://github.com/pypa/pip/issues/7555.\u001b[0m\n", - "Requirement already satisfied: numpy>=1.8.1 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (1.21.6)\n", - "Requirement already satisfied: contextlib2>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.5.5)\n", - "Requirement already satisfied: pint>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.18)\n", - "Requirement already satisfied: graphviz>=0.5.0 in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (0.10.1)\n", - "Collecting ctypesgen==1.0.2\n", - " Downloading ctypesgen-1.0.2-py2.py3-none-any.whl (476 kB)\n", - "\u001b[?25l\r\u001b[K |▊ | 10 kB 28.9 MB/s eta 0:00:01\r\u001b[K |█▍ | 20 kB 17.9 MB/s eta 0:00:01\r\u001b[K |██ | 30 kB 14.7 MB/s eta 0:00:01\r\u001b[K |██▊ | 40 kB 13.4 MB/s eta 0:00:01\r\u001b[K |███▍ | 51 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████▏ | 61 kB 8.6 MB/s eta 0:00:01\r\u001b[K |████▉ | 71 kB 9.0 MB/s eta 0:00:01\r\u001b[K |█████▌ | 81 kB 8.8 MB/s eta 0:00:01\r\u001b[K |██████▏ | 92 kB 9.7 MB/s eta 0:00:01\r\u001b[K |██████▉ | 102 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████▋ | 112 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████▎ | 122 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████ | 133 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████▋ | 143 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████▎ | 153 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████ | 163 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████▊ | 174 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████▍ | 184 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████ | 194 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████▊ | 204 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████▍ | 215 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████▏ | 225 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████▉ | 235 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████▌ | 245 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████████▏ | 256 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████████▉ | 266 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████▋ | 276 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████████▎ | 286 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████ | 296 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████▋ | 307 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████████████▎ | 317 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████████ | 327 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████████▊ | 337 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████████████▍ | 348 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████████ | 358 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████████▊ | 368 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████████████████▍ | 378 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▏ | 389 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▉ | 399 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▌ | 409 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▏ | 419 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▉ | 430 kB 8.1 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▌ | 440 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▎ | 450 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████ | 460 kB 8.1 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▋| 471 kB 8.1 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 476 kB 8.1 MB/s \n", - "\u001b[?25hRequirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from bifrost==0.10.0) (3.2.2)\n", - "Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from pint>=0.7.0->bifrost==0.10.0) (21.3)\n", - "Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from pint>=0.7.0->bifrost==0.10.0) (4.11.4)\n", - "Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->pint>=0.7.0->bifrost==0.10.0) (4.1.1)\n", - "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->pint>=0.7.0->bifrost==0.10.0) (3.8.0)\n", - "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (0.11.0)\n", - "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (3.0.9)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (1.4.3)\n", - "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->bifrost==0.10.0) (2.8.2)\n", - "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->bifrost==0.10.0) (1.15.0)\n", - "Building wheels for collected packages: bifrost\n", - " Building wheel for bifrost (setup.py) ... \u001b[?25l\u001b[?25hdone\n", - " Created wheel for bifrost: filename=bifrost-0.10.0-py3-none-any.whl size=188597 sha256=3b35187305e5b3677bd4b17518d0e3ec6c227824e01373ada32f88c20b5ca402\n", - " Stored in directory: /tmp/pip-ephem-wheel-cache-dg1tyaur/wheels/35/b7/11/a795b9aa4b1dfc3b2091f793f70becd9333a0b79216d208fd5\n", - "Successfully built bifrost\n", - "Installing collected packages: ctypesgen, bifrost\n", - " Attempting uninstall: ctypesgen\n", - " Found existing installation: ctypesgen 1.0.3.dev98+g2120dbf\n", - " Uninstalling ctypesgen-1.0.3.dev98+g2120dbf:\n", - " Successfully uninstalled ctypesgen-1.0.3.dev98+g2120dbf\n", - "Successfully installed bifrost-0.10.0 ctypesgen-1.0.2\n", - "*************************************************************************\n", - "By default Bifrost installs with basic Python telemetry enabled in order\n", - "to help inform how the software is used for future development. You can\n", - "opt out of telemetry collection using:\n", - "python -m bifrost.telemetry --disable\n", - "*************************************************************************\n", - "\n", - "If you have trouble importing Bifrost from Python you may need\n", - "to set LD_LIBRARY_PATH to /usr/local/lib or have your\n", - "system administrator add this directory to '/etc/ld.so.conf'.\n", - "\n", - "make[1]: Leaving directory '/root/bifrost/python'\n", - "Libraries have been installed in:\n", - " /usr/local/lib\n", - "\n", - "If you ever happen to want to link against installed libraries\n", - "in a given directory, LIBDIR, you must either use libtool, and\n", - "specify the full pathname of the library, or use the '-LLIBDIR'\n", - "flag during linking and do at least one of the following:\n", - " - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable\n", - " during execution\n", - " - add LIBDIR to the 'LD_RUN_PATH' environment variable\n", - " during linking\n", - " - use the '-Wl,-rpath -Wl,LIBDIR' linker flag\n", - " - have your system administrator add LIBDIR to '/etc/ld.so.conf'\n", - "\n", - "See any operating system documentation about shared libraries for\n", - "more information, such as the ld(1) and ld.so(8) manual pages.\n" - ] - } - ] - }, - { - "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "id": "372e7e14", "metadata": { "id": "372e7e14" @@ -685,12 +160,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "a67846f0", "metadata": { - "id": "a67846f0" + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "a67846f0", + "outputId": "12ba73a5-913c-4afb-b812-04cb5f430c68" }, - "outputs": [], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Input:\n", + " 0 @ 0 : (-9.040182113647461+5.184663772583008j) -> (-9, 5)\n", + " 1 @ 0 : (-0.7387441396713257-1.1859489679336548j) -> (-1, -1)\n", + " 2 @ 0 : (14.541327476501465-2.5483381748199463j) -> (15, -3)\n", + " 3 @ 0 : (10.429906845092773+19.244178771972656j) -> (10, 19)\n", + " 4 @ 0 : (-1.082539439201355+6.93345832824707j) -> (-1, 7)\n", + "Output:\n", + "[(-9, 5), (-1, -1), (15, -3), (10, 19), (-1, 7)]\n" + ] + } + ], "source": [ "import time\n", "import numpy\n", @@ -711,7 +205,7 @@ " data = bifrost.ndarray(data.astype(numpy.complex64))\n", " \n", " qdata = bifrost.ndarray(shape=data.shape, dtype='ci8')\n", - " bifrost.quantize.quantize(data, qdata, scale=2)\n", + " bifrost.quantize(data, qdata, scale=2)\n", " print('Input:')\n", " for i in range(5):\n", " print(' ', i, '@', 0, ':', data[0,i]*2, '->', qdata[0,i])\n", From 7a6fa375423d62eff38d77fec6cdd76208dbca40 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 8 Jul 2022 12:06:01 -0400 Subject: [PATCH 0705/1155] Revised tutorial README --- tutorial/README.md | 93 ++++++---------------------------------------- 1 file changed, 11 insertions(+), 82 deletions(-) diff --git a/tutorial/README.md b/tutorial/README.md index fdb53060f..829f1fa7c 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -7,11 +7,19 @@ A collection of examples that show how to use various features in the [Bifrost f * There is an [overview talk of Bifrost](https://www.youtube.com/watch?v=DXH89rOVVzg) from the 2019 CASPER workshop. * There is a [walk through of this tutorial](https://youtu.be/ktk2dkUssAA?t=20170) from the 2021 CASPER workshop. +You should be able to run these notebooks in any Jupyter environment that has Bifrost installed — just open the `.ipynb` files in this directory. To try them without installing Bifrost or configuring Jupyter locally, you can open them in Google Colab (free, cloud) or use Docker (local, requires GPU hardware but dependencies are bundled). + +## Google Colab + +This is the simplest way to try the tutorial, without needing to install or configure anything. It also does not require a local GPU: Google currently provides free access to one GPU-enabled runtime (for foreground computation only). + +Visit each `.ipynb` file in this directory on GitHub, where you can read the text, code, and see static output. To allow interaction, use the “Open in Colab” button at the top. Then use control-enter to run each selected code block; the first one should install Bifrost on your runtime instance. (It can take a short while, but a green arrow should march through the steps. If you switch away, just remember to return before the instance times out!) + +Please [report any issues](https://github.com/ledatelescope/bifrost/issues) with opening, installing, or running the tutorial notebooks on Colab. + ## Docker Image - You should be able to run these tutorials in any Jupyter environment that has Bifrost installed. We also - have a Docker image with Bifrost, CUDA, Jupyter, and the tutorial already installed if you want a quicker - path to trying it out. Simply run: +We provide a Docker image with Bifrost, CUDA, Jupyter, and the tutorial already installed if you want a quicker path to trying it out. Simply run: ``` docker pull lwaproject/bifrost_tutorial @@ -21,82 +29,3 @@ A collection of examples that show how to use various features in the [Bifrost f This will start the Jupyter server on port 8888 which you can connect to with a browser running on the host. *Note that this uses Nvidia runtime for Docker to allow access to the host's GPU for the GPU-enabled portions of the tutorial.* - -## Amazon EC2 image - -Another way to try the tutorials if you don't have appropriate GPU hardware is -using a virtual machine on Amazon's Elastic Compute Cloud (EC2). There are -GPU-enabled machine types that start at around US$0.53 per hour, which is pretty -affordable for playing around and learning. *Just don't forget to power down the -machine when not in active use.* - - 1. Start at the [EC2 console for region - us-west-1](https://us-west-1.console.aws.amazon.com/ec2/v2/home?region=us-west-1#Home:) - and click the **Launch instance** button. - - 2. Step 1: Choose AMI: switch to Community AMIs and paste - `ami-0d13b7e8d7a746045` into the search bar. It should appear with the label - `bifrost_tutorial`. Click **Select**. - - 3. Step 2: Choose an Instance Type: filter by family **g4dn** then choose - **g4dn.xlarge**. At the time of writing (May 2021), this instance was around - US$0.53 per hour using on-demand pricing. Click **Next: Configure Instance** - to proceed. - - 4. Step 3: Configure Instance: On this screen, make sure **Auto-assign Public IP** is - set to **Enable**. The rest of the defaults should be fine. Proceed to - **Step 6**. - - 5. Step 6: Configure Security Group. Create a **new security group** and make - sure TCP ports 22 (SSH) is open to `0.0.0.0/0` (should be, by default). - Then, **Add Rule** with **Custom TCP**, port **8888**, and source - **Anywhere**. Click **Review and Launch**. - - 6. Check the settings on the Review screen, especially **g4dn**, ports 22 and - 8888, and **Assign Public IP**. Click **Launch**. - - 7. Next you will be prompted for an SSH key pair. If you've done this before - (in us-west-1) and know you have access to the private key, you can choose - that. We'll assume you **Create a new key pair**. Enter the key pair name - `bifrost-gpu` and click **Download Key Pair**. Save the `bifrost-gpu.pem` - file someplace safe, perhaps in `~/.ssh`. Now click **Launch instance(s)**. - - 8. Back on your EC2 dashboard, it should (eventually) show it as Running, and - list a Public IPv4 address. Make not of that address and substitute it for - `MY_IP_ADDR` below. - - 9. Make sure your downloaded private key file is protected, by running: - - ``` - chmod 600 ~/.ssh/bifrost-gpu.pem - ``` - - 10. Log in to the new server's command line, like this: - - ``` - ssh -i ~/.ssh/bifrost-gpu.pem -l ubuntu MY_IP_ADDR - ``` - - 11. After successful login, type - - ``` - ./launch_jupyter.sh - ``` - - This will create a new self-signed security certificate and run the Jupyter - notebook server. It should print a URL with a hexadecimal token in the - output. - - 12. Open `https://MY_IP_ADDR:8000/` in your web browser. It will display a - security warning due to the self-signed certificate. You can select - **Advanced** and **Accept the risk** (exact prompts will depend on your - browser). - - 13. Next the page will prompt for a password or token. Copy and paste the token - from the terminal output of the launch script. After authenticating, you - should see folders including `bifrost_tutorial`. - - 14. When finished, you can use control-C to and `y` in the terminal to stop the - notebook server. Don't forget to shut down the EC2 instance using `sudo - poweroff`. (Note that each time you shut down and restart the instance, it - can have a new IP address.) From 4ff9975f93fbcc41976e00a1221ada3a6637fdc9 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 20 Jul 2022 16:19:17 -0400 Subject: [PATCH 0706/1155] Link to tutorial/ subdir from top-level README --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 190d3b1cd..6bee4c149 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,11 @@ A stream processing framework for high-throughput applications. ### [![Paper](https://img.shields.io/badge/arXiv-1708.00720-blue.svg)](https://arxiv.org/abs/1708.00720) ### [Bifrost Documentation](http://ledatelescope.github.io/bifrost/) + +See also the [Bifrost tutorial notebooks](tutorial/), which can be run +on Google Colab or any Jupyter environment where Bifrost is installed +(and a GPU is available). + ### [Bifrost Roadmap](ROADMAP.md) ## A Simple Pipeline From 114369b430e8dc40d0a0fde5f0a45bb9ac8285fe Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 20 Jul 2022 15:10:11 -0600 Subject: [PATCH 0707/1155] Fix tutorial dockerfile; need to be root for make install --- tutorial/docker/Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tutorial/docker/Dockerfile b/tutorial/docker/Dockerfile index 64271df7a..e5f876ecc 100644 --- a/tutorial/docker/Dockerfile +++ b/tutorial/docker/Dockerfile @@ -136,13 +136,15 @@ RUN cd /home/$LSL_USER/bifrost && \ ./configure --with-gpu-archs="35 50 61 75" && \ make -j all && \ make doc && \ - make install && \ cd /home/$LSL_USER && \ ln -s /home/$LSL_USER/bifrost/tutorial /home/$LSL_USER/bifrost_tutorial # Back to root USER root +RUN cd /home/$LSL_USER/bifrost && \ + make install + # Setup work directory for backward-compatibility RUN mkdir /home/$LSL_USER/work && \ fix-permissions /home/$LSL_USER From bac239700ec811e70489b1d0bebb518eca3cbfa6 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 28 Jul 2022 14:37:36 -0400 Subject: [PATCH 0708/1155] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • Updated input 'nixpkgs': 'path:/nix/store/3ck36g7rh9v9fa924h149pq7h6cx9nzx-source' (2022-01-12) → 'github:NixOS/nixpkgs/8f73de28e63988da02426ebb17209e3ae07f103b' (2022-07-27) • Updated input 'pre-commit-hooks': 'github:cachix/pre-commit-hooks.nix/ff9c0b459ddc4b79c06e19d44251daa8e9cd1746' (2021-12-18) → 'github:cachix/pre-commit-hooks.nix/f436e6dbc10bb3500775785072a40eefe057b18e' (2022-07-23) • Updated input 'pre-commit-hooks/flake-utils': 'github:numtide/flake-utils/2ebf2558e5bf978c7fb8ea927dfaed8fefab2e28' (2021-04-25) → 'github:numtide/flake-utils/3cecb5b042f7f209c56ffd8371b2711a290ec797' (2022-02-07) Revised for nixpkgs rename 'cudatoolkit_10' → 'cudaPackages_10.cudatoolkit'. --- flake.lock | 24 ++++++++++++------------ flake.nix | 15 +++++++-------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/flake.lock b/flake.lock index 51f0349be..902621b55 100644 --- a/flake.lock +++ b/flake.lock @@ -19,11 +19,11 @@ }, "flake-utils": { "locked": { - "lastModified": 1619345332, - "narHash": "sha256-qHnQkEp1uklKTpx3MvKtY6xzgcqXDsz5nLilbbuL+3A=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "2ebf2558e5bf978c7fb8ea927dfaed8fefab2e28", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { @@ -34,11 +34,12 @@ }, "nixpkgs": { "locked": { - "lastModified": 1641947035, - "narHash": "sha256-l4dnwWvh2Yte2I9sAwGhMG/qkvLkfV0v/ssgkZ5KNY4=", - "path": "/nix/store/3ck36g7rh9v9fa924h149pq7h6cx9nzx-source", - "rev": "9acedfd7ef32253237311dc3c78286773dbcb0d6", - "type": "path" + "lastModified": 1658937758, + "narHash": "sha256-FxQB/tWX15Faq3GBM+qTfVzd9qJqy/3CEgBp2zpHeNc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8f73de28e63988da02426ebb17209e3ae07f103b", + "type": "github" }, "original": { "id": "nixpkgs", @@ -53,17 +54,16 @@ ] }, "locked": { - "lastModified": 1639823344, - "narHash": "sha256-jlsQb2y6A5dB1R0wVPLOfDGM0wLyfYqEJNzMtXuzCXw=", + "lastModified": 1658611562, + "narHash": "sha256-jktQ3mRrFAiFzzmVxQXh+8IxZOEE4hfr7St3ncXeVy4=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "ff9c0b459ddc4b79c06e19d44251daa8e9cd1746", + "rev": "f436e6dbc10bb3500775785072a40eefe057b18e", "type": "github" }, "original": { "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "ff9c0b459ddc4b79c06e19d44251daa8e9cd1746", "type": "github" } }, diff --git a/flake.nix b/flake.nix index 344793138..9a6eafca6 100644 --- a/flake.nix +++ b/flake.nix @@ -8,8 +8,7 @@ }; inputs.pre-commit-hooks = { - url = - "github:cachix/pre-commit-hooks.nix/ff9c0b459ddc4b79c06e19d44251daa8e9cd1746"; + url = "github:cachix/pre-commit-hooks.nix"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -231,7 +230,7 @@ bifrost = final.callPackage bifrost { }; bifrost-doc = final.callPackage bifrost-doc { }; github_stats = final.writeShellScriptBin "github_stats" '' - ${final.python3.withPackages (p: [p.PyGithub])}/bin/python \ + ${final.python3.withPackages (p: [ p.PyGithub ])}/bin/python \ ${tools/github_stats.py} "$@" ''; } @@ -247,10 +246,10 @@ # the default 10 and 11. It's easy to generate other point releases # from the overlay. (Versions prior to 10 are not supported anymore by # nixpkgs.) - isCuda = name: builtins.match "cudatoolkit(_1[01])" name != null; - shortenCuda = lib.replaceStrings [ "toolkit" "_" ] [ "" "" ]; - cudaAttrs = lib.filterAttrs - (name: pkg: isCuda name && lib.elem pkgs.system pkg.meta.platforms) + isCuda = name: builtins.match "cudaPackages(_1[01])" name != null; + shortenCuda = lib.replaceStrings [ "Packages" "_" ] [ "" "" ]; + cudaAttrs = lib.filterAttrs (name: pkg: + isCuda name && lib.elem pkgs.system pkg.cudatoolkit.meta.platforms) pkgs; # Which C++ compilers can we build with? How to name them? @@ -282,7 +281,7 @@ + lib.optionalString enableDebug "-debug") { inherit stdenv enableDebug; enableCuda = cuda != null; - cudatoolkit = pkgs.${cuda}; + cudatoolkit = pkgs.${cuda}.cudatoolkit; }))); # Runnable ctypesgen per python. Though it's just the executable we From 35fcb140d3286bbb5d9b9624f81585252ffcaf7d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Aug 2022 14:11:05 -0600 Subject: [PATCH 0709/1155] Change the sleep from 1 to 5 ms. Change the multicast address. --- test/test_udp_io.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 2f677d29a..9a44f17da 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -251,7 +251,7 @@ def test_read_tbn(self): desc, data = self._get_tbn_data() for p in range(data.shape[0]): oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) - time.sleep(1e-3) + time.sleep(0.005) reader.join() accumu.join() @@ -329,7 +329,7 @@ def test_read_drx(self): for p in range(data.shape[0]): oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],...].reshape(1,2,4096)) oop.send(desc, p*10*4096, 10*4096, (2<<3), 128, data[p,[2,3],...].reshape(1,2,4096)) - time.sleep(1e-3) + time.sleep(0.005) reader.join() accumu.join() @@ -391,7 +391,7 @@ def test_read_drx_single(self): desc.set_nsrc(2) for p in range(data.shape[0]): oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],:].reshape(1,2,4096)) - time.sleep(1e-3) + time.sleep(0.005) reader.join() accumu.join() @@ -469,7 +469,7 @@ def test_read_pbeam(self): desc, data = self._get_pbeam_data() for p in range(data.shape[0]): oop.send(desc, p*24, 24, 0, 1, data[p,...].reshape(1,1,128*4)) - time.sleep(1e-3) + time.sleep(0.005) reader.join() accumu.join() @@ -489,7 +489,7 @@ def test_read_pbeam(self): osock.close() def test_write_multicast(self): - addr = Address('224.0.0.101', 7147) + addr = Address('224.0.0.251', 7147) sock = UDPSocket() sock.connect(addr) op = UDPTransmit('tbn', sock) @@ -505,7 +505,7 @@ def test_read_multicast(self): ring = Ring(name="capture_multi") # Setup the blocks - addr = Address('224.0.0.101', 7147) + addr = Address('224.0.0.251', 7147) ## Output via UDPTransmit osock = UDPSocket() osock.connect(addr) @@ -529,7 +529,7 @@ def test_read_multicast(self): desc, data = self._get_tbn_data() for p in range(data.shape[0]): oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) - time.sleep(1e-3) + time.sleep(0.005) reader.join() accumu.join() From b2aa8884e8d69d63e513d2f8a8faebb1fb8d50ba Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Aug 2022 14:39:02 -0600 Subject: [PATCH 0710/1155] Skip the first two frames? --- test/test_udp_io.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 9a44f17da..6bdd8f7cb 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -263,7 +263,7 @@ def test_read_tbn(self): final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8', buffer=final.ctypes.data) ## Reduce to match the capture block size data = data[:final.shape[0],...] - for i in range(1, data.shape[0]): + for i in range(2, data.shape[0]): np.testing.assert_equal(final[i,...], data[i,...]) # Clean up @@ -341,7 +341,7 @@ def test_read_drx(self): final = bf.ndarray(shape=(final.shape[0],4,4096), dtype='ci4', buffer=final.ctypes.data) ## Reduce to match the capture block size data = data[:final.shape[0],...] - for i in range(1, data.shape[0]): + for i in range(2, data.shape[0]): np.testing.assert_equal(final[i,...], data[i,...]) # Clean up @@ -404,7 +404,7 @@ def test_read_drx_single(self): ## Reduce to match the capture block size data = data[:final.shape[0],...] data = data[:,[0,1],:] - for i in range(1, data.shape[0]): + for i in range(2, data.shape[0]): np.testing.assert_equal(final[i,...], data[i,...]) # Clean up @@ -480,7 +480,7 @@ def test_read_pbeam(self): final = final.transpose(0,2,1).copy() ## Reduce to match the capture block size data = data[:(final.shape[0]//240-1)*240,...] - for i in range(1, data.shape[0]): + for i in range(2, data.shape[0]): np.testing.assert_equal(final[i,...], data[i,...]) # Clean up @@ -541,7 +541,7 @@ def test_read_multicast(self): final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8', buffer=final.ctypes.data) ## Reduce to match the capture block size data = data[:final.shape[0],...] - for i in range(1, data.shape[0]): + for i in range(2, data.shape[0]): np.testing.assert_equal(final[i,...], data[i,...]) # Clean up From e0f83bbd8511597d3f7a2a707135952fb463ecd5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Aug 2022 15:28:02 -0600 Subject: [PATCH 0711/1155] Allow the 32 and 64-bit integer types. Allow the numpy 64-bit floating point type. --- python/bifrost/header_standard.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/python/bifrost/header_standard.py b/python/bifrost/header_standard.py index ba45a5c96..53bd49700 100644 --- a/python/bifrost/header_standard.py +++ b/python/bifrost/header_standard.py @@ -43,6 +43,8 @@ """ +import numpy as np + from bifrost import telemetry telemetry.track_module() @@ -51,13 +53,13 @@ # Format: # 'parameter name':(type, minimum) STANDARD_HEADER = { - 'nchans': (int, 1), - 'nifs': (int, 1, ), - 'nbits': (int, 1), - 'fch1': (float, 0), - 'foff': (float, None), - 'tstart': (float, 0), - 'tsamp': (float, 0)} + 'nchans': ((int, np.int32, np.int64), 1), + 'nifs': ((int, np.int32, np.int64), 1, ), + 'nbits': ((int, np.int32, np.int64), 1), + 'fch1': ((float, np.float64), 0), + 'foff': ((float, np.float64), None), + 'tstart': ((float, np.float64), 0), + 'tsamp': ((float, np.float64), 0)} def enforce_header_standard(header_dict): """Raise an error if the header dictionary passed From 4ed1217f86e8b37ac52ff8f308802a514fcce0e5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Aug 2022 15:28:21 -0600 Subject: [PATCH 0712/1155] Use the explicit numpy integer/floating point types. --- test/test_header_standard.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_header_standard.py b/test/test_header_standard.py index d5288f512..787868eee 100644 --- a/test/test_header_standard.py +++ b/test/test_header_standard.py @@ -48,9 +48,9 @@ def test_simple_header(self): def test_numpy_types(self): """Same values, but some are numpy types""" self.header_dict = { - 'nchans': np.int(1), 'nifs': 1, 'nbits': 8, - 'fch1': np.float(100.0), 'foff': np.float(1e-5), - 'tstart': 1e5, 'tsamp': np.float(1e-5)} + 'nchans': np.int32(1), 'nifs': 1, 'nbits': 8, + 'fch1': np.float64(100.0), 'foff': np.float64(1e-5), + 'tstart': 1e5, 'tsamp': np.float64(1e-5)} def test_extra_parameters(self): """Add some extra parameters""" self.header_dict = { From 726ef67a1d8bcad9ec6e8b72c5f8809f60b474b0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Aug 2022 15:36:39 -0600 Subject: [PATCH 0713/1155] Don't resize, reallocate. --- python/bifrost/sigproc2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index a85956091..e718773d3 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -363,12 +363,12 @@ def read(self, nframe_or_start, end=None): #requested_nbyte = nframe * self.frame_nbyte requested_nbyte = nframe * self.frame_nbyte * self.nbit // 8 if self.buf.nbytes != requested_nbyte: - self.buf.resize(requested_nbyte) + self.buf = np.empty(requested_nbyte, np.uint8) nbyte = self.f.readinto(self.buf) if nbyte * 8 % self.frame_nbit != 0: raise IOError("File read returned incomplete frame (truncated file?)") if nbyte < self.buf.nbytes: - self.buf.resize(nbyte) + self.buf = self.buf[:nbyte] nframe = nbyte * 8 // (self.frame_size * self.nbit) data = self.buf data = unpack(data, self.nbit) From df530a54002e89b053bb6cbc3d7be5f856b1b85c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Aug 2022 15:38:00 -0600 Subject: [PATCH 0714/1155] Update dates. --- python/bifrost/header_standard.py | 2 +- python/bifrost/sigproc2.py | 2 +- test/test_header_standard.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/python/bifrost/header_standard.py b/python/bifrost/header_standard.py index 53bd49700..6e703ef33 100644 --- a/python/bifrost/header_standard.py +++ b/python/bifrost/header_standard.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index e718773d3..baa328ea3 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/test/test_header_standard.py b/test/test_header_standard.py index 787868eee..44faadf20 100644 --- a/test/test_header_standard.py +++ b/test/test_header_standard.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions From 8b84db15c901280ffbb38a38b55940b8a9501a87 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Aug 2022 15:50:41 -0600 Subject: [PATCH 0715/1155] Debug. --- test/test_udp_io.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 6bdd8f7cb..2edbd99e8 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -403,9 +403,11 @@ def test_read_drx_single(self): final = bf.ndarray(shape=(final.shape[0],2,4096), dtype='ci4', buffer=final.ctypes.data) ## Reduce to match the capture block size data = data[:final.shape[0],...] - data = data[:,[0,1],:] - for i in range(2, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + for i in range(1, data.shape[0]): + print(i) + for j in range(2): + print(j) + np.testing.assert_equal(final[i,j,...], data[i,j,...]) # Clean up del oop From db9125497ceb08af44da1a590eb02c542fc159d9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Aug 2022 17:34:32 -0600 Subject: [PATCH 0716/1155] Expand all loops. --- test/test_udp_io.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 2edbd99e8..9bd19b43d 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -264,7 +264,8 @@ def test_read_tbn(self): ## Reduce to match the capture block size data = data[:final.shape[0],...] for i in range(2, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + for j in range(data.shape[1]): + np.testing.assert_equal(final[i,j,...], data[i,j,...]) # Clean up del oop @@ -342,7 +343,8 @@ def test_read_drx(self): ## Reduce to match the capture block size data = data[:final.shape[0],...] for i in range(2, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + for j in range(data.shape[1]): + np.testing.assert_equal(final[i,j,...], data[i,j,...]) # Clean up del oop @@ -404,9 +406,7 @@ def test_read_drx_single(self): ## Reduce to match the capture block size data = data[:final.shape[0],...] for i in range(1, data.shape[0]): - print(i) for j in range(2): - print(j) np.testing.assert_equal(final[i,j,...], data[i,j,...]) # Clean up @@ -544,7 +544,8 @@ def test_read_multicast(self): ## Reduce to match the capture block size data = data[:final.shape[0],...] for i in range(2, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + for j in range(data.shape[1]): + np.testing.assert_equal(final[i,j,...], data[i,j,...]) # Clean up del oop From 5957cd3186da9d64cc378b49f8d0b2d2673b74cf Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Aug 2022 18:13:07 -0600 Subject: [PATCH 0717/1155] Formatting. --- test/test_udp_io.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 9bd19b43d..fe2e2a125 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -266,7 +266,7 @@ def test_read_tbn(self): for i in range(2, data.shape[0]): for j in range(data.shape[1]): np.testing.assert_equal(final[i,j,...], data[i,j,...]) - + # Clean up del oop isock.close() @@ -345,7 +345,7 @@ def test_read_drx(self): for i in range(2, data.shape[0]): for j in range(data.shape[1]): np.testing.assert_equal(final[i,j,...], data[i,j,...]) - + # Clean up del oop isock.close() @@ -408,7 +408,7 @@ def test_read_drx_single(self): for i in range(1, data.shape[0]): for j in range(2): np.testing.assert_equal(final[i,j,...], data[i,j,...]) - + # Clean up del oop isock.close() @@ -546,7 +546,7 @@ def test_read_multicast(self): for i in range(2, data.shape[0]): for j in range(data.shape[1]): np.testing.assert_equal(final[i,j,...], data[i,j,...]) - + # Clean up del oop isock.close() From 38f520b18d22ac24df874908176e1fab3d70c74b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 4 Aug 2022 18:37:29 -0600 Subject: [PATCH 0718/1155] Back to 1 ms. --- test/test_udp_io.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index fe2e2a125..b38e2038d 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -251,7 +251,7 @@ def test_read_tbn(self): desc, data = self._get_tbn_data() for p in range(data.shape[0]): oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) - time.sleep(0.005) + time.sleep(0.001) reader.join() accumu.join() @@ -330,7 +330,7 @@ def test_read_drx(self): for p in range(data.shape[0]): oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],...].reshape(1,2,4096)) oop.send(desc, p*10*4096, 10*4096, (2<<3), 128, data[p,[2,3],...].reshape(1,2,4096)) - time.sleep(0.005) + time.sleep(0.001) reader.join() accumu.join() @@ -393,7 +393,7 @@ def test_read_drx_single(self): desc.set_nsrc(2) for p in range(data.shape[0]): oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],:].reshape(1,2,4096)) - time.sleep(0.005) + time.sleep(0.001) reader.join() accumu.join() @@ -471,7 +471,7 @@ def test_read_pbeam(self): desc, data = self._get_pbeam_data() for p in range(data.shape[0]): oop.send(desc, p*24, 24, 0, 1, data[p,...].reshape(1,1,128*4)) - time.sleep(0.005) + time.sleep(0.001) reader.join() accumu.join() @@ -531,7 +531,7 @@ def test_read_multicast(self): desc, data = self._get_tbn_data() for p in range(data.shape[0]): oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) - time.sleep(0.005) + time.sleep(0.001) reader.join() accumu.join() From bbd4b67648ced1bbe475f7b7a8ae4154a1f26d92 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 5 Aug 2022 07:17:29 -0600 Subject: [PATCH 0719/1155] Show with-stream-model result in configure summary I hand-patched ./configure along with update to configure.ac --- configure | 4 ++-- configure.ac | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configure b/configure index d45f61f74..f9083d346 100755 --- a/configure +++ b/configure @@ -26896,8 +26896,8 @@ echo "" if test x$HAVE_CUDA = x1 then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS" >&5 -printf "%s\n" "$as_me: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS - $with_stream_model streams" >&5 +printf "%s\n" "$as_me: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS - $with_stream_model streams" >&6;} else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 printf "%s\n" "$as_me: cuda: no" >&6;} diff --git a/configure.ac b/configure.ac index 6651d35b7..d19d032dd 100644 --- a/configure.ac +++ b/configure.ac @@ -362,7 +362,7 @@ AS_IF([test x$HAVE_CUDA = x1], echo "" AS_IF([test x$HAVE_CUDA = x1], - [AC_MSG_NOTICE(cuda: yes - v$CUDA_VERSION - $GPU_ARCHS)], + [AC_MSG_NOTICE(cuda: yes - v$CUDA_VERSION - $GPU_ARCHS - $with_stream_model streams)], [AC_MSG_NOTICE(cuda: no)]) AS_IF([test x$HAVE_NUMA = x1], From bc8885540ee14c7c823799eb569a64d6b3852cf0 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 5 Aug 2022 08:59:45 -0600 Subject: [PATCH 0720/1155] Fix make_dir so it chmods only if new dir created Before, it led to permission denied exceptions when /dev/shm/bifrost had been created by someone else. (We create it 0777 so can just proceed to use it even if owner is different.) --- src/fileutils.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 58aa6dae1..dfc203210 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -48,9 +48,11 @@ std::string get_home_dir(void) { void make_dir(std::string path, int perms) { #if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM - std::filesystem::create_directories(path); - std::filesystem::permissions(path, (std::filesystem::perms) perms, - std::filesystem::perm_options::replace); + bool created = std::filesystem::create_directories(path); + if(created) { + std::filesystem::permissions(path, (std::filesystem::perms) perms, + std::filesystem::perm_options::replace); + } #else std::ostringstream cmd; cmd << "mkdir -p -m " << std::oct << perms << ' ' << path; From a3a35b25165a9e4546dc6793963d6bb4ced46abd Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 8 Aug 2022 12:49:28 -0600 Subject: [PATCH 0721/1155] Work on moving ring memory binding control over to hwloc. --- configure | 71 ----------------------------------------- configure.ac | 19 ----------- src/Makefile.in | 2 +- src/bifrost/config.h.in | 1 - src/hw_locality.cpp | 39 ++++++++++++++++++++-- src/hw_locality.hpp | 6 ++-- src/ring.cpp | 4 +-- src/ring_impl.cpp | 16 ++++------ src/ring_impl.hpp | 10 ++++-- 9 files changed, 57 insertions(+), 111 deletions(-) diff --git a/configure b/configure index 97b882fcb..41592130d 100755 --- a/configure +++ b/configure @@ -737,7 +737,6 @@ HAVE_RDMA HAVE_VERBS HAVE_VMA HAVE_HWLOC -HAVE_NUMA HAVE_FLOAT128 HAVE_OPENMP LIBOBJS @@ -849,7 +848,6 @@ with_gnu_ld with_sysroot enable_libtool_lock with_ctags -enable_numa enable_hwloc enable_vma enable_verbs @@ -1527,7 +1525,6 @@ Optional Features: --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) - --disable-numa disable numa support (default=no) --disable-hwloc disable hwloc support (default=no) --enable-vma enable vma support (default=no) --disable-verbs disable Infiniband verbs support (default=no) @@ -21011,65 +21008,6 @@ then : fi -# -# NUMA -# - -# Check whether --enable-numa was given. -if test ${enable_numa+y} -then : - enableval=$enable_numa; enable_numa=no -else $as_nop - enable_numa=yes -fi - -HAVE_NUMA=0 - -if test x$enable_numa != xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_node_of_cpu in -lnuma" >&5 -printf %s "checking for numa_node_of_cpu in -lnuma... " >&6; } -if test ${ac_cv_lib_numa_numa_node_of_cpu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnuma $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -namespace conftest { - extern "C" int numa_node_of_cpu (); -} -int -main (void) -{ -return conftest::numa_node_of_cpu (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO" -then : - ac_cv_lib_numa_numa_node_of_cpu=yes -else $as_nop - ac_cv_lib_numa_numa_node_of_cpu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_node_of_cpu" >&5 -printf "%s\n" "$ac_cv_lib_numa_numa_node_of_cpu" >&6; } -if test "x$ac_cv_lib_numa_numa_node_of_cpu" = xyes -then : - HAVE_NUMA=1 - - LIBS="$LIBS -lnuma" -fi - -fi - # # HWLOC # @@ -27010,15 +26948,6 @@ else $as_nop printf "%s\n" "$as_me: cuda: no" >&6;} fi -if test x$HAVE_NUMA = x1 -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: numa: yes" >&5 -printf "%s\n" "$as_me: numa: yes" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: numa: no" >&5 -printf "%s\n" "$as_me: numa: no" >&6;} -fi - if test x$HAVE_HWLOC = x1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc: yes" >&5 diff --git a/configure.ac b/configure.ac index fb08e5891..5cd52c2cc 100644 --- a/configure.ac +++ b/configure.ac @@ -91,21 +91,6 @@ AC_SUBST([HAVE_FLOAT128], [0]) AS_IF([test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1], [AC_SUBST([HAVE_FLOAT128], [0])]) -# -# NUMA -# - -AC_ARG_ENABLE([numa], - AS_HELP_STRING([--disable-numa], - [disable numa support (default=no)]), - [enable_numa=no], - [enable_numa=yes]) -AC_SUBST([HAVE_NUMA], [0]) -AS_IF([test x$enable_numa != xno], - [AC_CHECK_LIB([numa], [numa_node_of_cpu], - [AC_SUBST([HAVE_NUMA], [1]) - LIBS="$LIBS -lnuma"])]) - # # HWLOC # @@ -404,10 +389,6 @@ AS_IF([test x$HAVE_CUDA = x1], [AC_MSG_NOTICE(cuda: yes - v$CUDA_VERSION - $GPU_ARCHS)], [AC_MSG_NOTICE(cuda: no)]) -AS_IF([test x$HAVE_NUMA = x1], - [AC_MSG_NOTICE(numa: yes)], - [AC_MSG_NOTICE(numa: no)]) - AS_IF([test x$HAVE_HWLOC = x1], [AC_MSG_NOTICE(hwloc: yes)], [AC_MSG_NOTICE(hwloc: no)]) diff --git a/src/Makefile.in b/src/Makefile.in index 9ca7a0aae..ed787ea83 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -32,6 +32,7 @@ LIBBIFROST_OBJS = \ common.o \ memory.o \ affinity.o \ + hw_locality.o \ cuda.o \ fileutils.o \ testsuite.o \ @@ -47,7 +48,6 @@ ifeq ($(HAVE_RECVMSG),1) LIBBIFROST_OBJS += \ address.o \ udp_socket.o \ - hw_locality.o \ packet_capture.o \ packet_writer.o endif diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 314896b2c..8db213af1 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -56,7 +56,6 @@ extern "C" { // Features #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ #define BF_OPENMP_ENABLED @HAVE_OPENMP@ -#define BF_NUMA_ENABLED @HAVE_NUMA@ #define BF_HWLOC_ENABLED @HAVE_HWLOC@ #define BF_VMA_ENABLED @HAVE_VMA@ #define BF_VERBS_ENABLED @HAVE_VERBS@ diff --git a/src/hw_locality.cpp b/src/hw_locality.cpp index 0e4d97427..4f40eeca6 100644 --- a/src/hw_locality.cpp +++ b/src/hw_locality.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -30,7 +30,23 @@ #include #if BF_HWLOC_ENABLED -int HardwareLocality::bind_memory_to_core(int core) { +int HardwareLocality::get_numa_node_of_core(int core) { + int core_depth = hwloc_get_type_or_below_depth(_topo, HWLOC_OBJ_CORE); + int ncore = hwloc_get_nbobjs_by_depth(_topo, core_depth); + int ret = -1; + if( 0 <= core && core < ncore ) { + hwloc_obj_t obj = hwloc_get_obj_by_type(_topo, HWLOC_OBJ_CORE, core); + hwloc_obj_t tmp = NULL; + while( (tmp = hwloc_get_next_obj_by_type(_topo, HWLOC_OBJ_NUMANODE, tmp)) != NULL ) { + if( hwloc_bitmap_isset(obj->nodeset, tmp->os_index) ) { + ret = tmp->os_index; + } + } + } + return ret; +} + +int HardwareLocality::bind_thread_memory_to_core(int core) { int core_depth = hwloc_get_type_or_below_depth(_topo, HWLOC_OBJ_CORE); int ncore = hwloc_get_nbobjs_by_depth(_topo, core_depth); int ret = 0; @@ -52,4 +68,23 @@ int HardwareLocality::bind_memory_to_core(int core) { } return ret; } + +int HardwareLocality::bind_memory_area_to_numa_node(const void* addr, size_t size, int node) { + int nnode = hwloc_get_nbobjs_by_type(_topo, HWLOC_OBJ_NUMANODE); + int ret = 0; + if( 0 <= node && node < nnode ) { + hwloc_obj_t obj = hwloc_get_obj_by_type(_topo, HWLOC_OBJ_NUMANODE, node); +#if HWLOC_API_VERSION >= 0x00020000 + hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->nodeset); +#else + hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->allowed_cpuset); +#endif + hwloc_bitmap_singlify(cpuset); // Avoid hyper-threads + hwloc_membind_policy_t policy = HWLOC_MEMBIND_BIND; + hwloc_membind_flags_t flags = HWLOC_MEMBIND_THREAD; + ret = hwloc_set_area_membind(_topo, addr, size, cpuset, policy, flags); + hwloc_bitmap_free(cpuset); + } + return ret; +} #endif // BF_HWLOC_ENABLED diff --git a/src/hw_locality.hpp b/src/hw_locality.hpp index d70437719..3e80be59d 100644 --- a/src/hw_locality.hpp +++ b/src/hw_locality.hpp @@ -45,7 +45,9 @@ class HardwareLocality { ~HardwareLocality() { hwloc_topology_destroy(_topo); } - int bind_memory_to_core(int core); + int get_numa_node_of_core(int core); + int bind_thread_memory_to_core(int core); + int bind_memory_area_to_numa_node(const void* addr, size_t size, int node); }; #endif // BF_HWLOC_ENABLED @@ -57,7 +59,7 @@ class BoundThread { BoundThread(int core) { bfAffinitySetCore(core); #if BF_HWLOC_ENABLED - assert(_hwloc.bind_memory_to_core(core) == 0); + assert(_hwloc.bind_thread_memory_to_core(core) == 0); #endif } }; diff --git a/src/ring.cpp b/src/ring.cpp index cf96eb372..0cf0f3d79 100644 --- a/src/ring.cpp +++ b/src/ring.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -69,7 +69,7 @@ BFstatus bfRingGetSpace(BFring ring, BFspace* space) { BFstatus bfRingSetAffinity(BFring ring, int core) { BF_ASSERT(ring, BF_STATUS_INVALID_HANDLE); BF_ASSERT(core >= -1, BF_STATUS_INVALID_ARGUMENT); - BF_ASSERT(BF_NUMA_ENABLED, BF_STATUS_UNSUPPORTED); + BF_ASSERT(BF_HWLOC_ENABLED, BF_STATUS_UNSUPPORTED); BF_TRY_RETURN(ring->set_core(core)); } BFstatus bfRingGetAffinity(BFring ring, int* core) { diff --git a/src/ring_impl.cpp b/src/ring_impl.cpp index e0471b7ab..b1126142f 100644 --- a/src/ring_impl.cpp +++ b/src/ring_impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -45,6 +45,7 @@ // Work out whether/how to support independent specification of // buffer_factor. +#include "hw_locality.hpp" #include "ring_impl.hpp" #include "utils.hpp" #include "assert.hpp" @@ -54,10 +55,6 @@ #include #include "cuda.hpp" -#if BF_NUMA_ENABLED -#include -#endif - // This implements a lock with the condition that no reads or writes // can be open while it is held. class RingReallocLock { @@ -162,12 +159,11 @@ void BFring_impl::resize(BFsize contiguous_span, //std::cout << "Allocating " << new_nbyte << std::endl; BF_ASSERT_EXCEPTION(bfMalloc((void**)&new_buf, new_nbyte, _space) == BF_STATUS_SUCCESS, BF_STATUS_MEM_ALLOC_FAILED); -#if BF_NUMA_ENABLED +#if BF_HWLOC_ENABLED if( _core != -1 ) { - BF_ASSERT_EXCEPTION(numa_available() != -1, BF_STATUS_UNSUPPORTED); - int node = numa_node_of_cpu(_core); + int node = _hwloc.get_numa_node_of_core(_core); BF_ASSERT_EXCEPTION(node != -1, BF_STATUS_INVALID_ARGUMENT); - numa_tonode_memory(new_buf, new_nbyte, node); + _hwloc.bind_memory_area_to_numa_node(new_buf, new_nbyte, node); } #endif if( _buf ) { @@ -479,7 +475,7 @@ void BFring_impl::finish_sequence(BFsequence_sptr sequence, void BFring_impl::_write_proclog_entry() { char cinfo[32]=""; - #if BF_NUMA_ENABLED + #if BF_HWLOC_ENABLED snprintf(cinfo, 31, "binding : %i\n", _core); #endif _size_log.update("space : %s\n" diff --git a/src/ring_impl.hpp b/src/ring_impl.hpp index 5824fd923..94c9e274a 100644 --- a/src/ring_impl.hpp +++ b/src/ring_impl.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,6 +32,7 @@ #include #include "assert.hpp" #include "proclog.hpp" +#include "hw_locality.hpp" #include #include @@ -96,8 +97,11 @@ class BFring_impl { BFsize _nwrite_open; BFsize _nrealloc_pending; - int _core; - ProcLog _size_log; +#if BF_HWLOC_ENABLED + HardwareLocality _hwloc; +#endif + int _core; + ProcLog _size_log; std::queue _sequence_queue; std::map _sequence_map; From e964ad9131b1ed68f60095acc21363827a9e952a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 8 Aug 2022 13:04:01 -0600 Subject: [PATCH 0722/1155] Add hwloc into the software that gets installed. --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 60bcc2ebf..614b7e52c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,6 +36,7 @@ jobs: exuberant-ctags \ gfortran \ git \ + libhwloc-dev \ libopenblas-dev \ pkg-config \ software-properties-common @@ -47,6 +48,7 @@ jobs: ctags-exuberant \ gawk \ gnu-sed \ + hwloc \ pkg-config - uses: actions/setup-python@v2 with: From 180047e04d9c67d6c69cea840d90002afa831009 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sun, 14 Aug 2022 15:28:34 -0600 Subject: [PATCH 0723/1155] Remove stray reference to BF_NUMA_ENABLED Since libnuma removed on this branch in favor of hwloc, this generated NameError: name 'BF_NUMA_ENABLED' is not defined when running python -m bifrost.version --config --- python/bifrost/version/__main__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index c3c1bc84a..5e3150fd9 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -46,7 +46,6 @@ def _yes_no(value): print("\nConfiguration:") print(" Memory alignment: %i B" % BF_ALIGNMENT) print(" OpenMP support: %s" % _yes_no(BF_OPENMP_ENABLED)) - print(" NUMA support %s" % _yes_no(BF_NUMA_ENABLED)) print(" Hardware locality support: %s" % _yes_no(BF_HWLOC_ENABLED)) print(" Mellanox messaging accelerator (VMA) support: %s" % _yes_no(BF_VMA_ENABLED)) print(" Infiniband verbs support: %s" % _yes_no(BF_VERBS_ENABLED)) From 768b3fb4c145f1ecfcaefb039868efd8377036d0 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sun, 14 Aug 2022 19:40:01 -0600 Subject: [PATCH 0724/1155] Add test of bifrost.version program Maybe this would have noticed the issue with a stray NameError. --- test/test_version.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/test_version.py diff --git a/test/test_version.py b/test/test_version.py new file mode 100644 index 000000000..4ab08501e --- /dev/null +++ b/test/test_version.py @@ -0,0 +1,10 @@ +import unittest +import subprocess +import sys + +class TestVersion(unittest.TestCase): + def test_plain_version(self): + subprocess.check_output([sys.executable, '-m', 'bifrost.version']) + + def test_version_config(self): + subprocess.check_output([sys.executable, '-m', 'bifrost.version', '--config']) From 0ba58be4cd2b58dccf0f7cee0633f6eae9c25621 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sun, 14 Aug 2022 19:43:18 -0600 Subject: [PATCH 0725/1155] Use unittest discover -v Verbose output shows each test as it occurs, or the reason if skipped. More informative log trace for CI compared to "...sss..." --- .github/workflows/main.yml | 2 +- Makefile.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 614b7e52c..1e93fceca 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -83,7 +83,7 @@ jobs: cd test bash ./download_test_data.sh python -c "from bifrost import telemetry; telemetry.disable()" - coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover -v coverage xml - name: "Upload Coverage" env: diff --git a/Makefile.in b/Makefile.in index 852b2f951..29c5728b4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -21,7 +21,7 @@ libbifrost: test: #$(MAKE) -C $(SRC_DIR) test ifeq ($(HAVE_PYTHON),1) - cd test && ./download_test_data.sh ; python -m unittest discover + cd test && ./download_test_data.sh ; python -m unittest discover -v endif .PHONY: test clean: From 139590b45bfa075f3699944446a6323da2566dec Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 5 Aug 2022 08:59:45 -0600 Subject: [PATCH 0726/1155] Fix make_dir so it chmods only if new dir created Before, it led to permission denied exceptions when /dev/shm/bifrost had been created by someone else. (We create it 0777 so can just proceed to use it even if owner is different.) (Cherry-picked bc888554 from python-streams onto ibverb-support.) --- src/fileutils.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 58aa6dae1..dfc203210 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -48,9 +48,11 @@ std::string get_home_dir(void) { void make_dir(std::string path, int perms) { #if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM - std::filesystem::create_directories(path); - std::filesystem::permissions(path, (std::filesystem::perms) perms, - std::filesystem::perm_options::replace); + bool created = std::filesystem::create_directories(path); + if(created) { + std::filesystem::permissions(path, (std::filesystem::perms) perms, + std::filesystem::perm_options::replace); + } #else std::ostringstream cmd; cmd << "mkdir -p -m " << std::oct << perms << ' ' << path; From 3dfaf6b3d0207e020ec2f278f03c30dafe96b313 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 15 Aug 2022 10:46:01 -0600 Subject: [PATCH 0727/1155] nix: support cuda11 with 80,86 and set LD_PRELOAD --- flake.nix | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 9a6eafca6..c40803ea8 100644 --- a/flake.nix +++ b/flake.nix @@ -34,7 +34,14 @@ # most useful. Take care not to instatiate the cuda package though, which # would happen if you start inspecting header files or trying to run nvcc. - defaultGpuArchs = _cudatoolkit: [ "70" "75" ]; + defaultGpuArchs = cudatoolkit: + if lib.hasPrefix "11." cudatoolkit.version then [ + "80" + "86" + ] else [ + "70" + "75" + ]; # At time of writing (2022-03-24): # PACKAGE VERSION ARCHS @@ -308,7 +315,11 @@ pys = lib.listToAttrs (eachConfig (suffix: config: lib.mapAttrsToList (name: py: { name = "${name}-bifrost${suffix}"; - value = py.withPackages (p: [ (p.bifrost.override config) ]); + value = (py.withPackages + (p: [ (p.bifrost.override config) ])).override { + makeWrapperArgs = lib.optionals config.enableCuda + [ "--set LD_PRELOAD /usr/lib/x86_64-linux-gnu/libcuda.so" ]; + }; }) (pythonAttrs pkgs))); in { inherit (pkgs) bifrost-doc github_stats; } // cgens // bfs // pys); From 7792962e6df07f55623c1cc21f6368dbec2039d2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 1 Nov 2022 07:25:38 -0600 Subject: [PATCH 0728/1155] Rename. --- test/{test_interpop.py => test_interop.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{test_interpop.py => test_interop.py} (100%) diff --git a/test/test_interpop.py b/test/test_interop.py similarity index 100% rename from test/test_interpop.py rename to test/test_interop.py From aa2b469fba841c8f791aca8c2bab913e5a370dc2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 1 Nov 2022 07:56:06 -0600 Subject: [PATCH 0729/1155] Fix the 'packets sent' stats. --- src/packet_writer.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index f64eed5ad..bba615786 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -302,8 +302,10 @@ class PacketWriterThread : public BoundThread { _stats.ninvalid += npackets; _stats.ninvalid_bytes += npackets * (hdr_size + data_size); } else { - _stats.nvalid += npackets; - _stats.nvalid_bytes += npackets * (hdr_size + data_size); + _stats.nvalid += nsent; + _stats.nvalid_bytes += nsent * (hdr_size + data_size); + _stats.ninvalid += (npackets - nsent); + _stats.ninvalid_bytes += (npackets - nsent) * (hdr_size + data_size); _limiter.end_and_wait(npackets); } return nsent; From 849fadc2c8e61c9c02103aa541f6c78b33f63093 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 3 Nov 2022 19:33:33 -0400 Subject: [PATCH 0730/1155] =?UTF-8?q?Update=20ROADMAP=20with=20Python=202.?= =?UTF-8?q?x=20eviction=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ROADMAP.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ROADMAP.md b/ROADMAP.md index 4fa1afc9c..cd3b80c1c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -27,3 +27,7 @@ stated, the items on this page have not yet been developed. * CPU backends for existing CUDA-only algorithms * Support for inter-process shared memory rings * Optimisations for low-latency applications + +## Platform and dependency updates + + * Python 2.x will no longer be supported after the end of 2022. From 2e0efb4eea44c97b391fae82bdfecd175be560d6 Mon Sep 17 00:00:00 2001 From: Danny Price Date: Tue, 29 Nov 2022 15:22:54 +0800 Subject: [PATCH 0731/1155] Create ndarray from ctypes struct BFarray --- python/bifrost/dtype.py | 31 +++++++++++++++++++++++++++++++ python/bifrost/ndarray.py | 20 +++++++++++++++++++- test/test_ndarray.py | 11 +++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/python/bifrost/dtype.py b/python/bifrost/dtype.py index 1683d0f9d..788a6b160 100644 --- a/python/bifrost/dtype.py +++ b/python/bifrost/dtype.py @@ -149,3 +149,34 @@ def numpy2string(dtype): elif dtype == np.complex128: return 'cf64' elif dtype == np.complex256: return 'cf128' else: raise TypeError("Unsupported dtype: " + str(dtype)) + +def bifrost2string(dtype): + """ Convert bifrost BF_DTYPE integer code to ndarray string """ + typedict = { + _bf.BF_DTYPE_I8: 'i8', + _bf.BF_DTYPE_I16: 'i16', + _bf.BF_DTYPE_I32: 'i32', + _bf.BF_DTYPE_I64: 'i64', + _bf.BF_DTYPE_U8: 'u8', + _bf.BF_DTYPE_U16: 'u16', + _bf.BF_DTYPE_U32: 'u32', + _bf.BF_DTYPE_U64: 'u64', + _bf.BF_DTYPE_F16: 'f16', + _bf.BF_DTYPE_F32: 'f32', + _bf.BF_DTYPE_F64: 'f64', + _bf.BF_DTYPE_CI8: 'ci8', + _bf.BF_DTYPE_CI16: 'ci16', + _bf.BF_DTYPE_CI32: 'ci32', + _bf.BF_DTYPE_CF16: 'cf16', + _bf.BF_DTYPE_CF32: 'cf32', + _bf.BF_DTYPE_CF64: 'cf64', + } + if BF_FLOAT128_ENABLED: + typedict[_bf.BF_DTYPE_CF128] = 'cf128' + typedict[_bf.BF_DTYPE_F128] = 'f128' + + dtype_str = typedict.get(dtype) + if dtype_str is None: + raise ValueError("Could not convert dtype integer to string. Value not understood.") + else: + return dtype_str \ No newline at end of file diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index aaff6d457..d2ef24abf 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -45,10 +45,12 @@ import ctypes import numpy as np from bifrost.memory import raw_malloc, raw_free, raw_get_space, space_accessible -from bifrost.libbifrost import _bf, _check +from bifrost.libbifrost import _bf, _check, _space2string from bifrost import device +from bifrost.dtype import bifrost2string from bifrost.DataType import DataType from bifrost.Space import Space +from bifrost.libbifrost_generated import struct_BFarray_ try: from bifrost._pypy3_compat import PyMemoryView_FromMemory @@ -185,6 +187,22 @@ def __new__(cls, base=None, space=None, shape=None, dtype=None, dtype=base.dtype, strides=base.strides, native=np.dtype(base.dtype).isnative) + # Check if a BFarray ctypes struct is passed + if isinstance(base, struct_BFarray_): + ndim = base.ndim + shape = list(base.shape)[:ndim] + strides = list(base.strides)[:ndim] + space = _space2string(base.space) + dtype = bifrost2string(base.dtype) + + return ndarray.__new__(cls, + space=space, + buffer=int(base.data), + shape=shape, + dtype=dtype, + strides=strides + ) + if dtype is not None: dtype = DataType(dtype) if space is None and dtype is None: diff --git a/test/test_ndarray.py b/test/test_ndarray.py index fe9b3c8bb..651a3b131 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -152,3 +152,14 @@ def test_setitem(self): np.testing.assert_equal(g.copy('system'), np.array([[99,88],[2,3],[4,5]])) g[:,1] = [77,66,55] np.testing.assert_equal(g.copy('system'), np.array([[99,77],[2,66],[4,55]])) + def test_BFarray(self): + """ Test ndarray.as_BFarray() roundtrip """ + a = bifrost.ndarray(np.arange(100), dtype='i32') + aa = a.as_BFarray() + b = bifrost.ndarray(aa) + np.testing.assert_equal(a, b) + + a = bifrost.ndarray(np.arange(100), dtype='cf32') + aa = a.as_BFarray() + b = bifrost.ndarray(aa) + np.testing.assert_equal(a, b) \ No newline at end of file From b85c93af499f6d725921424510897937f9134a48 Mon Sep 17 00:00:00 2001 From: Danny Price Date: Tue, 29 Nov 2022 15:29:31 +0800 Subject: [PATCH 0732/1155] Fixing unit test import --- test/test_ndarray.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index 651a3b131..2ef006c9f 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -154,12 +154,12 @@ def test_setitem(self): np.testing.assert_equal(g.copy('system'), np.array([[99,77],[2,66],[4,55]])) def test_BFarray(self): """ Test ndarray.as_BFarray() roundtrip """ - a = bifrost.ndarray(np.arange(100), dtype='i32') + a = bf.ndarray(np.arange(100), dtype='i32') aa = a.as_BFarray() - b = bifrost.ndarray(aa) + b = bf.ndarray(aa) np.testing.assert_equal(a, b) - a = bifrost.ndarray(np.arange(100), dtype='cf32') + a = bf.ndarray(np.arange(100), dtype='cf32') aa = a.as_BFarray() - b = bifrost.ndarray(aa) + b = bf.ndarray(aa) np.testing.assert_equal(a, b) \ No newline at end of file From 8db12226496e547e569c76579cf6a6e662db4cb0 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 6 Dec 2022 09:10:48 -0500 Subject: [PATCH 0733/1155] Enable py3.10 in CI and tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Getting there was a saga, but we squashed to a small diff. commit 454fc960f4ab75b41f4ddeebb36355c3342af506 Author: Christopher League Date: Thu Dec 1 11:46:30 2022 -0500 Prepping for py3.10 squash-merge Cleaning up unneeded changes, also satisfying yamllint with indentation, line breaks, etc. commit 20104f13ee21467a9374dd04ab79bf312e8e1e20 Author: Christopher League Date: Wed Nov 30 07:40:15 2022 -0700 All good maybe 🍸 Restoring other OSes and 2.7 Please let's squash this branch to oblivion when the time comes. commit b684a55027ee8831e0b55637a596f50702944728 Author: Christopher League Date: Wed Nov 30 07:03:11 2022 -0700 Success! Try using env: block instead of export commit a218e58139658a58111cc5c12d870383601fe622 Author: Christopher League Date: Wed Nov 30 06:31:03 2022 -0700 Passing tests for 3.8; try 3.6, 3.10 commit 1a458dc996bd5f14375de39f06e9c30d4c3c4ffe Author: Christopher League Date: Wed Nov 30 06:01:27 2022 -0700 Progress! pycuda built, now backing out focus First try with more python packages needed by tests, then we'll add more python versions and other hosts. commit f6d41cc5fdb2d8be93bc6aa30c2b3ced14238930 Author: Christopher League Date: Tue Nov 29 20:18:06 2022 -0700 CPLUS_INCLUDE_PATH needs shell interpretation to expand $pythonLocation commit 75381f178150025c2822caf2f712daca460f458a Author: Christopher League Date: Tue Nov 29 20:14:32 2022 -0700 Python CPLUS_INCLUDE_PATH hack hack commit 994b87b2d7ab4a87070425b363a00a6484812fe0 Author: Christopher League Date: Tue Nov 29 19:46:06 2022 -0700 A little more python/pip investigation Exactly which pips are being used? commit 6ca537b0b68aa7dd5489e139da0fac34a654e7a9 Author: Christopher League Date: Tue Nov 29 13:30:22 2022 -0700 Update setup-python to latest tag; show env These python headers won't be in /usr/include like those installed through apt would be. (And apt can only install 3.6 for bionic I guess.) commit 0027c3aa939e828048c82ceab80fb7f00c4c0526 Author: Christopher League Date: Tue Nov 29 13:05:51 2022 -0700 Oops caps, and include/python3.6 seems to exist rather than 3.8. ? commit e9a6dbdaa3d408d49d72d975c0785239fa61d597 Author: Christopher League Date: Tue Nov 29 13:00:29 2022 -0700 Just hackin this pycuda/docker thing Possibly revisiting ground that Jayce already traveled. Focusing only on self-hosted, python 3.8, pip install pycuda. (Got some combination of stuff to work in plain docker on cetus, just not via github.) commit e651fad77fc0cae286a15a2a768a7d6c820f08ce Author: jaycedowell Date: Tue Nov 1 11:10:18 2022 -0600 No Py3.11. commit f44140b1f42e737a4dffa048ca69687b2d00d15e Author: jaycedowell Date: Tue Nov 1 10:36:29 2022 -0600 Try Py3.11. commit d574cf52fc1f6be069c95cd2fbe4c7261087b96c Author: jaycedowell Date: Tue Nov 1 10:21:18 2022 -0600 Also revert. commit cb3637e5f86584ac6f9ba6fb77119a48c5cca2ce Author: jaycedowell Date: Tue Nov 1 10:03:04 2022 -0600 Revert. commit 9df270e4bb4564875e45a3382990ee78e8f5612f Author: jaycedowell Date: Tue Nov 1 09:44:46 2022 -0600 Reorder. commit 2aaffa4182f5a50ef879e8b2ae24facf1904e607 Author: jaycedowell Date: Tue Nov 1 09:30:29 2022 -0600 Where is tar? commit 40abf69209dec8f5be273d38e289f77c0971ba29 Author: jaycedowell Date: Tue Nov 1 08:39:07 2022 -0600 Explicit path to tar. commit 66a0d94e1144d86e6df8bd16a9b0d0035a2fa0ad Author: jaycedowell Date: Tue Nov 1 07:58:57 2022 -0600 What about this? commit 7453dca029f19bd02c83a3a1bc84936f91bf1a5b Author: jaycedowell Date: Tue Oct 18 11:24:18 2022 -0600 Going back. commit f647273a5eed6bd943b4f68c83f0677592c3881e Author: jaycedowell Date: Tue Oct 18 11:19:16 2022 -0600 Make sure we have tar and gzip. commit 5c6da0a4ff31a6f5e4b9e8f64fec752ce9da708d Author: jaycedowell Date: Tue Oct 18 11:12:58 2022 -0600 Try a manual pycuda install. commit 8b4825844b0218c08f37b7f8113322179e74ac93 Author: jaycedowell Date: Mon Oct 17 16:12:36 2022 -0600 Try without pycuda. commit f1c52cf59e306eb15338ea191c7830e65112500d Author: jaycedowell Date: Mon Oct 17 15:14:49 2022 -0600 checkout v3 commit a3582d1e9221dad38bd0ac09543c4e268684b0f0 Author: jaycedowell Date: Mon Oct 17 15:03:22 2022 -0600 skip-duplicate-actions v5 and setup-python v4. commit a55f5e746517755a5ac1a8bcdf43b455e00c05e9 Author: jaycedowell Date: Mon Oct 17 14:28:08 2022 -0600 Nope. What about a newer version of setup-python? commit a997fbeb61f74df9f1a3b8adfe4825ebb6296cf5 Author: jaycedowell Date: Mon Oct 17 13:34:20 2022 -0600 Back to 'latest' Py3.8 and install Boost. commit da80b03e2d966378f59ed847e556542735fbf2a2 Author: jaycedowell Date: Tue Sep 27 07:58:08 2022 -0600 Try to older version of Py3.8. commit eb128b0bffb9614bfcc62807028b67acc6d05cb7 Author: jaycedowell Date: Mon Sep 26 21:29:51 2022 -0600 What about this? commit d1b5ae0f6a1db5d790165c53da147462e779023b Author: jaycedowell Date: Mon Sep 26 21:05:21 2022 -0600 What about this? commit 447d382f72282801fba6f350509fd678743fe61e Author: jaycedowell Date: Mon Sep 26 20:42:22 2022 -0600 Try no explict CUDA version for cupy. This will be slow. commit 2053a65e406bc7d78fe88d1ac99b509ce0836352 Author: jaycedowell Date: Mon Sep 26 20:33:43 2022 -0600 Try to 11.6 version of cupy. commit fe0a604dbc2ebb9fc383ac075574d66c771a5d34 Author: jaycedowell Date: Mon Sep 26 07:39:23 2022 -0600 Try Python 3.10. --- .github/workflows/main.yml | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a19e2c6a4..3e48769db 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,5 +1,6 @@ +--- name: "Build and Test" -on: [push, pull_request] +"on": [push, pull_request] jobs: pre_build: runs-on: ubuntu-latest @@ -7,7 +8,7 @@ jobs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: - id: skip_check - uses: fkirc/skip-duplicate-actions@v3.4.1 + uses: fkirc/skip-duplicate-actions@v5 with: concurrent_skipping: 'same_content' skip_after_successful_duplicate: 'true' @@ -19,7 +20,7 @@ jobs: strategy: matrix: os: [self-hosted, ubuntu-latest, macos-latest] - python-version: ['2.7', '3.6', '3.8'] + python-version: ['2.7', '3.6', '3.8', '3.10'] exclude: - os: macos-latest python-version: 2.7 @@ -48,10 +49,9 @@ jobs: gawk \ gnu-sed \ pkg-config - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4.3.0 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v2 - name: "Software Install - Python" run: python -m pip install \ setuptools \ @@ -65,6 +65,12 @@ jobs: coverage - name: "Software Install - Python, part 2" if: ${{ matrix.os == 'self-hosted' && matrix.python-version != '2.7' }} + # Setting CPLUS_INCLUDE_PATH helps pycuda find the right + # Python header files to use with its embedded + # subset of Boost. + env: + CPLUS_INCLUDE_PATH: "${{ env.pythonLocation }}/include/python\ + ${{ matrix.python-version }}" run: python -m pip install \ cupy-cuda112 \ pycuda \ @@ -73,6 +79,7 @@ jobs: jupyter_client \ nbformat \ nbconvert + - uses: actions/checkout@v3 - name: "Build and Install" run: | ./configure @@ -86,12 +93,13 @@ jobs: cd test bash ./download_test_data.sh python -c "from bifrost import telemetry; telemetry.disable()" - coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline \ + -m unittest discover coverage xml - name: "Upload Coverage" env: - UNITTEST_OS: ${{ matrix.os }} - UNITTEST_PY: ${{ matrix.python-version }} + UNITTEST_OS: ${{ matrix.os }} + UNITTEST_PY: ${{ matrix.python-version }} if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} uses: codecov/codecov-action@v2 with: From 80d516ec368f35728a9efeec2c8170ff282f99fc Mon Sep 17 00:00:00 2001 From: Jack Hickish Date: Tue, 6 Dec 2022 14:50:02 +0000 Subject: [PATCH 0734/1155] diable -> disable typo (#192) --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 41592130d..5afb00c01 100755 --- a/configure +++ b/configure @@ -1528,7 +1528,7 @@ Optional Features: --disable-hwloc disable hwloc support (default=no) --enable-vma enable vma support (default=no) --disable-verbs disable Infiniband verbs support (default=no) - --diable-rdma disable RDMA support (default=no) + --disable-rdma disable RDMA support (default=no) --disable-cuda disable cuda support (default=no) --enable-debug enable debugging mode (default=no) --enable-trace enable tracing mode for nvprof/nvvp (default=no) diff --git a/configure.ac b/configure.ac index 5cd52c2cc..e1387aae2 100644 --- a/configure.ac +++ b/configure.ac @@ -144,7 +144,7 @@ AS_IF([test x$enable_verbs != xno], # AC_ARG_ENABLE([rdma], - AS_HELP_STRING([--diable-rdma], + AS_HELP_STRING([--disable-rdma], [disable RDMA support (default=no)]), [enable_rdma=no], [enable_rdma=yes]) From 854ffd18f32b59d5c18dba1f2d17ee26a7dbed7b Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 6 Dec 2022 09:10:48 -0500 Subject: [PATCH 0735/1155] Enable py3.10 in CI and tests Cherry-picked 8db12226496e547e569c76579cf6a6e662db4cb0 and resolved conflicts. --- .github/workflows/main.yml | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1e93fceca..05f724fc0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,5 +1,6 @@ +--- name: "Build and Test" -on: [push, pull_request] +"on": [push, pull_request] jobs: pre_build: runs-on: ubuntu-latest @@ -7,7 +8,7 @@ jobs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: - id: skip_check - uses: fkirc/skip-duplicate-actions@v3.4.1 + uses: fkirc/skip-duplicate-actions@v5 with: concurrent_skipping: 'same_content' skip_after_successful_duplicate: 'true' @@ -19,7 +20,7 @@ jobs: strategy: matrix: os: [self-hosted, ubuntu-latest, macos-latest] - python-version: ['2.7', '3.6', '3.8'] + python-version: ['2.7', '3.6', '3.8', '3.10'] exclude: - os: macos-latest python-version: 2.7 @@ -50,10 +51,9 @@ jobs: gnu-sed \ hwloc \ pkg-config - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4.3.0 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v2 - name: "Software Install - Python" run: python -m pip install \ setuptools \ @@ -67,9 +67,21 @@ jobs: coverage - name: "Software Install - Python, part 2" if: ${{ matrix.os == 'self-hosted' && matrix.python-version != '2.7' }} + # Setting CPLUS_INCLUDE_PATH helps pycuda find the right + # Python header files to use with its embedded + # subset of Boost. + env: + CPLUS_INCLUDE_PATH: "${{ env.pythonLocation }}/include/python\ + ${{ matrix.python-version }}" run: python -m pip install \ - cupy \ - pycuda + cupy-cuda112 \ + pycuda \ + numba \ + jupyterlab \ + jupyter_client \ + nbformat \ + nbconvert + - uses: actions/checkout@v3 - name: "Build and Install" run: | ./configure @@ -83,12 +95,13 @@ jobs: cd test bash ./download_test_data.sh python -c "from bifrost import telemetry; telemetry.disable()" - coverage run --source=bifrost.ring,bifrost,bifrost.pipeline -m unittest discover -v + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline \ + -m unittest discover -v coverage xml - name: "Upload Coverage" env: - UNITTEST_OS: ${{ matrix.os }} - UNITTEST_PY: ${{ matrix.python-version }} + UNITTEST_OS: ${{ matrix.os }} + UNITTEST_PY: ${{ matrix.python-version }} if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} uses: codecov/codecov-action@v2 with: From 2c51bb8280a5f9a485ee3b1a823099ef8949bcda Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 6 Dec 2022 10:46:26 -0500 Subject: [PATCH 0736/1155] Pin ubuntu-20.04 for python-3.6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seems to be the work-around for “Version 3.6 with arch x64 not found.” See issue 544 on github:actions/setup-python --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 05f724fc0..95726b66f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,7 +3,7 @@ name: "Build and Test" "on": [push, pull_request] jobs: pre_build: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: @@ -19,7 +19,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [self-hosted, ubuntu-latest, macos-latest] + os: [self-hosted, ubuntu-20.04, macos-latest] python-version: ['2.7', '3.6', '3.8', '3.10'] exclude: - os: macos-latest @@ -27,7 +27,7 @@ jobs: fail-fast: false steps: - name: "Software Install - Ubuntu" - if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'self-hosted' }} + if: ${{ matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} run: | sudo apt-get update && \ sudo apt-get install -y \ From 8d5ab28ead6c9ac4ae0445c946990e183b8c6001 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Tue, 6 Dec 2022 10:46:26 -0500 Subject: [PATCH 0737/1155] Pin ubuntu-20.04 for python-3.6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seems to be the work-around for “Version 3.6 with arch x64 not found.” See issue 544 on github:actions/setup-python --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3e48769db..59d67ddb1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,7 +3,7 @@ name: "Build and Test" "on": [push, pull_request] jobs: pre_build: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: @@ -19,7 +19,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [self-hosted, ubuntu-latest, macos-latest] + os: [self-hosted, ubuntu-20.04, macos-latest] python-version: ['2.7', '3.6', '3.8', '3.10'] exclude: - os: macos-latest @@ -27,7 +27,7 @@ jobs: fail-fast: false steps: - name: "Software Install - Ubuntu" - if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'self-hosted' }} + if: ${{ matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} run: | sudo apt-get update && \ sudo apt-get install -y \ From d6910652358200c40bb1b9e92088dfd58b0e07e2 Mon Sep 17 00:00:00 2001 From: Danny Price Date: Thu, 15 Dec 2022 12:25:20 +0800 Subject: [PATCH 0738/1155] PSRDADA block updates --- python/bifrost/blocks/dada_file.py | 205 +++++++++++++++++++++++++++ python/bifrost/blocks/psrdada.py | 217 +++++++++++++++++++++++++++-- python/bifrost/psrdada.py | 38 +++-- 3 files changed, 439 insertions(+), 21 deletions(-) create mode 100755 python/bifrost/blocks/dada_file.py diff --git a/python/bifrost/blocks/dada_file.py b/python/bifrost/blocks/dada_file.py new file mode 100755 index 000000000..9841a2cd2 --- /dev/null +++ b/python/bifrost/blocks/dada_file.py @@ -0,0 +1,205 @@ +# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of The Bifrost Authors nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +""" +# binary_file_io.py + +Basic file I/O blocks for reading and writing data. +""" +import numpy as np +import time +import bifrost as bf +import bifrost.pipeline as bfp +from bifrost.dtype import string2numpy +from astropy.time import Time +import glob +import os + +def _angle_str_to_sigproc(ang): + aparts = ang.split(':') + if len(aparts) == 2: + sp_ang = int(aparts[0])*10000 + int(aparts[1])*100 + 0.0 + elif len(aparts) == 3: + sp_ang = int(aparts[0])*10000 + int(aparts[1])*100 + float(aparts[2]) + else: + raise RuntimeError("Cannot parse: {ang} does not match XX:YY:ZZ.zz".format(ang=ang)) + +class DadaFileRead(object): + """ Simple file-like reading object for pipeline testing + + Args: + filename (str): Name of file to open + dtype (np.dtype or str): datatype of data, e.g. float32. This should be a *numpy* dtype, + not a bifrost.ndarray dtype (eg. float32, not f32) + gulp_size (int): How much data to read per gulp, (i.e. sub-array size) + """ + def __init__(self, filename, header_callback): + super(DadaFileRead, self).__init__() + if isinstance(filename, str): + self.file_obj = open(filename, 'rb') + self.nfiles = 1 + else: + self.file_obj = open(filename[0], 'rb') + self.nfiles = len(filename) + + self.filenames = filename + self.fcount = 0 + + print("%i/%i: opening %s" % (self.fcount+1, self.nfiles, self.file_obj.name)) + self._header_callback = header_callback + self.header = self._read_header(header_callback) + itensor = self.header['_tensor'] + self.dtype = np.dtype(string2numpy(itensor['dtype'])) + self.block_shape = np.copy(itensor['shape']) + self.block_shape[0] = 1 + self.block_size = np.prod(self.block_shape) + self.gulp_size = self.block_size * self.dtype.itemsize + + def _read_header(self, header_callback): + """ Read DADA header, and apply header_callback + + Applies header_callback to convert DADA header to bifrost header. Specifically, + need to generate the '_tensor' from the DADA keywords which have no formal spec. + """ + hdr_buf = self.file_obj.read(4096).decode('ascii') + hdr = {} + for line in hdr_buf.split('\n'): + try: + key, val = line.split() + hdr[key] = val + except ValueError: + pass + hdr = header_callback(hdr) + return hdr + + def _open_next_file(self): + self.file_obj.close() + self.fcount += 1 + print("%i/%i: opening %s" % (self.fcount+1, self.nfiles, self.filenames[self.fcount])) + self.file_obj = open(self.filenames[self.fcount], 'rb') + _hdr = self._read_header(self._header_callback) + + def _read_data(self): + d = np.fromfile(self.file_obj, dtype=self.dtype, count=self.block_size) + return d + + def read_block(self): + #print("Reading...") + d = self._read_data() + if d.size == 0 and self.fcount < self.nfiles - 1: + self._open_next_file() + d = self._read_data() + d = d.reshape(self.block_shape) + return d + elif d.size == 0 and self.fcount == self.nfiles - 1: + #print("EOF") + return np.array([0]) # EOF + elif self.block_size != np.prod(d.shape): + print(self.block_size, np.prod(d.shape), d.shape, d.size) + print("Warning: File truncated or gulp size does not divide n_blocks") + try: + bs_truncated = list(self.block_shape) + bs_truncated[0] = -1 # Attempt to load truncated data anyway + d = d.reshape(bs_truncated) + return d + except ValueError: + return np.array([0]) # EOF + else: + d = d.reshape(self.block_shape) + return d + + def read(self): + gulp_break = False + d = self.read_block() + return d + + + def __enter__(self): + return self + + def close(self): + pass + + def __exit__(self, type, value, tb): + self.close() + + +def generate_dada_filelist(filename): + """ Generate a list of DADA files from start filename + + Args: + filename (str): Path to file. e.g. + /data/dprice/2020-07-23-02:33:07.587_0000000000000000.000000.dada + + Returns: + flist (list): A list of all associated files + """ + bn = os.path.basename(filename) + dn = os.path.dirname(filename) + bn_root = '_'.join(bn.split('_')[:-1]) # Strips off _000.000.dada bit + flist = sorted(glob.glob(os.path.join(dn, bn_root + '_*.dada'))) + return flist + + +class DadaFileReadBlock(bfp.SourceBlock): + def __init__(self, filename, header_callback, gulp_nframe, *args, **kwargs): + super(DadaFileReadBlock, self).__init__(filename, gulp_nframe, *args, **kwargs) + self.header_callback = header_callback + + def create_reader(self, filename): + flist = generate_dada_filelist(filename) + return DadaFileRead(flist, self.header_callback) + + def on_sequence(self, ireader, filename): + ohdr = ireader.header + return [ohdr] + + def on_data(self, reader, ospans): + indata = reader.read() + odata = ospans[0].data + #print indata.shape, odata.shape + if np.prod(indata.shape) == np.prod(odata.shape[1:]): + ospans[0].data[0] = indata + return [1] + else: + # EOF or truncated block + return [0] + + +def read_dada_file(filename, header_callback, gulp_nframe, *args, **kwargs): + """ Block for reading binary data from file and streaming it into a bifrost pipeline + + Args: + filenames (list): A list of filenames to open + header_callback (method): A function that converts from PSRDADA header into a + bifrost header. + gulp_size (int): Number of elements in a gulp (i.e. sub-array size) + gulp_nframe (int): Number of frames in a gulp. (Ask Ben / Miles for good explanation) + dtype (bifrost dtype string): dtype, e.g. f32, cf32 + """ + return DadaFileReadBlock(filename, header_callback, gulp_nframe, *args, **kwargs) + diff --git a/python/bifrost/blocks/psrdada.py b/python/bifrost/blocks/psrdada.py index ca159d29e..8a2f9fde0 100644 --- a/python/bifrost/blocks/psrdada.py +++ b/python/bifrost/blocks/psrdada.py @@ -27,14 +27,16 @@ from __future__ import absolute_import -from bifrost.pipeline import SourceBlock +from bifrost.pipeline import SourceBlock, SinkBlock from bifrost.Space import Space from bifrost.psrdada import Hdu from bifrost.libbifrost import _bf, _check import bifrost.ndarray -from bifrost import telemetry -telemetry.track_module() +import numpy as np +from datetime import datetime +from copy import deepcopy +import os # TODO: Move to memory.py? def _get_space(arr): @@ -47,16 +49,19 @@ class PsrDadaBufferReader(object): def __init__(self, hdu, hdr): self.hdu = hdu self.header = hdr - self._open_next_block() + self.block = None def _open_next_block(self): self.block = next(self.hdu.data_block) self.nbyte = self.block.size_bytes() self.byte0 = 0 def readinto(self, buf): + if self.block is None: + self._open_next_block() dst_space = Space(_get_space(buf)).as_BFspace() byte0 = 0 nbyte = buf.nbytes nbyte_copy = min(nbyte - byte0, self.nbyte - self.byte0) + while nbyte_copy: _check(_bf.bfMemcpy(buf.ctypes.data + byte0, dst_space, self.block.ptr + self.byte0, _bf.BF_SPACE_SYSTEM, @@ -72,19 +77,23 @@ def readinto(self, buf): break return byte0 def close(self): - self.block.close() + if self.block: + self.block.close() def __enter__(self): return self def __exit__(self, type, value, tb): self.close() -def psrdada_read_sequence_iterator(buffer_key): +def psrdada_read_sequence_iterator(buffer_key, single=False): hdu = Hdu() hdu.connect_read(buffer_key) for hdr in hdu.header_block: with hdr: hdr_string = hdr.data.tostring() yield hdu, hdr_string + if single: + hdu.disconnect() + break hdu.disconnect() def _cast_to_type(string): @@ -93,7 +102,15 @@ def _cast_to_type(string): try: return float(string) except ValueError: pass return string + +def _cast_to_string(unknown): + if type(unknown) is bytes: + return unknown.decode('utf-8') + elif type(unknown) is str: + return unknown + def parse_dada_header(headerstr, cast_types=True): + headerstr = _cast_to_string(headerstr) headerstr = headerstr[:headerstr.find('\0')] header = {} for line in headerstr.split('\n'): @@ -109,9 +126,9 @@ def parse_dada_header(headerstr, cast_types=True): return header class PsrDadaSourceBlock(SourceBlock): - def __init__(self, buffer_key, header_callback, gulp_nframe, space=None, - *args, **kwargs): - buffer_iterator = psrdada_read_sequence_iterator(buffer_key) + def __init__(self, buffer_key, header_callback, gulp_nframe, space=None, + single=False, *args, **kwargs): + buffer_iterator = psrdada_read_sequence_iterator(buffer_key, single) super(PsrDadaSourceBlock, self).__init__(buffer_iterator, gulp_nframe, space, *args, **kwargs) self.header_callback = header_callback @@ -119,6 +136,7 @@ def create_reader(self, hdu_hdr): hdu, hdr = hdu_hdr return PsrDadaBufferReader(hdu, hdr) def on_sequence(self, reader, hdu_hdr): + print("PsrDadaSourceBlock::on_sequence") ihdr_dict = parse_dada_header(reader.header) return [self.header_callback(ihdr_dict)] def on_data(self, reader, ospans): @@ -129,7 +147,174 @@ def on_data(self, reader, ospans): nframe = nbyte // ospan.frame_nbyte return [nframe] -def read_psrdada_buffer(buffer_key, header_callback, gulp_nframe, space=None, +def _keyval_to_dadastr(key, val): + """ Convert key: value pair into a DADA string """ + return "{key:20s} {val}\n".format(key=key.upper(), val=val) + + +def _extract_tensor_scale(key, tensor): + try: + idx = tensor['labels'].index(key) + return tensor['scales'][idx] + except ValueError as e: + return [0, 0] + + +def _extract_tensor_shape(key, tensor): + try: + idx = tensor['labels'].index(key) + return tensor['shape'][idx] + except ValueError as e: + return 1 + + +def generate_dada_header(hdr_dict, hdrlen=4096): + """ Generate DADA header from header dict + + Args: + hdr_dict (dict): Header dictionary of key, value pairs + hdrlen (int): Size of header, default 4096 + + Returns: + s (str): DADA header string with padding to hdrlen + """ + s = "HDR_VERSION 1.0\n" + s+= "HDR_SIZE %i\n" % hdrlen + keys_to_skip = ('HDR_VERSION', 'HDR_SIZE') + + # update parameters from bifrost tensor + if '_tensor' in hdr_dict.keys(): + print(hdr_dict['_tensor']) + dtype = hdr_dict['_tensor']['dtype'] + dtype_vals = { + 'cf32': { 'NBIT': '32', 'NDIM': '2' }, + 'f32': { 'NBIT': '32', 'NDIM': '1' }, + 'ci8': { 'NBIT': '8', 'NDIM': '2' }, + 'i8': { 'NBIT': '8', 'NDIM': '1' } } + if dtype in dtype_vals.keys(): + hdr_dict['NBIT'] = dtype_vals[dtype]['NBIT'] + hdr_dict['NDIM'] = dtype_vals[dtype]['NDIM'] + + hdr_dict['NBEAM'] = _extract_tensor_shape("beam", hdr_dict['_tensor']) + hdr_dict['NANT'] = _extract_tensor_shape("station", hdr_dict['_tensor']) + hdr_dict['NPOL'] = _extract_tensor_shape("pol", hdr_dict['_tensor']) + hdr_dict['NCHAN'] = _extract_tensor_shape("freq", hdr_dict['_tensor']) + + f0 = _extract_tensor_scale("freq", hdr_dict['_tensor'])[0] + chan_bw = _extract_tensor_scale("freq", hdr_dict['_tensor'])[1] + bw = chan_bw * int(hdr_dict['NCHAN']) + hdr_dict['BW'] = bw + hdr_dict['FREQ'] = f0 + bw / 2 + + # print(hdr_dict['_tensor']) + ts = _extract_tensor_scale("time", hdr_dict['_tensor'])[0] + + tsamp = _extract_tensor_scale("fine_time", hdr_dict['_tensor'])[1] + if tsamp == 0: + tsamp = _extract_tensor_scale("time", hdr_dict['_tensor'])[1] + if tsamp == 0: + print("TSAMP was 0, changing to 10.24 us") + tsamp = 0.00001024 + + hdr_dict['TSAMP'] = tsamp * 1e6 + ts_integer = int(ts) + hdr_dict['UTC_START'] = datetime.utcfromtimestamp(ts_integer).strftime("%Y-%m-%d-%H:%M:%S") + + fine_time = _extract_tensor_shape("fine_time", hdr_dict['_tensor']) + + bits_per_sample = int(hdr_dict['NBEAM']) * \ + int(hdr_dict['NANT']) * \ + int(hdr_dict['NPOL']) * \ + int(hdr_dict['NBIT']) * \ + int(hdr_dict['NDIM']) * \ + int(hdr_dict['NCHAN']) + + resolution = (bits_per_sample * fine_time) / 8 + hdr_dict['RESOLUTION'] = resolution + + bytes_per_second = int((bits_per_sample / 8) / tsamp) + hdr_dict['BYTES_PER_SECOND'] = bytes_per_second + + hdr_dict['FILE_SIZE'] = bytes_per_second * 8 + + if hdr_dict['_tensor']['labels'] == ['time', 'beam', 'freq', 'fine_time']: + hdr_dict['ORDER'] = 'SFT' + + for key, val in hdr_dict.items(): + if key not in keys_to_skip: + if isinstance(val, (str, float, int)): + s += _keyval_to_dadastr(key, val) + s_padding = "\x00" + if len(s) > hdrlen: + raise RuntimeError("Header is too large for HDR_SIZE! Increase hdrlen") + n_pad = hdrlen - len(s) + return s + s_padding * n_pad + +class PsrDadaSinkBlock(SinkBlock): + def __init__(self, iring, buffer_key, gulp_nframe, space=None, *args, **kwargs): + super(PsrDadaSinkBlock, self).__init__(iring, gulp_nframe, *args, **kwargs) + self.hdu = Hdu() + self.hdu.connect_write(buffer_key) + self.keywords_to_add = {} + self.keywords_to_sub = [] + self.keywords_to_change = {} + + def add_header_keywords(self, hdr_dict): + """Add specified keywords to outgoing header dict""" + for key, value in hdr_dict.items(): + self.keywords_to_add[key] = value + + def sub_header_keywords(self, hdr_dict): + """Remove specified keywords from outgoing header dict""" + for key in hdr_dict: + self.keywords_to_sub.append(key) + + def remap_prefixed_keywords(self, prefix, suffixes): + """Remap the keywords in suffixes, removing the prefix""" + for suffix in suffixes: + self.keywords_to_change[prefix + suffix] = suffix + + def on_sequence(self, iseq): + print("PsrDadaSinkBlock::on_sequence") + updated_header = iseq.header.copy() + # rename some header keywords + for key, value in self.keywords_to_change.items(): + try: + self.keywords_to_add[value] = updated_header[key] + self.keywords_to_sub.append(key) + except KeyError: + pass + # insert the additional keywords + updated_header.update(self.keywords_to_add) + # remove the keywords + for key in self.keywords_to_sub: + try: + del updated_header[key] + except KeyError: + pass + dada_header_str = generate_dada_header(updated_header) + dada_header_buf = next(self.hdu.header_block) + + dada_header_buf.data[:] = np.fromstring(dada_header_str.encode('ascii'), dtype='uint8') + dada_header_buf.close() + + def on_sequence_end(self, iseq): + self.hdu.disconnect() + + def on_data(self, ispan): + + # TODO: Make this work in CUDA space + dada_blk = next(self.hdu.data_block) + + nbyte = ispan.data.nbytes + _check(_bf.bfMemcpy(dada_blk.ptr, _bf.BF_SPACE_SYSTEM, + ispan.data.ctypes.data, _bf.BF_SPACE_SYSTEM, + nbyte)) + + #dada_blk.data[:] = ispan.data.view('u8') + dada_blk.close() + +def read_psrdada_buffer(buffer_key, header_callback, gulp_nframe, space=None, single=False, *args, **kwargs): """Read data from a PSRDADA ring buffer. @@ -139,6 +324,7 @@ def read_psrdada_buffer(buffer_key, header_callback, gulp_nframe, space=None, header_callback (func): A function f(psrdata_header_dict) -> bifrost_header_dict. gulp_nframe (int): No. frames to process at a time. space (string): The output memory space (all Bifrost spaces are supported). + single (bool): Only process a single data stream with the block *args: Arguments to ``bifrost.pipeline.SourceBlock``. **kwargs: Keyword Arguments to ``bifrost.pipeline.SourceBlock``. @@ -162,5 +348,14 @@ def read_psrdada_buffer(buffer_key, header_callback, gulp_nframe, space=None, References: http://psrdada.sourceforge.net/ """ - return PsrDadaSourceBlock(buffer_key, header_callback, gulp_nframe, space, + return PsrDadaSourceBlock(buffer_key, header_callback, gulp_nframe, space, single, *args, **kwargs) + +def write_psrdada_buffer(iring, buffer_key, gulp_nframe, *args, **kwargs): + """ Write into a PSRDADA ring buffer + + Note: + Initial version, currently only supports system space (not CUDA) + """ + return PsrDadaSinkBlock(iring, buffer_key, gulp_nframe) + diff --git a/python/bifrost/psrdada.py b/python/bifrost/psrdada.py index bca88e19c..bb8124fc2 100644 --- a/python/bifrost/psrdada.py +++ b/python/bifrost/psrdada.py @@ -44,25 +44,29 @@ import bifrost.libpsrdada_generated as _dada import numpy as np from bifrost.ndarray import _address_as_buffer -from bifrost.libbifrost import EndOfDataStop import ctypes -from bifrost import telemetry -telemetry.track_module() - def get_pointer_value(ptr): return ctypes.c_void_p.from_buffer(ptr).value +def _cast_to_bytes(unknown): + """ handle the difference between python 2 and 3 """ + if type(unknown) is str: + return unknown.encode("utf-8") + elif type(unknown) is bytes: + return unknown + class MultiLog(object): count = 0 def __init__(self, name=None): if name is None: name = "MultiLog%i" % MultiLog.count MultiLog.count += 1 - self.obj = _dada.multilog_open(name, '\0') + self.obj = _dada.multilog_open(_cast_to_bytes(name), _cast_to_bytes('\0')) def __del__(self): - _dada.multilog_close(self.obj) + if hasattr(self, 'obj'): + _dada.multilog_close(self.obj) class IpcBufBlock(object): def __init__(self, buf, mutable=False): @@ -119,12 +123,12 @@ def __next__(self): else: del block self.reset() - raise EndOfDataStop('IpcBufBlock empty') + raise StopIteration() def next(self): return self.__next__() def open(self): raise NotImplementedError() - def close(self, nbyte): + def close(self): raise NotImplementedError() class IpcBaseIO(IpcBaseBuf): @@ -202,13 +206,15 @@ def close(self, nbyte): class Hdu(object): def __init__(self): + self.connected = False + self.registered = False self._dada = _dada self.log = MultiLog() self.hdu = _dada.dada_hdu_create(self.log.obj) - self.connected = False def __del__(self): self.disconnect() - _dada.dada_hdu_destroy(self.hdu) + if hasattr(self, "hdu"): + _dada.dada_hdu_destroy(self.hdu) def _connect(self, buffer_key=0xDADA): self.buffer_key = buffer_key _dada.dada_hdu_set_key(self.hdu, self.buffer_key) @@ -235,6 +241,16 @@ def _unlock(self): def relock(self): self._unlock() self._lock(self.mode) + def _register(self): + if not self.registered: + if _dada.dada_cuda_dbregister(self.hdu) < 0: + raise IOError("Failed to register memory with CUDA driver") + self.registered = True + def _unregister(self): + if self.registered: + if _dada.dada_cuda_dbunregister(self.hdu) < 0: + raise IOError("Failed to unregister memory with CUDA driver") + self.registered = False def open_HACK(self): if _dada.ipcio_open(self.data_block.io, 'w') < 0: raise IOError("ipcio_open failed") @@ -244,6 +260,7 @@ def connect_read(self, buffer_key=0xDADA): self.header_block = IpcReadHeaderBuf(self.hdu.contents.header_block) self.data_block = IpcReadDataBuf(self.hdu.contents.data_block) self.connected = True + self._register() def connect_write(self, buffer_key=0xDADA): self._connect(buffer_key) self._lock('write') @@ -252,6 +269,7 @@ def connect_write(self, buffer_key=0xDADA): self.connected = True def disconnect(self): if self.connected: + self._unregister() self._unlock() self._disconnect() self.connected = False From 913a8fc6d127a7ddd7b96768f708d9bc92b9bf4f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Dec 2022 18:15:22 -0700 Subject: [PATCH 0739/1155] Make sure csize is always >=0. --- tools/like_top.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/like_top.py b/tools/like_top.py index 4f6d0ccda..89ca700dd 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -384,6 +384,8 @@ def main(args): k = _add_line(scr, k, 0, ' ', std) output = '%6s %15s %4s %5s %7s %7s %7s %7s Cmd' % ('PID', 'Block', 'Core', '%CPU', 'Total', 'Acquire', 'Process', 'Reserve') csize = size[1]-len(output) + if csize < 0: + csize = 0 output += ' '*csize output += '\n' k = _add_line(scr, k, 0, output, rev) From ff652c863a7b6ae8d83bf3bc501ecca831ba7ad8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 4 Jan 2023 07:34:36 -0700 Subject: [PATCH 0740/1155] Use ubuntu-20.04 only for Py2.7 and Py3.6. --- .github/workflows/main.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 59d67ddb1..d7fde4f1d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,7 +3,7 @@ name: "Build and Test" "on": [push, pull_request] jobs: pre_build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: @@ -19,11 +19,15 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [self-hosted, ubuntu-20.04, macos-latest] - python-version: ['2.7', '3.6', '3.8', '3.10'] - exclude: + os: [self-hosted, ubuntu-latest, macos-latest] + python-version: ['3.8', '3.10'] + include: + - os: ubuntu-20.04 + python-version: '2.7' + - os: ubuntu-20.04 + python-version: '3.6' - os: macos-latest - python-version: 2.7 + python-version: '3.6' fail-fast: false steps: - name: "Software Install - Ubuntu" From 3e7d2a2d3ea86cf61400c697df3980912a603fa4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 4 Jan 2023 07:48:38 -0700 Subject: [PATCH 0741/1155] Almost had it. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d7fde4f1d..d67d35044 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -31,7 +31,7 @@ jobs: fail-fast: false steps: - name: "Software Install - Ubuntu" - if: ${{ matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} + if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} run: | sudo apt-get update && \ sudo apt-get install -y \ From 8a86754fa78b1aa72c3dd89a457e8761f8bd925d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 4 Jan 2023 11:51:07 -0700 Subject: [PATCH 0742/1155] Explicit numpy types. --- python/bifrost/header_standard.py | 16 +++++++++------- test/test_header_standard.py | 6 +++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/python/bifrost/header_standard.py b/python/bifrost/header_standard.py index ba45a5c96..df438e01f 100644 --- a/python/bifrost/header_standard.py +++ b/python/bifrost/header_standard.py @@ -43,6 +43,8 @@ """ +import numpy as np + from bifrost import telemetry telemetry.track_module() @@ -51,13 +53,13 @@ # Format: # 'parameter name':(type, minimum) STANDARD_HEADER = { - 'nchans': (int, 1), - 'nifs': (int, 1, ), - 'nbits': (int, 1), - 'fch1': (float, 0), - 'foff': (float, None), - 'tstart': (float, 0), - 'tsamp': (float, 0)} + 'nchans': ((int, np.int64), 1), + 'nifs': ((int, np.int64), 1), + 'nbits': ((int, np.int64), 1), + 'fch1': ((float, np.float64), 0), + 'foff': ((float, np.float64), None), + 'tstart': ((float, np.float64), 0), + 'tsamp': ((float, np.float64), 0)} def enforce_header_standard(header_dict): """Raise an error if the header dictionary passed diff --git a/test/test_header_standard.py b/test/test_header_standard.py index d5288f512..b32598b68 100644 --- a/test/test_header_standard.py +++ b/test/test_header_standard.py @@ -48,9 +48,9 @@ def test_simple_header(self): def test_numpy_types(self): """Same values, but some are numpy types""" self.header_dict = { - 'nchans': np.int(1), 'nifs': 1, 'nbits': 8, - 'fch1': np.float(100.0), 'foff': np.float(1e-5), - 'tstart': 1e5, 'tsamp': np.float(1e-5)} + 'nchans': np.int64(1), 'nifs': 1, 'nbits': 8, + 'fch1': np.float64(100.0), 'foff': np.float64(1e-5), + 'tstart': 1e5, 'tsamp': np.float64(1e-5)} def test_extra_parameters(self): """Add some extra parameters""" self.header_dict = { From f780ec0164c753d5a99d45ea615c4b37ec3ec327 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 17:52:00 -0700 Subject: [PATCH 0743/1155] Make Pipeline.as_default() update the state. --- python/bifrost/pipeline.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 96bd6614a..4f16ab2f6 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -235,7 +235,9 @@ def __init__(self, name=None, **kwargs): self.all_blocks_finished_initializing_event = threading.Event() self.block_init_queue = queue.Queue() def as_default(self): - return PipelineContext(self) + # Add self to the end of the pipeline stack and update the block scope + thread_local.pipeline_stack.append(self) + thread_local.blockscope_stack.append(get_default_pipeline()) def synchronize_block_initializations(self): # Wait for all blocks to finish initializing uninitialized_blocks = set(self.blocks) From 16be285db6a783a5aea97cc3da86b38bda4f726f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 18:26:47 -0700 Subject: [PATCH 0744/1155] Round 1. --- .github/workflows/main.yml | 2 -- python/bifrost/__init__.py | 3 +-- python/bifrost/address.py | 23 ++++------------------ python/bifrost/affinity.py | 5 +---- python/bifrost/block.py | 8 +------- python/bifrost/block_chainer.py | 4 +--- python/bifrost/core.py | 5 +---- python/bifrost/device.py | 12 ++--------- python/bifrost/dtype.py | 7 ++----- python/bifrost/fdmt.py | 5 +---- python/bifrost/fft.py | 5 +---- python/bifrost/fir.py | 7 ++----- python/bifrost/guppi_raw.py | 13 +++--------- python/bifrost/libbifrost.py | 11 ++--------- python/bifrost/linalg.py | 3 --- python/bifrost/memory.py | 5 +---- python/bifrost/ndarray.py | 35 ++++++--------------------------- python/bifrost/pipeline.py | 8 +------- python/bifrost/portaudio.py | 4 +--- python/bifrost/proclog.py | 22 +++------------------ python/bifrost/psrdada.py | 4 +--- python/bifrost/quantize.py | 5 +---- python/bifrost/reduce.py | 5 +---- python/bifrost/ring.py | 25 ++++------------------- python/bifrost/ring2.py | 33 ++++++------------------------- python/bifrost/romein.py | 5 +---- python/bifrost/sigproc.py | 18 +++-------------- python/bifrost/sigproc2.py | 18 +++-------------- python/bifrost/transpose.py | 5 +---- python/bifrost/udp_socket.py | 5 +---- python/bifrost/udp_transmit.py | 2 +- python/bifrost/unpack.py | 5 +---- 32 files changed, 58 insertions(+), 259 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d67d35044..5b2df2bea 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,8 +22,6 @@ jobs: os: [self-hosted, ubuntu-latest, macos-latest] python-version: ['3.8', '3.10'] include: - - os: ubuntu-20.04 - python-version: '2.7' - os: ubuntu-20.04 python-version: '3.6' - os: macos-latest diff --git a/python/bifrost/__init__.py b/python/bifrost/__init__.py index 609e935b3..68589ed9d 100644 --- a/python/bifrost/__init__.py +++ b/python/bifrost/__init__.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -31,7 +31,6 @@ """ # TODO: Decide how to organise the namespace -from __future__ import print_function, absolute_import from bifrost import core, memory, affinity, ring, block, address, udp_socket from bifrost import pipeline diff --git a/python/bifrost/address.py b/python/bifrost/address.py index 73eec72e0..5b4bff2ff 100644 --- a/python/bifrost/address.py +++ b/python/bifrost/address.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,12 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import -import sys -if sys.version_info > (3,): - long = int - from bifrost.libbifrost import _bf, _check, _get, BifrostObject import ctypes @@ -41,12 +35,8 @@ class Address(BifrostObject): def __init__(self, address, port, family=None): - try: - address = address.encode() - except AttributeError: - # Python2 catch - pass - assert(isinstance(port, (int, long))) + address = address.encode() + assert(isinstance(port, int)) if family is None: family = AF_UNSPEC BifrostObject.__init__( @@ -66,11 +56,6 @@ def address(self): buflen = 128 buf = ctypes.create_string_buffer(buflen) _check(_bf.bfAddressGetString(self.obj, buflen, buf)) - try: - value = buf.value.decode() - except AttributeError: - # Python2 catch - value = buf.value - return value + return buf.value.decode() def __str__(self): return "%s:%i" % (self.address, self.port) diff --git a/python/bifrost/affinity.py b/python/bifrost/affinity.py index 99e67e762..854db90f3 100644 --- a/python/bifrost/affinity.py +++ b/python/bifrost/affinity.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -26,9 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check, _get, _array from bifrost import telemetry diff --git a/python/bifrost/block.py b/python/bifrost/block.py index 9714188ce..c92282750 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -31,12 +31,6 @@ of a simple transform which works on a span by span basis. """ -# Python2 compatibility -from __future__ import print_function, division, absolute_import -import sys -if sys.version_info < (3,): - range = xrange - import json import threading import time diff --git a/python/bifrost/block_chainer.py b/python/bifrost/block_chainer.py index b9332e729..e331851a0 100644 --- a/python/bifrost/block_chainer.py +++ b/python/bifrost/block_chainer.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import print_function - import bifrost from bifrost import telemetry diff --git a/python/bifrost/core.py b/python/bifrost/core.py index 8da672d3c..41257b232 100644 --- a/python/bifrost/core.py +++ b/python/bifrost/core.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -26,9 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf from bifrost import telemetry diff --git a/python/bifrost/device.py b/python/bifrost/device.py index dc3ec5771..3211b258f 100644 --- a/python/bifrost/device.py +++ b/python/bifrost/device.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,9 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from ctypes import c_ulong, pointer as c_pointer from bifrost.libbifrost import _bf, _check, _get @@ -38,12 +35,7 @@ def set_device(device): if isinstance(device, int): _check(_bf.bfDeviceSet(device)) else: - try: - device = device.encode() - except AttributeError: - # Python2 catch - pass - _check(_bf.bfDeviceSetById(device)) + _check(_bf.bfDeviceSetById(device.encode())) def get_device(): return _get(_bf.bfDeviceGet) diff --git a/python/bifrost/dtype.py b/python/bifrost/dtype.py index 788a6b160..93de54d86 100644 --- a/python/bifrost/dtype.py +++ b/python/bifrost/dtype.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -41,9 +41,6 @@ """ -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf from bifrost.libbifrost_generated import BF_FLOAT128_ENABLED import numpy as np @@ -179,4 +176,4 @@ def bifrost2string(dtype): if dtype_str is None: raise ValueError("Could not convert dtype integer to string. Value not understood.") else: - return dtype_str \ No newline at end of file + return dtype_str diff --git a/python/bifrost/fdmt.py b/python/bifrost/fdmt.py index 9a902ce09..20efb7be0 100644 --- a/python/bifrost/fdmt.py +++ b/python/bifrost/fdmt.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,9 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space from bifrost.ndarray import asarray diff --git a/python/bifrost/fft.py b/python/bifrost/fft.py index 67777f2fa..67f2c60dc 100644 --- a/python/bifrost/fft.py +++ b/python/bifrost/fft.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,9 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check, _get, BifrostObject from bifrost.ndarray import asarray import ctypes diff --git a/python/bifrost/fir.py b/python/bifrost/fir.py index e7873c4ba..f868a1746 100644 --- a/python/bifrost/fir.py +++ b/python/bifrost/fir.py @@ -1,6 +1,6 @@ -# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -26,9 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check, BifrostObject, _string2space from bifrost.ndarray import asarray diff --git a/python/bifrost/guppi_raw.py b/python/bifrost/guppi_raw.py index 9e9341f84..bde91560f 100644 --- a/python/bifrost/guppi_raw.py +++ b/python/bifrost/guppi_raw.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -54,9 +54,6 @@ """ -# Python2 compatibility -from __future__ import division - from bifrost import telemetry telemetry.track_module() @@ -70,12 +67,8 @@ def read_header(f): if len(record) < RECORD_LEN: raise IOError("EOF reached in middle of header") - try: - record = record.decode() - except AttributeError: - # Python2 catch - pass - if record.startswith(b'END'): + record = record.decode() + if record.startswith('END'): break key, val = record.split('=', 1) key, val = key.strip(), val.strip() diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 08eda69c1..ca643688c 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -34,9 +34,6 @@ # instance instead of LP_s # E.g., _bf.bfRingSequenceGetName() [should be ] -# Python2 compatibility -from __future__ import absolute_import - import ctypes import bifrost.libbifrost_generated as _bf bf = _bf # Public access to library @@ -110,11 +107,7 @@ def _array(size_or_vals, dtype=None): elif isinstance(vals[0], float): dtype = ctypes.c_double elif isinstance(vals[0], str): - try: - vals = [val.encode() for val in vals] - except AttributeError: - # Python2 catch - pass + vals = [val.encode() for val in vals] dtype = ctypes.c_char_p elif isinstance(vals[0], _bf.BFarray): dtype = ctypes.POINTER(_bf.BFarray) diff --git a/python/bifrost/linalg.py b/python/bifrost/linalg.py index e8029349f..8b0a7116d 100644 --- a/python/bifrost/linalg.py +++ b/python/bifrost/linalg.py @@ -25,9 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check, BifrostObject from bifrost.ndarray import asarray diff --git a/python/bifrost/memory.py b/python/bifrost/memory.py index dc884e00b..2747c8919 100644 --- a/python/bifrost/memory.py +++ b/python/bifrost/memory.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -26,9 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check, _get, _string2space import ctypes diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index d2ef24abf..2b45f2352 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -36,12 +36,6 @@ """ -# Python2 compatibility -from __future__ import absolute_import -import sys -if sys.version_info < (3,): - range = xrange - import ctypes import numpy as np from bifrost.memory import raw_malloc, raw_free, raw_get_space, space_accessible @@ -52,11 +46,6 @@ from bifrost.Space import Space from bifrost.libbifrost_generated import struct_BFarray_ -try: - from bifrost._pypy3_compat import PyMemoryView_FromMemory -except ImportError: - pass - from bifrost import telemetry telemetry.track_module() @@ -75,23 +64,11 @@ def _address_as_buffer(address, nbyte, readonly=False): # Note: This works as a buffer in regular python and pypy # Note: int_asbuffer is undocumented; see here: # https://mail.scipy.org/pipermail/numpy-discussion/2008-January/030938.html - try: - int_asbuffer = ctypes.pythonapi.PyMemoryView_FromMemory - int_asbuffer.restype = ctypes.py_object - int_asbuffer.argtypes = (ctypes.c_void_p, ctypes.c_ssize_t, ctypes.c_int) - return int_asbuffer(address, nbyte, 0x100 if readonly else 0x200) - except AttributeError: - try: - # Python2 catch - return np.core.multiarray.int_asbuffer(address, - nbyte, - readonly=readonly, - check=False) - except AttributeError: - # PyPy3 catch - int_asbuffer = PyMemoryView_FromMemory - return int_asbuffer(address, nbyte, 0x100 if readonly else 0x200) - + int_asbuffer = ctypes.pythonapi.PyMemoryView_FromMemory + int_asbuffer.restype = ctypes.py_object + int_asbuffer.argtypes = (ctypes.c_void_p, ctypes.c_ssize_t, ctypes.c_int) + return int_asbuffer(address, nbyte, 0x100 if readonly else 0x200) + def asarray(arr, space=None): if isinstance(arr, ndarray) and (space is None or space == arr.bf.space): return arr diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 96bd6614a..adab8a71d 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,12 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function -import sys -if sys.version_info < (3,): - range = xrange - import threading try: import queue diff --git a/python/bifrost/portaudio.py b/python/bifrost/portaudio.py index 5053a5ea0..89f5a612e 100644 --- a/python/bifrost/portaudio.py +++ b/python/bifrost/portaudio.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -31,8 +31,6 @@ # Ubuntu 16.04: # sudo apt-get install portaudio19-dev -from __future__ import print_function - import ctypes import atexit from threading import Lock diff --git a/python/bifrost/proclog.py b/python/bifrost/proclog.py index 8b0800b6a..46a7834fc 100644 --- a/python/bifrost/proclog.py +++ b/python/bifrost/proclog.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,12 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function, absolute_import -import sys -if sys.version_info < (3,): - range = xrange - from bifrost.libbifrost import _bf, _check, BifrostObject import os @@ -43,13 +37,8 @@ class ProcLog(BifrostObject): def __init__(self, name): - try: - name = name.encode('utf-8') - except AttributeError: - # Python2 catch - pass BifrostObject.__init__( - self, _bf.bfProcLogCreate, _bf.bfProcLogDestroy, name) + self, _bf.bfProcLogCreate, _bf.bfProcLogDestroy, name.encode()) def update(self, contents): """Updates (replaces) the contents of the log contents: string or dict containing data to write to the log @@ -59,12 +48,7 @@ def update(self, contents): if isinstance(contents, dict): contents = '\n'.join(['%s : %s' % item for item in contents.items()]) - try: - contents = contents.encode() - except AttributeError: - # Python2 catch - pass - _check(_bf.bfProcLogUpdate(self.obj, contents)) + _check(_bf.bfProcLogUpdate(self.obj, contents.encode())) def _multi_convert(value): """ diff --git a/python/bifrost/psrdada.py b/python/bifrost/psrdada.py index bca88e19c..7b946e495 100644 --- a/python/bifrost/psrdada.py +++ b/python/bifrost/psrdada.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -39,8 +39,6 @@ libtest_la_LDFLAGS = -version-info 0:0:0 """ -from __future__ import absolute_import, print_function - import bifrost.libpsrdada_generated as _dada import numpy as np from bifrost.ndarray import _address_as_buffer diff --git a/python/bifrost/quantize.py b/python/bifrost/quantize.py index 533b686d4..456c513ba 100644 --- a/python/bifrost/quantize.py +++ b/python/bifrost/quantize.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,9 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check from bifrost.ndarray import asarray diff --git a/python/bifrost/reduce.py b/python/bifrost/reduce.py index 05b1cf8ac..601487943 100644 --- a/python/bifrost/reduce.py +++ b/python/bifrost/reduce.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,9 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check from bifrost.ndarray import asarray diff --git a/python/bifrost/ring.py b/python/bifrost/ring.py index e4335e1f6..6f72c763f 100644 --- a/python/bifrost/ring.py +++ b/python/bifrost/ring.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -26,9 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function, absolute_import - from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space, _space2string, EndOfDataStop #from GPUArray import GPUArray from bifrost.DataType import DataType @@ -52,16 +49,11 @@ def __init__(self, space='system', name=None, core=None): if name is None: name = str(uuid4()) name = _slugify(name) - try: - name = name.encode() - except AttributeError: - # Python2 catch - pass space = _string2space(space) #self.obj = None #self.obj = _get(_bf.bfRingCreate(name=name, space=space), retarg=0) BifrostObject.__init__( - self, _bf.bfRingCreate, _bf.bfRingDestroy, name, space) + self, _bf.bfRingCreate, _bf.bfRingDestroy, name.encode(), space) if core is not None: try: _check( _bf.bfRingSetAffinity(self.obj, @@ -208,24 +200,15 @@ def __init__(self, ring, name="", time_tag=-1, header="", nringlet=1): if isinstance(header, np.ndarray): header = header.ctypes.data elif isinstance(header, str): - try: - header = header.encode() - except AttributeError: - # Python2 catch - pass + header = header.encode() #print("hdr:", header_size, type(header)) name = str(name) offset_from_head = 0 self.obj = _bf.BFwsequence() - try: - name = name.encode() - except AttributeError: - # Python2 catch - pass _check(_bf.bfRingSequenceBegin( self.obj, ring.obj, - name, + name.encode(), time_tag, header_size, header, diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index 1ff94b2d9..06ef49ac3 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -28,8 +28,6 @@ # TODO: Some of this code has gotten a bit hacky # Also consider merging some of the logic into the backend -from __future__ import print_function, absolute_import - from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space, EndOfDataStop from bifrost.DataType import DataType from bifrost.ndarray import ndarray, _address_as_buffer @@ -91,13 +89,8 @@ def __init__(self, space='system', name=None, owner=None, core=None): name = 'ring_%i' % Ring.instance_count Ring.instance_count += 1 name = _slugify(name) - try: - name = name.encode() - except AttributeError: - # Python2 catch - pass BifrostObject.__init__(self, _bf.bfRingCreate, _bf.bfRingDestroy, - name, _string2space(self.space)) + name.encode(), _string2space(self.space)) if core is not None: try: _check( _bf.bfRingSetAffinity(self.obj, @@ -122,12 +115,7 @@ def resize(self, contiguous_bytes, total_bytes=None, nringlet=1): @property def name(self): n = _get(_bf.bfRingGetName, self.obj) - try: - n = n.decode() - except AttributeError: - # Python2 catch - pass - return n + return n.decode() @property def core(self): return _get(_bf.bfRingGetAffinity, self.obj) @@ -212,11 +200,7 @@ def tensor(self): # TODO: This shouldn't be public nringlet = reduce(lambda x, y: x * y, ringlet_shape, 1) frame_nelement = reduce(lambda x, y: x * y, frame_shape, 1) dtype = header['_tensor']['dtype'] - try: - dtype = dtype.decode() - except AttributeError: - # Python2 catch - pass + dtype = dtype.decode() nbit = DataType(dtype).itemsize_bits assert(nbit % 8 == 0) frame_nbyte = frame_nelement * nbit // 8 @@ -260,13 +244,8 @@ def __init__(self, ring, header, gulp_nframe, buf_nframe): offset_from_head = 0 # TODO: How to allow time_tag to be optional? Probably need to plumb support through to backend. self.obj = _bf.BFwsequence() - try: - hname = header['name'].encode() - hstr = header_str.encode() - except AttributeError: - # Python2 catch - hname = header['name'] - hstr = header_str + hname = header['name'].encode() + hstr = header_str.encode() _check(_bf.bfRingSequenceBegin( self.obj, ring.obj, diff --git a/python/bifrost/romein.py b/python/bifrost/romein.py index 757dd2a0d..a89c008c6 100644 --- a/python/bifrost/romein.py +++ b/python/bifrost/romein.py @@ -1,5 +1,5 @@ -# Copyright (c) 2018-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2018-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,9 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check, BifrostObject from bifrost.ndarray import asarray diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index cfbd2f21f..8f4a6f145 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -52,8 +52,6 @@ data: [time][pol][nbit] (General case: [time][if/pol][chan][nbit]) """ -from __future__ import print_function - import struct import warnings import numpy as np @@ -134,12 +132,7 @@ def _header_write_string(file_object, key): """Writes a single key name to the header, which will be followed by the value""" file_object.write(struct.pack('=i', len(key))) - try: - key = key.encode() - except AttributeError: - # Catch for Python2 - pass - file_object.write(key) + file_object.write(key.encode()) def _header_write_value(file_object, key, value): """Writes a single parameter value to the header""" @@ -160,12 +153,7 @@ def _header_read_one_parameter(file_object): if length <= 0 or length >= 80: return None s = file_object.read(length) - try: - s = s.decode() - except AttributeError: - # Python2 catch - pass - return s + return s.decode() def _write_header(hdr, file_object): """write the entire header to the current position of a file""" diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index a85956091..4f1e6d4a3 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -53,8 +53,6 @@ # See here for details of the different data formats: # https://github.com/SixByNine/sigproc -from __future__ import print_function, division - import struct import warnings import numpy as np @@ -147,12 +145,7 @@ def machine2id(name): def _header_write_string(f, key): f.write(struct.pack('=i', len(key))) - try: - key = key.encode('ascii') - except AttributeError: - # Catch for Python2 - pass - f.write(key) + f.write(key.encode()) def _header_write(f, key, value, fmt=None): if fmt is not None: pass @@ -172,12 +165,7 @@ def _header_read(f): if length < 0 or length >= 80: return None s = f.read(length) - try: - s = s.decode() - except AttributeError: - # Python2 catch - pass - return s + return s.decode() def write_header(hdr, f): _header_write_string(f, "HEADER_START") diff --git a/python/bifrost/transpose.py b/python/bifrost/transpose.py index 6ff907963..e84245dbb 100644 --- a/python/bifrost/transpose.py +++ b/python/bifrost/transpose.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,9 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check from bifrost.ndarray import asarray diff --git a/python/bifrost/udp_socket.py b/python/bifrost/udp_socket.py index 2f04ef784..161e02d13 100644 --- a/python/bifrost/udp_socket.py +++ b/python/bifrost/udp_socket.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -27,9 +27,6 @@ # **TODO: Write tests for this class -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check, _get, BifrostObject from bifrost import telemetry diff --git a/python/bifrost/udp_transmit.py b/python/bifrost/udp_transmit.py index cb4791281..5bb4c0060 100644 --- a/python/bifrost/udp_transmit.py +++ b/python/bifrost/udp_transmit.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-202, The Bifrost Authors. All rights reserved. # Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/python/bifrost/unpack.py b/python/bifrost/unpack.py index c41f19d9a..f25dd7777 100644 --- a/python/bifrost/unpack.py +++ b/python/bifrost/unpack.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,9 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - from bifrost.libbifrost import _bf, _check from bifrost.ndarray import asarray From b82abaadda858e05e926cc185785a7725653dc54 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 18:31:47 -0700 Subject: [PATCH 0745/1155] Round 2. --- python/bifrost/DataType.py | 12 ++---------- python/bifrost/telemetry/__init__.py | 7 ++----- python/bifrost/telemetry/__main__.py | 7 ++----- python/bifrost/version/__main__.py | 2 -- python/bifrost/views/basic_views.py | 4 +--- 5 files changed, 7 insertions(+), 25 deletions(-) diff --git a/python/bifrost/DataType.py b/python/bifrost/DataType.py index a500e22d8..f4a69b477 100644 --- a/python/bifrost/DataType.py +++ b/python/bifrost/DataType.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -38,14 +38,6 @@ cf32: 32+32-bit complex floating point """ -# Python2 compatibility -from __future__ import division, absolute_import -import sys -string_types = (str,) -if sys.version_info < (3,): - range = xrange - string_types = (basestring,) - from bifrost.libbifrost import _bf from bifrost.libbifrost_generated import BF_FLOAT128_ENABLED import numpy as np @@ -126,7 +118,7 @@ def is_vector_structure(dtype): class DataType(object): # Note: Default of None results in default Numpy type (np.float) def __init__(self, t=None): - if isinstance(t, string_types): + if isinstance(t, str): for i, char in enumerate(t): if char.isdigit(): break diff --git a/python/bifrost/telemetry/__init__.py b/python/bifrost/telemetry/__init__.py index 3a77c282b..0b22e6ef3 100644 --- a/python/bifrost/telemetry/__init__.py +++ b/python/bifrost/telemetry/__init__.py @@ -1,6 +1,6 @@ -# Copyright (c) 2021-2022, The Bifrost Authors. All rights reserved. -# Copyright (c) 2021-2022, The University of New Mexico. All rights reserved. +# Copyright (c) 2021-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2021-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -26,9 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function, division, absolute_import - import os import time import uuid diff --git a/python/bifrost/telemetry/__main__.py b/python/bifrost/telemetry/__main__.py index 7cf635575..a693ecd86 100644 --- a/python/bifrost/telemetry/__main__.py +++ b/python/bifrost/telemetry/__main__.py @@ -1,6 +1,6 @@ -# Copyright (c) 2021-2022, The Bifrost Authors. All rights reserved. -# Copyright (c) 2021-2022, The University of New Mexico. All rights reserved. +# Copyright (c) 2021-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2021-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,9 +25,6 @@ # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# Python2 compatibility -from __future__ import print_function, division, absolute_import import argparse diff --git a/python/bifrost/version/__main__.py b/python/bifrost/version/__main__.py index d352987d6..d6b37cac9 100644 --- a/python/bifrost/version/__main__.py +++ b/python/bifrost/version/__main__.py @@ -26,8 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import print_function - import argparse from bifrost import __version__, __copyright__, __license__ diff --git a/python/bifrost/views/basic_views.py b/python/bifrost/views/basic_views.py index a7ba1e07a..419bdc7cf 100644 --- a/python/bifrost/views/basic_views.py +++ b/python/bifrost/views/basic_views.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import, division - from bifrost.pipeline import block_view from bifrost.DataType import DataType from bifrost.units import convert_units From c65f6589bb000a675191cfc958b4edd41225de2f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 18:37:21 -0700 Subject: [PATCH 0746/1155] Round 3. --- python/bifrost/blocks/__init__.py | 4 +--- python/bifrost/blocks/accumulate.py | 4 +--- python/bifrost/blocks/audio.py | 4 +--- python/bifrost/blocks/convert_visibilities.py | 4 +--- python/bifrost/blocks/copy.py | 4 +--- python/bifrost/blocks/correlate.py | 8 +------ python/bifrost/blocks/detect.py | 8 +------ python/bifrost/blocks/fdmt.py | 4 +--- python/bifrost/blocks/fft.py | 4 +--- python/bifrost/blocks/fftshift.py | 8 +------ python/bifrost/blocks/guppi_raw.py | 4 +--- python/bifrost/blocks/print_header.py | 3 +-- python/bifrost/blocks/psrdada.py | 4 +--- python/bifrost/blocks/quantize.py | 4 +--- python/bifrost/blocks/reduce.py | 4 +--- python/bifrost/blocks/reverse.py | 8 +------ python/bifrost/blocks/scrunch.py | 4 +--- python/bifrost/blocks/serialize.py | 8 +------ python/bifrost/blocks/sigproc.py | 8 +------ python/bifrost/blocks/transpose.py | 3 +-- python/bifrost/blocks/unpack.py | 4 +--- python/bifrost/blocks/wav.py | 23 +++---------------- 22 files changed, 24 insertions(+), 105 deletions(-) diff --git a/python/bifrost/blocks/__init__.py b/python/bifrost/blocks/__init__.py index b878d6a43..d786e2f5c 100644 --- a/python/bifrost/blocks/__init__.py +++ b/python/bifrost/blocks/__init__.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import - from bifrost.blocks.copy import copy, CopyBlock from bifrost.blocks.transpose import transpose, TransposeBlock from bifrost.blocks.reverse import reverse, ReverseBlock diff --git a/python/bifrost/blocks/accumulate.py b/python/bifrost/blocks/accumulate.py index c405f5c64..381f9c841 100644 --- a/python/bifrost/blocks/accumulate.py +++ b/python/bifrost/blocks/accumulate.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -30,8 +30,6 @@ nframe times before outputting the accumulated result. """ -from __future__ import absolute_import - from bifrost.map import map as bf_map from bifrost.pipeline import TransformBlock diff --git a/python/bifrost/blocks/audio.py b/python/bifrost/blocks/audio.py index 1db0ffbf0..f083e9418 100644 --- a/python/bifrost/blocks/audio.py +++ b/python/bifrost/blocks/audio.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import - from bifrost.pipeline import SourceBlock import bifrost.portaudio as audio diff --git a/python/bifrost/blocks/convert_visibilities.py b/python/bifrost/blocks/convert_visibilities.py index 079d351f8..2404ba20a 100644 --- a/python/bifrost/blocks/convert_visibilities.py +++ b/python/bifrost/blocks/convert_visibilities.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import - from bifrost.map import map as bf_map from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType diff --git a/python/bifrost/blocks/copy.py b/python/bifrost/blocks/copy.py index 0a6a6cf6a..4e15030c2 100644 --- a/python/bifrost/blocks/copy.py +++ b/python/bifrost/blocks/copy.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import - from bifrost.pipeline import TransformBlock from bifrost.ndarray import copy_array diff --git a/python/bifrost/blocks/correlate.py b/python/bifrost/blocks/correlate.py index fb29d5a66..246487729 100644 --- a/python/bifrost/blocks/correlate.py +++ b/python/bifrost/blocks/correlate.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,12 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import -import sys -if sys.version_info < (3,): - range = xrange - from bifrost.pipeline import TransformBlock from bifrost.linalg import LinAlg diff --git a/python/bifrost/blocks/detect.py b/python/bifrost/blocks/detect.py index 4ac1a81ab..30547de7e 100644 --- a/python/bifrost/blocks/detect.py +++ b/python/bifrost/blocks/detect.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -24,12 +24,6 @@ # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# Python2 compatibility -from __future__ import absolute_import -import sys -if sys.version_info < (3,): - range = xrange from bifrost.map import map as bf_map from bifrost.pipeline import TransformBlock diff --git a/python/bifrost/blocks/fdmt.py b/python/bifrost/blocks/fdmt.py index a86e99102..65b0e1e0c 100644 --- a/python/bifrost/blocks/fdmt.py +++ b/python/bifrost/blocks/fdmt.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import - from bifrost.pipeline import TransformBlock from bifrost.fdmt import Fdmt from bifrost.units import convert_units diff --git a/python/bifrost/blocks/fft.py b/python/bifrost/blocks/fft.py index 2e2e7a12d..42fa4c7d2 100644 --- a/python/bifrost/blocks/fft.py +++ b/python/bifrost/blocks/fft.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import - from bifrost.pipeline import TransformBlock from bifrost.fft import Fft from bifrost.units import transform_units diff --git a/python/bifrost/blocks/fftshift.py b/python/bifrost/blocks/fftshift.py index 3a0a19b3a..0cf8fc400 100644 --- a/python/bifrost/blocks/fftshift.py +++ b/python/bifrost/blocks/fftshift.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,12 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import -import sys -if sys.version_info < (3,): - range = xrange - from bifrost.map import map as bf_map from bifrost.pipeline import TransformBlock diff --git a/python/bifrost/blocks/guppi_raw.py b/python/bifrost/blocks/guppi_raw.py index 870a2c7cb..9085cb7dd 100644 --- a/python/bifrost/blocks/guppi_raw.py +++ b/python/bifrost/blocks/guppi_raw.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import - from bifrost.pipeline import SourceBlock import bifrost.guppi_raw as guppi_raw diff --git a/python/bifrost/blocks/print_header.py b/python/bifrost/blocks/print_header.py index 919a696fe..ae46495bb 100644 --- a/python/bifrost/blocks/print_header.py +++ b/python/bifrost/blocks/print_header.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -24,7 +24,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import, print_function import pprint from bifrost.pipeline import SinkBlock diff --git a/python/bifrost/blocks/psrdada.py b/python/bifrost/blocks/psrdada.py index ca159d29e..6965e7f3f 100644 --- a/python/bifrost/blocks/psrdada.py +++ b/python/bifrost/blocks/psrdada.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import - from bifrost.pipeline import SourceBlock from bifrost.Space import Space from bifrost.psrdada import Hdu diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index 309c3950d..847885c57 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import - from bifrost.quantize import quantize as bf_quantize from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType diff --git a/python/bifrost/blocks/reduce.py b/python/bifrost/blocks/reduce.py index 51ff2b001..93a884d00 100644 --- a/python/bifrost/blocks/reduce.py +++ b/python/bifrost/blocks/reduce.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -28,8 +28,6 @@ # TODO: Consider merging with detect_block # Seems easy, but may end up somewhat complicated -from __future__ import absolute_import - from bifrost.reduce import reduce as bf_reduce from bifrost.pipeline import TransformBlock diff --git a/python/bifrost/blocks/reverse.py b/python/bifrost/blocks/reverse.py index cb088dd6f..4641c7e0b 100644 --- a/python/bifrost/blocks/reverse.py +++ b/python/bifrost/blocks/reverse.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,12 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import -import sys -if sys.version_info < (3,): - range = xrange - from bifrost.map import map as bf_map from bifrost.pipeline import TransformBlock diff --git a/python/bifrost/blocks/scrunch.py b/python/bifrost/blocks/scrunch.py index 9956f2bb0..0068b6cbd 100644 --- a/python/bifrost/blocks/scrunch.py +++ b/python/bifrost/blocks/scrunch.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -28,8 +28,6 @@ # TODO: This is a bit hacky and inflexible, and has no CUDA backend yet # **DEPRECATE it in favour of ReduceBlock -from __future__ import absolute_import - from bifrost.pipeline import TransformBlock from copy import deepcopy diff --git a/python/bifrost/blocks/serialize.py b/python/bifrost/blocks/serialize.py index 4bab53fac..04cbc03f3 100644 --- a/python/bifrost/blocks/serialize.py +++ b/python/bifrost/blocks/serialize.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,12 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import, print_function -import sys -if sys.version_info < (3,): - range = xrange - from bifrost.pipeline import SinkBlock, SourceBlock import os import warnings diff --git a/python/bifrost/blocks/sigproc.py b/python/bifrost/blocks/sigproc.py index 397f1c2fb..ad9675f74 100644 --- a/python/bifrost/blocks/sigproc.py +++ b/python/bifrost/blocks/sigproc.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,12 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import, print_function -import sys -if sys.version_info < (3,): - range = xrange - from bifrost.pipeline import SourceBlock, SinkBlock import bifrost.sigproc2 as sigproc from bifrost.DataType import DataType diff --git a/python/bifrost/blocks/transpose.py b/python/bifrost/blocks/transpose.py index f1ffc8909..a9df042d4 100644 --- a/python/bifrost/blocks/transpose.py +++ b/python/bifrost/blocks/transpose.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,7 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import from bifrost.transpose import transpose as bf_transpose from bifrost.memory import space_accessible from bifrost.pipeline import TransformBlock diff --git a/python/bifrost/blocks/unpack.py b/python/bifrost/blocks/unpack.py index ac9645cf8..4119736ad 100644 --- a/python/bifrost/blocks/unpack.py +++ b/python/bifrost/blocks/unpack.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import - from bifrost.unpack import unpack as bf_unpack from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType diff --git a/python/bifrost/blocks/wav.py b/python/bifrost/blocks/wav.py index 7f6966fec..2c045681c 100644 --- a/python/bifrost/blocks/wav.py +++ b/python/bifrost/blocks/wav.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,12 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import -import sys -if sys.version_info < (3,): - range = xrange - from bifrost.pipeline import SourceBlock, SinkBlock from bifrost.DataType import DataType from bifrost.units import convert_units @@ -43,21 +37,10 @@ def wav_read_chunk_desc(f): id_, size, fmt = struct.unpack('<4sI4s', f.read(12)) - try: - id_ = id_.decode() - fmt = fmt.decode() - except AttributeError: - # Catch for Python2 - pass - return id_, size, fmt + return id_.decode(), size, fmt.decode() def wav_read_subchunk_desc(f): id_, size = struct.unpack('<4sI', f.read(8)) - try: - id_ = id_.decode() - except AttributeError: - # Catch for Python2 - pass - return id_, size + return id_.decode(), size def wav_read_subchunk_fmt(f, size): assert(size >= 16) packed = f.read(16) From 6e4bfeb46ca94083af4189db61d1f9adb49915fb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 18:41:02 -0700 Subject: [PATCH 0747/1155] Round 4. --- python/bifrost/addon/leda/bandfiles.py | 10 ++--- python/bifrost/addon/leda/blocks.py | 10 +---- python/bifrost/addon/leda/make_header.py | 53 +++++++++++------------- 3 files changed, 31 insertions(+), 42 deletions(-) diff --git a/python/bifrost/addon/leda/bandfiles.py b/python/bifrost/addon/leda/bandfiles.py index e83dee2ca..47268f0b0 100644 --- a/python/bifrost/addon/leda/bandfiles.py +++ b/python/bifrost/addon/leda/bandfiles.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -24,8 +24,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import print_function - import os, sys sys.path.append('..') @@ -48,9 +46,9 @@ def extract_obs_offset_from_name(fname): return int(os.path.basename(fname)[20:36]) def extract_obs_offset_in_file(fname): - f = open(fname, 'rb') - headerstr = f.read(DADA_HEADER_SIZE) - f.close() + with open(fname, 'rb') as f: + headerstr = f.read(DADA_HEADER_SIZE) + headerstr = headerstr.decode() if len(headerstr) < DADA_HEADER_SIZE: return "UNKNOWN" for line in headerstr.split('\n'): key, value = line.split() diff --git a/python/bifrost/addon/leda/blocks.py b/python/bifrost/addon/leda/blocks.py index 9980bc88d..6c72c6b31 100644 --- a/python/bifrost/addon/leda/blocks.py +++ b/python/bifrost/addon/leda/blocks.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -29,12 +29,6 @@ This file contains blocks specific to LEDA-OVRO. """ -# Python2 compatibility -from __future__ import print_function -import sys -if sys.version_info < (3,): - range = xrange - import os import bandfiles import bifrost @@ -120,7 +114,7 @@ def main(self, input_rings, output_rings): print("Opening", f.name) - with open(f.name,'rb') as ifile: + with open(f.name, 'rb') as ifile: ifile.read(self.HEADER_SIZE) ohdr["cfreq"] = f.freq diff --git a/python/bifrost/addon/leda/make_header.py b/python/bifrost/addon/leda/make_header.py index 26f009440..afd279385 100644 --- a/python/bifrost/addon/leda/make_header.py +++ b/python/bifrost/addon/leda/make_header.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -34,8 +34,6 @@ Makes header.txt files that is used by corr2uvfit and DuCT. """ -from __future__ import print_function, division - import numpy as np import os, sys, ephem, datetime from dateutil import tz @@ -72,9 +70,9 @@ def generate_info(self): based on what's in the header. For the rest, call them UNKNOWN. """ - f = open(self.filename, 'rb') - headerstr = f.read(self.DEFAULT_HEADER_SIZE) - f.close() + with open(self.filename, 'rb') as f: + headerstr = f.read(self.DEFAULT_HEADER_SIZE) + headerstr = headerstr.decode() header = {} for line in headerstr.split('\n'): @@ -270,28 +268,27 @@ def make_header(filename, write=True, warn=True, size=None): else: n_scans = str(int(header_params['N_SCANS'])) if write: # This format is used by corr2uvfits and DuCT for transforming a DADA file. - output = open("header.txt","w") - output.write("# Generated by make_header.py\n\n") - output.write("FIELDNAME Zenith\n") - output.write("N_SCANS "+n_scans+"\n") - output.write("N_INPUTS 512\n") - output.write("N_CHANS "+str(header_params['N_CHANS'])+" # number of channels in spectrum\n") - output.write("CORRTYPE B # correlation type to use. 'C'(cross), 'B'(both), or 'A'(auto)\n") - output.write("INT_TIME "+str(header_params['INT_TIME'])+" # integration time of scan in seconds\n") - output.write("FREQCENT "+str(header_params['FREQCENT'])+" # observing center freq in MHz\n") - output.write("BANDWIDTH "+str(header_params['BANDWIDTH'])+" # total bandwidth in MHz\n") - output.write("# To phase to the zenith, these must be the HA, RA and Dec of the zenith.\n") - output.write("HA_HRS 0.000000 # the RA of the desired phase centre (hours)\n") - output.write("RA_HRS "+header_params['RA_HRS']+" # the RA of the desired phase centre (hours)\n") - output.write("DEC_DEGS "+str(header_params['DEC_DEGS'])+" # the DEC of the desired phase centre (degs)\n") - output.write("DATE "+header_params['DATE']+" # YYYYMMDD\n") - output.write("TIME "+header_params['TIME']+" # HHMMSS\n") - output.write("LOCALTIME "+str(dada_times.localtime_str)+"\n") - output.write("LST "+str(dada_times.lst)+"\n") - output.write("INVERT_FREQ 0 # 1 if the freq decreases with channel number\n") - output.write("CONJUGATE 1 # conjugate the raw data to fix sign convention problem if necessary\n") - output.write("GEOM_CORRECT 0\n") - output.close() + with open('header.txt', 'w') as output: + output.write("# Generated by make_header.py\n\n") + output.write("FIELDNAME Zenith\n") + output.write("N_SCANS "+n_scans+"\n") + output.write("N_INPUTS 512\n") + output.write("N_CHANS "+str(header_params['N_CHANS'])+" # number of channels in spectrum\n") + output.write("CORRTYPE B # correlation type to use. 'C'(cross), 'B'(both), or 'A'(auto)\n") + output.write("INT_TIME "+str(header_params['INT_TIME'])+" # integration time of scan in seconds\n") + output.write("FREQCENT "+str(header_params['FREQCENT'])+" # observing center freq in MHz\n") + output.write("BANDWIDTH "+str(header_params['BANDWIDTH'])+" # total bandwidth in MHz\n") + output.write("# To phase to the zenith, these must be the HA, RA and Dec of the zenith.\n") + output.write("HA_HRS 0.000000 # the RA of the desired phase centre (hours)\n") + output.write("RA_HRS "+header_params['RA_HRS']+" # the RA of the desired phase centre (hours)\n") + output.write("DEC_DEGS "+str(header_params['DEC_DEGS'])+" # the DEC of the desired phase centre (degs)\n") + output.write("DATE "+header_params['DATE']+" # YYYYMMDD\n") + output.write("TIME "+header_params['TIME']+" # HHMMSS\n") + output.write("LOCALTIME "+str(dada_times.localtime_str)+"\n") + output.write("LST "+str(dada_times.lst)+"\n") + output.write("INVERT_FREQ 0 # 1 if the freq decreases with channel number\n") + output.write("CONJUGATE 1 # conjugate the raw data to fix sign convention problem if necessary\n") + output.write("GEOM_CORRECT 0\n") return header_params # If this function is called from other scripts (e.g. plot scripts) it can supply useful information From 811441aeb19cc2ee8bc7277e60383e21763ae321 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 18:46:34 -0700 Subject: [PATCH 0748/1155] Round 5. --- test/test_fir.py | 6 ++---- test/test_linalg.py | 5 +---- test/test_map.py | 7 ++----- test/test_pipeline_cpu.py | 7 ++----- test/test_print_header.py | 7 ++----- test/test_reduce.py | 4 +--- test/test_romein.py | 4 +--- test/test_scripts.py | 5 ++--- test/test_tutorial.py | 33 +++++++++++++++++++++++++++------ 9 files changed, 40 insertions(+), 38 deletions(-) diff --git a/test/test_fir.py b/test/test_fir.py index cca287c98..596158a5a 100644 --- a/test/test_fir.py +++ b/test/test_fir.py @@ -1,6 +1,6 @@ -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2020, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -28,8 +28,6 @@ """This set of unit tests check the functionality on the bifrost FIR filter.""" -# Python2 compatibility -from __future__ import division import ctypes import unittest diff --git a/test/test_linalg.py b/test/test_linalg.py index ae920f2ba..63c19fb80 100644 --- a/test/test_linalg.py +++ b/test/test_linalg.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -27,9 +27,6 @@ # **TODO: Add tests with beta != 0 -# Python2 compatibility -from __future__ import print_function - import ctypes import unittest import numpy as np diff --git a/test/test_map.py b/test/test_map.py index 749edcb36..fb447a78f 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -30,10 +30,7 @@ import unittest import numpy as np import bifrost as bf -try: - from StringIO import StringIO -except ImportError: - from io import StringIO +from io import StringIO from bifrost.libbifrost_generated import BF_CUDA_ENABLED diff --git a/test/test_pipeline_cpu.py b/test/test_pipeline_cpu.py index 6e1886014..0c6b6da92 100644 --- a/test/test_pipeline_cpu.py +++ b/test/test_pipeline_cpu.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -31,10 +31,7 @@ from bifrost.blocks import * -try: - from StringIO import StringIO -except ImportError: - from io import StringIO +from io import StringIO class CallbackBlock(CopyBlock): """Testing-only block which calls user-defined diff --git a/test/test_print_header.py b/test/test_print_header.py index 60d48fe31..1c0c5d944 100644 --- a/test/test_print_header.py +++ b/test/test_print_header.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -26,10 +26,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import unittest -try: - from StringIO import StringIO -except ImportError: - from io import StringIO +from io import StringIO import bifrost.pipeline as bfp import bifrost.blocks as blocks diff --git a/test/test_reduce.py b/test/test_reduce.py index f6f0797c6..d1866e283 100644 --- a/test/test_reduce.py +++ b/test/test_reduce.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import division - import unittest import numpy as np import bifrost as bf diff --git a/test/test_romein.py b/test/test_romein.py index bdac0ac48..414f8fd26 100644 --- a/test/test_romein.py +++ b/test/test_romein.py @@ -1,5 +1,5 @@ -# Copyright (c) 2018-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2018-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,8 +25,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import print_function - import unittest import numpy import bifrost diff --git a/test/test_scripts.py b/test/test_scripts.py index 9a75b08fa..9a509d972 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -1,7 +1,6 @@ -#!/usr/bin/env python -# Copyright (c) 2019, The Bifrost Authors. All rights reserved. -# Copyright (c) 2019, The University of New Mexico. All rights reserved. +# Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2019-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/test/test_tutorial.py b/test/test_tutorial.py index 346cb1908..767b2b7d2 100644 --- a/test/test_tutorial.py +++ b/test/test_tutorial.py @@ -1,13 +1,34 @@ + +# Copyright (c) 2021-2023, The Bifrost Authors. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of The Bifrost Authors nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ Unit tests for the various Bifrost tutorial notebooks. """ -# Python2 compatibility -from __future__ import print_function, division, absolute_import -import sys -if sys.version_info < (3,): - range = xrange - import unittest import glob import sys From 05512e0dc10dc9c270f34acc95fe66862aa95855 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 18:50:11 -0700 Subject: [PATCH 0749/1155] Round 6. --- testbench/download_breakthrough_listen_data.py | 10 ++-------- testbench/generate_test_data.py | 7 ++----- testbench/gpuspec_simple.py | 7 ++----- testbench/test_fdmt.py | 7 ++----- testbench/test_fft.py | 7 ++----- testbench/test_fft_detect.py | 7 ++----- testbench/test_file_read_write.py | 7 ++----- testbench/test_guppi.py | 7 ++----- testbench/test_guppi_reader.py | 7 ++----- testbench/your_first_block.py | 7 ++----- 10 files changed, 20 insertions(+), 53 deletions(-) diff --git a/testbench/download_breakthrough_listen_data.py b/testbench/download_breakthrough_listen_data.py index d8127a43d..453b3861f 100755 --- a/testbench/download_breakthrough_listen_data.py +++ b/testbench/download_breakthrough_listen_data.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -32,12 +32,6 @@ Generate test data that can be used with a testbench """ -# Python2 compatibility -from __future__ import print_function -import sys -if sys.version_info < (3,): - input = raw_input - import os import sys import numpy as np diff --git a/testbench/generate_test_data.py b/testbench/generate_test_data.py index 14d69820f..68afca384 100755 --- a/testbench/generate_test_data.py +++ b/testbench/generate_test_data.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -32,9 +32,6 @@ Generate test data that can be used with a testbench """ -# Python2 compatibility -from __future__ import print_function - import os import numpy as np diff --git a/testbench/gpuspec_simple.py b/testbench/gpuspec_simple.py index c0e3733a1..836efaf36 100755 --- a/testbench/gpuspec_simple.py +++ b/testbench/gpuspec_simple.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -26,9 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function - import bifrost as bf from argparse import ArgumentParser diff --git a/testbench/test_fdmt.py b/testbench/test_fdmt.py index c5d88b976..3050a042b 100755 --- a/testbench/test_fdmt.py +++ b/testbench/test_fdmt.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -33,9 +33,6 @@ Measure Transform (FDMT), writing the output to a PGM file. """ -# Python2 compatibility -from __future__ import print_function - import bifrost.pipeline as bfp from bifrost.blocks import read_sigproc, copy, transpose, fdmt, scrunch from bifrost import blocks diff --git a/testbench/test_fft.py b/testbench/test_fft.py index 596dbee25..d49fb2348 100755 --- a/testbench/test_fft.py +++ b/testbench/test_fft.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -33,9 +33,6 @@ takes the FFT of the data (on the GPU no less), and then writes it to a new file. """ -# Python2 compatibility -from __future__ import print_function - import os import glob import numpy as np diff --git a/testbench/test_fft_detect.py b/testbench/test_fft_detect.py index 3ca79852c..889d82b4c 100755 --- a/testbench/test_fft_detect.py +++ b/testbench/test_fft_detect.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -33,9 +33,6 @@ takes the FFT of the data (on the GPU no less), and then writes it to a new file. """ -# Python2 compatibility -from __future__ import print_function - import os import glob import numpy as np diff --git a/testbench/test_file_read_write.py b/testbench/test_file_read_write.py index 0161ab5bb..a60e302f3 100755 --- a/testbench/test_file_read_write.py +++ b/testbench/test_file_read_write.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -33,9 +33,6 @@ and then writes the data to an output file. """ -# Python2 compatibility -from __future__ import print_function - import os import numpy as np import bifrost.pipeline as bfp diff --git a/testbench/test_guppi.py b/testbench/test_guppi.py index b467d7894..9be6d9f3f 100755 --- a/testbench/test_guppi.py +++ b/testbench/test_guppi.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -32,9 +32,6 @@ This testbench tests a guppi gpuspec reader """ -# Python2 compatibility -from __future__ import print_function - import os import glob import numpy as np diff --git a/testbench/test_guppi_reader.py b/testbench/test_guppi_reader.py index 4ad90a48d..11712f522 100755 --- a/testbench/test_guppi_reader.py +++ b/testbench/test_guppi_reader.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -32,9 +32,6 @@ This testbench tests a guppi gpuspec reader """ -# Python2 compatibility -from __future__ import print_function - import os import glob import numpy as np diff --git a/testbench/your_first_block.py b/testbench/your_first_block.py index ce359d958..d722dfd64 100755 --- a/testbench/your_first_block.py +++ b/testbench/your_first_block.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -33,9 +33,6 @@ and then writes the data to an output file. """ -# Python2 compatibility -from __future__ import print_function - import os import numpy as np import bifrost.pipeline as bfp From 5fde61f9620603c9af4b21a35d560fba362e7148 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 18:55:43 -0700 Subject: [PATCH 0750/1155] Round 7. --- tools/getirq.py | 12 ++++-------- tools/getsiblings.py | 9 +++------ tools/like_bmon.py | 15 ++++----------- tools/like_pmap.py | 10 +++------- tools/like_ps.py | 16 ++++------------ tools/like_top.py | 24 ++++++------------------ tools/pipeline2dot.py | 10 +++------- tools/setirq.py | 12 ++++-------- 8 files changed, 31 insertions(+), 77 deletions(-) diff --git a/tools/getirq.py b/tools/getirq.py index 35d8178b4..cd426e153 100755 --- a/tools/getirq.py +++ b/tools/getirq.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -26,9 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function - import argparse from bifrost import telemetry @@ -36,9 +33,8 @@ def main(args): - fh = open('/proc/interrupts', 'r') - lines = fh.read() - fh.close() + with open('/proc/interrupts', 'r') as fh: + lines = fh.read() irqs = {} for line in lines.split('\n'): diff --git a/tools/getsiblings.py b/tools/getsiblings.py index f2e559efc..2994eb81f 100755 --- a/tools/getsiblings.py +++ b/tools/getsiblings.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -27,9 +27,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function - import glob import argparse diff --git a/tools/like_bmon.py b/tools/like_bmon.py index e4c99dea4..e9630278f 100755 --- a/tools/like_bmon.py +++ b/tools/like_bmon.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2022, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2022, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -27,9 +27,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function - import os import sys import glob @@ -39,10 +36,7 @@ import argparse import traceback from datetime import datetime -try: - from cStringIO import StringIO -except ImportError: - from io import StringIO +from io import StringIO os.environ['VMA_TRACELEVEL'] = '0' from bifrost.proclog import PROCLOG_DIR, load_by_pid @@ -106,7 +100,6 @@ def get_command_line(pid): with open('/proc/%i/cmdline' % pid, 'r') as fh: cmd = fh.read() cmd = cmd.replace('\0', ' ') - fh.close() except IOError: pass return cmd diff --git a/tools/like_pmap.py b/tools/like_pmap.py index 4dd825eb6..74d0203fe 100755 --- a/tools/like_pmap.py +++ b/tools/like_pmap.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -27,9 +27,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function - import os import re import argparse @@ -91,7 +88,6 @@ def main(args): try: fh = open('/proc/%i/numa_maps' % args.pid, 'r') numaInfo = fh.read() - fh.close() except IOError: raise RuntimeError("Cannot find NUMA memory info for PID: %i" % args.pid) diff --git a/tools/like_ps.py b/tools/like_ps.py index b708392c3..2d729db3a 100755 --- a/tools/like_ps.py +++ b/tools/like_ps.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -27,9 +27,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function - import os import glob import argparse @@ -66,11 +63,7 @@ def get_process_details(pid): data = {'user':'', 'cpu':0.0, 'mem':0.0, 'etime':'00:00', 'threads':0} try: output = subprocess.check_output('ps o user,pcpu,pmem,etime,nlwp %i' % pid, shell=True) - try: - output = output.decode() - except AttributeError: - # Python2 catch - pass + output = output.decode() output = output.split('\n')[1] fields = output.split(None, 4) data['user'] = fields[0] @@ -96,7 +89,6 @@ def get_command_line(pid): with open('/proc/%i/cmdline' % pid, 'r') as fh: cmd = fh.read() cmd = cmd.replace('\0', ' ') - fh.close() except IOError: pass return cmd diff --git a/tools/like_top.py b/tools/like_top.py index 4f6d0ccda..56d5e6c87 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -26,12 +26,6 @@ # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# Python2 compatibility -from __future__ import print_function -import sys -if sys.version_info < (3,): - range = xrange import os import glob @@ -42,10 +36,7 @@ import traceback import subprocess -try: - from cStringIO import StringIO -except ImportError: - from io import StringIO +from io import StringIO os.environ['VMA_TRACELEVEL'] = '0' from bifrost.proclog import PROCLOG_DIR, load_by_pid @@ -102,8 +93,7 @@ def get_processor_usage(): with open('/proc/stat', 'r') as fh: lines = fh.read() - fh.close() - + for line in lines.split('\n'): if line[:3] == 'cpu': fields = line.split(None, 10) @@ -156,8 +146,7 @@ def get_memory_swap_usage(): with open('/proc/meminfo', 'r') as fh: lines = fh.read() - fh.close() - + for line in lines.split('\n'): fields = line.split(None, 2) if fields[0] == 'MemTotal:': @@ -230,7 +219,6 @@ def get_command_line(pid): with open('/proc/%i/cmdline' % pid, 'r') as fh: cmd = fh.read() cmd = cmd.replace('\0', ' ') - fh.close() except IOError: pass return cmd diff --git a/tools/pipeline2dot.py b/tools/pipeline2dot.py index b6f20f640..d0996c0ad 100755 --- a/tools/pipeline2dot.py +++ b/tools/pipeline2dot.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -27,9 +27,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function - import os import sys import glob @@ -94,7 +91,6 @@ def get_command_line(pid): with open('/proc/%i/cmdline' % pid, 'r') as fh: cmd = fh.read() cmd = cmd.replace('\0', ' ') - fh.close() except IOError: pass return cmd diff --git a/tools/setirq.py b/tools/setirq.py index 116b7c245..f2456fce7 100755 --- a/tools/setirq.py +++ b/tools/setirq.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -# Copyright (c) 2017-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -26,9 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function - import argparse from bifrost import telemetry @@ -57,9 +54,8 @@ def write_irq_smp_affinity(irq, mask): def main(args): - fh = open('/proc/interrupts', 'r') - lines = fh.read() - fh.close() + with open('/proc/interrupts', 'r') as fh: + lines = fh.read() irqs = {} for line in lines.split('\n'): From d2e4ece370b1b4d86ebd43c8c5c9ace2a667d3d1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 19:02:14 -0700 Subject: [PATCH 0751/1155] Drop PyPy stuff. --- python/bifrost/pypy3_compat.c | 71 ----------------------------------- python/setup.py | 14 ++----- 2 files changed, 3 insertions(+), 82 deletions(-) delete mode 100644 python/bifrost/pypy3_compat.c diff --git a/python/bifrost/pypy3_compat.c b/python/bifrost/pypy3_compat.c deleted file mode 100644 index 44ad9302a..000000000 --- a/python/bifrost/pypy3_compat.c +++ /dev/null @@ -1,71 +0,0 @@ - -/* - * Copyright (c) 2021, The Bifrost Authors. All rights reserved. - * Copyright (c) 2021, The University of New Mexico. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of The Bifrost Authors nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*! \file pypy3_compat.c - * \brief Compatibility layer for PyPy3 - */ - -#include "Python.h" -#include - -static PyObject* PyMemoryView_FromAddressAndSize(PyObject *self, PyObject *args, PyObject *kwds) { - PyObject *address, *nbyte, *flags, *view; - if(!PyArg_ParseTuple(args, "OOO", &address, &nbyte, &flags)) { - PyErr_Format(PyExc_RuntimeError, "Invalid parameters"); - return NULL; - } - - long addr, size, flgs; - addr = PyLong_AsLong(address); - size = PyLong_AsLong(nbyte); - flgs = PyLong_AsLong(flags); - - char *buf = (char *) addr; - - view = PyMemoryView_FromMemory(buf, size, flgs | PyBUF_READ); - return view; -} - -static PyMethodDef CompatMethods[] = { - {"PyMemoryView_FromMemory", (PyCFunction) PyMemoryView_FromAddressAndSize, METH_VARARGS, NULL}, - {NULL, NULL, 0, NULL} -}; - -static struct PyModuleDef Compat = { - PyModuleDef_HEAD_INIT, "_pypy3_compat", NULL, -1, CompatMethods,}; - -PyMODINIT_FUNC PyInit__pypy3_compat(void) { - PyObject *m; - m = PyModule_Create(&Compat); - if(m == NULL) { - return NULL; - } - return m; -} diff --git a/python/setup.py b/python/setup.py index b1107a721..623a93cd7 100755 --- a/python/setup.py +++ b/python/setup.py @@ -1,5 +1,5 @@ -#!/usr/bin/env python -# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. +#!/usr/bin/env python3 +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -26,9 +26,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import print_function - from setuptools import setup, Extension, find_packages import os import sys @@ -55,11 +52,6 @@ print("*************************************************************************") raise -# Build the PyPy3 compatibility module, if needed -modules = [] -if sys.version.find('PyPy') != -1: - modules.append(Extension('_pypy3_compat', ['bifrost/pypy3_compat.c'])) - # Build up a list of scripts to install scripts = glob.glob(os.path.join('..', 'tools', '*.py')) @@ -80,4 +72,4 @@ "matplotlib" ], ext_package='bifrost', - ext_modules = modules) + ext_modules = []]) From 323f36fc476bf43d278db614b9fbd75d8cbc43f0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 19:09:38 -0700 Subject: [PATCH 0752/1155] Cleanup. --- tools/getirq.py | 1 - tools/getsiblings.py | 1 - tools/like_bmon.py | 13 ++++++------- tools/like_pmap.py | 5 ++--- tools/like_ps.py | 5 ++--- tools/like_top.py | 5 ++--- tools/pipeline2dot.py | 15 ++++++--------- tools/setirq.py | 3 +-- 8 files changed, 19 insertions(+), 29 deletions(-) diff --git a/tools/getirq.py b/tools/getirq.py index cd426e153..5a77f8f56 100755 --- a/tools/getirq.py +++ b/tools/getirq.py @@ -65,4 +65,3 @@ def main(args): help='interface to query') args = parser.parse_args() main(args) - diff --git a/tools/getsiblings.py b/tools/getsiblings.py index 2994eb81f..ee17c56b3 100755 --- a/tools/getsiblings.py +++ b/tools/getsiblings.py @@ -76,4 +76,3 @@ def main(args): help='core to query') args = parser.parse_args() main(args) - diff --git a/tools/like_bmon.py b/tools/like_bmon.py index e9630278f..1b44f6bfe 100755 --- a/tools/like_bmon.py +++ b/tools/like_bmon.py @@ -79,11 +79,11 @@ def get_transmit_receive(): except KeyError: good, missing, invalid, late, nvalid = 0, 0, 0, 0, 0 - blockList['%i-%s' % (pid, block)] = {'pid': pid, 'name':block, - 'time':t, - 'good': good, 'missing': missing, - 'invalid': invalid, 'late': late, - 'nvalid': nvalid} + blockList[f"{pid}-{block}"] = {'pid': pid, 'name':block, + 'time':t, + 'good': good, 'missing': missing, + 'invalid': invalid, 'late': late, + 'nvalid': nvalid} return blockList @@ -97,7 +97,7 @@ def get_command_line(pid): cmd = '' try: - with open('/proc/%i/cmdline' % pid, 'r') as fh: + with open(f"/proc/{pid}/cmdline", 'r') as fh: cmd = fh.read() cmd = cmd.replace('\0', ' ') except IOError: @@ -412,4 +412,3 @@ def main(args): ) args = parser.parse_args() main(args) - diff --git a/tools/like_pmap.py b/tools/like_pmap.py index 74d0203fe..f5a2e2ee4 100755 --- a/tools/like_pmap.py +++ b/tools/like_pmap.py @@ -86,8 +86,8 @@ def main(args): # Load in the NUMA map page for this process try: - fh = open('/proc/%i/numa_maps' % args.pid, 'r') - numaInfo = fh.read() + with open(f"/proc/{pid}/numa_maps", 'r') as fh: + numaInfo = fh.read() except IOError: raise RuntimeError("Cannot find NUMA memory info for PID: %i" % args.pid) @@ -262,4 +262,3 @@ def main(args): help='process ID') args = parser.parse_args() main(args) - diff --git a/tools/like_ps.py b/tools/like_ps.py index 2d729db3a..1ae8a8d77 100755 --- a/tools/like_ps.py +++ b/tools/like_ps.py @@ -62,7 +62,7 @@ def get_process_details(pid): data = {'user':'', 'cpu':0.0, 'mem':0.0, 'etime':'00:00', 'threads':0} try: - output = subprocess.check_output('ps o user,pcpu,pmem,etime,nlwp %i' % pid, shell=True) + output = subprocess.check_output(f"ps o user,pcpu,pmem,etime,nlwp {pid}", shell=True) output = output.decode() output = output.split('\n')[1] fields = output.split(None, 4) @@ -86,7 +86,7 @@ def get_command_line(pid): cmd = '' try: - with open('/proc/%i/cmdline' % pid, 'r') as fh: + with open(f"/proc/{pid}/cmdline", 'r') as fh: cmd = fh.read() cmd = cmd.replace('\0', ' ') except IOError: @@ -198,4 +198,3 @@ def main(args): ) args = parser.parse_args() main(args) - diff --git a/tools/like_top.py b/tools/like_top.py index 56d5e6c87..4998c6011 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -216,7 +216,7 @@ def get_command_line(pid): cmd = '' try: - with open('/proc/%i/cmdline' % pid, 'r') as fh: + with open(f"/proc/{pid}/cmdline", 'r') as fh: cmd = fh.read() cmd = cmd.replace('\0', ' ') except IOError: @@ -332,7 +332,7 @@ def main(args): except KeyError: ac, pr, re = 0.0, 0.0, 0.0 - blockList['%i-%s' % (pid, block)] = {'pid': pid, 'name':block, 'cmd': cmd, 'core': cr, 'acquire': ac, 'process': pr, 'reserve': re, 'total':ac+pr+re} + blockList[f"{pid}-{block}"] = {'pid': pid, 'name':block, 'cmd': cmd, 'core': cr, 'acquire': ac, 'process': pr, 'reserve': re, 'total':ac+pr+re} ## Sort order = sorted(blockList, key=lambda x: blockList[x][sort_key], reverse=sort_rev) @@ -438,4 +438,3 @@ def main(args): ) args = parser.parse_args() main(args) - diff --git a/tools/pipeline2dot.py b/tools/pipeline2dot.py index d0996c0ad..4c436387d 100755 --- a/tools/pipeline2dot.py +++ b/tools/pipeline2dot.py @@ -62,10 +62,8 @@ def get_process_details(pid): data = {'user':'', 'cpu':0.0, 'mem':0.0, 'etime':'00:00', 'threads':0} try: - output = subprocess.check_output('ps o user,pcpu,pmem,etime,nlwp %i' % pid, shell=True) - if sys.version_info.major > 2 and isinstance(output, bytes): - # decode the output to utf-8 in python 3 - output = output.decode("utf-8") + output = subprocess.check_output(f"ps o user,pcpu,pmem,etime,nlwp {pid}", shell=True) + output = output.decode() output = output.split('\n')[1] fields = output.split(None, 4) data['user'] = fields[0] @@ -88,7 +86,7 @@ def get_command_line(pid): cmd = '' try: - with open('/proc/%i/cmdline' % pid, 'r') as fh: + with open(f"/proc/{pid}/cmdline", 'r') as fh: cmd = fh.read() cmd = cmd.replace('\0', ' ') except IOError: @@ -166,7 +164,7 @@ def get_data_flows(blocks): if blocks[other_block][log]['complex']: bits *= 2 name = 'cplx' if blocks[other_block][log]['complex'] else 'real' - dtype = '%s%i' % (name, bits) + dtype = f"{name}{bits}" except KeyError: pass elif log not in ('in', 'out'): @@ -194,7 +192,7 @@ def get_data_flows(blocks): refCores = [] for i in range(32): try: - refCores.append( blocks[block]['bind']['core%i' % i] ) + refCores.append( blocks[block]['bind'][f"core{i}"] ) except KeyError: break @@ -208,7 +206,7 @@ def get_data_flows(blocks): other_cores = [] for i in range(32): try: - other_cores.append( blocks[other_block]['bind']['core%i' % i] ) + other_cores.append( blocks[other_block]['bind'][f"core{i}"] ) except KeyError: break @@ -349,4 +347,3 @@ def main(args): help='exclude associated blocks') args = parser.parse_args() main(args) - diff --git a/tools/setirq.py b/tools/setirq.py index f2456fce7..254f322e6 100755 --- a/tools/setirq.py +++ b/tools/setirq.py @@ -70,7 +70,7 @@ def main(args): mi = procs.index(mv) irqs[irq] = {'cpu':mi, 'type':type, 'name':name, 'count':mv} - print("Interface: %s" % args.interface) + print(f"Interface: {args.interface}") print("%4s %16s %16s %7s %7s" % ('IRQ', 'Name', 'Type', 'Old CPU', 'New CPU') ) for i,irq in enumerate(sorted(irqs.keys())): oCPU = irqs[irq]['cpu'] @@ -93,4 +93,3 @@ def main(args): help='CPU to bind to') args = parser.parse_args() main(args) - From d8792d6143a0019517076d5c9c6db1701ca36416 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 19:10:49 -0700 Subject: [PATCH 0753/1155] Missed one. --- tools/getirq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/getirq.py b/tools/getirq.py index 5a77f8f56..fac1ff8b9 100755 --- a/tools/getirq.py +++ b/tools/getirq.py @@ -50,7 +50,7 @@ def main(args): irqs[irq] = {'cpu':mi, 'type':type, 'name':name, 'count':mv} total = sum([irqs[irq]['count'] for irq in irqs]) - print("Interface: %s" % args.interface) + print(f"Interface: {args.interface}") print("%4s %16s %16s %4s %6s" % ('IRQ', 'Name', 'Type', 'CPU', 'Usage')) for irq in sorted(irqs.keys()): print("%4i %16s %16s %4i %5.1f%%" % (irq, irqs[irq]['name'], irqs[irq]['type'], irqs[irq]['cpu'], 100.0*irqs[irq]['count']/total)) From 3fcd11e3b485e81a652aecb80b50e0f8a8ee22c1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 19:11:55 -0700 Subject: [PATCH 0754/1155] No longer needed. --- testbench/jenkins.sh | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100755 testbench/jenkins.sh diff --git a/testbench/jenkins.sh b/testbench/jenkins.sh deleted file mode 100755 index d1e8924d1..000000000 --- a/testbench/jenkins.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -# Part 1 - Synthetic data -## Create -python generate_test_data.py -## Use -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_file_read_write.py -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fft.py -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline your_first_block.py - -# Part 2 - Real data -## Download -python download_breakthrough_listen_data.py -y -## Use -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_guppi.py -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_guppi_reader.py -coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fdmt.py ./testdata/pulsars/blc0_guppi_57407_61054_PSR_J1840%2B5640_0004.fil From 14f8cffc2d59d86906c6572bcd57c8e3fdce4144 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 19:39:17 -0700 Subject: [PATCH 0755/1155] More cleanup. --- python/bifrost/DataType.py | 10 +++++----- python/bifrost/Space.py | 4 ++-- python/bifrost/address.py | 2 +- python/bifrost/block.py | 8 ++++---- python/bifrost/dtype.py | 15 +++++++-------- python/bifrost/pipeline.py | 26 +++++++++++++------------- python/bifrost/portaudio.py | 2 +- python/bifrost/proclog.py | 2 +- python/bifrost/psrdada.py | 14 +++++++------- python/bifrost/sigproc.py | 8 ++++---- python/bifrost/sigproc2.py | 14 +++++++------- python/bifrost/units.py | 5 ++--- 12 files changed, 54 insertions(+), 56 deletions(-) diff --git a/python/bifrost/DataType.py b/python/bifrost/DataType.py index f4a69b477..367eb004a 100644 --- a/python/bifrost/DataType.py +++ b/python/bifrost/DataType.py @@ -149,10 +149,10 @@ def __init__(self, t=None): self._veclen = t.shape[0] t = t.base else: - raise TypeError("Unsupported Numpy dtype: " + str(t)) + raise TypeError(f"Unsupported Numpy dtype: {t}") self._nbit = t.itemsize * 8 if t.kind not in set(['i', 'u', 'f', 'c', 'V', 'b']): - raise TypeError('Unsupported data type: %s' % str(t)) + raise TypeError(f"Unsupported data type: {t}") if is_vector_structure(t): # Field structure representing vector self._veclen = len(t.names) t = t[0] @@ -167,7 +167,7 @@ def __init__(self, t=None): elif t in [cf16]: self._kind = 'cf' else: - raise TypeError('Unsupported data type: %s' % str(t)) + raise TypeError(f"Unsupported data type: {t}") elif t.kind == 'b': # Note: Represents booleans as uint8 inside Bifrost self._kind = 'u' @@ -193,9 +193,9 @@ def as_numpy_dtype(self): return np.dtype(','.join((str(base),)*self._veclen)) def __str__(self): if self._veclen == 1: - return '%s%i' % (self._kind, self._nbit) + return f"{self._kind}{self._nbit}" else: - return '%s%i[%i]' % (self._kind, self._nbit, self._veclen) + return f"{self._kind}{self._nbit}[{self._veclen}]" @property def is_complex(self): return self._kind[0] == 'c' diff --git a/python/bifrost/Space.py b/python/bifrost/Space.py index 3945e8599..b4cf4516a 100644 --- a/python/bifrost/Space.py +++ b/python/bifrost/Space.py @@ -47,7 +47,7 @@ def __init__(self, s): if isinstance(s, str): if s not in set(['auto', 'system', 'cuda', 'cuda_host', 'cuda_managed']): - raise ValueError('Invalid space: %s' % s) + raise ValueError(f"Invalid space: '{s}'") self._space = s elif isinstance(s, _bf.BFspace) or isinstance(s, int): if s not in SPACEMAP_TO_STR: @@ -55,7 +55,7 @@ def __init__(self, s): ". Valid spaces: " + str(SPACEMAP_TO_STR.keys())) self._space = SPACEMAP_TO_STR[s] else: - raise ValueError('%s is not a space' % s) + raise ValueError(f"'{s}' is not a space") def as_BFspace(self): return SPACEMAP_FROM_STR[self._space] def __str__(self): diff --git a/python/bifrost/address.py b/python/bifrost/address.py index 5b4bff2ff..d7a9ea0ce 100644 --- a/python/bifrost/address.py +++ b/python/bifrost/address.py @@ -58,4 +58,4 @@ def address(self): _check(_bf.bfAddressGetString(self.obj, buflen, buf)) return buf.value.decode() def __str__(self): - return "%s:%i" % (self.address, self.port) + return f"{self.address}:{self.port}" diff --git a/python/bifrost/block.py b/python/bifrost/block.py index c92282750..aefdabf34 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -910,8 +910,8 @@ def __init__(self, function, inputs=1, outputs=1): @param[in] outputs The number of output rings and the number of output numpy arrays from the function.""" super(NumpyBlock, self).__init__() - self.inputs = ['in_%d' % (i + 1) for i in range(inputs)] - self.outputs = ['out_%d' % (i + 1) for i in range(outputs)] + self.inputs = [f"in_{i + 1}" for i in range(inputs)] + self.outputs = [f"out_{i + 1}" for i in range(outputs)] self.ring_names = {} self.create_ring_names() self.function = function @@ -1061,9 +1061,9 @@ def main(self): if self.grab_headers: self.load_user_headers(headers, arrays) - for outspans in self.write(*['out_%d' % (i + 1) for i in range(len(self.ring_names))]): + for outspans in self.write(*[f"out_{i + 1}" for i in range(len(self.ring_names))]): for i in range(len(self.ring_names)): - dtype = self.header['out_%d' % (i + 1)]['dtype'] + dtype = self.header[f"out_{i + 1}"]['dtype'] outspans[i][:] = arrays[i].astype(np.dtype(dtype).type).ravel() try: diff --git a/python/bifrost/dtype.py b/python/bifrost/dtype.py index 93de54d86..66300c4b2 100644 --- a/python/bifrost/dtype.py +++ b/python/bifrost/dtype.py @@ -89,7 +89,7 @@ def numpy2bifrost(dtype): elif dtype == np.complex128: return _bf.BF_DTYPE_CF64 elif dtype == np.complex256 \ and BF_FLOAT128_ENABLED: return _bf.BF_DTYPE_CF128 - else: raise ValueError("Unsupported dtype: " + str(dtype)) + else: raise ValueError(f"Unsupported dtype: {dtype}") def name_nbit2numpy(name, nbit): if name == 'i': @@ -97,19 +97,19 @@ def name_nbit2numpy(name, nbit): elif nbit == 16: return np.int16 elif nbit == 32: return np.int32 elif nbit == 64: return np.int64 - else: raise TypeError("Invalid signed integer type size: %i" % nbit) + else: raise TypeError(f"Invalid signed integer type size: {nbit}") elif name == 'u': if nbit == 8: return np.uint8 elif nbit == 16: return np.uint16 elif nbit == 32: return np.uint32 elif nbit == 64: return np.uint64 - else: raise TypeError("Invalid unsigned integer type size: %i" % nbit) + else: raise TypeError(f"Invalid unsigned integer type size: {nbit}") elif name == 'f': if nbit == 16: return np.float16 elif nbit == 32: return np.float32 elif nbit == 64: return np.float64 elif nbit == 128: return np.float128 - else: raise TypeError("Invalid floating-point type size: %i" % nbit) + else: raise TypeError(f"Invalid floating-point type size: {nbit}") elif name == 'ci': if nbit == 8: return ci8 elif nbit == 16: return ci16 @@ -122,10 +122,9 @@ def name_nbit2numpy(name, nbit): elif nbit == 32: return np.complex64 elif nbit == 64: return np.complex128 elif nbit == 128: return np.complex256 - else: raise TypeError("Invalid complex floating-point type size: %i" % - nbit) + else: raise TypeError(f"Invalid complex floating-point type size: {nbit}") else: - raise TypeError("Invalid type name: " + name) + raise TypeError(f"Invalid type name: {name}") def string2numpy(dtype_str): return name_nbit2numpy(*split_name_nbit(dtype_str)) @@ -145,7 +144,7 @@ def numpy2string(dtype): elif dtype == np.complex64: return 'cf32' elif dtype == np.complex128: return 'cf64' elif dtype == np.complex256: return 'cf128' - else: raise TypeError("Unsupported dtype: " + str(dtype)) + else: raise TypeError(f"Unsupported dtype: {dtype}") def bifrost2string(dtype): """ Convert bifrost BF_DTYPE integer code to ndarray string """ diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index adab8a71d..997a28048 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -90,7 +90,7 @@ def __init__(self, share_temp_storage=False, fuse=False): if name is None: - name = 'BlockScope_%i' % BlockScope.instance_count + name = f"BlockScope_{BlockScope.instance_count}" BlockScope.instance_count += 1 self._name = name self._gulp_nframe = gulp_nframe @@ -120,7 +120,7 @@ def __exit__(self, type, value, tb): def __getattr__(self, name): # Use child's value if set, othersize defer to parent if '_'+name not in self.__dict__: - raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__, name)) + raise AttributeError(f"'{self.__class__}' object has no attribute '{name}'") self_value = getattr(self, '_' + name) if self_value is not None: return self_value @@ -163,9 +163,9 @@ def dot_graph(self, parent_graph=None): #graph_attr = {'label': self._name} graph_attr = {} if parent_graph is None: - g = Digraph('cluster_' + self._name, graph_attr=graph_attr) + g = Digraph(f"cluster_{self._name}", graph_attr=graph_attr) else: - g = parent_graph.subgraph('cluster_' + self._name, + g = parent_graph.subgraph(f"cluster_{self.name}", label=self._name) for child in self._children: if isinstance(child, Block): @@ -221,7 +221,7 @@ class Pipeline(BlockScope): instance_count = 0 def __init__(self, name=None, **kwargs): if name is None: - name = 'Pipeline_%i' % Pipeline.instance_count + name = f"Pipeline_{Pipeline.instance_count}" Pipeline.instance_count += 1 super(Pipeline, self).__init__(name=name, **kwargs) self.blocks = [] @@ -240,7 +240,7 @@ def synchronize_block_initializations(self): if not init_succeeded: self.shutdown() raise PipelineInitError( - "The following block failed to initialize: " + block.name) + f"The following block failed to initialize: {block.name}") # Tell blocks that they can begin data processing self.all_blocks_finished_initializing_event.set() def run(self): @@ -264,7 +264,7 @@ def shutdown(self): join_all(self.threads, timeout=self.shutdown_timeout) for thread in self.threads: if thread.is_alive(): - warnings.warn("Thread %s did not shut down on time and will be killed" % thread.name, RuntimeWarning) + warnings.warn(f"Thread {thread.name} did not shut down on time and will be killed", RuntimeWarning) def shutdown_on_signals(self, signals=None): if signals is None: signals = [signal.SIGHUP, @@ -325,7 +325,7 @@ def __init__(self, irings, type_=None, **kwargs): self.type = type_ or self.__class__.__name__ - self.name = name or '%s_%i' % (self.type, Block.instance_counts[self.type]) + self.name = name or f"{self.type}_{Block.instance_counts[self.type]}" Block.instance_counts[self.type] += 1 super(Block, self).__init__(**kwargs) self.pipeline = get_default_pipeline() @@ -346,7 +346,7 @@ def __init__(self, irings, rnames = {'nring': len(self.irings)} for i, r in enumerate(self.irings): - rnames['ring%i' % i] = r.name + rnames[f"ring{i}"] = r.name self.in_proclog.update(rnames) self.init_trace = ''.join(traceback.format_stack()[:-1]) def shutdown(self): @@ -445,7 +445,7 @@ def __init__(self, sourcenames, gulp_nframe, space=None, *args, **kwargs): rnames = {'nring': len(self.orings)} for i, r in enumerate(self.orings): - rnames['ring%i' % i] = r.name + rnames[f"ring{i}"] = r.name self.out_proclog.update(rnames) def main(self, orings): @@ -458,7 +458,7 @@ def main(self, orings): if 'time_tag' not in ohdr: ohdr['time_tag'] = self._seq_count if 'name' not in ohdr: - ohdr['name'] = 'unnamed-sequence-%i' % self._seq_count + ohdr['name'] = f"unnamed-sequence-{self._seq_count}" self._seq_count += 1 with ExitStack() as oseq_stack: oseqs, ogulp_overlaps = self.begin_sequences( @@ -522,13 +522,13 @@ def __init__(self, irings_, guarantee=True, *args, **kwargs): for iring in self.irings] self._seq_count = 0 self.perf_proclog = ProcLog(self.name + "/perf") - self.sequence_proclogs = [ProcLog(self.name + "/sequence%i" % i) + self.sequence_proclogs = [ProcLog(self.name + f"/sequence{i}") for i in range(len(self.irings))] self.out_proclog = ProcLog(self.name + "/out") rnames = {'nring': len(self.orings)} for i, r in enumerate(self.orings): - rnames['ring%i' % i] = r.name + rnames[f"ring{i}"] = r.name self.out_proclog.update(rnames) def main(self, orings): diff --git a/python/bifrost/portaudio.py b/python/bifrost/portaudio.py index 89f5a612e..0366e8b38 100644 --- a/python/bifrost/portaudio.py +++ b/python/bifrost/portaudio.py @@ -239,7 +239,7 @@ def get_device_count(): if __name__ == "__main__": import portaudio as audio import numpy as np - print("Found %i audio devices" % audio.get_device_count()) + print(f"Found {audio.get_device_count()} audio devices") with audio.open(nbits=16) as audio_stream: nframe = 20 print(repr(audio_stream.read(nframe).raw)) diff --git a/python/bifrost/proclog.py b/python/bifrost/proclog.py index 46a7834fc..cabe4c1f1 100644 --- a/python/bifrost/proclog.py +++ b/python/bifrost/proclog.py @@ -111,7 +111,7 @@ def load_by_pid(pid, include_rings=False): # Make sure we have a directory to load from baseDir = os.path.join(PROCLOG_DIR, str(pid)) if not os.path.isdir(baseDir): - raise RuntimeError("Cannot find log directory associated with PID %s" % pid) + raise RuntimeError(f"Cannot find log directory associated with PID {pid}") # Load contents = {} diff --git a/python/bifrost/psrdada.py b/python/bifrost/psrdada.py index 7b946e495..1e6eb6d50 100644 --- a/python/bifrost/psrdada.py +++ b/python/bifrost/psrdada.py @@ -56,7 +56,7 @@ class MultiLog(object): count = 0 def __init__(self, name=None): if name is None: - name = "MultiLog%i" % MultiLog.count + name = f"MultiLog{MultiLog.count}" MultiLog.count += 1 self.obj = _dada.multilog_open(name, '\0') def __del__(self): @@ -211,25 +211,25 @@ def _connect(self, buffer_key=0xDADA): self.buffer_key = buffer_key _dada.dada_hdu_set_key(self.hdu, self.buffer_key) if _dada.dada_hdu_connect(self.hdu) < 0: - raise IOError("Could not connect to buffer '%x'" % self.buffer_key) + raise IOError(f"Could not connect to buffer '{self.buffer_key:x}'") def _disconnect(self): if _dada.dada_hdu_disconnect(self.hdu) < 0: - raise IOError("Could not disconnect from buffer '%x'" % self.buffer_key) + raise IOError(f"Could not disconnect from buffer '{self.buffer_key:x}'") def _lock(self, mode): self.mode = mode if mode == 'read': if _dada.dada_hdu_lock_read(self.hdu) < 0: - raise IOError("Could not lock buffer '%x' for reading" % self.buffer_key) + raise IOError(f"Could not lock buffer '{self.buffer_key:x}' for reading") else: if _dada.dada_hdu_lock_write(self.hdu) < 0: - raise IOError("Could not lock buffer '%x' for writing" % self.buffer_key) + raise IOError(f"Could not lock buffer '{self.buffer_key:x}' for writing") def _unlock(self): if self.mode == 'read': if _dada.dada_hdu_unlock_read(self.hdu) < 0: - raise IOError("Could not unlock buffer '%x' for reading" % self.buffer_key) + raise IOError(f"Could not unlock buffer '{self.buffer_key:x}' for reading") else: if _dada.dada_hdu_unlock_write(self.hdu) < 0: - raise IOError("Could not unlock buffer '%x' for writing" % self.buffer_key) + raise IOError(f"Could not unlock buffer '{self.buffer_key:x}' for writing") def relock(self): self._unlock() self._lock(self.mode) diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index 8f4a6f145..2daf52c46 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -169,8 +169,8 @@ def _write_header(hdr, file_object): elif key == "header_size": pass else: - #raise KeyError("Unknown sigproc header key: %s"%key) - warnings.warn("Unknown sigproc header key: '%s'" % key, RuntimeWarning) + #raise KeyError(f"Unknown sigproc header key: {key}") + warnings.warn(f"Unknown sigproc header key: '{key}'", RuntimeWarning) _header_write_string(file_object, "HEADER_END") def _read_header(file_object): @@ -199,7 +199,7 @@ def _read_header(file_object): header[expecting] = key expecting = None else: - warnings.warn("Unknown header key: '%s'" % key, RuntimeWarning) + warnings.warn(f"Unknown header key: '{key}'", RuntimeWarning) if 'nchans' not in header: header['nchans'] = 1 header['header_size'] = file_object.tell() @@ -231,7 +231,7 @@ def seek_to_data(file_object): header[expecting] = key expecting = None else: - warnings.warn("Unknown header key: '%s'" % key, RuntimeWarning) + warnings.warn(f"Unknown header key: '{key}'", RuntimeWarning) return def pack(data, nbit): diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index 4f1e6d4a3..c21b22f23 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -183,8 +183,8 @@ def write_header(hdr, f): elif key in _character_values: _header_write(f, key, int(val), fmt='=b') else: - #raise KeyError("Unknown sigproc header key: %s"%key) - warnings.warn("Unknown sigproc header key: '%s'" % key, RuntimeWarning) + #raise KeyError(f"Unknown sigproc header key: {key}") + warnings.warn(f"Unknown sigproc header key: '{key}'", RuntimeWarning) _header_write_string(f, "HEADER_END") def _read_header(f): @@ -211,7 +211,7 @@ def _read_header(f): header[expecting] = key expecting = None else: - warnings.warn("Unknown header key: '%s'" % key, RuntimeWarning) + warnings.warn(f"Unknown header key: '{key}'", RuntimeWarning) if 'nchans' not in header: header['nchans'] = 1 header['header_size'] = f.tell() @@ -252,7 +252,7 @@ def unpack(data, nbit): x = x << 7 # Shift into high bits to induce sign-extension return x.view(data.dtype) >> 7 else: - raise ValueError("unpack: unexpected nbit! (%i)" % nbit) + raise ValueError(f"unpack: unexpected nbit! ({nbit})") # TODO: Add support for writing # Add support for data_type != filterbank @@ -374,11 +374,11 @@ def readinto(self, buf): def __str__(self): hmod = self.header.copy() d = hmod['data_type'] - hmod['data_type'] = "%i (%s)" % (d, _data_types[d]) + hmod['data_type'] = f"{d} ({_data_types[d]})" t = hmod['telescope_id'] - hmod['telescope_id'] = "%i (%s)" % (t, _telescopes[t]) + hmod['telescope_id'] = f"{t} ({_telescopes[t]})" m = hmod['machine_id'] - hmod['machine_id'] = "%i (%s)" % (m, _machines[m]) + hmod['machine_id'] = f"{m} ({_machines[m]})" return '\n'.join(['% 16s: %s' % (key, val) for (key, val) in hmod.items()]) def __getitem__(self, key): diff --git a/python/bifrost/units.py b/python/bifrost/units.py index e9b6e81d6..5b38ba3cd 100644 --- a/python/bifrost/units.py +++ b/python/bifrost/units.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -37,8 +37,7 @@ def convert_units(value, old_units, new_units): try: new_quantity = old_quantity.to(new_units) except pint.DimensionalityError: - raise ValueError("Cannot convert units %s to %s" % - (old_units, new_units)) + raise ValueError(f"Cannot convert units {old_units} to {new_units}") return new_quantity.magnitude # TODO: May need something more flexible, like a Units wrapper class with __str__ From 255ace319b8b88bd656f0d32267cce0fc40120d5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 19:41:05 -0700 Subject: [PATCH 0756/1155] We still need sys. --- python/bifrost/ndarray.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 2b45f2352..d632b0897 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -36,6 +36,7 @@ """ +import sys import ctypes import numpy as np from bifrost.memory import raw_malloc, raw_free, raw_get_space, space_accessible From b517c62d7405d0df8845843a5af8e3452a0fae44 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 20:15:51 -0700 Subject: [PATCH 0757/1155] Ugh. --- python/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/setup.py b/python/setup.py index 623a93cd7..3c0ba4c22 100755 --- a/python/setup.py +++ b/python/setup.py @@ -72,4 +72,4 @@ "matplotlib" ], ext_package='bifrost', - ext_modules = []]) + ext_modules = []) From 20b399e4bab9b7a327136ff90ab3be3885d04ea4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 20:19:23 -0700 Subject: [PATCH 0758/1155] We still need sys. --- python/bifrost/pipeline.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 997a28048..57c410e51 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -25,11 +25,9 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +import sys import threading -try: - import queue -except ImportError: - import Queue as queue +import queue import time import signal import warnings From a9b74f01197bec415e8fff6a3610f601ab597ca5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 13 Feb 2023 20:23:12 -0700 Subject: [PATCH 0759/1155] Selective decode. --- python/bifrost/ring2.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index 06ef49ac3..a82f8cb15 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -173,11 +173,7 @@ def ring(self): @property def name(self): n = _get(_bf.bfRingSequenceGetName, self._base_obj) - try: - n = n.decode() - except AttributeError: - pass - return n + return n.decode() @property def time_tag(self): return _get(_bf.bfRingSequenceGetTimeTag, self._base_obj) @@ -200,7 +196,6 @@ def tensor(self): # TODO: This shouldn't be public nringlet = reduce(lambda x, y: x * y, ringlet_shape, 1) frame_nelement = reduce(lambda x, y: x * y, frame_shape, 1) dtype = header['_tensor']['dtype'] - dtype = dtype.decode() nbit = DataType(dtype).itemsize_bits assert(nbit % 8 == 0) frame_nbyte = frame_nelement * nbit // 8 @@ -239,7 +234,7 @@ def __init__(self, ring, header, gulp_nframe, buf_nframe): tensor = self.tensor # **TODO: Consider moving this into bfRingSequenceBegin self.ring.resize(gulp_nframe * tensor['frame_nbyte'], - buf_nframe * tensor['frame_nbyte'], + buf_nframe * tensor['frame_nbyte'], tensor['nringlet']) offset_from_head = 0 # TODO: How to allow time_tag to be optional? Probably need to plumb support through to backend. From be95d0034b1e1217bbb2f156e76ef8240511c26b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Feb 2023 07:22:36 -0700 Subject: [PATCH 0760/1155] Missed a few more. --- python/bifrost/telemetry/__init__.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/python/bifrost/telemetry/__init__.py b/python/bifrost/telemetry/__init__.py index 0b22e6ef3..fd6e8ac26 100644 --- a/python/bifrost/telemetry/__init__.py +++ b/python/bifrost/telemetry/__init__.py @@ -33,12 +33,8 @@ import socket import inspect import warnings -try: - from urllib2 import urlopen - from urllib import urlencode -except ImportError: - from urllib.request import urlopen - from urllib.parse import urlencode +from urllib.request import urlopen +from urllib.parse import urlencode from threading import RLock from functools import wraps @@ -153,11 +149,7 @@ def send(self, final=False): 'version' : self.version, 'session_time': "%.6f" % ((tNow-self._session_start) if final else 0.0,), 'payload' : payload}) - try: - payload = payload.encode() - except AttributeError: - pass - uh = urlopen('https://fornax.phys.unm.edu/telemetry/bifrost.php', payload, + uh = urlopen('https://fornax.phys.unm.edu/telemetry/bifrost.php', payload.encode(), timeout=TELEMETRY_TIMEOUT) status = uh.read() if status == '': From 1f06f6c186cdcab3736294e31cb593610ce71754 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Feb 2023 08:22:19 -0700 Subject: [PATCH 0761/1155] Try out type hinting. --- python/bifrost/address.py | 15 +++++++++------ python/bifrost/affinity.py | 10 ++++++---- python/bifrost/libbifrost.py | 12 ++++++++++++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/python/bifrost/address.py b/python/bifrost/address.py index d7a9ea0ce..ff97f0718 100644 --- a/python/bifrost/address.py +++ b/python/bifrost/address.py @@ -29,12 +29,15 @@ import ctypes from socket import AF_UNSPEC +from typing import NewVar, Optional from bifrost import telemetry telemetry.track_module() +AFfamily = NewVar('AFfamily', int) + class Address(BifrostObject): - def __init__(self, address, port, family=None): + def __init__(self, address: str, port: int, family: Optional[AFfamily]=None): address = address.encode() assert(isinstance(port, int)) if family is None: @@ -43,19 +46,19 @@ def __init__(self, address, port, family=None): self, _bf.bfAddressCreate, _bf.bfAddressDestroy, address, port, family) @property - def family(self): + def family(self) -> int: return _get(_bf.bfAddressGetFamily, self.obj) @property - def port(self): + def port(self) -> int: return _get(_bf.bfAddressGetPort, self.obj) @property - def mtu(self): + def mtu(self) -> int: return _get(_bf.bfAddressGetMTU, self.obj) @property - def address(self): + def address(self) -> str: buflen = 128 buf = ctypes.create_string_buffer(buflen) _check(_bf.bfAddressGetString(self.obj, buflen, buf)) return buf.value.decode() - def __str__(self): + def __str__(self) -> str: return f"{self.address}:{self.port}" diff --git a/python/bifrost/affinity.py b/python/bifrost/affinity.py index 854db90f3..c85f97ccd 100644 --- a/python/bifrost/affinity.py +++ b/python/bifrost/affinity.py @@ -26,16 +26,18 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from bifrost.libbifrost import _bf, _check, _get, _array +from bifrost.libbifrost import _bf, _check, _get, _array, BFstatusT + +from typing import List from bifrost import telemetry telemetry.track_module() -def get_core(): +def get_core() -> int: return _get(_bf.bfAffinityGetCore) -def set_core(core): +def set_core(core: int) -> BFstatusT: _check(_bf.bfAffinitySetCore(core)) -def set_openmp_cores(cores): +def set_openmp_cores(cores: List[int]) -> BFstatusT: # PYCLIBRARY ISSUE # TODO: Would be really nice to be able to directly pass # a list here instead of needing to specify _array+type. diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index ca643688c..af03479f6 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -35,12 +35,24 @@ # E.g., _bf.bfRingSequenceGetName() [should be ] import ctypes +from typing import NewType import bifrost.libbifrost_generated as _bf bf = _bf # Public access to library from bifrost import telemetry telemetry.track_module() +# Typing helpers + +#: Type for Bifrost return codes +BFstatusT = NewType('BFstatus', int) + +#: Type for Bifrost memory spaces +BFspaceT = NewType('BFspace', int) + +#: Type for Bifrost data types +BFdtypeT = NewType('BFdtype', int) + # Internal helpers below class EndOfDataStop(RuntimeError): From 0bed5c2a94b39451be16ffb1ba905abc817c3dca Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Feb 2023 08:26:52 -0700 Subject: [PATCH 0762/1155] Var -> Type --- python/bifrost/address.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/address.py b/python/bifrost/address.py index ff97f0718..9da50a3b3 100644 --- a/python/bifrost/address.py +++ b/python/bifrost/address.py @@ -29,12 +29,12 @@ import ctypes from socket import AF_UNSPEC -from typing import NewVar, Optional +from typing import NewType, Optional from bifrost import telemetry telemetry.track_module() -AFfamily = NewVar('AFfamily', int) +AFfamily = NewType('AFfamily', int) class Address(BifrostObject): def __init__(self, address: str, port: int, family: Optional[AFfamily]=None): From 58ffa930d6a82981a672eab86f48133fa89230c5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Feb 2023 08:31:14 -0700 Subject: [PATCH 0763/1155] Naming cleanup. --- python/bifrost/address.py | 4 ++-- python/bifrost/affinity.py | 4 ++-- python/bifrost/libbifrost.py | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/python/bifrost/address.py b/python/bifrost/address.py index 9da50a3b3..408f15069 100644 --- a/python/bifrost/address.py +++ b/python/bifrost/address.py @@ -34,10 +34,10 @@ from bifrost import telemetry telemetry.track_module() -AFfamily = NewType('AFfamily', int) +AFfamilyT = NewType('AFfamilyT', int) class Address(BifrostObject): - def __init__(self, address: str, port: int, family: Optional[AFfamily]=None): + def __init__(self, address: str, port: int, family: Optional[AFfamilyT]=None): address = address.encode() assert(isinstance(port, int)) if family is None: diff --git a/python/bifrost/affinity.py b/python/bifrost/affinity.py index c85f97ccd..2dc5973ec 100644 --- a/python/bifrost/affinity.py +++ b/python/bifrost/affinity.py @@ -35,9 +35,9 @@ def get_core() -> int: return _get(_bf.bfAffinityGetCore) -def set_core(core: int) -> BFstatusT: +def set_core(core: int) -> None: _check(_bf.bfAffinitySetCore(core)) -def set_openmp_cores(cores: List[int]) -> BFstatusT: +def set_openmp_cores(cores: List[int]) -> None: # PYCLIBRARY ISSUE # TODO: Would be really nice to be able to directly pass # a list here instead of needing to specify _array+type. diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index af03479f6..4d3824101 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -45,13 +45,13 @@ # Typing helpers #: Type for Bifrost return codes -BFstatusT = NewType('BFstatus', int) +BFstatusT = NewType('BFstatusT', int) #: Type for Bifrost memory spaces -BFspaceT = NewType('BFspace', int) +BFspaceT = NewType('BFspaceT', int) #: Type for Bifrost data types -BFdtypeT = NewType('BFdtype', int) +BFdtypeT = NewType('BFdtypeT', int) # Internal helpers below From 9a6ccbcef0247c129f691b639bbd9ec6afa4d59c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Feb 2023 11:34:23 -0700 Subject: [PATCH 0764/1155] Another naming scheme for the type hinting. --- python/bifrost/address.py | 4 ++-- python/bifrost/affinity.py | 2 +- python/bifrost/libbifrost.py | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/python/bifrost/address.py b/python/bifrost/address.py index 408f15069..042386d0c 100644 --- a/python/bifrost/address.py +++ b/python/bifrost/address.py @@ -34,10 +34,10 @@ from bifrost import telemetry telemetry.track_module() -AFfamilyT = NewType('AFfamilyT', int) +AFfamily_enum = NewType('AFfamily_enum', int) class Address(BifrostObject): - def __init__(self, address: str, port: int, family: Optional[AFfamilyT]=None): + def __init__(self, address: str, port: int, family: Optional[AFfamily_enum]=None): address = address.encode() assert(isinstance(port, int)) if family is None: diff --git a/python/bifrost/affinity.py b/python/bifrost/affinity.py index 2dc5973ec..5f5cedc77 100644 --- a/python/bifrost/affinity.py +++ b/python/bifrost/affinity.py @@ -26,7 +26,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from bifrost.libbifrost import _bf, _check, _get, _array, BFstatusT +from bifrost.libbifrost import _bf, _check, _get, _array from typing import List diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 4d3824101..901634f29 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -45,13 +45,13 @@ # Typing helpers #: Type for Bifrost return codes -BFstatusT = NewType('BFstatusT', int) +BFstatus_enum = NewType('BFstatus_enum', int) #: Type for Bifrost memory spaces -BFspaceT = NewType('BFspaceT', int) +BFspace_enum = NewType('BFspace_enum', int) #: Type for Bifrost data types -BFdtypeT = NewType('BFdtypeT', int) +BFdtype_enum = NewType('BFdtype_enum', int) # Internal helpers below From bbd50d99eca9c0adbe315c6235c84bd2700acc37 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Feb 2023 14:37:15 -0700 Subject: [PATCH 0765/1155] Removed test_fft.cu. --- src/test_fft.cu | 239 ------------------------------------------------ 1 file changed, 239 deletions(-) delete mode 100644 src/test_fft.cu diff --git a/src/test_fft.cu b/src/test_fft.cu deleted file mode 100644 index 8f2b55f7d..000000000 --- a/src/test_fft.cu +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of The Bifrost Authors nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*! \file testfft.cu - * \brief This file tests the fft.cu functionality. - */ - -#include "fft.cu" -#include -#include - -/*! \brief Simple test of 2 dimensional real data - * through a forward bfFFT. - */ -TEST(FFTTest, Handles2dReal) -{ - /// Set up the test with a 3x2 element real array - BFarray dataAndDescription; - BFarray outputDataAndDescription; - cufftReal hostData[3][2] = - {{1,2},{2,3},{3,4}}; - cufftReal** deviceData; - cufftComplex outputHostData[3][2] = {}; - cufftComplex** outputDeviceData; - /// Load the test array to the GPU - cudaMalloc((void**)&deviceData, sizeof(cufftReal)*6); - cudaMalloc((void**)&outputDeviceData, sizeof(cufftComplex)*6); - cudaMemcpy( - deviceData, hostData, - sizeof(cufftReal)*6, cudaMemcpyHostToDevice); - /// Describe our input and output data - dataAndDescription.data = deviceData; - dataAndDescription.space = BF_SPACE_CUDA; - dataAndDescription.shape[0] = 3; - dataAndDescription.shape[1] = 2; - dataAndDescription.dtype = 0; - dataAndDescription.ndim = 2; - dataAndDescription.strides[0] = 2*sizeof(cufftReal); - dataAndDescription.strides[1] = sizeof(cufftReal); - outputDataAndDescription = dataAndDescription; - outputDataAndDescription.data = outputDeviceData; - outputDataAndDescription.dtype = 1; - outputDataAndDescription.strides[0] = 2*sizeof(cufftComplex); - outputDataAndDescription.strides[1] = sizeof(cufftComplex); - - /// Perform the forward FFT in the separate output object - bfFFT(&dataAndDescription, &outputDataAndDescription, FFT_FORWARD); - /// Download the data back from the GPU - cudaMemcpy( - outputHostData, (cufftComplex*)outputDataAndDescription.data, - sizeof(cufftComplex)*6, cudaMemcpyDeviceToHost); - - /// Did the FFT produce the correct result? - /// We check this only with one value. - EXPECT_EQ(cuCrealf(outputHostData[0][0]),15); -} - -/*! \brief Simple test of 1 dimensional real data - * through a forward bfFFT. - */ -TEST(FFTTest, Handles1dReal) -{ - /// Set up the test with a 4 element real array - BFarray dataAndDescription; - BFarray outputDataAndDescription; - cufftReal hostData[4] = {1,3,6,4.5}; - cufftReal* deviceData; - cufftComplex outputHostData[3]; - cufftComplex* outputDeviceData; - /// Load this array to the GPU - cudaMalloc((void**)&deviceData, sizeof(cufftReal)*5); - cudaMalloc((void**)&outputDeviceData, sizeof(cufftComplex)*3); - cudaMemcpy( - deviceData, hostData, - sizeof(cufftReal)*4, cudaMemcpyHostToDevice); - /// Describe our input and output data - dataAndDescription.data = deviceData; - dataAndDescription.space = BF_SPACE_CUDA; - dataAndDescription.shape[0] = 4; - dataAndDescription.dtype = 0; - dataAndDescription.ndim = 1; - dataAndDescription.strides[0] = sizeof(cufftReal); - /// Output data is a different type, so requires - /// a separate output object - outputDataAndDescription = dataAndDescription; - outputDataAndDescription.data = outputDeviceData; - outputDataAndDescription.dtype = 1; - outputDataAndDescription.strides[0] = sizeof(cufftComplex); - - /// Perform the forward FFT into the separate output data - bfFFT(&dataAndDescription, &outputDataAndDescription, FFT_FORWARD); - /// Download the data back from the GPU - cudaMemcpy( - outputHostData, (cufftComplex*)outputDataAndDescription.data, - sizeof(cufftComplex)*3, cudaMemcpyDeviceToHost); - - /// Did the FFT produce the correct result? - /// We check this only with one value. - EXPECT_EQ((int)cuCimagf(outputHostData[1]), 1); -} - -/*! \brief Simple test of 2 dimensional complex data - * through a forward bfFFT. - */ -TEST(FFTTest, Handles2dComplex) -{ - /// Set up the test with a 3x3 element complex array - BFarray dataAndDescription; - cufftComplex hostData[3][3] = - {{{5,1},{0,0},{100,0}}, - {{5,1},{30,0},{100,0}}, - {{30,0},{0,0},{10,1}}}; - /// Load this array to the GPU - cufftComplex** deviceData; - cudaMalloc((void**)&deviceData, sizeof(cufftComplex)*9); - cudaMemcpy( - deviceData, hostData, - sizeof(cufftComplex)*9, cudaMemcpyHostToDevice); - dataAndDescription.data = deviceData; - /// Describe our data - dataAndDescription.space = BF_SPACE_CUDA; - dataAndDescription.shape[0] = 3; - dataAndDescription.shape[1] = 3; - dataAndDescription.dtype = 1; - dataAndDescription.ndim = 2; - dataAndDescription.strides[0] = 3*sizeof(cufftComplex); - dataAndDescription.strides[1] = sizeof(cufftComplex); - - /// Perform the forward FFT in place - bfFFT(&dataAndDescription, &dataAndDescription, FFT_FORWARD); - /// Dowload data back from the GPU - cudaMemcpy( - hostData, (cufftComplex**)dataAndDescription.data, - sizeof(cufftComplex)*9, cudaMemcpyDeviceToHost); - - /// Did the FFT produce the correct result? - /// We check this only with one value. - EXPECT_EQ((int)cuCimagf(hostData[2][2]), -125); -} - -/*! \brief Simple test of 1 dimensional complex data - * through an inverse bfFFT. - */ -TEST(FFTTest, InverseC2C) -{ - /// Set up the test with a 5 element complex array - BFarray dataAndDescription; - cufftComplex hostData[5] = {{0,-1},{0,0},{100,-100},{30,0},{-5,0}}; - /// Load this array to the GPU - cufftComplex* deviceData; - cudaMalloc((void**)&deviceData, sizeof(cufftComplex)*5); - cudaMemcpy(deviceData, hostData, sizeof(cufftComplex)*5, cudaMemcpyHostToDevice); - dataAndDescription.data = deviceData; - /// Describe our data - dataAndDescription.space = BF_SPACE_CUDA; - dataAndDescription.shape[0] = 5; - dataAndDescription.dtype = 1; - dataAndDescription.ndim = 1; - dataAndDescription.strides[0] = sizeof(cufftComplex); - - /// Perform the inverse FFT in place - bfFFT(&dataAndDescription, &dataAndDescription, FFT_INVERSE); - /// Download back from the GPU - cudaMemcpy( - hostData, (cufftComplex*)dataAndDescription.data, - sizeof(cufftComplex)*5, cudaMemcpyDeviceToHost); - - /// Did the FFT produce the correct answer? - EXPECT_EQ((int)cuCrealf(hostData[3]),139); -} - -// TODO: Make this data actually complex aside from type -/*! \brief Simple test of 1 dimensional complex data - * through a forward bfFFT. - */ -TEST(FFTTest, Handles1dComplex) -{ - /// Set up the test with a 5 element complex array - BFarray dataAndDescription; - cufftComplex hostData[5] = - {{0,0},{30,0},{100,0},{30,0},{-5,0}}; - /// Load this array to the GPU - cufftComplex* deviceData; - cudaMalloc((void**)&deviceData, sizeof(cufftComplex)*5); - cudaMemcpy(deviceData, hostData, sizeof(cufftComplex)*5, cudaMemcpyHostToDevice); - dataAndDescription.data = deviceData; - /// Describe our data - dataAndDescription.space = BF_SPACE_CUDA; - dataAndDescription.shape[0] = 5; - dataAndDescription.dtype = 1; - dataAndDescription.ndim = 1; - dataAndDescription.strides[0] = sizeof(cufftComplex); - - /// Perform the forward FFT in place - bfFFT(&dataAndDescription, &dataAndDescription, FFT_FORWARD); - /// Download back from the GPU. - cudaMemcpy( - hostData, (cufftComplex*)dataAndDescription.data, - sizeof(cufftComplex)*5, cudaMemcpyDeviceToHost); - - /// Test a single value of the output, to test for - /// the FFT's correct answer? - EXPECT_EQ((int)cuCimagf(hostData[4]),(int)74.431946); -} - -// TODO: Add task functionality for rings? -// TODO: Add test for multiple GPUs. -// TODO: Add test for type conversion. - -int main(int argc, char** argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} From eadb105ab0b8dd916108a3fd9fb9cc0cf6d91f8c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Feb 2023 18:04:44 -0700 Subject: [PATCH 0766/1155] Yet another approach to type hinting. --- python/Makefile.in | 6 ++++++ python/bifrost/address.py | 8 +++----- python/bifrost/libbifrost.py | 15 ++------------ python/typehinting.py | 40 ++++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 18 deletions(-) create mode 100644 python/typehinting.py diff --git a/python/Makefile.in b/python/Makefile.in index ac0d13877..4ee2c30de 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -34,6 +34,11 @@ define run_ctypesgen @SED@ -i.orig -e '/errcheck = ReturnString/s/^/#/' $@ endef +define run_typehinting + # Build the libbifrost typing hinting + @PYTHON@ -c 'from typehinting import build_typehinting; build_typehinting("$@")' +endef + ifeq "$(wildcard $(PSRDADA_HEADERS))" "" PSRDADA_PYTHON_BINDINGS_FILE = endif @@ -46,6 +51,7 @@ $(PSRDADA_PYTHON_BINDINGS_FILE): $(PSRDADA_HEADERS) $(BIFROST_PYTHON_BINDINGS_FILE): $(INC_DIR)/bifrost/*.h $(call run_ctypesgen,$(BIFROST_NAME),$(INC_DIR)) + $(call run_typehinting,$(BIFROST_NAME),$(INC_DIR)) build: bifrost/*.py Makefile $(BIFROST_PYTHON_VERSION_FILE) $(BIFROST_PYTHON_BINDINGS_FILE) $(PSRDADA_PYTHON_BINDINGS_FILE) @PYTHON@ setup.py build @PYBUILDFLAGS@ diff --git a/python/bifrost/address.py b/python/bifrost/address.py index 042386d0c..a441962f2 100644 --- a/python/bifrost/address.py +++ b/python/bifrost/address.py @@ -28,16 +28,14 @@ from bifrost.libbifrost import _bf, _check, _get, BifrostObject import ctypes -from socket import AF_UNSPEC -from typing import NewType, Optional +from socket import AddressFamily, AF_UNSPEC +from typing import Optional from bifrost import telemetry telemetry.track_module() -AFfamily_enum = NewType('AFfamily_enum', int) - class Address(BifrostObject): - def __init__(self, address: str, port: int, family: Optional[AFfamily_enum]=None): + def __init__(self, address: str, port: int, family: Optional[AddressFamily]=None): address = address.encode() assert(isinstance(port, int)) if family is None: diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 901634f29..a42aef2b4 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -35,24 +35,13 @@ # E.g., _bf.bfRingSequenceGetName() [should be ] import ctypes -from typing import NewType import bifrost.libbifrost_generated as _bf bf = _bf # Public access to library +import bifrost.libbifrost_typehints as _th from bifrost import telemetry telemetry.track_module() -# Typing helpers - -#: Type for Bifrost return codes -BFstatus_enum = NewType('BFstatus_enum', int) - -#: Type for Bifrost memory spaces -BFspace_enum = NewType('BFspace_enum', int) - -#: Type for Bifrost data types -BFdtype_enum = NewType('BFdtype_enum', int) - # Internal helpers below class EndOfDataStop(RuntimeError): @@ -147,7 +136,7 @@ def _check(status): raise EndOfDataStop('BF_STATUS_END_OF_DATA') elif status == _bf.BF_STATUS_WOULD_BLOCK: raise IOError('BF_STATUS_WOULD_BLOCK') - return status + return _th.BFStatus_enum(status) DEREF = {ctypes.POINTER(t): t for t in [ctypes.c_bool, ctypes.c_char, diff --git a/python/typehinting.py b/python/typehinting.py new file mode 100644 index 000000000..d15c82550 --- /dev/null +++ b/python/typehinting.py @@ -0,0 +1,40 @@ +import os + +# Build a type hinting helper for libbifrost_generated.py +def build_typehinting(filename): + enums = {'status': {}, + 'space': {}, + 'dtype': {}, + 'capture': {}, + 'transmit': {}, + 'reduce': {}} + + with open(filename, 'r') as fh: + for line in fh: + if line.startswith('BF_'): + for tag in enums.keys(): + if line.startswith(f"BF_{tag.upper()}_"): + name, value = line.split('=', 1) + + name = name.strip().rstrip() + value = value.strip().rstrip() + enums[tag][name] = value + break + + outname = filename.replace('generated', 'typehints') + with open(outname, 'w') as fh: + fh.write(f""" +\"\"\" +Type hints generated from {filename} + +Do not modify this file. +\"\"\" + +import enum + +""") + for tag in enums.keys(): + fh.write(f"class BF{tag}_enum(enum.IntEnum):\n") + for key,value in enums[tag].items(): + fh.write(f" {key} = {value}\n") + fh.write("\n") From 74b4b4bda2c0503d663224c97b305172d0423e99 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 14 Feb 2023 18:16:48 -0700 Subject: [PATCH 0767/1155] Fixes for libbifrost.py plus an idea for Space.py. --- python/bifrost/Space.py | 38 +++++++++++------------------------- python/bifrost/libbifrost.py | 23 ++++++++-------------- 2 files changed, 19 insertions(+), 42 deletions(-) diff --git a/python/bifrost/Space.py b/python/bifrost/Space.py index b4cf4516a..a98c882af 100644 --- a/python/bifrost/Space.py +++ b/python/bifrost/Space.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,38 +25,22 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from bifrost.libbifrost import _bf +from bifrost.libbifrost import _bf, _th, _string2space, _space2string + +from typing import Union from bifrost import telemetry telemetry.track_module() -SPACEMAP_TO_STR = {_bf.BF_SPACE_AUTO: 'auto', - _bf.BF_SPACE_SYSTEM: 'system', - _bf.BF_SPACE_CUDA: 'cuda', - _bf.BF_SPACE_CUDA_HOST: 'cuda_host', - _bf.BF_SPACE_CUDA_MANAGED: 'cuda_managed'} - -SPACEMAP_FROM_STR = {'auto': _bf.BF_SPACE_AUTO, - 'system': _bf.BF_SPACE_SYSTEM, - 'cuda': _bf.BF_SPACE_CUDA, - 'cuda_host': _bf.BF_SPACE_CUDA_HOST, - 'cuda_managed': _bf.BF_SPACE_CUDA_MANAGED} - class Space(object): - def __init__(self, s): + def __init__(self, s: Union[str,_th.BFspace_enum,_bf.BFspace,int]): if isinstance(s, str): - if s not in set(['auto', 'system', - 'cuda', 'cuda_host', 'cuda_managed']): - raise ValueError(f"Invalid space: '{s}'") - self._space = s - elif isinstance(s, _bf.BFspace) or isinstance(s, int): - if s not in SPACEMAP_TO_STR: - raise KeyError("Invalid space: " + s + - ". Valid spaces: " + str(SPACEMAP_TO_STR.keys())) - self._space = SPACEMAP_TO_STR[s] + self._space = _string2space(s) + elif isinstance(s, (_th.BFspace_enum, _bf.BFspace, int)): + self._space = _th.BFspace_enum(s) else: raise ValueError(f"'{s}' is not a space") - def as_BFspace(self): - return SPACEMAP_FROM_STR[self._space] + def as_BFspace(self) -> _th.BFspace_enum: + return self._space def __str__(self): - return self._space + return _space2string(self._space) diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index a42aef2b4..8d399521b 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -136,7 +136,7 @@ def _check(status): raise EndOfDataStop('BF_STATUS_END_OF_DATA') elif status == _bf.BF_STATUS_WOULD_BLOCK: raise IOError('BF_STATUS_WOULD_BLOCK') - return _th.BFStatus_enum(status) + return _th.BFstatus_enum(status) DEREF = {ctypes.POINTER(t): t for t in [ctypes.c_bool, ctypes.c_char, @@ -173,21 +173,14 @@ def _get(func, *args): _check(func(*args)) return ret.value -STRING2SPACE = {'auto': _bf.BF_SPACE_AUTO, - 'system': _bf.BF_SPACE_SYSTEM, - 'cuda': _bf.BF_SPACE_CUDA, - 'cuda_host': _bf.BF_SPACE_CUDA_HOST, - 'cuda_managed': _bf.BF_SPACE_CUDA_MANAGED} def _string2space(s): - if s not in STRING2SPACE: + try: + space = getattr(_th.BFspace_enum, f"BF_SPACE_{s.upper()}") + except AttributeError: raise KeyError("Invalid space '" + str(s) + - "'.\nValid spaces: " + str(list(STRING2SPACE.keys()))) - return STRING2SPACE[s] + "'.\nValid spaces: " + str(list(_th.BFspace_enum))) + return space -SPACE2STRING = {_bf.BF_SPACE_AUTO: 'auto', - _bf.BF_SPACE_SYSTEM: 'system', - _bf.BF_SPACE_CUDA: 'cuda', - _bf.BF_SPACE_CUDA_HOST: 'cuda_host', - _bf.BF_SPACE_CUDA_MANAGED: 'cuda_managed'} def _space2string(i): - return SPACE2STRING[i] + name = _th.BFspace_enum(i).name + return name.replace('BF_SPACE_', '').lower() From 741113c83fc63b05574f251837ccea31b5a1afb4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 10:50:55 -0700 Subject: [PATCH 0768/1155] Add in short names for BF_SPACE_* enums. --- python/typehinting.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/typehinting.py b/python/typehinting.py index d15c82550..7bd333e5c 100644 --- a/python/typehinting.py +++ b/python/typehinting.py @@ -19,6 +19,10 @@ def build_typehinting(filename): name = name.strip().rstrip() value = value.strip().rstrip() enums[tag][name] = value + + if tag == 'space': + name = name.replace('BF_SPACE_', '') + enums[tag][name.lower()] = value break outname = filename.replace('generated', 'typehints') From 35865f946a1c4aceb45273799446896d55748aa8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 10:53:05 -0700 Subject: [PATCH 0769/1155] Fix space handling in a way that works for other part of Bifrost. --- python/bifrost/Space.py | 12 ++++++------ python/bifrost/libbifrost.py | 23 +++++++++++++---------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/python/bifrost/Space.py b/python/bifrost/Space.py index a98c882af..c5ef4b0d5 100644 --- a/python/bifrost/Space.py +++ b/python/bifrost/Space.py @@ -25,7 +25,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from bifrost.libbifrost import _bf, _th, _string2space, _space2string +from bifrost.libbifrost import _bf, _th from typing import Union @@ -33,14 +33,14 @@ telemetry.track_module() class Space(object): - def __init__(self, s: Union[str,_th.BFspace_enum,_bf.BFspace,int]): + def __init__(self, s: Union[str,_th.BFspace_enum,_bf.BFspace]): if isinstance(s, str): - self._space = _string2space(s) + self._space = getattr(_th.BFspace_enum, s) elif isinstance(s, (_th.BFspace_enum, _bf.BFspace, int)): self._space = _th.BFspace_enum(s) else: raise ValueError(f"'{s}' is not a space") - def as_BFspace(self) -> _th.BFspace_enum: - return self._space + def as_BFspace(self) -> _bf.BFspace: + return _bf.BFspace(self._space.value) def __str__(self): - return _space2string(self._space) + return self._space.name diff --git a/python/bifrost/libbifrost.py b/python/bifrost/libbifrost.py index 8d399521b..5f1717fc7 100644 --- a/python/bifrost/libbifrost.py +++ b/python/bifrost/libbifrost.py @@ -36,8 +36,11 @@ import ctypes import bifrost.libbifrost_generated as _bf -bf = _bf # Public access to library import bifrost.libbifrost_typehints as _th +bf = _bf # Public access to library +th = _th # Public access to type hints + +from typing import Any, Callable from bifrost import telemetry telemetry.track_module() @@ -55,7 +58,7 @@ class EndOfDataStop(RuntimeError): class BifrostObject(object): """Base class for simple objects with create/destroy functions""" - def __init__(self, constructor, destructor, *args): + def __init__(self, constructor: Callable, destructor: Callable, *args: Any): self._obj_basename = constructor.__name__.replace('Create','') self.obj = destructor.argtypes[0]() _check(constructor(ctypes.byref(self.obj), *args)) @@ -70,14 +73,14 @@ def __enter__(self): return self def __exit__(self, type, value, tb): self._destroy() - def set_stream(self, stream): + def set_stream(self, stream: int): set_fnc = getattr(_bf, self._obj_basename+"SetStream", None) if set_fnc is None: raise AttributeError("set_stream() is not supported by %s objects" % self._obj_basename) _check( set_fnc(self.obj, ctypes.pointer(stream)) ) - def get_stream(self): + def get_stream(self) -> int: get_fnc = getattr(_bf, self._obj_basename+"GetStream", None) if get_fnc is None: raise AttributeError("get_stream() is not supported by %s objects" % self._obj_basename) @@ -119,7 +122,7 @@ def _array(size_or_vals, dtype=None): raise TypeError("Cannot deduce C type from ", type(vals[0])) return (dtype * len(vals))(*vals) -def _check(status): +def _check(status: _bf.BFstatus) -> _th.BFstatus_enum: if __debug__: if status != _bf.BF_STATUS_SUCCESS: if status is None: @@ -165,7 +168,7 @@ def _check(status): ctypes.c_void_p, ctypes.c_wchar, ctypes.c_wchar_p]} -def _get(func, *args): +def _get(func: Callable, *args: Any) -> Any: retarg = -1 dtype = DEREF[func.argtypes[retarg]] ret = dtype() @@ -173,14 +176,14 @@ def _get(func, *args): _check(func(*args)) return ret.value -def _string2space(s): +def _string2space(s: str) -> _bf.BFspace: try: - space = getattr(_th.BFspace_enum, f"BF_SPACE_{s.upper()}") + space = getattr(_th.BFspace_enum, s) except AttributeError: raise KeyError("Invalid space '" + str(s) + "'.\nValid spaces: " + str(list(_th.BFspace_enum))) - return space + return _bf.BFspace(space.value) -def _space2string(i): +def _space2string(i: _bf.BFspace) -> str: name = _th.BFspace_enum(i).name return name.replace('BF_SPACE_', '').lower() From d411cd0e5cd3abddc4c123b4e7c04a7a2116785b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 12:07:11 -0700 Subject: [PATCH 0770/1155] Do something similar for the BF_REDUCE_* enums. --- python/typehinting.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/typehinting.py b/python/typehinting.py index 7bd333e5c..318399ad6 100644 --- a/python/typehinting.py +++ b/python/typehinting.py @@ -23,6 +23,10 @@ def build_typehinting(filename): if tag == 'space': name = name.replace('BF_SPACE_', '') enums[tag][name.lower()] = value + elif tag == 'reduce': + name = name.replace('BF_SPACE_', '') + name = name.replace('POWER_', 'pwr') + enums[tag][name.lower()] = value break outname = filename.replace('generated', 'typehints') From 6d5ca02cd7cb1f23fd1a866c3cac0e67b3453df2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 14:30:42 -0700 Subject: [PATCH 0771/1155] First round of type hinting. --- python/bifrost/core.py | 10 +-- python/bifrost/device.py | 13 ++-- python/bifrost/dtype.py | 18 +++-- python/bifrost/fdmt.py | 22 ++++-- python/bifrost/fft.py | 16 ++-- python/bifrost/fir.py | 19 +++-- python/bifrost/guppi_raw.py | 4 +- python/bifrost/header_standard.py | 6 +- python/bifrost/linalg.py | 5 +- python/bifrost/map.py | 28 +++---- python/bifrost/memory.py | 22 +++--- python/bifrost/pipeline.py | 77 ++++++++++--------- python/bifrost/portaudio.py | 38 +++++----- python/bifrost/proclog.py | 10 ++- python/bifrost/quantize.py | 3 +- python/bifrost/reduce.py | 24 ++---- python/bifrost/ring.py | 105 ++++++++++++++------------ python/bifrost/ring2.py | 120 +++++++++++++++--------------- python/bifrost/romein.py | 9 ++- python/bifrost/sigproc.py | 28 +++---- python/bifrost/sigproc2.py | 32 ++++---- python/bifrost/temp_storage.py | 11 +-- python/bifrost/transpose.py | 6 +- python/bifrost/units.py | 6 +- python/bifrost/unpack.py | 3 +- 25 files changed, 342 insertions(+), 293 deletions(-) diff --git a/python/bifrost/core.py b/python/bifrost/core.py index 41257b232..40e233a6e 100644 --- a/python/bifrost/core.py +++ b/python/bifrost/core.py @@ -26,14 +26,14 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from bifrost.libbifrost import _bf +from bifrost.libbifrost import _bf, _th from bifrost import telemetry telemetry.track_module() -def status_string(status): - return _bf.bfGetStatusString(status) -def debug_enabled(): +def status_string(status: _th.BFstatus_enum) -> str: + return _bf.bfGetStatusString(status.value) +def debug_enabled() -> bool: return bool(_bf.bfGetDebugEnabled()) -def cuda_enabled(): +def cuda_enabled() -> bool: return bool(_bf.bfGetCudaEnabled()) diff --git a/python/bifrost/device.py b/python/bifrost/device.py index 3211b258f..26495b758 100644 --- a/python/bifrost/device.py +++ b/python/bifrost/device.py @@ -27,26 +27,27 @@ from ctypes import c_ulong, pointer as c_pointer from bifrost.libbifrost import _bf, _check, _get +from typing import Union from bifrost import telemetry telemetry.track_module() -def set_device(device): +def set_device(device: Union[int,str]) -> None: if isinstance(device, int): _check(_bf.bfDeviceSet(device)) else: _check(_bf.bfDeviceSetById(device.encode())) -def get_device(): +def get_device() -> int: return _get(_bf.bfDeviceGet) -def set_stream(stream): +def set_stream(stream: int) -> bool: """Set the CUDA stream to the provided stream handle""" stream = c_ulong(stream) _check(_bf.bfStreamSet(c_pointer(stream))) return True -def get_stream(): +def get_stream() -> int: """Get the current CUDA stream and return its address""" stream = c_ulong(0) _check(_bf.bfStreamGet(c_pointer(stream))) @@ -82,10 +83,10 @@ def __exit__(self, type, value, tb): set_stream(self._orig_stream) del self._orig_stream -def stream_synchronize(): +def stream_synchronize() -> None: _check(_bf.bfStreamSynchronize()) -def set_devices_no_spin_cpu(): +def set_devices_no_spin_cpu() -> None: """Sets a flag on all GPU devices that tells them not to spin the CPU when synchronizing. This is useful for reducing CPU load in GPU pipelines. diff --git a/python/bifrost/dtype.py b/python/bifrost/dtype.py index 66300c4b2..0d43a33d1 100644 --- a/python/bifrost/dtype.py +++ b/python/bifrost/dtype.py @@ -41,14 +41,15 @@ """ -from bifrost.libbifrost import _bf +from bifrost.libbifrost import _bf, _th from bifrost.libbifrost_generated import BF_FLOAT128_ENABLED import numpy as np +from typing import Tuple from bifrost import telemetry telemetry.track_module() -def split_name_nbit(dtype_str): +def split_name_nbit(dtype_str: str) -> Tuple[str,int]: """Splits a dtype string into (name, nbit)""" for i, char in enumerate(dtype_str): if char.isdigit(): @@ -65,11 +66,11 @@ def split_name_nbit(dtype_str): def to_complex64(q): real_type = q.dtype['re'] return q.view(real_type).astype(np.float32).view(np.complex64) -def from_complex64(f, dtype): +def from_complex64(f, dtype: np.dtype): real_type = dtype['re'] return f.view(np.float32).astype(real_type).view(dtype) -def numpy2bifrost(dtype): +def numpy2bifrost(dtype: np.dtype) -> _th.BFdtype_enum: if dtype == np.int8: return _bf.BF_DTYPE_I8 elif dtype == np.int16: return _bf.BF_DTYPE_I16 elif dtype == np.int32: return _bf.BF_DTYPE_I32 @@ -91,7 +92,7 @@ def numpy2bifrost(dtype): and BF_FLOAT128_ENABLED: return _bf.BF_DTYPE_CF128 else: raise ValueError(f"Unsupported dtype: {dtype}") -def name_nbit2numpy(name, nbit): +def name_nbit2numpy(name: str, nbit: int) -> np.dtype: if name == 'i': if nbit == 8: return np.int8 elif nbit == 16: return np.int16 @@ -125,10 +126,11 @@ def name_nbit2numpy(name, nbit): else: raise TypeError(f"Invalid complex floating-point type size: {nbit}") else: raise TypeError(f"Invalid type name: {name}") -def string2numpy(dtype_str): + +def string2numpy(dtype_str: str) -> np.dtype: return name_nbit2numpy(*split_name_nbit(dtype_str)) -def numpy2string(dtype): +def numpy2string(dtype: np.dtype) -> str: if dtype == np.int8: return 'i8' elif dtype == np.int16: return 'i16' elif dtype == np.int32: return 'i32' @@ -146,7 +148,7 @@ def numpy2string(dtype): elif dtype == np.complex256: return 'cf128' else: raise TypeError(f"Unsupported dtype: {dtype}") -def bifrost2string(dtype): +def bifrost2string(dtype: _th.BFdtype_enum) -> str: """ Convert bifrost BF_DTYPE integer code to ndarray string """ typedict = { _bf.BF_DTYPE_I8: 'i8', diff --git a/python/bifrost/fdmt.py b/python/bifrost/fdmt.py index 20efb7be0..22050eedb 100644 --- a/python/bifrost/fdmt.py +++ b/python/bifrost/fdmt.py @@ -25,8 +25,12 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space +from bifrost.libbifrost import _bf, _th, _check, _get, BifrostObject from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray +from bifrost.Space import Space + +from typing import Union from bifrost import telemetry telemetry.track_module() @@ -34,12 +38,13 @@ class Fdmt(BifrostObject): def __init__(self): BifrostObject.__init__(self, _bf.bfFdmtCreate, _bf.bfFdmtDestroy) - def init(self, nchan, max_delay, f0, df, exponent=-2.0, space='cuda'): - space = _string2space(space) + def init(self, nchan: int, max_delay: int, f0: float, df: float, + exponent: float=-2.0, space: Union[str,_th.BFspace_enum,_bf.BFspace]='cuda'): + space = Space(space) psize = None _check(_bf.bfFdmtInit(self.obj, nchan, max_delay, f0, df, - exponent, space, 0, psize)) - def execute(self, idata, odata, negative_delays=False): + exponent, space.as_BFspace(), 0, psize)) + def execute(self, idata: ndarray, odata: ndarray, negative_delays: bool=False) -> ndarray: # TODO: Work out how to integrate CUDA stream psize = None _check( _bf.bfFdmtExecute( @@ -50,15 +55,16 @@ def execute(self, idata, odata, negative_delays=False): None, psize) ) return odata - def get_workspace_size(self, idata, odata): + def get_workspace_size(self, idata: ndarray, odata: ndarray) -> int: return _get(_bf.bfFdmtExecute, self.obj, asarray(idata).as_BFarray(), asarray(odata).as_BFarray(), False, None) - def execute_workspace(self, idata, odata, workspace_ptr, workspace_size, - negative_delays=False): + def execute_workspace(self, idata: ndarray, odata: ndarray, + workspace_ptr: int, workspace_size: int, + negative_delays: bool=False) -> ndarray: size = _bf.BFsize(workspace_size) _check(_bf.bfFdmtExecute( self.obj, diff --git a/python/bifrost/fft.py b/python/bifrost/fft.py index 67f2c60dc..fa1813ad2 100644 --- a/python/bifrost/fft.py +++ b/python/bifrost/fft.py @@ -25,17 +25,22 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from bifrost.libbifrost import _bf, _check, _get, BifrostObject +from bifrost.libbifrost import _bf, _th, _check, _get, BifrostObject from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray import ctypes +from typing import List, Optional, Tuple, Union + from bifrost import telemetry telemetry.track_module() class Fft(BifrostObject): def __init__(self): BifrostObject.__init__(self, _bf.bfFftCreate, _bf.bfFftDestroy) - def init(self, iarray, oarray, axes=None, apply_fftshift=False): + def init(self, iarray: ndarray, oarray: ndarray, + axes: Optional[Union[int,List[int],Tuple[int]]]=None, + apply_fftshift: bool=False): if isinstance(axes, int): axes = [axes] ndim = len(axes) @@ -49,12 +54,13 @@ def init(self, iarray, oarray, axes=None, apply_fftshift=False): ndim, axes, apply_fftshift) - def execute(self, iarray, oarray, inverse=False): + def execute(self, iarray: ndarray, oarray: ndarray, inverse: bool=False) -> ndarray: return self.execute_workspace(iarray, oarray, workspace_ptr=None, workspace_size=0, inverse=inverse) - def execute_workspace(self, iarray, oarray, workspace_ptr, workspace_size, - inverse=False): + def execute_workspace(self, iarray: ndarray, oarray: ndarray, + workspace_ptr: int, workspace_size: int, + inverse: bool=False) -> ndarray: _check(_bf.bfFftExecute( self.obj, asarray(iarray).as_BFarray(), diff --git a/python/bifrost/fir.py b/python/bifrost/fir.py index f868a1746..c728d32b0 100644 --- a/python/bifrost/fir.py +++ b/python/bifrost/fir.py @@ -26,8 +26,12 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from bifrost.libbifrost import _bf, _check, BifrostObject, _string2space +from bifrost.libbifrost import _bf, _th, _check, BifrostObject, _string2space from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray +from bifrost.Space import Space + +from typing import Union from bifrost import telemetry telemetry.track_module() @@ -35,16 +39,17 @@ class Fir(BifrostObject): def __init__(self): BifrostObject.__init__(self, _bf.bfFirCreate, _bf.bfFirDestroy) - def init(self, coeffs, decim=1, space='cuda'): - space = _string2space(space) + def init(self, coeffs: ndarray, decim: int=1, + space: Union[str,_th.BFspace_enum,_bf.BFspace]='cuda'): + space = Space(space) psize = None - _check( _bf.bfFirInit(self.obj, asarray(coeffs).as_BFarray(), decim, space, 0, psize) ) - def set_coeffs(self, coeffs): + _check( _bf.bfFirInit(self.obj, asarray(coeffs).as_BFarray(), decim, space.as_BFspace(), 0, psize) ) + def set_coeffs(self, coeffs: ndarray) -> None: _check( _bf.bfFirSetCoeffs(self.obj, asarray(coeffs).as_BFarray()) ) - def reset_state(self): + def reset_state(self) -> None: _check( _bf.bfFirResetState(self.obj) ) - def execute(self, idata, odata): + def execute(self, idata: ndarray, odata: ndarray) -> ndarray: # TODO: Work out how to integrate CUDA stream _check( _bf.bfFirExecute(self.obj, asarray(idata).as_BFarray(), diff --git a/python/bifrost/guppi_raw.py b/python/bifrost/guppi_raw.py index bde91560f..dbb20ad3a 100644 --- a/python/bifrost/guppi_raw.py +++ b/python/bifrost/guppi_raw.py @@ -54,10 +54,12 @@ """ +from typing import Any, Dict, IO + from bifrost import telemetry telemetry.track_module() -def read_header(f): +def read_header(f: IO[str]) -> Dict[str,Any]: RECORD_LEN = 80 DIRECTIO_ALIGN_NBYTE = 512 buf = bytearray(RECORD_LEN) diff --git a/python/bifrost/header_standard.py b/python/bifrost/header_standard.py index df438e01f..83baed275 100644 --- a/python/bifrost/header_standard.py +++ b/python/bifrost/header_standard.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -45,6 +45,8 @@ import numpy as np +from typing import Dict, Any + from bifrost import telemetry telemetry.track_module() @@ -61,7 +63,7 @@ 'tstart': ((float, np.float64), 0), 'tsamp': ((float, np.float64), 0)} -def enforce_header_standard(header_dict): +def enforce_header_standard(header_dict: Dict[str,Any]) -> bool: """Raise an error if the header dictionary passed does not fit the standard specified above.""" if type(header_dict) != dict: diff --git a/python/bifrost/linalg.py b/python/bifrost/linalg.py index 8b0a7116d..368e33049 100644 --- a/python/bifrost/linalg.py +++ b/python/bifrost/linalg.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -27,6 +27,7 @@ from bifrost.libbifrost import _bf, _check, BifrostObject from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray from bifrost import telemetry telemetry.track_module() @@ -34,7 +35,7 @@ class LinAlg(BifrostObject): def __init__(self): BifrostObject.__init__(self, _bf.bfLinAlgCreate, _bf.bfLinAlgDestroy) - def matmul(self, alpha, a, b, beta, c): + def matmul(self, alpha: float, a: ndarray, b: ndarray, beta: float, c: ndarray) -> ndarray: """Computes: c = alpha*a.b + beta*c or if b is None: diff --git a/python/bifrost/map.py b/python/bifrost/map.py index 04ab30a15..7d30164ac 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,27 +25,23 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import -import sys -if sys.version_info > (3,): - long = int - from bifrost.libbifrost import _bf, _check, _array from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray import numpy as np import ctypes import glob import os +from typing import Any, Dict, List, Optional from bifrost.libbifrost_generated import BF_MAP_KERNEL_DISK_CACHE from bifrost import telemetry telemetry.track_module() -def _is_literal(x): +def _is_literal(x: Any) -> bool: return isinstance(x, (int, long, float, complex)) -def _convert_to_array(arg): +def _convert_to_array(arg: Any) -> ndarray: if _is_literal(arg): arr = np.array(arg) if isinstance(arg, (int, long)) and -(1 << 31) <= arg < (1 << 31): @@ -59,9 +55,13 @@ def _convert_to_array(arg): arg = arr return asarray(arg) -def map(func_string, data, axis_names=None, shape=None, - func_name=None, extra_code=None, - block_shape=None, block_axes=None): +def map(func_string: str, data: Dict[str,Any], + axis_names: Optional[List[str]]=None, + shape: Optional[List[int]]=None, + func_name: Optional[str]=None, + extra_code: Optional[str]=None, + block_shape: Optional[List[int]]=None, + block_axes: Optional[List[int]]=None) -> ndarray: """Apply a function to a set of ndarrays. Args: @@ -146,7 +146,7 @@ def map(func_string, data, axis_names=None, shape=None, func_name, func_string, extra_code, _array(block_shape), _array(block_axes))) -def list_map_cache(): +def list_map_cache() -> None: output = "Cache enabled: %s" % ('yes' if BF_MAP_KERNEL_DISK_CACHE else 'no') if BF_MAP_KERNEL_DISK_CACHE: cache_path = os.path.join(os.path.expanduser('~'), '.bifrost', @@ -172,5 +172,5 @@ def list_map_cache(): print(output) -def clear_map_cache(): +def clear_map_cache() -> None: _check(_bf.bfMapClearCache()) diff --git a/python/bifrost/memory.py b/python/bifrost/memory.py index 2747c8919..5d89d8c9b 100644 --- a/python/bifrost/memory.py +++ b/python/bifrost/memory.py @@ -29,10 +29,12 @@ from bifrost.libbifrost import _bf, _check, _get, _string2space import ctypes +from typing import Any, List + from bifrost import telemetry telemetry.track_module() -def space_accessible(space, from_spaces): +def space_accessible(space: str, from_spaces: List[str]) -> bool: if from_spaces == 'any': # TODO: This is a little bit hacky return True from_spaces = set(from_spaces) @@ -45,27 +47,27 @@ def space_accessible(space, from_spaces): else: return False -def raw_malloc(size, space): +def raw_malloc(size: int, space: str) -> int: ptr = ctypes.c_void_p() _check(_bf.bfMalloc(ptr, size, _string2space(space))) return ptr.value -def raw_free(ptr, space='auto'): +def raw_free(ptr: int, space: str='auto') -> int: _check(_bf.bfFree(ptr, _string2space(space))) -def raw_get_space(ptr): +def raw_get_space(ptr: int) -> _bf.BFspace: return _get(_bf.bfGetSpace, ptr) -def alignment(): +def alignment() -> int: ret, _ = _bf.bfGetAlignment() return ret # **TODO: Deprecate below here! -def _get_space(arr): +def _get_space(arr: Any) -> str: try: return arr.flags['SPACE'] except KeyError: return 'system' # TODO: Dangerous to assume? # Note: These functions operate on numpy or GPU arrays -def memcpy(dst, src): +def memcpy(dst: int, src: int) -> None: assert(dst.flags['C_CONTIGUOUS']) assert(src.shape == dst.shape) dst_space = _string2space(_get_space(dst)) @@ -75,7 +77,7 @@ def memcpy(dst, src): src.ctypes.data, src_space, count)) return dst -def memcpy2D(dst, src): +def memcpy2D(dst: int, src: int) -> None: assert(len(dst.shape) == 2) assert(src.shape == dst.shape) dst_space = _string2space(_get_space(dst)) @@ -85,12 +87,12 @@ def memcpy2D(dst, src): _check(_bf.bfMemcpy2D(dst.ctypes.data, dst.strides[0], dst_space, src.ctypes.data, src.strides[0], src_space, width_bytes, height)) -def memset(dst, val=0): +def memset(dst: int, val: int=0) -> None: assert(dst.flags['C_CONTIGUOUS']) space = _string2space(_get_space(dst)) count = dst.nbytes _check(_bf.bfMemset(dst.ctypes.data, space, val, count)) -def memset2D(dst, val=0): +def memset2D(dst: int, val: int=0) -> None: assert(len(dst.shape) == 2) space = _string2space(_get_space(dst)) height, width = dst.shape diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 57c410e51..5849597a9 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -46,6 +46,11 @@ from bifrost.ndarray import memset_array # TODO: This feels a bit hacky from bifrost.libbifrost import EndOfDataStop +from graphviz import Digraph + +from collections.abc import Iterable +from typing import Any, Callable, List, Optional, Union + from bifrost import telemetry telemetry.track_module() @@ -54,7 +59,7 @@ # module import time to make things easy. device.set_devices_no_spin_cpu() -def izip(*iterables): +def izip(*iterables: Iterable[Any]) -> List[Any]: while True: try: yield [next(it) for it in iterables] @@ -63,30 +68,30 @@ def izip(*iterables): thread_local = threading.local() thread_local.pipeline_stack = [] -def get_default_pipeline(): +def get_default_pipeline() -> "Pipeline": return thread_local.pipeline_stack[-1] thread_local.blockscope_stack = [] -def get_current_block_scope(): +def get_current_block_scope() -> "BlockScope": if len(thread_local.blockscope_stack): return thread_local.blockscope_stack[-1] else: return None -def block_scope(*args, **kwargs): +def block_scope(*args: Any, **kwargs: Any) -> "BlockScope": return BlockScope(*args, **kwargs) class BlockScope(object): instance_count = 0 def __init__(self, - name=None, - gulp_nframe=None, - buffer_nframe=None, - buffer_factor=None, - core=None, - gpu=None, - share_temp_storage=False, - fuse=False): + name: Optional[str]=None, + gulp_nframe: Optional[int]=None, + buffer_nframe: Optional[int]=None, + buffer_factor: Optional[int]=None, + core: Optional[int]=None, + gpu: Optional[int]=None, + share_temp_storage: bool=False, + fuse: bool=False): if name is None: name = f"BlockScope_{BlockScope.instance_count}" BlockScope.instance_count += 1 @@ -127,7 +132,7 @@ def __getattr__(self, name): return getattr(self._parent_scope, name) else: return None - def _get_temp_storage(self, space): + def _get_temp_storage(self, space: str) -> TempStorage: if space not in self._temp_storage_: self._temp_storage_[space] = TempStorage(space) return self._temp_storage_[space] @@ -139,25 +144,23 @@ def _get_scope_hierarchy(self): scope_hierarchy.append(parent) parent = parent._parent_scope return reversed(scope_hierarchy) - def cache_scope_hierarchy(self): + def cache_scope_hierarchy(self) -> None: self.scope_hierarchy = self._get_scope_hierarchy() self.fused_ancestor = None for ancestor in self.scope_hierarchy: if ancestor._fused: self.fused_ancestor = ancestor break - def is_fused_with(self, other): + def is_fused_with(self, other: "BlockScope") -> bool: return (self.fused_ancestor is not None and self.fused_ancestor is other.fused_ancestor) - def get_temp_storage(self, space): + def get_temp_storage(self, space: str) -> TempStorage: # TODO: Cache the first share_temp_storage scope to avoid walking each time for scope in self.scope_hierarchy: if scope.share_temp_storage: return scope._get_temp_storage(space) return self._get_temp_storage(space) - def dot_graph(self, parent_graph=None): - from graphviz import Digraph - + def dot_graph(self, parent_graph: Optional[Digraph]=None) -> Digraph: #graph_attr = {'label': self._name} graph_attr = {} if parent_graph is None: @@ -197,11 +200,11 @@ def dot_graph(self, parent_graph=None): g.subgraph(child.dot_graph()) return g -def try_join(thread, timeout=0.): +def try_join(thread: threading.Thread, timeout=0.) -> bool: thread.join(timeout) return not thread.is_alive() # Utility function for joining a collection of threads with a timeout -def join_all(threads, timeout): +def join_all(threads: List[threading.Thread], timeout: Union[int,float]): deadline = time.time() + timeout alive_threads = list(threads) while True: @@ -217,7 +220,7 @@ class PipelineInitError(Exception): class Pipeline(BlockScope): instance_count = 0 - def __init__(self, name=None, **kwargs): + def __init__(self, name: str=None, **kwargs: Any): if name is None: name = f"Pipeline_{Pipeline.instance_count}" Pipeline.instance_count += 1 @@ -228,7 +231,7 @@ def __init__(self, name=None, **kwargs): self.block_init_queue = queue.Queue() def as_default(self): return PipelineContext(self) - def synchronize_block_initializations(self): + def synchronize_block_initializations(self) -> None: # Wait for all blocks to finish initializing uninitialized_blocks = set(self.blocks) while len(uninitialized_blocks): @@ -241,7 +244,7 @@ def synchronize_block_initializations(self): f"The following block failed to initialize: {block.name}") # Tell blocks that they can begin data processing self.all_blocks_finished_initializing_event.set() - def run(self): + def run(self) -> None: # Launch blocks as threads self.threads = [threading.Thread(target=block.run, name=block.name) for block in self.blocks] @@ -254,7 +257,7 @@ def run(self): # Note: Doing it this way allows signals to be caught here while thread.is_alive(): thread.join(timeout=2**30) - def shutdown(self): + def shutdown(self) -> None: for block in self.blocks: block.shutdown() # Ensure all blocks can make progress @@ -263,7 +266,7 @@ def shutdown(self): for thread in self.threads: if thread.is_alive(): warnings.warn(f"Thread {thread.name} did not shut down on time and will be killed", RuntimeWarning) - def shutdown_on_signals(self, signals=None): + def shutdown_on_signals(self, signals: Optional[List[signal.Signals]]=None) -> None: if signals is None: signals = [signal.SIGHUP, signal.SIGINT, @@ -291,13 +294,13 @@ def __exit__(self, type, value, tb): thread_local.pipeline_stack.append(Pipeline()) thread_local.blockscope_stack.append(get_default_pipeline()) -def get_ring(block_or_ring): +def get_ring(block_or_ring: Union["Block", Ring]) -> Ring: try: return block_or_ring.orings[0] except AttributeError: return block_or_ring -def block_view(block, header_transform): +def block_view(block: "Block", header_transform: Callable) -> "Block": """View a block with modified output headers Use this function to adjust the output headers of a ring @@ -318,10 +321,10 @@ def block_view(block, header_transform): class Block(BlockScope): instance_counts = defaultdict(lambda: 0) - def __init__(self, irings, - name=None, - type_=None, - **kwargs): + def __init__(self, irings: List[Union["Block",Ring]], + name: Optional[str]=None, + type_: Optional[str]=None, + **kwargs: Any): self.type = type_ or self.__class__.__name__ self.name = name or f"{self.type}_{Block.instance_counts[self.type]}" Block.instance_counts[self.type] += 1 @@ -347,11 +350,11 @@ def __init__(self, irings, rnames[f"ring{i}"] = r.name self.in_proclog.update(rnames) self.init_trace = ''.join(traceback.format_stack()[:-1]) - def shutdown(self): + def shutdown(self) -> None: self.shutdown_event.set() - def create_ring(self, *args, **kwargs): + def create_ring(self, *args: Any, **kwargs: Any) -> Ring: return Ring(*args, owner=self, **kwargs) - def run(self): + def run(self) -> None: #affinity.set_openmp_cores(cpus) # TODO core = self.core if core is not None: @@ -370,10 +373,10 @@ def run(self): sys.stderr.write("From block instantiated here:\n") sys.stderr.write(self.init_trace) raise - def num_outputs(self): + def num_outputs(self) -> int: # TODO: This is a little hacky return len(self.orings) - def begin_writing(self, exit_stack, orings): + def begin_writing(self, exit_stack, orings: List[Ring]) -> List: return [exit_stack.enter_context(oring.begin_writing()) for oring in orings] def begin_sequences(self, exit_stack, orings, oheaders, diff --git a/python/bifrost/portaudio.py b/python/bifrost/portaudio.py index 0366e8b38..22f9b1706 100644 --- a/python/bifrost/portaudio.py +++ b/python/bifrost/portaudio.py @@ -36,6 +36,8 @@ from threading import Lock import os +from typing import Union + from bifrost import telemetry telemetry.track_module() @@ -110,7 +112,7 @@ class PaDeviceInfo(ctypes.Structure): ctypes.c_ulong] class PortAudioError(RuntimeError): - def __init__(self, msg): + def __init__(self, msg: str): super(PortAudioError, self).__init__(msg) def _check(err): @@ -118,7 +120,7 @@ def _check(err): raise PortAudioError(_lib.Pa_GetErrorText(err)) class suppress_fd(object): - def __init__(self, fd): + def __init__(self, fd: Union[str,int]): if fd.lower() == 'stdout': fd = 1 elif fd.lower() == 'stderr': fd = 2 else: assert(isinstance(fd, int)) @@ -138,13 +140,13 @@ def __exit__(self, type, value, tb): class Stream(object): def __init__(self, - mode='r', - rate=44100, - channels=2, - nbits=16, - frames_per_buffer=1024, - input_device=None, - output_device=None): + mode: str='r', + rate: int=44100, + channels: int=2, + nbits: int=16, + frames_per_buffer: int=1024, + input_device: Optional[str]=None, + output_device: Optional[str]=None): self.mode = mode self.rate = rate self.channels = channels @@ -186,7 +188,7 @@ def __init__(self, None, None)) self.start() - def close(self): + def close(self) -> None: self.stop() with self.lock: _check(_lib.Pa_CloseStream(self.stream)) @@ -194,20 +196,20 @@ def __enter__(self): return self def __exit__(self, type, value, tb): self.close() - def start(self): + def start(self) -> None: with self.lock: _check(_lib.Pa_StartStream(self.stream)) self.running = True - def stop(self): + def stop(self) -> None: with self.lock: if self.running: _check(_lib.Pa_StopStream(self.stream)) self.running = False - def read(self, nframe): + def read(self, nframe: int) -> memoryview: nbyte = nframe * self.frame_nbyte buf = ctypes.create_string_buffer("UNINITIALIZED"[:nbyte], nbyte) return self.readinto(buf) - def readinto(self, buf): + def readinto(self, buf: memoryview) -> memoryview: with self.lock: assert(len(buf) % self.frame_nbyte == 0) nframe = len(buf) // self.frame_nbyte @@ -219,21 +221,21 @@ def readinto(self, buf): # packets). _check(_lib.Pa_ReadStream(self.stream, buf_view, nframe)) return buf - def write(self, buf): + def write(self, buf: memoryview) -> memoryview: with self.lock: assert(len(buf) % self.frame_nbyte == 0) nframe = len(buf) // self.frame_nbyte buf_view = (ctypes.c_byte * len(buf)).from_buffer(buf) _check(_lib.Pa_WriteStream(self.stream, buf_view, nframe)) return buf - def time(self): + def time(self) -> int: with self.lock: return _lib.Pa_GetStreamTime(self.stream) -def open(*args, **kwargs): +def open(*args: Any, **kwargs: Any) -> Stream: return Stream(*args, **kwargs) -def get_device_count(): +def get_device_count() -> int: return _lib.Pa_GetDeviceCount() if __name__ == "__main__": diff --git a/python/bifrost/proclog.py b/python/bifrost/proclog.py index cabe4c1f1..7797186d6 100644 --- a/python/bifrost/proclog.py +++ b/python/bifrost/proclog.py @@ -30,16 +30,18 @@ import os import time +from typing import Any, Dict, Union + from bifrost import telemetry telemetry.track_module() PROCLOG_DIR = _bf.BF_PROCLOG_DIR class ProcLog(BifrostObject): - def __init__(self, name): + def __init__(self, name: str): BifrostObject.__init__( self, _bf.bfProcLogCreate, _bf.bfProcLogDestroy, name.encode()) - def update(self, contents): + def update(self, contents: Union[Dict[str,Any],str]): """Updates (replaces) the contents of the log contents: string or dict containing data to write to the log """ @@ -64,7 +66,7 @@ def _multi_convert(value): pass return value -def load_by_filename(filename): +def load_by_filename(filename: str) -> Dict[str,Any]: """ Function to read in a ProcLog file and return the contents as a dictionary. @@ -97,7 +99,7 @@ def load_by_filename(filename): # Done return contents -def load_by_pid(pid, include_rings=False): +def load_by_pid(pid: int, include_rings: bool=False) -> Dict[str,Any]: """ Function to read in and parse all ProcLog files associated with a given process ID. The contents of these files are returned as a collection of diff --git a/python/bifrost/quantize.py b/python/bifrost/quantize.py index 456c513ba..1f9f1df68 100644 --- a/python/bifrost/quantize.py +++ b/python/bifrost/quantize.py @@ -27,11 +27,12 @@ from bifrost.libbifrost import _bf, _check from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray from bifrost import telemetry telemetry.track_module() -def quantize(src, dst, scale=1.): +def quantize(src: ndarray, dst: ndarray, scale: float=1.) -> ndarray: src_bf = asarray(src).as_BFarray() dst_bf = asarray(dst).as_BFarray() _check(_bf.bfQuantize(src_bf, dst_bf, scale)) diff --git a/python/bifrost/reduce.py b/python/bifrost/reduce.py index 601487943..a8e9ccd9b 100644 --- a/python/bifrost/reduce.py +++ b/python/bifrost/reduce.py @@ -25,29 +25,19 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from bifrost.libbifrost import _bf, _check +from bifrost.libbifrost import _bf, _th, _check from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray from bifrost import telemetry telemetry.track_module() -REDUCE_MAP = { - 'sum': _bf.BF_REDUCE_SUM, - 'mean': _bf.BF_REDUCE_MEAN, - 'min': _bf.BF_REDUCE_MIN, - 'max': _bf.BF_REDUCE_MAX, - 'stderr': _bf.BF_REDUCE_STDERR, - 'pwrsum': _bf.BF_REDUCE_POWER_SUM, - 'pwrmean': _bf.BF_REDUCE_POWER_MEAN, - 'pwrmin': _bf.BF_REDUCE_POWER_MIN, - 'pwrmax': _bf.BF_REDUCE_POWER_MAX, - 'pwrstderr': _bf.BF_REDUCE_POWER_STDERR, -} - -def reduce(idata, odata, op='sum'): - if op not in REDUCE_MAP: +def reduce(idata: ndarray, odata: ndarray, op: str='sum') -> ndarray: + try: + op = getattr(_th.BFreduce_enum, op) + except AttributeError: raise ValueError("Invalid reduce op: " + str(op)) - op = REDUCE_MAP[op] _check(_bf.bfReduce(asarray(idata).as_BFarray(), asarray(odata).as_BFarray(), op)) + return odata diff --git a/python/bifrost/ring.py b/python/bifrost/ring.py index 6f72c763f..5420139b3 100644 --- a/python/bifrost/ring.py +++ b/python/bifrost/ring.py @@ -36,6 +36,8 @@ import numpy as np from uuid import uuid4 +from typing import List, Optional, Tuple, Union + from bifrost import telemetry telemetry.track_module() @@ -45,7 +47,7 @@ def _slugify(name): return ''.join([c for c in name if c in valid_chars]) class Ring(BifrostObject): - def __init__(self, space='system', name=None, core=None): + def __init__(self, space: str='system', name: Optional[str]=None, core: Optional[int]=None): if name is None: name = str(uuid4()) name = _slugify(name) @@ -60,8 +62,8 @@ def __init__(self, space='system', name=None, core=None): core) ) except RuntimeError: pass - def resize(self, contiguous_span, total_span=None, nringlet=1, - buffer_factor=4): + def resize(self, contiguous_span: int, total_span: Optional[int]=None, nringlet: int=1, + buffer_factor: int=4) -> None: if total_span is None: total_span = contiguous_span * buffer_factor _check( _bf.bfRingResize(self.obj, @@ -69,13 +71,14 @@ def resize(self, contiguous_span, total_span=None, nringlet=1, total_span, nringlet) ) @property - def name(self): - return _get(_bf.bfRingGetName, self.obj) + def name(self) -> str: + n = _get(_bf.bfRingGetName, self.obj) + return n.decode() @property - def space(self): + def space(self) -> str: return _space2string(_get(_bf.bfRingGetSpace, self.obj)) @property - def core(self): + def core(self) -> int: return _get(_bf.bfRingGetAffinity, self.obj) #def begin_sequence(self, name, header="", nringlet=1): # return Sequence(ring=self, name=name, header=header, nringlet=nringlet) @@ -87,24 +90,24 @@ def core(self): # self._check( self.lib.bfRingUnlock(self.obj) ); #def lock(self): # return RingLock(self) - def begin_writing(self): + def begin_writing(self) -> "RingWriter": return RingWriter(self) def _begin_writing(self): _check( _bf.bfRingBeginWriting(self.obj) ) - def end_writing(self): + def end_writing(self) -> None: _check( _bf.bfRingEndWriting(self.obj) ) - def writing_ended(self): + def writing_ended(self) -> bool: return _get( _bf.bfRingWritingEnded, self.obj ) - def open_sequence(self, name, guarantee=True): + def open_sequence(self, name: str, guarantee: bool=True) -> "ReadSequence": return ReadSequence(self, name=name, guarantee=guarantee) - def open_sequence_at(self, time_tag, guarantee=True): + def open_sequence_at(self, time_tag: int, guarantee: bool=True) -> "ReadSequence": return ReadSequence(self, which='at', time_tag=time_tag, guarantee=guarantee) - def open_latest_sequence(self, guarantee=True): + def open_latest_sequence(self, guarantee: bool=True) -> "ReadSequence": return ReadSequence(self, which='latest', guarantee=guarantee) - def open_earliest_sequence(self, guarantee=True): + def open_earliest_sequence(self, guarantee: bool=True) -> "ReadSequence": return ReadSequence(self, which='earliest', guarantee=guarantee) # TODO: Alternative name? - def read(self, whence='earliest', guarantee=True): + def read(self, whence: str='earliest', guarantee: bool=True) -> "ReadSequence": with ReadSequence(self, which=whence, guarantee=guarantee) as cur_seq: while True: try: @@ -143,44 +146,46 @@ def read(self, whence='earliest', guarantee=True): # return self._get(BFsize, self.lib.bfRingLockedGetStride, self.obj) class RingWriter(object): - def __init__(self, ring): + def __init__(self, ring: Ring): self.ring = ring self.ring._begin_writing() def __enter__(self): return self def __exit__(self, type, value, tb): self.ring.end_writing() - def begin_sequence(self, name="", time_tag=-1, header="", nringlet=1): + def begin_sequence(self, name: str="", time_tag: int=-1, + header: str="", nringlet: int=1) -> "WriteSequence": return WriteSequence(ring=self.ring, name=name, time_tag=time_tag, header=header, nringlet=nringlet) class SequenceBase(object): """Python object for a ring's sequence (data unit)""" - def __init__(self, ring): + def __init__(self, ring: Ring): self._ring = ring @property def _base_obj(self): return ctypes.cast(self.obj, _bf.BFsequence) @property - def ring(self): + def ring(self) -> Ring: return self._ring @property - def name(self): - return _get(_bf.bfRingSequenceGetName, self._base_obj) + def name(self) -> str: + n = _get(_bf.bfRingSequenceGetName, self._base_obj) + return n.decode() @property - def time_tag(self): + def time_tag(self) -> int: return _get(_bf.bfRingSequenceGetTimeTag, self._base_obj) @property - def nringlet(self): + def nringlet(self) -> int: return _get(_bf.bfRingSequenceGetNRinglet, self._base_obj) @property - def header_size(self): + def header_size(self) -> int: return _get(_bf.bfRingSequenceGetHeaderSize, self._base_obj) @property def _header_ptr(self): return _get(_bf.bfRingSequenceGetHeader, self._base_obj) @property # TODO: Consider not making this a property - def header(self): + def header(self) -> np.ndarray: size = self.header_size if size == 0: # WAR for hdr_buffer_ptr.contents crashing when size == 0 @@ -193,7 +198,7 @@ def header(self): return hdr_array class WriteSequence(SequenceBase): - def __init__(self, ring, name="", time_tag=-1, header="", nringlet=1): + def __init__(self, ring: Ring, name: str="", time_tag: int=-1, header: str="", nringlet: int=1): SequenceBase.__init__(self, ring) # TODO: Allow header to be a string, buffer, or numpy array header_size = len(header) @@ -218,15 +223,16 @@ def __enter__(self): return self def __exit__(self, type, value, tb): self.end() - def end(self): + def end(self) -> None: offset_from_head = 0 _check(_bf.bfRingSequenceEnd(self.obj, offset_from_head)) - def reserve(self, size, nonblocking=False): + def reserve(self, size: int, nonblocking: bool=False) -> "WriteSpan": return WriteSpan(self.ring, size, nonblocking) class ReadSequence(SequenceBase): - def __init__(self, ring, which='specific', name="", time_tag=None, - other_obj=None, guarantee=True): + def __init__(self, ring: Ring, which: str='specific', name: str="", + time_tag: Optional[int]=None, other_obj: Optional[SequenceBase]=None, + guarantee: bool=True): SequenceBase.__init__(self, ring) self._ring = ring self.obj = _bf.BFrsequence() @@ -246,18 +252,18 @@ def __enter__(self): return self def __exit__(self, type, value, tb): self.close() - def close(self): + def close(self) -> None: _check(_bf.bfRingSequenceClose(self.obj)) #def __next__(self): # return self.next() #def next(self): # return ReadSequence(self._ring, which='next', other_obj=self.obj) - def increment(self): + def increment(self) -> None: #self._check( self.lib.bfRingSequenceNext(pointer(self.obj)) ) _check(_bf.bfRingSequenceNext(self.obj)) - def acquire(self, offset, size): + def acquire(self, offset: int, size: int) -> "ReadSpan": return ReadSpan(self, offset, size) - def read(self, span_size, stride=None, begin=0): + def read(self, span_size: int, stride: Optional[int]=None, begin: int=0) -> "ReadSpan": if stride is None: stride = span_size offset = begin @@ -270,34 +276,35 @@ def read(self, span_size, stride=None, begin=0): return class SpanBase(object): - def __init__(self, ring, writeable): + def __init__(self, ring: Ring, writeable: bool): self._ring = ring self.writeable = writeable @property def _base_obj(self): return ctypes.cast(self.obj, _bf.BFspan) @property - def ring(self): + def ring(self) -> Ring: return self._ring @property - def size(self): + def size(self) -> int: return _get(_bf.bfRingSpanGetSize, self._base_obj) @property - def stride(self): + def stride(self) -> int: return _get(_bf.bfRingSpanGetStride, self._base_obj) @property - def offset(self): + def offset(self) -> int: return _get(_bf.bfRingSpanGetOffset, self._base_obj) @property - def nringlet(self): + def nringlet(self) -> int: return _get(_bf.bfRingSpanGetNRinglet, self._base_obj) @property def _data_ptr(self): return _get(_bf.bfRingSpanGetData, self._base_obj) @property - def data(self): + def data(self) -> ndarray: return self.data_view() - def data_view(self, dtype=np.uint8, shape=-1): + def data_view(self, dtype: Union[str,np.dtype]=np.uint8, + shape: Union[int,List[int],Tuple[int]]=-1) -> ndarray: itemsize = DataType(dtype).itemsize assert( self.size % itemsize == 0 ) assert( self.stride % itemsize == 0 ) @@ -335,24 +342,24 @@ def data_view(self, dtype=np.uint8, shape=-1): class WriteSpan(SpanBase): def __init__(self, - ring, - size, - nonblocking=False): + ring: Ring, + size: int, + nonblocking: bool=False): SpanBase.__init__(self, ring, writeable=True) self.obj = _bf.BFwspan() _check(_bf.bfRingSpanReserve(self.obj, ring.obj, size, nonblocking)) self.commit_size = size - def commit(self, size): + def commit(self, size: int) -> None: self.commit_size = size def __enter__(self): return self def __exit__(self, type, value, tb): self.close() - def close(self): + def close(self) -> None: _check(_bf.bfRingSpanCommit(self.obj, self.commit_size)) class ReadSpan(SpanBase): - def __init__(self, sequence, offset, size): + def __init__(self, sequence: ReadSequence, offset: int, size: int): SpanBase.__init__(self, sequence.ring, writeable=False) self.obj = _bf.BFrspan() _check(_bf.bfRingSpanAcquire(self.obj, sequence.obj, offset, size)) @@ -360,5 +367,5 @@ def __enter__(self): return self def __exit__(self, type, value, tb): self.release() - def release(self): + def release(self) -> None: _check(_bf.bfRingSpanRelease(self.obj)) diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index a82f8cb15..b710da4e5 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -45,6 +45,9 @@ warnings.warn("Install simplejson for better performance", RuntimeWarning) import json +from collections.abc import Iterable +from typing import Any, Callable, Dict, List, Optional, Tuple, Union + from bifrost import telemetry telemetry.track_module() @@ -54,7 +57,7 @@ def _slugify(name): return ''.join([c for c in name if c in valid_chars]) # TODO: Should probably move this elsewhere (e.g., utils) -def split_shape(shape): +def split_shape(shape: Union[List[int],Tuple[int]]) -> Tuple[List[int], List[int]]: """Splits a shape into its ringlet shape and frame shape E.g., (2,3,-1,4,5) -> (2,3), (4,5) """ @@ -66,10 +69,10 @@ def split_shape(shape): ringlet_shape.append(dim) raise ValueError("No time dimension (-1) found in shape") -def compose_unary_funcs(f, g): +def compose_unary_funcs(f: Callable, g: Callable) -> Callable: return lambda x: f(g(x)) -def ring_view(ring, header_transform): +def ring_view(ring: "Ring", header_transform: Callable) -> "Ring": new_ring = ring.view() old_header_transform = ring.header_transform if old_header_transform is not None: @@ -80,7 +83,7 @@ def ring_view(ring, header_transform): class Ring(BifrostObject): instance_count = 0 - def __init__(self, space='system', name=None, owner=None, core=None): + def __init__(self, space: str='system', name: Optional[str]=None, owner: Optional[Any]=None, core: Optional[int]=None): # If this is non-None, then the object is wrapping a base Ring instance self.base = None self.is_view = False # This gets set to True by use of .view() @@ -102,39 +105,39 @@ def __init__(self, space='system', name=None, owner=None, core=None): def __del__(self): if self.base is not None and not self.is_view: BifrostObject.__del__(self) - def view(self): + def view(self) -> "Ring": new_ring = copy(self) new_ring.base = self new_ring.is_view = True return new_ring - def resize(self, contiguous_bytes, total_bytes=None, nringlet=1): + def resize(self, contiguous_bytes: int, total_bytes: Optional[int]=None, nringlet: int=1) -> None: _check( _bf.bfRingResize(self.obj, contiguous_bytes, total_bytes, nringlet) ) @property - def name(self): + def name(self) -> str: n = _get(_bf.bfRingGetName, self.obj) return n.decode() @property - def core(self): + def core(self) -> int: return _get(_bf.bfRingGetAffinity, self.obj) - def begin_writing(self): + def begin_writing(self) -> "RingWriter": return RingWriter(self) def _begin_writing(self): _check( _bf.bfRingBeginWriting(self.obj) ) - def end_writing(self): + def end_writing(self) -> None: _check( _bf.bfRingEndWriting(self.obj) ) - def open_sequence(self, name, guarantee=True): + def open_sequence(self, name: str, guarantee: bool=True) -> "ReadSequence": return ReadSequence(self, name=name, guarantee=guarantee) - def open_sequence_at(self, time_tag, guarantee=True): + def open_sequence_at(self, time_tag: int, guarantee: bool=True) -> "ReadSequence": return ReadSequence(self, which='at', time_tag=time_tag, guarantee=guarantee) - def open_latest_sequence(self, guarantee=True): + def open_latest_sequence(self, guarantee: bool=True) -> "ReadSequence": return ReadSequence(self, which='latest', guarantee=guarantee) - def open_earliest_sequence(self, guarantee=True): + def open_earliest_sequence(self, guarantee: bool=True) -> "ReadSequence": return ReadSequence(self, which='earliest', guarantee=guarantee) # TODO: Alternative name? - def read(self, whence='earliest', guarantee=True): + def read(self, whence: str='earliest', guarantee: bool=True) -> "ReadSequence": with ReadSequence(self, which=whence, guarantee=guarantee, header_transform=self.header_transform) as cur_seq: while True: @@ -145,14 +148,14 @@ def read(self, whence='earliest', guarantee=True): return class RingWriter(object): - def __init__(self, ring): + def __init__(self, ring: Ring): self.ring = ring self.ring._begin_writing() def __enter__(self): return self def __exit__(self, type, value, tb): self.ring.end_writing() - def begin_sequence(self, header, gulp_nframe, buf_nframe): + def begin_sequence(self, header: Dict[str,Any], gulp_nframe: int, buf_nframe: int): return WriteSequence(ring=self.ring, header=header, gulp_nframe=gulp_nframe, @@ -160,7 +163,7 @@ def begin_sequence(self, header, gulp_nframe, buf_nframe): class SequenceBase(object): """Python object for a ring's sequence (data unit)""" - def __init__(self, ring): + def __init__(self, ring: Ring): self._ring = ring self._header = None self._tensor = None @@ -168,26 +171,26 @@ def __init__(self, ring): def _base_obj(self): return ctypes.cast(self.obj, _bf.BFsequence) @property - def ring(self): + def ring(self) -> Ring: return self._ring @property - def name(self): + def name(self) -> str: n = _get(_bf.bfRingSequenceGetName, self._base_obj) return n.decode() @property - def time_tag(self): + def time_tag(self) -> int: return _get(_bf.bfRingSequenceGetTimeTag, self._base_obj) @property - def nringlet(self): + def nringlet(self) -> int: return _get(_bf.bfRingSequenceGetNRinglet, self._base_obj) @property - def header_size(self): + def header_size(self) -> int: return _get(_bf.bfRingSequenceGetHeaderSize, self._base_obj) @property def _header_ptr(self): return _get(_bf.bfRingSequenceGetHeader, self._base_obj) @property - def tensor(self): # TODO: This shouldn't be public + def tensor(self) -> Dict[str,Any]: # TODO: This shouldn't be public if self._tensor is not None: return self._tensor header = self.header @@ -208,7 +211,7 @@ def tensor(self): # TODO: This shouldn't be public self._tensor['dtype_nbyte'] = nbit // 8 return self._tensor @property - def header(self): + def header(self) -> Dict[str,Any]: if self._header is not None: return self._header size = self.header_size @@ -224,7 +227,7 @@ def header(self): return self._header class WriteSequence(SequenceBase): - def __init__(self, ring, header, gulp_nframe, buf_nframe): + def __init__(self, ring: Ring, header: Dict[str,Any], gulp_nframe: int, buf_nframe: int): SequenceBase.__init__(self, ring) self._header = header # This allows passing DataType instances instead of string types @@ -254,16 +257,16 @@ def __enter__(self): return self def __exit__(self, type, value, tb): self.end() - def end(self): + def end(self) -> None: offset_from_head = 0 _check(_bf.bfRingSequenceEnd(self.obj, offset_from_head)) - def reserve(self, nframe, nonblocking=False): + def reserve(self, nframe: int, nonblocking: bool=False) -> "WriteSpan": return WriteSpan(self.ring, self, nframe, nonblocking) class ReadSequence(SequenceBase): - def __init__(self, ring, which='specific', name="", time_tag=None, - other_obj=None, guarantee=True, - header_transform=None): + def __init__(self, ring: Ring, which: str='specific', name: str="", time_tag: Optional[int]=None, + other_obj: Optional[SequenceBase]=None, guarantee: bool=True, + header_transform: Callable=None): SequenceBase.__init__(self, ring) self._ring = ring # A function for transforming the header before it's read @@ -285,17 +288,17 @@ def __enter__(self): return self def __exit__(self, type, value, tb): self.close() - def close(self): + def close(self) -> None: _check(_bf.bfRingSequenceClose(self.obj)) - def increment(self): + def increment(self) -> None: _check(_bf.bfRingSequenceNext(self.obj)) # Must invalidate cached header and tensor because this is now # a new sequence. self._header = None self._tensor = None - def acquire(self, frame_offset, nframe): + def acquire(self, frame_offset: int, nframe: int) -> "ReadSpan": return ReadSpan(self, frame_offset, nframe) - def read(self, nframe, stride=None, begin=0): + def read(self, nframe: int, stride: Optional[int]=None, begin: int=0) -> "ReadSpan": if stride is None: stride = nframe offset = begin @@ -306,7 +309,7 @@ def read(self, nframe, stride=None, begin=0): offset += stride except EndOfDataStop: return - def resize(self, gulp_nframe, buf_nframe=None, buffer_factor=None): + def resize(self, gulp_nframe: int, buf_nframe: Optional[int]=None, buffer_factor: Optional[int]=None) -> None: if buf_nframe is None: if buffer_factor is None: buffer_factor = 3 @@ -315,7 +318,7 @@ def resize(self, gulp_nframe, buf_nframe=None, buffer_factor=None): return self._ring.resize(gulp_nframe * tensor['frame_nbyte'], buf_nframe * tensor['frame_nbyte']) @property - def header(self): + def header(self) -> Dict[str,Any]: hdr = super(ReadSequence, self).header if self.header_transform is not None: hdr = self.header_transform(deepcopy(hdr)) @@ -323,11 +326,12 @@ def header(self): raise ValueError("Header transform returned None") return hdr -def accumulate(vals, op='+', init=None, reverse=False): +def accumulate(vals: Iterable[Any], op: str='+', init: Optional[Any]=None, reverse: bool=False) -> List[Any]: if op == '+': op = lambda a, b: a + b elif op == '*': op = lambda a, b: a * b elif op == 'min': op = lambda a, b: min(a, b) elif op == 'max': op = lambda a, b: max(a, b) + else: raise ValueError(f"Invalid operation '{op}'") results = [] if reverse: vals = reversed(list(vals)) @@ -341,7 +345,7 @@ def accumulate(vals, op='+', init=None, reverse=False): return results class SpanBase(object): - def __init__(self, ring, sequence, writeable): + def __init__(self, ring: Ring, sequence: SequenceBase, writeable: bool): self._ring = ring self._sequence = sequence self.writeable = writeable @@ -353,13 +357,13 @@ def _cache_info(self): self._info = _bf.BFspan_info() _check(_bf.bfRingSpanGetInfo(self._base_obj, self._info)) @property - def ring(self): + def ring(self) -> Ring: return self._ring @property - def sequence(self): + def sequence(self) -> SequenceBase: return self._sequence @property - def tensor(self): + def tensor(self) -> Dict[str,Any]: return self._sequence.tensor @property def _size_bytes(self): @@ -370,10 +374,10 @@ def _stride_bytes(self): # **TODO: Change back-end to use long instead of uint64_t return int(self._info.stride) @property - def frame_nbyte(self): + def frame_nbyte(self) -> int: return self._sequence.tensor['frame_nbyte'] @property - def frame_offset(self): + def frame_offset(self) -> int: # ***TODO: I think _info.offset could potentially not be a multiple # of frame_nbyte, because it's set to _tail when data are @@ -395,19 +399,19 @@ def _nringlet(self): def _data_ptr(self): return self._info.data @property - def nframe(self): + def nframe(self) -> int: size_bytes = self._size_bytes assert(size_bytes % self.sequence.tensor['frame_nbyte'] == 0) nframe = size_bytes // self.sequence.tensor['frame_nbyte'] return nframe @property - def shape(self): + def shape(self) -> Union[List[int],Tuple[int]]: shape = (self._sequence.tensor['ringlet_shape'] + [self.nframe] + self._sequence.tensor['frame_shape']) return shape @property - def strides(self): + def strides(self) -> List[int]: tensor = self._sequence.tensor strides = [tensor['dtype_nbyte']] for dim in reversed(tensor['frame_shape']): @@ -419,10 +423,10 @@ def strides(self): strides = list(reversed(strides)) return strides @property - def dtype(self): + def dtype(self) -> Union[str,np.dtype]: return self._sequence.tensor['dtype'] @property - def data(self): + def data(self) -> ndarray: # TODO: This function used to be super slow due to pyclibrary calls # Check whether it still is! @@ -446,10 +450,10 @@ def data(self): class WriteSpan(SpanBase): def __init__(self, - ring, - sequence, - nframe, - nonblocking=False): + ring: Ring, + sequence: WriteSequence, + nframe: int, + nonblocking: bool=False): SpanBase.__init__(self, ring, sequence, writeable=True) nbyte = nframe * self._sequence.tensor['frame_nbyte'] self.obj = _bf.BFwspan() @@ -460,19 +464,19 @@ def __init__(self, self.commit_nframe = 0 # TODO: Why do exceptions here not show up properly? #raise ValueError("SHOW ME THE ERROR") - def commit(self, nframe): + def commit(self, nframe: int) -> None: assert(nframe <= self.nframe) self.commit_nframe = nframe def __enter__(self): return self def __exit__(self, type, value, tb): self.close() - def close(self): + def close(self) -> None: commit_nbyte = self.commit_nframe * self._sequence.tensor['frame_nbyte'] _check(_bf.bfRingSpanCommit(self.obj, commit_nbyte)) class ReadSpan(SpanBase): - def __init__(self, sequence, frame_offset, nframe): + def __init__(self, sequence: ReadSequence, frame_offset: int, nframe: int): SpanBase.__init__(self, sequence.ring, sequence, writeable=False) tensor = sequence.tensor self.obj = _bf.BFrspan() @@ -485,7 +489,7 @@ def __init__(self, sequence, frame_offset, nframe): self.nframe_skipped = min(self.frame_offset - frame_offset, nframe) self.requested_frame_offset = frame_offset @property - def nframe_overwritten(self): + def nframe_overwritten(self) -> int: nbyte_overwritten = ctypes.c_ulong() _check(_bf.bfRingSpanGetSizeOverwritten(self.obj, nbyte_overwritten)) nbyte_overwritten = nbyte_overwritten.value @@ -495,5 +499,5 @@ def __enter__(self): return self def __exit__(self, type, value, tb): self.release() - def release(self): + def release(self) -> None: _check(_bf.bfRingSpanRelease(self.obj)) diff --git a/python/bifrost/romein.py b/python/bifrost/romein.py index a89c008c6..760c522f6 100644 --- a/python/bifrost/romein.py +++ b/python/bifrost/romein.py @@ -27,6 +27,7 @@ from bifrost.libbifrost import _bf, _check, BifrostObject from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray from bifrost import telemetry telemetry.track_module() @@ -34,19 +35,19 @@ class Romein(BifrostObject): def __init__(self): BifrostObject.__init__(self, _bf.bfRomeinCreate, _bf.bfRomeinDestroy) - def init(self, positions, kernels, ngrid, polmajor=True): + def init(self, positions: ndarray, kernels: ndarray, ngrid: int, polmajor: bool=True) -> None: _check( _bf.bfRomeinInit(self.obj, asarray(positions).as_BFarray(), asarray(kernels).as_BFarray(), ngrid, polmajor) ) - def set_positions(self, positions): + def set_positions(self, positions: ndarray) -> None: _check( _bf.bfRomeinSetPositions(self.obj, asarray(positions).as_BFarray()) ) - def set_kernels(self, kernels): + def set_kernels(self, kernels: ndarray) -> None: _check( _bf.bfRomeinSetKernels(self.obj, asarray(kernels).as_BFarray()) ) - def execute(self, idata, odata): + def execute(self, idata: ndarray, odata: ndarray) -> ndarray: # TODO: Work out how to integrate CUDA stream _check( _bf.bfRomeinExecute(self.obj, asarray(idata).as_BFarray(), diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index 2daf52c46..c10041bb8 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -58,6 +58,8 @@ from collections import defaultdict import os +from typing import IO, Optional + from bifrost import telemetry telemetry.track_module() @@ -205,7 +207,7 @@ def _read_header(file_object): header['header_size'] = file_object.tell() return header -def seek_to_data(file_object): +def seek_to_data(file_object: IO[bytes]) -> None: """Go the the location in the file where the data begins""" file_object.seek(0) if _header_read_one_parameter(file_object) != "HEADER_START": @@ -234,7 +236,7 @@ def seek_to_data(file_object): warnings.warn(f"Unknown header key: '{key}'", RuntimeWarning) return -def pack(data, nbit): +def pack(data: np.ndarray, nbit: int) -> np.ndarray: """downgrade data from 8bits to nbits (per value)""" data = data.flatten() if 8 % nbit != 0: @@ -246,7 +248,7 @@ def pack(data, nbit): outdata += data[index::8 // nbit] // (2**nbit)**index return outdata -def _write_data(data, nbit, file_object): +def _write_data(data: np.ndarray, nbit: int, file_object: IO[bytes]) -> np.ndarray: """Writes given data to an open file, also packing if needed""" file_object.seek(0, 2) if nbit < 8: @@ -254,7 +256,7 @@ def _write_data(data, nbit, file_object): data.tofile(file_object) # TODO: Move this elsewhere? -def unpack(data, nbit): +def unpack(data: np.ndarray, nbit: int) -> np.ndarray: """upgrade data from nbits to 8bits""" if nbit > 8: raise ValueError("unpack: nbit must be <= 8") @@ -293,7 +295,7 @@ def __init__(self): self.dtype = np.uint8 self.nbits = 8 self.header = {} - def interpret_header(self): + def interpret_header(self) -> None: """redefine variables from header dictionary""" self.nifs = self.header['nifs'] self.nchans = self.header['nchans'] @@ -320,18 +322,18 @@ def __init__(self): self.file_object = None self.mode = '' self.data = np.array([]) - def open(self, filename, mode): + def open(self, filename: str, mode: str) -> "SigprocFile": """open the filename, and read the header and data from it""" if 'b' not in mode: raise NotImplementedError("No support for non-binary files") self.mode = mode self.file_object = open(filename, mode) return self - def clear(self): + def clear(self) -> None: """Erases file contents""" self.file_object.seek(0) self.file_object.truncate() - def close(self): + def close(self) -> None: """closes file object""" self.file_object.close() def __enter__(self): @@ -345,7 +347,7 @@ def _find_nframe_from_file(self): frame_bits = self.header['nifs'] * self.header['nchans'] * self.header['nbits'] nframe = (self.file_object.tell() - curpos) * 8 // frame_bits return nframe - def get_nframe(self): + def get_nframe(self) -> int: """calculate the number of frames from the data""" if self.data.size % self.nifs != 0: raise ValueError @@ -353,11 +355,11 @@ def get_nframe(self): raise ValueError nframe = self.data.size // self.nifs // self.nchans return nframe - def read_header(self): + def read_header(self) -> None: """reads in a header from the file and sets local settings""" self.header = _read_header(self.file_object) self.interpret_header() - def read_data(self, start=None, end=None): + def read_data(self, start: Optional[int]=None, end: Optional[int]=None) -> np.ndarray: """read data from file and store it locally""" nframe = self._find_nframe_from_file() seek_to_data(self.file_object) @@ -382,12 +384,12 @@ def read_data(self, start=None, end=None): data = unpack(data, self.nbits) self.data = data return self.data - def write_to(self, filename): + def write_to(self, filename: str) -> None: """writes data and header to a different file""" with open(filename, 'wb') as file_object: _write_header(self.header, file_object) _write_data(self.data, self.nbits, file_object) - def append_data(self, input_data): + def append_data(self, input_data: np.ndarray) -> None: """append data to local data and file""" input_frames = input_data.size // self.nifs // self.nchans input_shape = (input_frames, self.nifs, self.nchans) diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index c21b22f23..f2b07086f 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -58,6 +58,8 @@ import numpy as np from collections import defaultdict +from typing import Any, Dict, IO, Optional + from bifrost import telemetry telemetry.track_module() @@ -132,14 +134,14 @@ 52: 'LWA-DP', 53: 'LWA-ADP'}) -def id2telescope(id_): +def id2telescope(id_: int) -> str: return _telescopes[id_] -def telescope2id(name): +def telescope2id(name: str) -> int: # TODO: Would be better to use a pre-made reverse lookup dict return list(_telescopes.keys())[list(_telescopes.values()).index(name)] -def id2machine(id_): +def id2machine(id_: int) -> str: return _machines[id_] -def machine2id(name): +def machine2id(name: str) -> int: # TODO: Would be better to use a pre-made reverse lookup dict return list(_machines.keys())[list(_machines.values()).index(name)] @@ -167,7 +169,7 @@ def _header_read(f): s = f.read(length) return s.decode() -def write_header(hdr, f): +def write_header(hdr: Dict[str,Any], f: IO[bytes]): _header_write_string(f, "HEADER_START") for key, val in hdr.items(): if val is None: @@ -223,7 +225,7 @@ def _read_header(f): return header # TODO: Move this elsewhere? -def unpack(data, nbit): +def unpack(data: np.ndarray, nbit: int) -> np.ndarray: if nbit > 8: raise ValueError("unpack: nbit must be <= 8") if 8 % nbit != 0: @@ -257,10 +259,10 @@ def unpack(data, nbit): # TODO: Add support for writing # Add support for data_type != filterbank class SigprocFile(object): - def __init__(self, filename=None): + def __init__(self, filename: Optional[str]=None): if filename is not None: self.open(filename) - def open(self, filename): + def open(self, filename: str) -> "SigprocFile": # Note: If nbit < 8, pack_factor = 8 // nbit and the last dimension # is divided by pack_factor, with dtype set to uint8. self.f = open(filename, 'rb') @@ -303,7 +305,7 @@ def open(self, filename): self.frame_nbit = self.frame_size * self.nbit self.frame_nbyte = self.frame_nbit // 8 return self - def close(self): + def close(self) -> None: self.f.close() def __enter__(self): return self @@ -313,14 +315,14 @@ def seek(self, offset, whence=0): if whence == 0: offset += self.header_size self.f.seek(offset, whence) - def bandwidth(self): + def bandwidth(self) -> float: return self.header['nchans'] * self.header['foff'] - def cfreq(self): + def cfreq(self) -> float: return (self.header['fch1'] + 0.5 * (self.header['nchans'] - 1) * self.header['foff']) - def duration(self): + def duration(self) -> float: return self.header['tsamp'] * self.nframe() - def nframe(self): + def nframe(self) -> int: if 'nsamples' not in self.header or self.header['nsamples'] == 0: curpos = self.f.tell() self.f.seek(0, 2) # Seek to end of file @@ -330,7 +332,7 @@ def nframe(self): self.header['nsamples'] = nframe self.f.seek(curpos, 0) # Seek back to where we were return self.header['nsamples'] - def read(self, nframe_or_start, end=None): + def read(self, nframe_or_start: int, end: Optional[int]=None) -> np.ndarray: if end is not None: start = nframe_or_start or 0 if start * self.frame_size * self.nbit % 8 != 0: @@ -368,7 +370,7 @@ def read(self, nframe_or_start, end=None): nframe = data.size // self.frame_size data = data.reshape((nframe,) + self.frame_shape) return data - def readinto(self, buf): + def readinto(self, buf: Any) -> int: """Fills buf with raw bytes straight from the file""" return self.f.readinto(buf) def __str__(self): diff --git a/python/bifrost/temp_storage.py b/python/bifrost/temp_storage.py index ee48bf863..7dc867c44 100644 --- a/python/bifrost/temp_storage.py +++ b/python/bifrost/temp_storage.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -33,14 +33,14 @@ telemetry.track_module() class TempStorage(object): - def __init__(self, space): + def __init__(self, space: str): self.space = space self.size = 0 self.ptr = None self.lock = threading.Lock() def __del__(self): self._free() - def allocate(self, size): + def allocate(self, size: int) -> "TempStorageAllocation": return TempStorageAllocation(self, size) def _allocate(self, size): if size > self.size: @@ -52,14 +52,15 @@ def _free(self): bf.memory.raw_free(self.ptr, self.space) self.ptr = None self.size = 0 + class TempStorageAllocation(object): - def __init__(self, parent, size): + def __init__(self, parent: TempStorage, size: int): self.parent = parent self.parent.lock.acquire() self.parent._allocate(size) self.size = parent.size self.ptr = parent.ptr - def release(self): + def release(self) -> None: self.parent.lock.release() def __enter__(self): return self diff --git a/python/bifrost/transpose.py b/python/bifrost/transpose.py index e84245dbb..b15722fd9 100644 --- a/python/bifrost/transpose.py +++ b/python/bifrost/transpose.py @@ -27,13 +27,16 @@ from bifrost.libbifrost import _bf, _check from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray import ctypes +from typing import List, Optional, Tuple, Union + from bifrost import telemetry telemetry.track_module() -def transpose(dst, src, axes=None): +def transpose(dst: ndarray, src: ndarray, axes: Optional[Union[List[int],Tuple[int]]]=None) -> ndarray: if axes is None: axes = reversed(range(len(dst.shape))) dst_bf = asarray(dst).as_BFarray() @@ -41,3 +44,4 @@ def transpose(dst, src, axes=None): array_type = ctypes.c_int * src.ndim axes_array = array_type(*axes) _check(_bf.bfTranspose(src_bf, dst_bf, axes_array)) + return dst diff --git a/python/bifrost/units.py b/python/bifrost/units.py index 5b38ba3cd..04547e3c1 100644 --- a/python/bifrost/units.py +++ b/python/bifrost/units.py @@ -27,12 +27,14 @@ import pint +from typing import Union + from bifrost import telemetry telemetry.track_module() ureg = pint.UnitRegistry() -def convert_units(value, old_units, new_units): +def convert_units(value: Union[int,float], old_units:str, new_units:str) -> Union[int,float]: old_quantity = value * ureg.parse_expression(old_units) try: new_quantity = old_quantity.to(new_units) @@ -41,7 +43,7 @@ def convert_units(value, old_units, new_units): return new_quantity.magnitude # TODO: May need something more flexible, like a Units wrapper class with __str__ -def transform_units(units, exponent): +def transform_units(units: str, exponent: Union[int,float]) -> str: old_quantity = ureg.parse_expression(units) new_quantity = old_quantity**exponent new_units_str = '{:P~}'.format(new_quantity.units) diff --git a/python/bifrost/unpack.py b/python/bifrost/unpack.py index f25dd7777..2075b980a 100644 --- a/python/bifrost/unpack.py +++ b/python/bifrost/unpack.py @@ -27,11 +27,12 @@ from bifrost.libbifrost import _bf, _check from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray from bifrost import telemetry telemetry.track_module() -def unpack(src, dst, align_msb=False): +def unpack(src: ndarray, dst: ndarray, align_msb: bool=False) -> ndarray: src_bf = asarray(src).as_BFarray() dst_bf = asarray(dst).as_BFarray() _check(_bf.bfUnpack(src_bf, dst_bf, align_msb)) From 3b15030a64356e0a3a5c434ffdcb08d3d681260b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 14:32:35 -0700 Subject: [PATCH 0772/1155] No longer needed? --- python/bifrost/GPUArray.py | 122 ------------------------------------- python/bifrost/ring.py | 1 - 2 files changed, 123 deletions(-) delete mode 100644 python/bifrost/GPUArray.py diff --git a/python/bifrost/GPUArray.py b/python/bifrost/GPUArray.py deleted file mode 100644 index 504aae11e..000000000 --- a/python/bifrost/GPUArray.py +++ /dev/null @@ -1,122 +0,0 @@ - -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. -# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of The Bifrost Authors nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import numpy as np -from bifrost.memory import raw_malloc, raw_free, memset, memcpy, memcpy2D -from bifrost.array import _array2bifrost # This doesn't exist! - -from bifrost import telemetry -telemetry.track_module() - -class GPUArray(object): - def __init__(self, shape, dtype, buffer=None, offset=0, strides=None): - itemsize = dtype().itemsize - shape = tuple(np.array(shape).ravel().astype(np.uint64)) - if strides is None: - # This magic came from http://stackoverflow.com/a/32874295 - strides = itemsize * np.r_[1, np.cumprod(shape[::-1][:-1], - dtype=np.int64)][::-1] - self.shape = shape - self.dtype = dtype - self.buffer = buffer - self.offset = offset - self.strides = strides - self.base = None - self.flags = {'WRITEABLE': True, - 'ALIGNED': buffer % (itemsize == 0 - if buffer is not None - else True), - 'OWNDATA': False, - 'UPDATEIFCOPY': False, - 'C_CONTIGUOUS': self.nbytes == strides[0] * shape[0], - 'F_CONTIGUOUS': False, - 'SPACE': 'cuda'} - class CTypes(object): - def __init__(self, parent): - self.parent = parent - @property - def data(self): - return self.parent.data - self.ctypes = CTypes(self) - if self.buffer is None: - self.buffer = raw_malloc(self.nbytes, space='cuda') - self.flags['OWNDATA'] = True - self.flags['ALIGNED'] = True - memset(self, 0) - else: - self.buffer += offset - def __del__(self): - if self.flags['OWNDATA']: - raw_free(self.buffer, self.flags['SPACE']) - @property - def data(self): - return self.buffer - # def reshape(self, shape): - # # TODO: How to deal with strides? - # # May be non-contiguous but the reshape still works - # # E.g., splitting dims - # return GPUArray(shape, self.dtype, - # buffer=self.buffer, - # offset=self.offset, - # strides=self.strides) - @property - def size(self): - return int(np.prod(self.shape)) - @property - def itemsize(self): - return self.dtype().itemsize - @property - def nbytes(self): - return self.size * self.itemsize - @property - def ndim(self): - return len(self.shape) - def get(self, dst=None): - hdata = dst if dst is not None else np.empty(self.shape, self.dtype) - # hdata = dst if dst is not None else np.zeros(self.shape, self.dtype) - assert(hdata.shape == self.shape) - assert(hdata.dtype == self.dtype) - if self.flags['C_CONTIGUOUS'] and hdata.flags['C_CONTIGUOUS']: - memcpy(hdata, self) - elif self.ndim == 2: - memcpy2D(hdata, self) - else: - raise RuntimeError("Copying with this data layout is unsupported") - return hdata - def set(self, hdata): - assert(hdata.shape == self.shape) - hdata = hdata.astype(self.dtype) - if self.flags['C_CONTIGUOUS'] and hdata.flags['C_CONTIGUOUS']: - memcpy(self, hdata) - elif self.ndim == 2: - memcpy2D(self, hdata) - else: - raise RuntimeError("Copying with this data layout is unsupported") - return self - def as_BFarray(self): - return _array2bifrost(self) diff --git a/python/bifrost/ring.py b/python/bifrost/ring.py index 5420139b3..53760aa44 100644 --- a/python/bifrost/ring.py +++ b/python/bifrost/ring.py @@ -27,7 +27,6 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from bifrost.libbifrost import _bf, _check, _get, BifrostObject, _string2space, _space2string, EndOfDataStop -#from GPUArray import GPUArray from bifrost.DataType import DataType from bifrost.ndarray import ndarray, _address_as_buffer From 6dafd2940c02e8ecf66e6ffdd91032ad854f948d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 14:58:02 -0700 Subject: [PATCH 0773/1155] Too much 'Any'. --- python/bifrost/pipeline.py | 2 +- python/bifrost/ring2.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 5849597a9..b71ce3ddd 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -59,7 +59,7 @@ # module import time to make things easy. device.set_devices_no_spin_cpu() -def izip(*iterables: Iterable[Any]) -> List[Any]: +def izip(*iterables: Iterable) -> List: while True: try: yield [next(it) for it in iterables] diff --git a/python/bifrost/ring2.py b/python/bifrost/ring2.py index b710da4e5..7da7a4582 100644 --- a/python/bifrost/ring2.py +++ b/python/bifrost/ring2.py @@ -326,7 +326,7 @@ def header(self) -> Dict[str,Any]: raise ValueError("Header transform returned None") return hdr -def accumulate(vals: Iterable[Any], op: str='+', init: Optional[Any]=None, reverse: bool=False) -> List[Any]: +def accumulate(vals: Iterable, op: str='+', init: Optional=None, reverse: bool=False) -> List: if op == '+': op = lambda a, b: a + b elif op == '*': op = lambda a, b: a * b elif op == 'min': op = lambda a, b: min(a, b) From 2a147c5763ff9c9dccb75c8148af7e599c1aef16 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 15:14:24 -0700 Subject: [PATCH 0774/1155] Copy and paste. --- python/typehinting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/typehinting.py b/python/typehinting.py index 318399ad6..ae06c0b05 100644 --- a/python/typehinting.py +++ b/python/typehinting.py @@ -24,7 +24,7 @@ def build_typehinting(filename): name = name.replace('BF_SPACE_', '') enums[tag][name.lower()] = value elif tag == 'reduce': - name = name.replace('BF_SPACE_', '') + name = name.replace('BF_REDUCE_', '') name = name.replace('POWER_', 'pwr') enums[tag][name.lower()] = value break From fd427f48b1c98ec3d9b35438a6bf9d86e3edb92c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 15:30:02 -0700 Subject: [PATCH 0775/1155] Type hinting round 2. --- python/bifrost/DataType.py | 40 ++++++++++++++--------------- python/bifrost/blocks/serialize.py | 29 ++++++++++++--------- python/bifrost/blocks/sigproc.py | 25 ++++++++++-------- python/bifrost/blocks/transpose.py | 12 ++++++--- python/bifrost/blocks/unpack.py | 16 +++++++----- python/bifrost/blocks/wav.py | 33 ++++++++++++++---------- python/bifrost/views/basic_views.py | 27 +++++++++++-------- 7 files changed, 105 insertions(+), 77 deletions(-) diff --git a/python/bifrost/DataType.py b/python/bifrost/DataType.py index 367eb004a..af63baa28 100644 --- a/python/bifrost/DataType.py +++ b/python/bifrost/DataType.py @@ -38,7 +38,7 @@ cf32: 32+32-bit complex floating point """ -from bifrost.libbifrost import _bf +from bifrost.libbifrost import _bf, _th from bifrost.libbifrost_generated import BF_FLOAT128_ENABLED import numpy as np @@ -106,7 +106,7 @@ NUMPY_TYPEMAP['f'][128] = np.float128 NUMPY_TYPEMAP['cf'][128] = np.complex256 -def is_vector_structure(dtype): +def is_vector_structure(dtype: np.dtype) -> bool: if dtype.names is None: return False ndim = len(dtype.names) @@ -117,7 +117,7 @@ def is_vector_structure(dtype): class DataType(object): # Note: Default of None results in default Numpy type (np.float) - def __init__(self, t=None): + def __init__(self, t: Optional[Union[str,_th.BFdtype_enum,_bf.BFdtype,"DataType",np.dtype]]=None): if isinstance(t, str): for i, char in enumerate(t): if char.isdigit(): @@ -125,8 +125,8 @@ def __init__(self, t=None): self._kind = t[:i] self._nbit = int(t[i:]) self._veclen = 1 # TODO: Consider supporting this as part of string - elif isinstance(t, _bf.BFdtype): # Note: This is actually just a c_int - t = int(t) + elif isinstance(t, (_th.BFdtype_enum, _bf.BFdtype)): # Note: This is actually just a c_int + t = _th.BFdtype_enum(t).value self._nbit = t & BF_DTYPE_NBIT_BITS is_complex = bool(t & _bf.BF_DTYPE_COMPLEX_BIT) self._kind = KINDMAP[t & _bf.BF_DTYPE_TYPE_BITS] @@ -177,10 +177,10 @@ def __eq__(self, other): self._veclen == other._veclen) def __ne__(self, other): return not (self == other) - def as_BFdtype(self): + def as_BFdtype(self) -> _bf.BFdtype: base = TYPEMAP[self._kind][self._nbit] return base | ((self._veclen - 1) << _bf.BF_DTYPE_VECTOR_BIT0) - def as_numpy_dtype(self): + def as_numpy_dtype(self) -> np.dtype: base = np.dtype(NUMPY_TYPEMAP[self._kind][self._nbit]) if self._veclen == 1: return base @@ -197,21 +197,21 @@ def __str__(self): else: return f"{self._kind}{self._nbit}[{self._veclen}]" @property - def is_complex(self): + def is_complex(self) -> bool: return self._kind[0] == 'c' @property - def is_real(self): + def is_real(self) -> bool: return not self.is_complex @property - def is_signed(self): + def is_signed(self) -> bool: return 'i' in self._kind or 'f' in self._kind @property - def is_floating_point(self): + def is_floating_point(self) -> bool: return 'f' in self._kind @property - def is_integer(self): + def is_integer(self) -> bool: return 'i' in self._kind or 'u' in self._kind - def as_floating_point(self): + def as_floating_point(self) -> "DataType": """Returns the smallest floating-point type that can represent all values that self can. """ @@ -220,32 +220,32 @@ def as_floating_point(self): kind = 'cf' if self.is_complex else 'f' nbit = 32 if self._nbit <= 24 else 64 return DataType((kind, nbit, self._veclen)) - def as_integer(self, nbit=None): + def as_integer(self, nbit: int=None) -> "DataType": if nbit is None: nbit = self._nbit kind = self._kind if self.is_floating_point: kind = kind.replace('f', 'i') return DataType((kind, nbit, self._veclen)) - def as_real(self): + def as_real(self) -> "DataType": if self.is_complex: return DataType((self._kind[1:], self._nbit, self._veclen)) else: return self - def as_complex(self): + def as_complex(self) -> "DataType": if self.is_complex: return self else: return DataType(('c' + self._kind, self._nbit, self._veclen)) - def as_nbit(self, nbit): + def as_nbit(self, nbit: int) -> "DataType": return DataType((self._kind, nbit, self._veclen)) - def as_vector(self, veclen): + def as_vector(self, veclen: int) -> "DataType": return DataType((self._kind, self._nbit, veclen)) @property - def itemsize_bits(self): + def itemsize_bits(self) -> int: return self._nbit * (1 + self.is_complex) * self._veclen @property - def itemsize(self): + def itemsize(self) -> int: item_nbit = self.itemsize_bits if item_nbit < 8: raise ValueError('itemsize is undefined when nbit < 8') diff --git a/python/bifrost/blocks/serialize.py b/python/bifrost/blocks/serialize.py index 04cbc03f3..652b57856 100644 --- a/python/bifrost/blocks/serialize.py +++ b/python/bifrost/blocks/serialize.py @@ -26,6 +26,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from bifrost.pipeline import SinkBlock, SourceBlock +from bifrost.ring2 import Ring, ReadSequence, ReadSpan, WriteSpan import os import warnings try: @@ -36,6 +37,8 @@ import glob from functools import reduce +from typing import Any, Dict, List, Optional + from bifrost import telemetry telemetry.track_module() @@ -46,7 +49,7 @@ def _parse_bifrost_filename(fname): return frame0, ringlet_inds class BifrostReader(object): - def __init__(self, basename): + def __init__(self, basename: str): assert(basename.endswith('.bf')) hdr_filename = basename + '.json' with open(hdr_filename, 'r') as hdr_file: @@ -85,7 +88,7 @@ def __exit__(self, type, value, tb): else: for f in self.files: f.close() - def readinto(self, buf, frame_nbyte): + def readinto(self, buf: memoryview, frame_nbyte: int) -> int: if self.cur_file == self.nfile: return 0 nframe_read = 0 @@ -116,17 +119,18 @@ def readinto(self, buf, frame_nbyte): return nframe_read class DeserializeBlock(SourceBlock): - def __init__(self, filenames, gulp_nframe, *args, **kwargs): + def __init__(self, filenames: List[str], gulp_nframe: int, *args, **kwargs): super(DeserializeBlock, self).__init__(filenames, gulp_nframe, *args, **kwargs) - def create_reader(self, sourcename): + def create_reader(self, sourcename: str) -> BifrostReader: return BifrostReader(sourcename) - def on_sequence(self, ireader, sourcename): + def on_sequence(self, ireader: BifrostReader, sourcename: str) -> List[Dict[str,Any]]: return [ireader.header] - def on_data(self, reader, ospans): + def on_data(self, reader: BifrostReader, ospans: List[WriteSpan]) -> List[int]: ospan = ospans[0] return [reader.readinto(ospan.data, ospan.frame_nbyte)] -def deserialize(filenames, gulp_nframe, *args, **kwargs): +def deserialize(filenames: List[str], gulp_nframe: int, + *args, **kwargs) -> DeserializeBlock: """Deserializes a data stream from a set of files using a simple data format Sequence headers are read as JSON files, and sequence data are read @@ -166,7 +170,7 @@ def deserialize(filenames, gulp_nframe, *args, **kwargs): # **TODO: Write a DeserializeBlock that does the inverse of this class SerializeBlock(SinkBlock): - def __init__(self, iring, path, max_file_size=None, *args, **kwargs): + def __init__(self, iring: Ring, path: str, max_file_size: Optional[int]=None, *args, **kwargs): super(SerializeBlock, self).__init__(iring, *args, **kwargs) if path is None: path = '' @@ -197,7 +201,7 @@ def _open_new_data_files(self, frame_offset): raise NotImplementedError("Multiple ringlet axes not supported") # Open data files self.ofiles = [open(fname, 'wb') for fname in filenames] - def on_sequence(self, iseq): + def on_sequence(self, iseq: ReadSequence) -> None: hdr = iseq.header tensor = hdr['_tensor'] if hdr['name'] != '': @@ -216,9 +220,9 @@ def on_sequence(self, iseq): self.frame_axis = shape.index(-1) self.nringlet = reduce(lambda a, b: a * b, shape[:self.frame_axis], 1) self._open_new_data_files(frame_offset=0) - def on_sequence_end(self, iseq): + def on_sequence_end(self, iseq: ReadSequence) -> None: self._close_data_files() - def on_data(self, ispan): + def on_data(self, ispan: ReadSpan) -> None: if self.nringlet == 1: bytes_to_write = ispan.data.nbytes else: @@ -234,7 +238,8 @@ def on_data(self, ispan): for r in range(self.nringlet): ispan.data[r].tofile(self.ofiles[r]) -def serialize(iring, path=None, max_file_size=None, *args, **kwargs): +def serialize(iring: Ring, path: str=None, max_file_size: Optional[int]=None, + *args, **kwargs) -> SerializeBlock: """Serializes a data stream to a set of files using a simple data format Sequence headers are written as JSON files, and sequence data are written diff --git a/python/bifrost/blocks/sigproc.py b/python/bifrost/blocks/sigproc.py index ad9675f74..ada18f7a4 100644 --- a/python/bifrost/blocks/sigproc.py +++ b/python/bifrost/blocks/sigproc.py @@ -29,10 +29,13 @@ import bifrost.sigproc2 as sigproc from bifrost.DataType import DataType from bifrost.units import convert_units +from bifrost.ring2 import Ring, ReadSequence, ReadSpan, WriteSpan from numpy import transpose import os +from typing import Any, Dict, List, Optional + from bifrost import telemetry telemetry.track_module() @@ -46,12 +49,12 @@ def _unix2mjd(unix): return unix / 86400. + 40587 class SigprocSourceBlock(SourceBlock): - def __init__(self, filenames, gulp_nframe, unpack=True, *args, **kwargs): + def __init__(self, filenames: List[str], gulp_nframe: int, unpack: bool=True, *args, **kwargs): super(SigprocSourceBlock, self).__init__(filenames, gulp_nframe, *args, **kwargs) self.unpack = unpack - def create_reader(self, sourcename): + def create_reader(self, sourcename: str) -> sigproc.SigprocFile: return sigproc.SigprocFile(sourcename) - def on_sequence(self, ireader, sourcename): + def on_sequence(self, ireader: sigproc.SigprocFile, sourcename: str) -> List[Dict[str,Any]]: ihdr = ireader.header assert(ihdr['data_type'] in [1, # filterbank 2, # (dedispersed) time series @@ -98,7 +101,7 @@ def on_sequence(self, ireader, sourcename): ohdr['time_tag'] = time_tag ohdr['name'] = sourcename return [ohdr] - def on_data(self, reader, ospans): + def on_data(self, reader: sigproc.SigprocFile, ospans: List[WriteSpan]) -> List[int]: ospan = ospans[0] #print("SigprocReadBlock::on_data", ospan.data.dtype) if self.unpack: @@ -127,7 +130,8 @@ def on_data(self, reader, ospans): nframe = nbyte // ospan.frame_nbyte return [nframe] -def read_sigproc(filenames, gulp_nframe, unpack=True, *args, **kwargs): +def read_sigproc(filenames: List[str], gulp_nframe: int, unpack: bool=True, + *args, **kwargs) -> SigprocSourceBlock: """Read SIGPROC data files. Capable of reading filterbank, time series, and dedispersed subband data. @@ -156,12 +160,12 @@ def _copy_item_if_exists(dst, src, key, newkey=None): dst[newkey] = src[key] class SigprocSinkBlock(SinkBlock): - def __init__(self, iring, path=None, *args, **kwargs): + def __init__(self, iring: Ring, path: Optional[str]=None, *args, **kwargs): super(SigprocSinkBlock, self).__init__(iring, *args, **kwargs) if path is None: path = '' self.path = path - def on_sequence(self, iseq): + def on_sequence(self, iseq: ReadSequence) -> None: ihdr = iseq.header itensor = ihdr['_tensor'] @@ -316,14 +320,14 @@ def on_sequence(self, iseq): " [time, pol]\n [dispersion, time, pol]\n" + " [pol, freq, phase]") - def on_sequence_end(self, iseq): + def on_sequence_end(self, iseq: ReadSequence) -> None: if hasattr(self, 'ofile'): self.ofile.close() elif hasattr(self, 'ofiles'): for ofile in self.ofiles: ofile.close() - def on_data(self, ispan): + def on_data(self, ispan: ReadSpan) -> None: idata = ispan.data if self.data_format == 'filterbank': if len(idata.shape) == 3: @@ -353,7 +357,8 @@ def on_data(self, ispan): else: raise ValueError("Internal error: Unknown data format!") -def write_sigproc(iring, path=None, *args, **kwargs): +def write_sigproc(iring: Ring, path: Optional[str]=None, + *args, **kwargs) -> SigprocSinkBlock: """Write data as Sigproc files. Args: diff --git a/python/bifrost/blocks/transpose.py b/python/bifrost/blocks/transpose.py index a9df042d4..70cd85e93 100644 --- a/python/bifrost/blocks/transpose.py +++ b/python/bifrost/blocks/transpose.py @@ -28,19 +28,22 @@ from bifrost.transpose import transpose as bf_transpose from bifrost.memory import space_accessible from bifrost.pipeline import TransformBlock +from bifrost.ring2 import Ring, ReadSequence, ReadSpan, WriteSpan from copy import deepcopy import numpy as np +from typing import Any, Dict, List, Tuple, Union + from bifrost import telemetry telemetry.track_module() class TransposeBlock(TransformBlock): - def __init__(self, iring, axes, *args, **kwargs): + def __init__(self, iring: Ring, axes: Union[List[int],Tuple[int]], *args: Any, **kwargs: Any): super(TransposeBlock, self).__init__(iring, *args, **kwargs) self.specified_axes = axes self.space = self.orings[0].space - def on_sequence(self, iseq): + def on_sequence(self, iseq: ReadSequence) -> Dict[str,Any]: ihdr = iseq.header itensor = ihdr['_tensor'] # TODO: Is this a good idea? @@ -69,14 +72,15 @@ def on_sequence(self, iseq): otensor[item] = [itensor[item][axis] for axis in self.axes] return ohdr - def on_data(self, ispan, ospan): + def on_data(self, ispan: ReadSpan, ospan: WriteSpan) -> None: # TODO: bf.memory.transpose should support system space too if space_accessible(self.space, ['cuda']): bf_transpose(ospan.data, ispan.data, self.axes) else: ospan.data[...] = np.transpose(ispan.data, self.axes) -def transpose(iring, axes, *args, **kwargs): +def transpose(iring: Ring, axes: Union[List[int],Tuple[int]], + *args: Any, **kwargs: Any) -> TransposeBlock: """Transpose (permute) axes of the data. Args: diff --git a/python/bifrost/blocks/unpack.py b/python/bifrost/blocks/unpack.py index 4119736ad..d3bf858a6 100644 --- a/python/bifrost/blocks/unpack.py +++ b/python/bifrost/blocks/unpack.py @@ -28,22 +28,26 @@ from bifrost.unpack import unpack as bf_unpack from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType +from bifrost.Ring2 import Ring, ReadSequence, ReadSpan, WriteSpan from copy import deepcopy +import numpy as np + +from typing import Any, Dict, Tuple, Union from bifrost import telemetry telemetry.track_module() class UnpackBlock(TransformBlock): - def __init__(self, iring, dtype, align_msb=False, - *args, **kwargs): + def __init__(self, iring: Ring, dtype: Union[str,np.dtype], align_msb: bool=False, + *args: Any, **kwargs: Any): super(UnpackBlock, self).__init__(iring, *args, **kwargs) self.dtype = dtype self.align_msb = align_msb - def define_valid_input_spaces(self): + def define_valid_input_spaces(self) -> Tuple[str]: """Return set of valid spaces (or 'any') for each input""" return ('system',) - def on_sequence(self, iseq): + def on_sequence(self, iseq: ReadSequence) -> Dict[str,Any]: ihdr = iseq.header ohdr = deepcopy(ihdr) itype = DataType(ihdr['_tensor']['dtype']) @@ -56,12 +60,12 @@ def on_sequence(self, iseq): otype = self.dtype ohdr['_tensor']['dtype'] = otype return ohdr - def on_data(self, ispan, ospan): + def on_data(self, ispan: ReadSpan, ospan: WriteSpan) -> None: idata = ispan.data odata = ospan.data bf_unpack(idata, odata, self.align_msb) -def unpack(iring, dtype, *args, **kwargs): +def unpack(iring: Ring, dtype: Union[str,np.dtype], *args: Any, **kwargs: Any) -> UnpackBlock: """Unpack data to a larger data type. Args: diff --git a/python/bifrost/blocks/wav.py b/python/bifrost/blocks/wav.py index 2c045681c..53a188e0c 100644 --- a/python/bifrost/blocks/wav.py +++ b/python/bifrost/blocks/wav.py @@ -28,20 +28,23 @@ from bifrost.pipeline import SourceBlock, SinkBlock from bifrost.DataType import DataType from bifrost.units import convert_units +from bifrost.ring2 import Ring, ReadSequence, WriteSpan import struct import os +from typing import Any, Dict, IO, List, Tuple + from bifrost import telemetry telemetry.track_module() -def wav_read_chunk_desc(f): +def wav_read_chunk_desc(f: IO[bytes]) -> Tuple[str,int,str]: id_, size, fmt = struct.unpack('<4sI4s', f.read(12)) return id_.decode(), size, fmt.decode() -def wav_read_subchunk_desc(f): +def wav_read_subchunk_desc(f: IO[bytes]) -> Tuple[str,size]: id_, size = struct.unpack('<4sI', f.read(8)) return id_.decode(), size -def wav_read_subchunk_fmt(f, size): +def wav_read_subchunk_fmt(f: IO[bytes], size: int) -> Dict[str,int]: assert(size >= 16) packed = f.read(16) f.seek(size - 16, 1) @@ -50,7 +53,7 @@ def wav_read_subchunk_fmt(f, size): vals = struct.unpack(' Tuple[Dict[str,int],int]: # **TODO: Some files actually have extra subchunks _after_ the data as well # This is rather annoying :/ chunk_id, chunk_size, chunk_fmt = wav_read_chunk_desc(f) @@ -66,7 +69,7 @@ def wav_read_header(f): subchunk_id, subchunk_size = wav_read_subchunk_desc(f) data_size = subchunk_size return hdr, data_size -def wav_write_header(f, hdr, chunk_size=0, data_size=0): +def wav_write_header(f: IO[bytes], hdr:Dict[str,int], chunk_size: int=0, data_size: int=0) -> None: # Note: chunk_size = file size - 8 f.write(struct.pack('<4sI4s4sIHHIIHH4sI', 'RIFF', chunk_size, 'WAVE', @@ -76,9 +79,9 @@ def wav_write_header(f, hdr, chunk_size=0, data_size=0): 'data', data_size)) class WavSourceBlock(SourceBlock): - def create_reader(self, sourcename): + def create_reader(self, sourcename: str) -> IO[bytes]: return open(sourcename, 'rb') - def on_sequence(self, reader, sourcename): + def on_sequence(self, reader: IO[bytes], sourcename: str) -> List[Dict[str,Any]]: hdr, self.bytes_remaining = wav_read_header(reader) ohdr = { '_tensor': { @@ -94,7 +97,7 @@ def on_sequence(self, reader, sourcename): } return [ohdr] - def on_data(self, reader, ospans): + def on_data(self, reader: IO[bytes], ospans: List[WriteSpan]) -> List[int]: ospan = ospans[0] nbyte = reader.readinto(ospan.data) if nbyte % ospan.frame_nbyte: @@ -109,7 +112,8 @@ def on_data(self, reader, ospans): nframe = nbyte // ospan.frame_nbyte return [nframe] -def read_wav(sourcefiles, gulp_nframe, *args, **kwargs): +def read_wav(sourcefiles: List[str], gulp_nframe: int + *args: Any, **kwargs: Any) -> WavSourceBlock: """Read Wave files (.wav). Args: @@ -129,12 +133,12 @@ def read_wav(sourcefiles, gulp_nframe, *args, **kwargs): return WavSourceBlock(sourcefiles, gulp_nframe, *args, **kwargs) class WavSinkBlock(SinkBlock): - def __init__(self, iring, path=None, *args, **kwargs): + def __init__(self, iring: Ring, path: Optional[str]=None, *args: Any, **kwargs: Any): super(WavSinkBlock, self).__init__(iring, *args, **kwargs) if path is None: path = '' self.path = path - def on_sequence(self, iseq): + def on_sequence(self, iseq: ReadSequence) -> None: ihdr = iseq.header itensor = ihdr['_tensor'] @@ -171,14 +175,14 @@ def on_sequence(self, iseq): else: raise ValueError("Incompatible axes: " + str(axnames)) - def on_sequence_end(self, iseq): + def on_sequence_end(self, iseq: ReadSequence) -> None: if hasattr(self, 'ofile'): self.ofile.close() elif hasattr(self, 'ofiles'): for ofile in self.ofiles: ofile.close() - def on_data(self, ispan): + def on_data(self, ispan: ReadSpan) -> None: idata = ispan.data if idata.ndim == 2: idata.tofile(self.ofile) @@ -188,7 +192,8 @@ def on_data(self, ispan): else: raise ValueError("Internal error: Unknown data format!") -def write_wav(iring, path=None, *args, **kwargs): +def write_wav(iring: Ring, path: Optional[str]=None, + *args: Any, **kwargs: Any) -> WavSinkBlock: """Write data as Wave files (.wav). Args: diff --git a/python/bifrost/views/basic_views.py b/python/bifrost/views/basic_views.py index 419bdc7cf..d67e17a89 100644 --- a/python/bifrost/views/basic_views.py +++ b/python/bifrost/views/basic_views.py @@ -25,27 +25,31 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from bifrost.pipeline import block_view +from bifrost.libbifrost import _bf, _th +from bifrost.pipeline import Block, block_view from bifrost.DataType import DataType from bifrost.units import convert_units -from numpy import isclose +from numpy import dtype as np_dtype, isclose + +from typing import Callable, Optional, Union from bifrost import telemetry telemetry.track_module() -def custom(block, hdr_transform): +def custom(block: Block, hdr_transform: Callable) -> Block: """An alias to `bifrost.pipeline.block_view` """ return block_view(block, hdr_transform) -def rename_axis(block, old, new): +def rename_axis(block: Block, old: str, new: str) -> Block: def header_transform(hdr, old=old, new=new): axis = hdr['_tensor']['labels'].index(old) hdr['_tensor']['labels'][axis] = new return hdr return block_view(block, header_transform) -def reinterpret_axis(block, axis, label, scale=None, units=None): +def reinterpret_axis(block: Block, axis: int, label: str, + scale: Optional[Union[int,float]]=None, units: Optional[str]=None) -> Block: """ Manually reinterpret the scale and/or units on an axis """ def header_transform(hdr, axis=axis, label=label, scale=scale, units=units): tensor = hdr['_tensor'] @@ -60,7 +64,7 @@ def header_transform(hdr, axis=axis, label=label, scale=scale, units=units): return hdr return block_view(block, header_transform) -def reverse_scale(block, axis): +def reverse_scale(block: Block, axis: int) -> Block: """ Manually reverse the scale factor on a given axis""" def header_transform(hdr, axis=axis): tensor = hdr['_tensor'] @@ -70,7 +74,8 @@ def header_transform(hdr, axis=axis): return hdr return block_view(block, header_transform) -def add_axis(block, axis, label=None, scale=None, units=None): +def add_axis(block: Block, axis: int, label: Optional[str]=None, + scale: Optional[Union[int,float]]=None, units: Optional[str]=None) -> Block: """Add an extra dimension to the frame at position 'axis' E.g., if the shape is [-1, 3, 2], then @@ -96,7 +101,7 @@ def header_transform(hdr, axis=axis, label=label, scale=scale, units=units): return hdr return block_view(block, header_transform) -def delete_axis(block, axis): +def delete_axis(block: Block, axis: int) -> Block: """Remove a unitary dimension from the frame E.g., if the shape is [-1, 1, 3, 2], then @@ -126,7 +131,7 @@ def header_transform(hdr, axis=axis): return hdr return block_view(block, header_transform) -def astype(block, dtype): +def astype(block: Block, dtype: Union[str,_th.BFdtype_enum,_bf.BFdtype,np_dtype]) -> Block: def header_transform(hdr, new_dtype=dtype): tensor = hdr['_tensor'] old_dtype = tensor['dtype'] @@ -140,7 +145,7 @@ def header_transform(hdr, new_dtype=dtype): return hdr return block_view(block, header_transform) -def split_axis(block, axis, n, label=None): +def split_axis(block: Block, axis: int, n: int, label: Optional[str]=None) -> Block: # Set function attributes to enable capture in nested function (closure) def header_transform(hdr, axis=axis, n=n, label=label): tensor = hdr['_tensor'] @@ -171,7 +176,7 @@ def header_transform(hdr, axis=axis, n=n, label=label): return hdr return block_view(block, header_transform) -def merge_axes(block, axis1, axis2, label=None): +def merge_axes(block: Block, axis1: int, axis2: int, label: Optional[str]=None) -> Block: def header_transform(hdr, axis1=axis1, axis2=axis2, label=label): tensor = hdr['_tensor'] if isinstance(axis1, str): From a8822a914e8a2845515ea3e6463982bfcacbc77d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 15:30:39 -0700 Subject: [PATCH 0776/1155] Update for type hints module. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 65ddc68fe..fd4652dda 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ doc version.py /python/bifrost/version/__init__.py *_generated.py +*_typehints.py .log*.txt test/data/ *.bin From 4c9ff5d06dbddadcbe36502623785fd07f720428 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 16:03:33 -0700 Subject: [PATCH 0777/1155] No long in Py3. --- python/bifrost/map.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/map.py b/python/bifrost/map.py index 7d30164ac..a74da1297 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -39,12 +39,12 @@ telemetry.track_module() def _is_literal(x: Any) -> bool: - return isinstance(x, (int, long, float, complex)) + return isinstance(x, (int, float, complex)) def _convert_to_array(arg: Any) -> ndarray: if _is_literal(arg): arr = np.array(arg) - if isinstance(arg, (int, long)) and -(1 << 31) <= arg < (1 << 31): + if isinstance(arg, int) and -(1 << 31) <= arg < (1 << 31): arr = arr.astype(np.int32) # TODO: Any way to decide when these should be double-precision? elif isinstance(arg, float): From 009bbd7b763a6f508b325724ebc69af78eac5f44 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 20:24:18 -0700 Subject: [PATCH 0778/1155] Another import fix. --- python/bifrost/DataType.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/bifrost/DataType.py b/python/bifrost/DataType.py index af63baa28..07928c627 100644 --- a/python/bifrost/DataType.py +++ b/python/bifrost/DataType.py @@ -42,6 +42,8 @@ from bifrost.libbifrost_generated import BF_FLOAT128_ENABLED import numpy as np +from typing import Optional, Union + from bifrost import telemetry telemetry.track_module() From 3aa91cc491bde32627b5f44017d015e99a98ebcc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 20:42:07 -0700 Subject: [PATCH 0779/1155] Typo. --- python/bifrost/blocks/unpack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/blocks/unpack.py b/python/bifrost/blocks/unpack.py index d3bf858a6..053f8a95f 100644 --- a/python/bifrost/blocks/unpack.py +++ b/python/bifrost/blocks/unpack.py @@ -28,7 +28,7 @@ from bifrost.unpack import unpack as bf_unpack from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType -from bifrost.Ring2 import Ring, ReadSequence, ReadSpan, WriteSpan +from bifrost.ring2 import Ring, ReadSequence, ReadSpan, WriteSpan from copy import deepcopy import numpy as np From c41af7288f41c18b495bc69e3f4708d3fdf39f88 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 15 Feb 2023 20:53:13 -0700 Subject: [PATCH 0780/1155] Drop Any from args and kwargs. --- python/bifrost/blocks/transpose.py | 4 ++-- python/bifrost/blocks/unpack.py | 4 ++-- python/bifrost/blocks/wav.py | 6 +++--- python/bifrost/pipeline.py | 8 ++++---- python/bifrost/portaudio.py | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/python/bifrost/blocks/transpose.py b/python/bifrost/blocks/transpose.py index 70cd85e93..85b203290 100644 --- a/python/bifrost/blocks/transpose.py +++ b/python/bifrost/blocks/transpose.py @@ -39,7 +39,7 @@ telemetry.track_module() class TransposeBlock(TransformBlock): - def __init__(self, iring: Ring, axes: Union[List[int],Tuple[int]], *args: Any, **kwargs: Any): + def __init__(self, iring: Ring, axes: Union[List[int],Tuple[int]], *args, **kwargs): super(TransposeBlock, self).__init__(iring, *args, **kwargs) self.specified_axes = axes self.space = self.orings[0].space @@ -80,7 +80,7 @@ def on_data(self, ispan: ReadSpan, ospan: WriteSpan) -> None: ospan.data[...] = np.transpose(ispan.data, self.axes) def transpose(iring: Ring, axes: Union[List[int],Tuple[int]], - *args: Any, **kwargs: Any) -> TransposeBlock: + *args, **kwargs) -> TransposeBlock: """Transpose (permute) axes of the data. Args: diff --git a/python/bifrost/blocks/unpack.py b/python/bifrost/blocks/unpack.py index 053f8a95f..4baa6a4d0 100644 --- a/python/bifrost/blocks/unpack.py +++ b/python/bifrost/blocks/unpack.py @@ -40,7 +40,7 @@ class UnpackBlock(TransformBlock): def __init__(self, iring: Ring, dtype: Union[str,np.dtype], align_msb: bool=False, - *args: Any, **kwargs: Any): + *args, **kwargs): super(UnpackBlock, self).__init__(iring, *args, **kwargs) self.dtype = dtype self.align_msb = align_msb @@ -65,7 +65,7 @@ def on_data(self, ispan: ReadSpan, ospan: WriteSpan) -> None: odata = ospan.data bf_unpack(idata, odata, self.align_msb) -def unpack(iring: Ring, dtype: Union[str,np.dtype], *args: Any, **kwargs: Any) -> UnpackBlock: +def unpack(iring: Ring, dtype: Union[str,np.dtype], *args, **kwargs) -> UnpackBlock: """Unpack data to a larger data type. Args: diff --git a/python/bifrost/blocks/wav.py b/python/bifrost/blocks/wav.py index 53a188e0c..9b78c5832 100644 --- a/python/bifrost/blocks/wav.py +++ b/python/bifrost/blocks/wav.py @@ -113,7 +113,7 @@ def on_data(self, reader: IO[bytes], ospans: List[WriteSpan]) -> List[int]: return [nframe] def read_wav(sourcefiles: List[str], gulp_nframe: int - *args: Any, **kwargs: Any) -> WavSourceBlock: + *args, **kwargs) -> WavSourceBlock: """Read Wave files (.wav). Args: @@ -133,7 +133,7 @@ def read_wav(sourcefiles: List[str], gulp_nframe: int return WavSourceBlock(sourcefiles, gulp_nframe, *args, **kwargs) class WavSinkBlock(SinkBlock): - def __init__(self, iring: Ring, path: Optional[str]=None, *args: Any, **kwargs: Any): + def __init__(self, iring: Ring, path: Optional[str]=None, *args, **kwargs): super(WavSinkBlock, self).__init__(iring, *args, **kwargs) if path is None: path = '' @@ -193,7 +193,7 @@ def on_data(self, ispan: ReadSpan) -> None: raise ValueError("Internal error: Unknown data format!") def write_wav(iring: Ring, path: Optional[str]=None, - *args: Any, **kwargs: Any) -> WavSinkBlock: + *args, **kwargs) -> WavSinkBlock: """Write data as Wave files (.wav). Args: diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index b71ce3ddd..fba605d4a 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -78,7 +78,7 @@ def get_current_block_scope() -> "BlockScope": else: return None -def block_scope(*args: Any, **kwargs: Any) -> "BlockScope": +def block_scope(*args, **kwargs) -> "BlockScope": return BlockScope(*args, **kwargs) class BlockScope(object): @@ -220,7 +220,7 @@ class PipelineInitError(Exception): class Pipeline(BlockScope): instance_count = 0 - def __init__(self, name: str=None, **kwargs: Any): + def __init__(self, name: str=None, **kwargs): if name is None: name = f"Pipeline_{Pipeline.instance_count}" Pipeline.instance_count += 1 @@ -324,7 +324,7 @@ class Block(BlockScope): def __init__(self, irings: List[Union["Block",Ring]], name: Optional[str]=None, type_: Optional[str]=None, - **kwargs: Any): + **kwargs): self.type = type_ or self.__class__.__name__ self.name = name or f"{self.type}_{Block.instance_counts[self.type]}" Block.instance_counts[self.type] += 1 @@ -352,7 +352,7 @@ def __init__(self, irings: List[Union["Block",Ring]], self.init_trace = ''.join(traceback.format_stack()[:-1]) def shutdown(self) -> None: self.shutdown_event.set() - def create_ring(self, *args: Any, **kwargs: Any) -> Ring: + def create_ring(self, *args, **kwargs) -> Ring: return Ring(*args, owner=self, **kwargs) def run(self) -> None: #affinity.set_openmp_cores(cpus) # TODO diff --git a/python/bifrost/portaudio.py b/python/bifrost/portaudio.py index 22f9b1706..5e32a7e45 100644 --- a/python/bifrost/portaudio.py +++ b/python/bifrost/portaudio.py @@ -232,7 +232,7 @@ def time(self) -> int: with self.lock: return _lib.Pa_GetStreamTime(self.stream) -def open(*args: Any, **kwargs: Any) -> Stream: +def open(*args, **kwargs) -> Stream: return Stream(*args, **kwargs) def get_device_count() -> int: From 0dd12ce68bfa85820e48d6fb03a3be11ddd63f6f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 16 Feb 2023 11:54:33 -0700 Subject: [PATCH 0781/1155] Actual fixes. --- python/bifrost/blocks/wav.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/bifrost/blocks/wav.py b/python/bifrost/blocks/wav.py index 9b78c5832..16e05cc67 100644 --- a/python/bifrost/blocks/wav.py +++ b/python/bifrost/blocks/wav.py @@ -28,12 +28,12 @@ from bifrost.pipeline import SourceBlock, SinkBlock from bifrost.DataType import DataType from bifrost.units import convert_units -from bifrost.ring2 import Ring, ReadSequence, WriteSpan +from bifrost.ring2 import Ring, ReadSequence, ReadSpan, WriteSpan import struct import os -from typing import Any, Dict, IO, List, Tuple +from typing import Any, Dict, IO, List, Optional, Tuple from bifrost import telemetry telemetry.track_module() @@ -41,7 +41,7 @@ def wav_read_chunk_desc(f: IO[bytes]) -> Tuple[str,int,str]: id_, size, fmt = struct.unpack('<4sI4s', f.read(12)) return id_.decode(), size, fmt.decode() -def wav_read_subchunk_desc(f: IO[bytes]) -> Tuple[str,size]: +def wav_read_subchunk_desc(f: IO[bytes]) -> Tuple[str,int]: id_, size = struct.unpack('<4sI', f.read(8)) return id_.decode(), size def wav_read_subchunk_fmt(f: IO[bytes], size: int) -> Dict[str,int]: @@ -112,7 +112,7 @@ def on_data(self, reader: IO[bytes], ospans: List[WriteSpan]) -> List[int]: nframe = nbyte // ospan.frame_nbyte return [nframe] -def read_wav(sourcefiles: List[str], gulp_nframe: int +def read_wav(sourcefiles: List[str], gulp_nframe: int, *args, **kwargs) -> WavSourceBlock: """Read Wave files (.wav). From b0d6740f02601a8405d42f6f182b4241b0596360 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 16 Feb 2023 13:39:11 -0700 Subject: [PATCH 0782/1155] Add in tests for SSE/AVX/AVX512 support. --- configure.ac | 78 +++++++++++++++++++++++++++++++++++++++++ src/bifrost/config.h.in | 3 ++ 2 files changed, 81 insertions(+) diff --git a/configure.ac b/configure.ac index e1387aae2..4d593a9b0 100644 --- a/configure.ac +++ b/configure.ac @@ -91,6 +91,84 @@ AC_SUBST([HAVE_FLOAT128], [0]) AS_IF([test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1], [AC_SUBST([HAVE_FLOAT128], [0])]) +# +# SSE +# + +AC_DEFUN([AC_CHECK_SSE], [ + AC_MSG_CHECKING([for SSE support]) + + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE([[ + #include + int main() { + __m128 x = _mm_set1_ps(1.0f); + x = _mm_add_ps(x, x); + return _mm_cvtss_f32(x) != 2.0f; + } + ]]) + ], [ + AC_SUBST([HAVE_SSE], [1]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) +AC_SUBST([HAVE_SSE], [0]) +AC_CHECK_SSE + +# +# AVX +# + +AC_DEFUN([AC_CHECK_AVX], [ + AC_MSG_CHECKING([for AVX support]) + + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE([[ + #include + int main() { + __m256d x = _mm256_set1_pd(1.0); + x = _mm256_add_pd(x, x); + return _mm256_cvtsd_f64(x) != 2.0; + } + ]]) + ], [ + AC_SUBST([HAVE_AVX], [1]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) +AC_SUBST([HAVE_AVX], [0]) +AC_CHECK_AVX + +# +# AVX512 +# + +AC_DEFUN([AC_CHECK_AVX512], [ + AC_MSG_CHECKING([for AVX-512 support]) + + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE([[ + #include + int main() { + __m512d x = _mm512_set1_pd(1.0); + x = _mm512_add_pd(x, x); + return _mm512_cvtsd_f64(x) != 2.0; + } + ]]) + ], [ + AC_SUBST([HAVE_AVX512], [1]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) +AC_SUBST([HAVE_AVX512], [1]) +AC_CHECK_AVX512 + # # HWLOC # diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 8db213af1..5b47aa193 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -54,6 +54,9 @@ extern "C" { #define BF_MAP_KERNEL_DISK_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) // Features +#define BF_SSE_ENABLED @HAVE_SSE@ +#define BF_AVX_ENABLED @HAVE_AVX@ +#define BF_AVX512_ENABLED @HAVE_AVX512@ #define BF_FLOAT128_ENABLED @HAVE_FLOAT128@ #define BF_OPENMP_ENABLED @HAVE_OPENMP@ #define BF_HWLOC_ENABLED @HAVE_HWLOC@ From cc1502174680ddc25a0fe6a1bd128357a2ef5a41 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 16 Feb 2023 13:40:59 -0700 Subject: [PATCH 0783/1155] Rebuild configure. --- configure | 479 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 376 insertions(+), 103 deletions(-) diff --git a/configure b/configure index 5afb00c01..5aac6db62 100755 --- a/configure +++ b/configure @@ -737,6 +737,9 @@ HAVE_RDMA HAVE_VERBS HAVE_VMA HAVE_HWLOC +HAVE_AVX512 +HAVE_AVX +HAVE_SSE HAVE_FLOAT128 HAVE_OPENMP LIBOBJS @@ -771,6 +774,7 @@ ac_ct_AR AR DLLTOOL OBJDUMP +FILECMD LN_S NM ac_ct_DUMPBIN @@ -3337,8 +3341,8 @@ esac -macro_version='2.4.6' -macro_revision='2.4.6' +macro_version='2.4.7' +macro_revision='2.4.7' @@ -4961,13 +4965,13 @@ else mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 @@ -5105,7 +5109,7 @@ esac fi fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; @@ -5209,7 +5213,7 @@ else $as_nop lt_cv_sys_max_cmd_len=8192; ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -5252,7 +5256,7 @@ else $as_nop sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi @@ -5457,6 +5461,114 @@ esac +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args. +set dummy ${ac_tool_prefix}file; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_FILECMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$FILECMD"; then + ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_FILECMD="${ac_tool_prefix}file" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +FILECMD=$ac_cv_prog_FILECMD +if test -n "$FILECMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 +printf "%s\n" "$FILECMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_FILECMD"; then + ac_ct_FILECMD=$FILECMD + # Extract the first word of "file", so it can be a program name with args. +set dummy file; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_FILECMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_FILECMD"; then + ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_FILECMD="file" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD +if test -n "$ac_ct_FILECMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5 +printf "%s\n" "$ac_ct_FILECMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_FILECMD" = x; then + FILECMD=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + FILECMD=$ac_ct_FILECMD + fi +else + FILECMD="$ac_cv_prog_FILECMD" +fi + + + + + + + if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 @@ -5600,7 +5712,7 @@ beos*) bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; @@ -5634,14 +5746,14 @@ darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac @@ -5655,7 +5767,7 @@ haiku*) ;; hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' @@ -5702,7 +5814,7 @@ netbsd*) newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; @@ -6451,13 +6563,29 @@ esac fi : ${AR=ar} -: ${AR_FLAGS=cru} +# Use ARFLAGS variable as AR's operation code to sync the variable naming with +# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have +# higher priority because thats what people were doing historically (setting +# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS +# variable obsoleted/removed. + +test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} +lt_ar_flags=$AR_FLAGS + + + + + + +# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override +# by AR_FLAGS because that was never working and AR_FLAGS is about to die. + @@ -6921,7 +7049,7 @@ esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" @@ -6939,20 +7067,20 @@ fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ @@ -6976,7 +7104,7 @@ for ac_symprfx in "" "_"; do if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++, + # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ @@ -6994,9 +7122,9 @@ for ac_symprfx in "" "_"; do " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -7199,7 +7327,7 @@ case $with_sysroot in #( fi ;; #( /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( @@ -7325,7 +7453,7 @@ ia64-*-hpux*) ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; @@ -7346,7 +7474,7 @@ ia64-*-hpux*) printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; @@ -7358,7 +7486,7 @@ ia64-*-hpux*) ;; esac else - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; @@ -7384,7 +7512,7 @@ mips64*-*linux*) printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; @@ -7392,7 +7520,7 @@ mips64*-*linux*) emul="${emul}64" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; @@ -7400,7 +7528,7 @@ mips64*-*linux*) emul="${emul}ltsmip" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; @@ -7424,14 +7552,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; @@ -7539,7 +7667,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) @@ -8322,8 +8450,8 @@ int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 + echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 + $AR $AR_FLAGS libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF @@ -8351,11 +8479,11 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; } darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) - case ${MACOSX_DEPLOYMENT_TARGET},$host in - 10.[012],*|,*powerpc*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - *) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + case $MACOSX_DEPLOYMENT_TARGET,$host in + 10.[012],*|,*powerpc*-darwin[5-8]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac @@ -8753,8 +8881,8 @@ esac ofile=libtool can_build_shared=yes -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). +# All known linkers require a '.a' archive for static linking (except MSVC and +# ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld @@ -9266,7 +9394,7 @@ lt_prog_compiler_static= lt_prog_compiler_static='-qstaticlink' ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' @@ -9689,15 +9817,15 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time + # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. + # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) + # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) @@ -9749,7 +9877,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries whole_archive_flag_spec= fi supports_anon_versioning=no - case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -9861,6 +9989,7 @@ _LT_EOF emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes + file_list_spec='@' ;; interix[3-9]*) @@ -9875,7 +10004,7 @@ _LT_EOF # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) @@ -9918,7 +10047,7 @@ _LT_EOF compiler_needs_object=yes ;; esac - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes @@ -9930,7 +10059,7 @@ _LT_EOF if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi @@ -9946,7 +10075,7 @@ _LT_EOF archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi @@ -10078,7 +10207,7 @@ _LT_EOF if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no @@ -10349,12 +10478,12 @@ fi cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. + # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in - cl*) - # Native MSVC + cl* | icl*) + # Native MSVC or ICC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes @@ -10395,7 +10524,7 @@ fi fi' ;; *) - # Assume MSVC wrapper + # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. @@ -10436,8 +10565,8 @@ fi output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no @@ -10471,7 +10600,7 @@ fi ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes @@ -10722,6 +10851,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes + file_list_spec='@' ;; osf3*) @@ -11414,7 +11544,7 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; @@ -11424,14 +11554,14 @@ cygwin* | mingw* | pw32* | cegcc*) ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; - *,cl*) - # Native MSVC + *,cl* | *,icl*) + # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' @@ -11450,7 +11580,7 @@ cygwin* | mingw* | pw32* | cegcc*) done IFS=$lt_save_ifs # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form @@ -11487,7 +11617,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) - # Assume MSVC wrapper + # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; @@ -11520,7 +11650,7 @@ dgux*) shlibpath_var=LD_LIBRARY_PATH ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then @@ -12673,30 +12803,41 @@ striplib= old_striplib= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +if test -z "$STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP"; then + if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + old_striplib="$STRIP --strip-debug" + striplib="$STRIP --strip-unneeded" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + case $host_os in + darwin*) + # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + ;; + freebsd*) + if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then + old_striplib="$STRIP --strip-debug" + striplib="$STRIP --strip-unneeded" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - fi - ;; - *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + fi + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - ;; - esac + ;; + esac + fi fi @@ -13466,8 +13607,8 @@ fi cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC + ,cl* | no,cl* | ,icl* | no,icl*) + # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' @@ -13558,11 +13699,11 @@ fi output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds_CXX="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" if test yes != "$lt_cv_apple_cc_single_mod"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" - archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi else @@ -13597,6 +13738,7 @@ fi emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_CXX=yes + file_list_spec_CXX='@' ;; dgux*) @@ -13627,7 +13769,7 @@ fi archive_cmds_need_lc_CXX=no ;; - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes @@ -13764,7 +13906,7 @@ fi # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in @@ -13904,13 +14046,13 @@ fi archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' @@ -14567,7 +14709,7 @@ lt_prog_compiler_static_CXX= ;; esac ;; - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) @@ -14650,7 +14792,7 @@ lt_prog_compiler_static_CXX= lt_prog_compiler_static_CXX='-qstaticlink' ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' @@ -15037,7 +15179,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) @@ -15045,7 +15187,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries ;; cygwin* | mingw* | cegcc*) case $cc_basename in - cl*) + cl* | icl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) @@ -15393,7 +15535,7 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; mingw* | cegcc*) @@ -15402,14 +15544,14 @@ cygwin* | mingw* | pw32* | cegcc*) ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; - *,cl*) - # Native MSVC + *,cl* | *,icl*) + # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' @@ -15428,7 +15570,7 @@ cygwin* | mingw* | pw32* | cegcc*) done IFS=$lt_save_ifs # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form @@ -15465,7 +15607,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) - # Assume MSVC wrapper + # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; @@ -15497,7 +15639,7 @@ dgux*) shlibpath_var=LD_LIBRARY_PATH ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then @@ -21008,6 +21150,129 @@ then : fi +# +# SSE +# + + +HAVE_SSE=0 + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SSE support" >&5 +printf %s "checking for SSE support... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + int main() { + __m128 x = _mm_set1_ps(1.0f); + x = _mm_add_ps(x, x); + return _mm_cvtss_f32(x) != 2.0f; + } + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + + HAVE_SSE=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + +# +# AVX +# + + +HAVE_AVX=0 + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AVX support" >&5 +printf %s "checking for AVX support... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + int main() { + __m256d x = _mm256_set1_pd(1.0); + x = _mm256_add_pd(x, x); + return _mm256_cvtsd_f64(x) != 2.0; + } + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + + HAVE_AVX=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + +# +# AVX512 +# + + +HAVE_AVX512=1 + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AVX-512 support" >&5 +printf %s "checking for AVX-512 support... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + int main() { + __m512d x = _mm512_set1_pd(1.0); + x = _mm512_add_pd(x, x); + return _mm512_cvtsd_f64(x) != 2.0; + } + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + + HAVE_AVX512=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + # # HWLOC # @@ -25392,6 +25657,7 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' @@ -25400,6 +25666,7 @@ want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' @@ -25574,6 +25841,7 @@ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ +FILECMD \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ @@ -25582,7 +25850,6 @@ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ -AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ @@ -26304,6 +26571,9 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd +# A file(cmd) program that detects file types. +FILECMD=$lt_FILECMD + # An object symbol dumper. OBJDUMP=$lt_OBJDUMP @@ -26328,8 +26598,11 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR +# Flags to create an archive (by configure). +lt_ar_flags=$lt_ar_flags + # Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS +AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec @@ -26719,7 +26992,7 @@ ltmain=$ac_aux_dir/ltmain.sh # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ + $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || From f7e79f4734df3448ed20637863b01c18d45104b9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 16 Feb 2023 14:26:22 -0700 Subject: [PATCH 0784/1155] What using SSE/AVX for CHIPS? --- src/formats/base.hpp | 18 ++++++++++++ src/formats/chips.hpp | 64 ++++++++++++++++--------------------------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/formats/base.hpp b/src/formats/base.hpp index 585e629fd..ac31fefee 100644 --- a/src/formats/base.hpp +++ b/src/formats/base.hpp @@ -34,6 +34,24 @@ #include // For ntohs +#if defined BF_SSE_ENABLED && BF_SSE_ENABLED + +#include + +#endif + +#if defined BF_AVX_ENABLED && BF_AVX_ENABLED + +#include + +#endif + +#if defined BF_AVX512_ENABLED && BF_AVX512_ENABLED + +#include + +#endif + #if defined __APPLE__ && __APPLE__ #include diff --git a/src/formats/chips.hpp b/src/formats/chips.hpp index 982584e16..401aba811 100644 --- a/src/formats/chips.hpp +++ b/src/formats/chips.hpp @@ -107,47 +107,29 @@ class CHIPSProcessor : virtual public PacketProcessor { otype* __restrict__ out = (otype* )&obufs[obuf_idx][obuf_offset]; int chan = 0; - //cout << pkt->src << ", " << pkt->nsrc << endl; - //cout << pkt->nchan << endl; - /* - // HACK TESTING disabled - for( ; channchan/4*4; chan+=4 ) { - __m128i tmp0 = ((__m128i*)&in[chan])[0]; - __m128i tmp1 = ((__m128i*)&in[chan])[1]; - __m128i tmp2 = ((__m128i*)&in[chan+1])[0]; - __m128i tmp3 = ((__m128i*)&in[chan+1])[1]; - __m128i tmp4 = ((__m128i*)&in[chan+2])[0]; - __m128i tmp5 = ((__m128i*)&in[chan+2])[1]; - __m128i tmp6 = ((__m128i*)&in[chan+3])[0]; - __m128i tmp7 = ((__m128i*)&in[chan+3])[1]; - _mm_store_si128(&((__m128i*)&out[pkt->src + pkt->nsrc*chan])[0], tmp0); - _mm_store_si128(&((__m128i*)&out[pkt->src + pkt->nsrc*chan])[1], tmp1); - _mm_store_si128(&((__m128i*)&out[pkt->src + pkt->nsrc*(chan+1)])[0], tmp2); - _mm_store_si128(&((__m128i*)&out[pkt->src + pkt->nsrc*(chan+1)])[1], tmp3); - _mm_store_si128(&((__m128i*)&out[pkt->src + pkt->nsrc*(chan+2)])[0], tmp4); - _mm_store_si128(&((__m128i*)&out[pkt->src + pkt->nsrc*(chan+2)])[1], tmp5); - _mm_store_si128(&((__m128i*)&out[pkt->src + pkt->nsrc*(chan+3)])[0], tmp6); - _mm_store_si128(&((__m128i*)&out[pkt->src + pkt->nsrc*(chan+3)])[1], tmp7); - } - */ - //for( ; channchan; ++chan ) { - /* - for( ; chan<10; ++chan ) { // HACK TESTING - __m128i tmp0 = ((__m128i*)&in[chan])[0]; - __m128i tmp1 = ((__m128i*)&in[chan])[1]; - _mm_store_si128(&((__m128i*)&out[pkt->src + pkt->nsrc*chan])[0], tmp0); - _mm_store_si128(&((__m128i*)&out[pkt->src + pkt->nsrc*chan])[1], tmp1); - } - */ - //if( pkt->src < 8 ) { // HACK TESTING - //for( ; chan<32; ++chan ) { // HACK TESTING - for( ; channchan; ++chan ) { // HACK TESTING - ::memcpy(&out[pkt->src + pkt->nsrc*chan], - &in[chan], sizeof(otype)); - //out[pkt->src + pkt->nsrc*chan] = in[chan]; - //::memset( - } - //} + //cout << pkt->src << ", " << pkt->nsrc << endl; + //cout << pkt->nchan << endl; + for( ; channchan; ++chan ) { +#if defined BF_AVX_ENABLED && BF_AVX_ENABLED + __m256i data = _mm256_loadu_si256(reinterpret_cast(&in[chan])); + _mm256_store_si256(reinterpret_cast<__m256i*>(&out[pkt->src + pkt->nsrc*chan]), + data); +#else +#if defined BF_SSE_ENABLED && BF_SSE_ENABLED + const unaligned128_type* dsrc = (const unaligned128_type*) &in[chan]; + aligned128_type* ddst = (aligned128_type*) &out[pkt->src + pkt->nsrc*chan]; + + __m128i lo = _mm_loadu_si128(reinterpret_cast(dsrc)); + __m128i hi = _mm_loadu_si128(reinterpret_cast(dsrc+1)); + + _mm_store_si128(reinterpret_cast<__m128i*>(ddst), lo); + _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), hi); +#else + ::memcpy(&out[pkt->src + pkt->nsrc*chan], + &in[chan], sizeof(otype)); +#endif +#endif + } } inline void blank_out_source(uint8_t* data, From 01808d2149b7ea01c4c56ee0f942f14c58067332 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 20 Feb 2023 09:41:58 -0700 Subject: [PATCH 0785/1155] Merge the ethernet+IPv4+UDP headers into a single structure. Reuse the header memory allocation when sending packets. --- src/ib_verbs.hpp | 16 ++++++++---- src/packet_writer.cpp | 18 +++++++++---- src/packet_writer.hpp | 60 ++++++++++++++++++++++++------------------- 3 files changed, 58 insertions(+), 36 deletions(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 0fc139d7f..22ae44a57 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -1063,11 +1063,17 @@ class Verbs { uint64_t offset; for(i=0; idtype)/8) * _nsamples; int npackets = in->shape[0]*in->shape[1]; - char* hdrs; - hdrs = (char*) malloc(npackets*hdr_size*sizeof(char)); + if( hdr_size != _last_size || npackets != _last_count ) { + if( _hdrs ) { + free(_hdrs) + } + + _last_size = hdr_size; + _last_count = npackets; + _hdr = (char*) malloc(npackets*hdr_size*sizeof(char)); + ::mlock(_hdr, npackets*hdr_size*sizeof(char)); + } + for(i=0; ishape[0]; i++) { hdr_base->seq = seq + i*seq_increment; for(j=0; jshape[1]; j++) { hdr_base->src = src + j*src_increment; - (*_filler)(hdr_base, _framecount, hdrs+hdr_size*(i*in->shape[1]+j)); + (*_filler)(hdr_base, _framecount, _hdrs+hdr_size*(i*in->shape[1]+j)); } _framecount++; } - _writer->send(hdrs, hdr_size, (char*) in->data, data_size, npackets); + _writer->send(_hdrs, hdr_size, (char*) in->data, data_size, npackets); this->update_stats_log(); - free(hdrs); return BF_STATUS_SUCCESS; } diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index bba615786..be82fa3be 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -189,15 +189,19 @@ class UDPPacketSender : public PacketWriterMethod { #if defined BF_VERBS_ENABLED && BF_VERBS_ENABLED #include "ib_verbs.hpp" +struct __attribute__((packed)) bf_udp_header { + bf_ethernet_hdr ethernet; + bf_ipv4_hdr ipv4; + bf_udp_hdr udp; +}; + class UDPVerbsSender : public PacketWriterMethod { - Verbs _ibv; - bf_ethernet_hdr _ethernet; - bf_ipv4_hdr _ipv4; - bf_udp_hdr _udp; - int _last_size; - int _last_count; - mmsghdr* _mmsg; - iovec* _iovs; + Verbs _ibv; + bf_udp_header _udp_header + int _last_size; + int _last_count; + mmsghdr* _mmsg; + iovec* _iovs; public: UDPVerbsSender(int fd) : PacketWriterMethod(fd), _ibv(fd, JUMBO_FRAME_SIZE), _last_size(0), @@ -226,32 +230,28 @@ class UDPVerbsSender : public PacketWriterMethod { _last_count = npackets; _mmsg = (struct mmsghdr *) malloc(sizeof(struct mmsghdr)*npackets); - _iovs = (struct iovec *) malloc(sizeof(struct iovec)*5*npackets); + _iovs = (struct iovec *) malloc(sizeof(struct iovec)*3*npackets); ::mlock(_mmsg, sizeof(struct mmsghdr)*npackets); - ::mlock(_iovs, sizeof(struct iovec)*5*npackets); + ::mlock(_iovs, sizeof(struct iovec)*3*npackets); } memset(_mmsg, 0, sizeof(struct mmsghdr)*npackets); if( (hdr_size + data_size) != _last_size ) { _last_size = hdr_size + data_size; - _ibv.get_ethernet_header(&_ethernet); - _ibv.get_ipv4_header(&_ipv4, _last_size); - _ibv.get_udp_header(&_udp, _last_size); + _ibv.get_ethernet_header(&(_udp_header.ethernet)); + _ibv.get_ipv4_header(&(_udp_header.ipv4), _last_size); + _ibv.get_udp_header(&(_udp_header.udp), _last_size); } for(int i=0; iget_core() << "\n"; } - virtual ~BFpacketwriter_impl() {} + inline ~BFpacketwriter_impl() { + if( _hdrs ) { + free(hdrs); + } + } inline void set_rate_limit(uint32_t rate_limit) { _writer->set_rate_limit(rate_limit); } inline void reset_rate_limit() { _writer->reset_rate_limit(); } inline void reset_counter() { _framecount = 0; } From ac40ad4ca87d34d2793c7595e7bc12a1f31022d7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 20 Feb 2023 10:33:14 -0700 Subject: [PATCH 0786/1155] Typos. --- src/packet_writer.cpp | 4 ++-- src/packet_writer.hpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/packet_writer.cpp b/src/packet_writer.cpp index dd7561076..a9a134d28 100644 --- a/src/packet_writer.cpp +++ b/src/packet_writer.cpp @@ -66,8 +66,8 @@ BFstatus BFpacketwriter_impl::send(BFheaderinfo info, _last_size = hdr_size; _last_count = npackets; - _hdr = (char*) malloc(npackets*hdr_size*sizeof(char)); - ::mlock(_hdr, npackets*hdr_size*sizeof(char)); + _hdrs = (char*) malloc(npackets*hdr_size*sizeof(char)); + ::mlock(_hdrs, npackets*hdr_size*sizeof(char)); } for(i=0; ishape[0]; i++) { diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index be82fa3be..900e6eca3 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -377,7 +377,7 @@ class BFpacketwriter_impl { } inline ~BFpacketwriter_impl() { if( _hdrs ) { - free(hdrs); + free(_hdrs); } } inline void set_rate_limit(uint32_t rate_limit) { _writer->set_rate_limit(rate_limit); } From 3dbc82bad83b436ff6349b38ca668fa4f749b0da Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 20 Feb 2023 11:52:02 -0700 Subject: [PATCH 0787/1155] Missed one. --- src/packet_writer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packet_writer.cpp b/src/packet_writer.cpp index a9a134d28..71d356298 100644 --- a/src/packet_writer.cpp +++ b/src/packet_writer.cpp @@ -61,7 +61,7 @@ BFstatus BFpacketwriter_impl::send(BFheaderinfo info, if( hdr_size != _last_size || npackets != _last_count ) { if( _hdrs ) { - free(_hdrs) + free(_hdrs); } _last_size = hdr_size; From 6bf780712a8708519854f0294da3c25440b621e0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 20 Feb 2023 12:43:38 -0700 Subject: [PATCH 0788/1155] Switch to pointer arithmetic. --- src/formats/drx.hpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/formats/drx.hpp b/src/formats/drx.hpp index 10058ccf9..987ccfc40 100644 --- a/src/formats/drx.hpp +++ b/src/formats/drx.hpp @@ -111,15 +111,17 @@ class DRXProcessor : virtual public PacketProcessor { size_t obuf_offset = (pkt->seq-obuf_seq0)*pkt->nsrc*payload_size; - // Note: Using these SSE types allows the compiler to use SSE instructions - // However, they require aligned memory (otherwise segfault) uint8_t const* __restrict__ in = (uint8_t const*)pkt->payload_ptr; uint8_t* __restrict__ out = (uint8_t* )&obufs[obuf_idx][obuf_offset]; int samp = 0; - for( ; samp<4096; ++samp ) { // HACK TESTING - out[samp*pkt->nsrc + pkt->src] = in[samp]; - } + uint8_t const* in_ptr = in; + uint8_t* out_ptr = out + pkt->src; + for (int samp = 0; samp < 4096; ++samp) { + *out_ptr = *in_ptr; + in_ptr++; + out_ptr += pkt->nsrc; + } } inline void blank_out_source(uint8_t* data, @@ -127,13 +129,12 @@ class DRXProcessor : virtual public PacketProcessor { int nsrc, int nchan, int nseq) { - uint8_t* __restrict__ aligned_data = (uint8_t*)data; + uint8_t* __restrict__ aligned_data = (uint8_t*) data; for( int t=0; t Date: Mon, 20 Feb 2023 12:46:00 -0700 Subject: [PATCH 0789/1155] Boilerplate update. --- src/formats/drx.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/drx.hpp b/src/formats/drx.hpp index 987ccfc40..6d8bf9b18 100644 --- a/src/formats/drx.hpp +++ b/src/formats/drx.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions From 6a02f67b7b57eaa79727050b4c687abe9d1e8894 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 20 Feb 2023 12:51:50 -0700 Subject: [PATCH 0790/1155] Further cleanup. --- src/formats/drx.hpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/formats/drx.hpp b/src/formats/drx.hpp index 6d8bf9b18..dd6aad539 100644 --- a/src/formats/drx.hpp +++ b/src/formats/drx.hpp @@ -114,13 +114,10 @@ class DRXProcessor : virtual public PacketProcessor { uint8_t const* __restrict__ in = (uint8_t const*)pkt->payload_ptr; uint8_t* __restrict__ out = (uint8_t* )&obufs[obuf_idx][obuf_offset]; - int samp = 0; - uint8_t const* in_ptr = in; - uint8_t* out_ptr = out + pkt->src; - for (int samp = 0; samp < 4096; ++samp) { - *out_ptr = *in_ptr; - in_ptr++; - out_ptr += pkt->nsrc; + for (int samp=0; samp<4096; ++samp) { + *(out + pkt->src) = *in; + in++; + out += pkt->nsrc; } } @@ -132,8 +129,9 @@ class DRXProcessor : virtual public PacketProcessor { uint8_t* __restrict__ aligned_data = (uint8_t*) data; for( int t=0; t Date: Mon, 20 Feb 2023 15:20:44 -0700 Subject: [PATCH 0791/1155] Revert. --- src/formats/drx.hpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/formats/drx.hpp b/src/formats/drx.hpp index dd6aad539..53566d022 100644 --- a/src/formats/drx.hpp +++ b/src/formats/drx.hpp @@ -111,14 +111,15 @@ class DRXProcessor : virtual public PacketProcessor { size_t obuf_offset = (pkt->seq-obuf_seq0)*pkt->nsrc*payload_size; + // Note: Using these SSE types allows the compiler to use SSE instructions + // However, they require aligned memory (otherwise segfault) uint8_t const* __restrict__ in = (uint8_t const*)pkt->payload_ptr; uint8_t* __restrict__ out = (uint8_t* )&obufs[obuf_idx][obuf_offset]; - for (int samp=0; samp<4096; ++samp) { - *(out + pkt->src) = *in; - in++; - out += pkt->nsrc; - } + int samp = 0; + for( ; samp<4096; ++samp ) { // HACK TESTING + out[samp*pkt->nsrc + pkt->src] = in[samp]; + } } inline void blank_out_source(uint8_t* data, @@ -126,13 +127,12 @@ class DRXProcessor : virtual public PacketProcessor { int nsrc, int nchan, int nseq) { - uint8_t* __restrict__ aligned_data = (uint8_t*) data; + uint8_t* __restrict__ aligned_data = (uint8_t*)data; for( int t=0; t Date: Mon, 20 Feb 2023 15:21:46 -0700 Subject: [PATCH 0792/1155] Move bf_comb_udp_hdr here and fix a bug. --- src/ib_verbs.hpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 22ae44a57..84bf0bc25 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -157,6 +157,12 @@ struct __attribute__((packed)) bf_udp_hdr { uint16_t checksum; }; +struct __attribute__((packed)) bf_comb_udp_hdr { + bf_ethernet_hdr ethernet; + bf_ipv4_hdr ipv4; + bf_udp_hdr udp; +}; + class Verbs { int _fd; @@ -1059,7 +1065,6 @@ class Verbs { ibv_send_wr *s; int i; - uint32_t j; uint64_t offset; for(i=0; i Date: Mon, 20 Feb 2023 15:24:27 -0700 Subject: [PATCH 0793/1155] Moves and renames. --- src/packet_writer.cpp | 12 ++++++------ src/packet_writer.hpp | 36 +++++++++++++++--------------------- 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/packet_writer.cpp b/src/packet_writer.cpp index 71d356298..d89a41823 100644 --- a/src/packet_writer.cpp +++ b/src/packet_writer.cpp @@ -60,26 +60,26 @@ BFstatus BFpacketwriter_impl::send(BFheaderinfo info, int npackets = in->shape[0]*in->shape[1]; if( hdr_size != _last_size || npackets != _last_count ) { - if( _hdrs ) { - free(_hdrs); + if( _pkt_hdrs ) { + free(_pkt_hdrs); } _last_size = hdr_size; _last_count = npackets; - _hdrs = (char*) malloc(npackets*hdr_size*sizeof(char)); - ::mlock(_hdrs, npackets*hdr_size*sizeof(char)); + _pkt_hdrs = (char*) malloc(npackets*hdr_size*sizeof(char)); + ::mlock(_pkt_hdrs, npackets*hdr_size*sizeof(char)); } for(i=0; ishape[0]; i++) { hdr_base->seq = seq + i*seq_increment; for(j=0; jshape[1]; j++) { hdr_base->src = src + j*src_increment; - (*_filler)(hdr_base, _framecount, _hdrs+hdr_size*(i*in->shape[1]+j)); + (*_filler)(hdr_base, _framecount, _pkt_hdrs+hdr_size*(i*in->shape[1]+j)); } _framecount++; } - _writer->send(_hdrs, hdr_size, (char*) in->data, data_size, npackets); + _writer->send(_pkt_hdrs, hdr_size, (char*) in->data, data_size, npackets); this->update_stats_log(); return BF_STATUS_SUCCESS; diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 900e6eca3..7b977b416 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -189,19 +189,13 @@ class UDPPacketSender : public PacketWriterMethod { #if defined BF_VERBS_ENABLED && BF_VERBS_ENABLED #include "ib_verbs.hpp" -struct __attribute__((packed)) bf_udp_header { - bf_ethernet_hdr ethernet; - bf_ipv4_hdr ipv4; - bf_udp_hdr udp; -}; - class UDPVerbsSender : public PacketWriterMethod { - Verbs _ibv; - bf_udp_header _udp_header - int _last_size; - int _last_count; - mmsghdr* _mmsg; - iovec* _iovs; + Verbs _ibv; + bf_comb_udp_hdr _udp_hdr; + int _last_size; + int _last_count; + mmsghdr* _mmsg; + iovec* _iovs; public: UDPVerbsSender(int fd) : PacketWriterMethod(fd), _ibv(fd, JUMBO_FRAME_SIZE), _last_size(0), @@ -238,16 +232,16 @@ class UDPVerbsSender : public PacketWriterMethod { if( (hdr_size + data_size) != _last_size ) { _last_size = hdr_size + data_size; - _ibv.get_ethernet_header(&(_udp_header.ethernet)); - _ibv.get_ipv4_header(&(_udp_header.ipv4), _last_size); - _ibv.get_udp_header(&(_udp_header.udp), _last_size); + _ibv.get_ethernet_header(&(_udp_hdr.ethernet)); + _ibv.get_ipv4_header(&(_udp_hdr.ipv4), _last_size); + _ibv.get_udp_header(&(_udp_hdr.udp), _last_size); } for(int i=0; iget_core() << "\n"; } inline ~BFpacketwriter_impl() { - if( _hdrs ) { - free(_hdrs); + if(_pkt_hdrs) { + free(_pkt_hdrs); } } inline void set_rate_limit(uint32_t rate_limit) { _writer->set_rate_limit(rate_limit); } From 647e2b3f0258b221cadf23651abbbc25482d76a8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 20 Feb 2023 15:24:39 -0700 Subject: [PATCH 0794/1155] Catch by reference. --- src/Socket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Socket.cpp b/src/Socket.cpp index 136333f8f..cec457c24 100644 --- a/src/Socket.cpp +++ b/src/Socket.cpp @@ -671,7 +671,7 @@ void Socket::close() { try { this->set_promiscuous(false); } - catch( Socket::Error ) {} + catch( Socket::Error const& ) {} ::close(_fd); _fd = -1; _family = AF_UNSPEC; From 689312c95bd37939a8b40f82d968394376cfb7ad Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 20 Feb 2023 15:38:10 -0700 Subject: [PATCH 0795/1155] There must have been some kind of non-printing character in there... --- src/formats/drx.hpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/formats/drx.hpp b/src/formats/drx.hpp index 53566d022..55ad4406e 100644 --- a/src/formats/drx.hpp +++ b/src/formats/drx.hpp @@ -115,10 +115,11 @@ class DRXProcessor : virtual public PacketProcessor { // However, they require aligned memory (otherwise segfault) uint8_t const* __restrict__ in = (uint8_t const*)pkt->payload_ptr; uint8_t* __restrict__ out = (uint8_t* )&obufs[obuf_idx][obuf_offset]; - - int samp = 0; - for( ; samp<4096; ++samp ) { // HACK TESTING - out[samp*pkt->nsrc + pkt->src] = in[samp]; + + for( int samp=0; samp<4096; ++samp ) { // HACK TESTING + *(out + pkt->src) = *in; + in++; + out += pkt->nsrc; } } @@ -127,11 +128,13 @@ class DRXProcessor : virtual public PacketProcessor { int nsrc, int nchan, int nseq) { - uint8_t* __restrict__ aligned_data = (uint8_t*)data; + uint8_t* __restrict__ aligned_data = (uint8_t*) data; for( int t=0; t Date: Mon, 20 Feb 2023 15:59:23 -0700 Subject: [PATCH 0796/1155] More SSE. --- src/formats/chips.hpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/formats/chips.hpp b/src/formats/chips.hpp index 401aba811..b4ab9bba8 100644 --- a/src/formats/chips.hpp +++ b/src/formats/chips.hpp @@ -30,8 +30,6 @@ #include "base.hpp" -//#include // SSE - struct __attribute__((packed)) chips_hdr_type { uint8_t roach; // Note: 1-based uint8_t gbe; // (AKA tuning) @@ -111,19 +109,17 @@ class CHIPSProcessor : virtual public PacketProcessor { //cout << pkt->nchan << endl; for( ; channchan; ++chan ) { #if defined BF_AVX_ENABLED && BF_AVX_ENABLED - __m256i data = _mm256_loadu_si256(reinterpret_cast(&in[chan])); _mm256_store_si256(reinterpret_cast<__m256i*>(&out[pkt->src + pkt->nsrc*chan]), - data); + _mm256_loadu_si256(reinterpret_cast(&in[chan]))); #else #if defined BF_SSE_ENABLED && BF_SSE_ENABLED const unaligned128_type* dsrc = (const unaligned128_type*) &in[chan]; aligned128_type* ddst = (aligned128_type*) &out[pkt->src + pkt->nsrc*chan]; - __m128i lo = _mm_loadu_si128(reinterpret_cast(dsrc)); - __m128i hi = _mm_loadu_si128(reinterpret_cast(dsrc+1)); - - _mm_store_si128(reinterpret_cast<__m128i*>(ddst), lo); - _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), hi); + _mm_store_si128(reinterpret_cast<__m128i*>(ddst), + _mm_loadu_si128(reinterpret_cast(dsrc))); + _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), + _mm_loadu_si128(reinterpret_cast(dsrc+1))); #else ::memcpy(&out[pkt->src + pkt->nsrc*chan], &in[chan], sizeof(otype)); @@ -141,8 +137,22 @@ class CHIPSProcessor : virtual public PacketProcessor { otype* __restrict__ aligned_data = (otype*)data; for( int t=0; t(&aligned_data[src + nsrc*(c + nchan*t)]), + _mm256_setzero_si256()); +#else +#if defined BF_SSE_ENABLED && BF_SSE_ENABLED + aligned128_type* ddst = (aligned128_type*) &aligned_data[src + nsrc*(c + nchan*t)]; + + _mm_store_si128(reinterpret_cast<__m128i*>(ddst), + _mm_setzero_si128()); + _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), + _mm_setzero_si128(); +#else ::memset(&aligned_data[src + nsrc*(c + nchan*t)], 0, sizeof(otype)); +#endif +#endif } } } From 51fd2c7622f6e2c098f1636cca52eeab0f687a81 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 20 Feb 2023 16:00:31 -0700 Subject: [PATCH 0797/1155] Typo. --- src/formats/chips.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/chips.hpp b/src/formats/chips.hpp index b4ab9bba8..e293667fa 100644 --- a/src/formats/chips.hpp +++ b/src/formats/chips.hpp @@ -147,7 +147,7 @@ class CHIPSProcessor : virtual public PacketProcessor { _mm_store_si128(reinterpret_cast<__m128i*>(ddst), _mm_setzero_si128()); _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), - _mm_setzero_si128(); + _mm_setzero_si128()); #else ::memset(&aligned_data[src + nsrc*(c + nchan*t)], 0, sizeof(otype)); From 4f8090ec23604439484a311b8f219dd29fc6cce2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 5 Apr 2023 09:13:01 -0600 Subject: [PATCH 0798/1155] Allow longer PIDs. --- tools/like_bmon.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/like_bmon.py b/tools/like_bmon.py index e4c99dea4..3965f6e9b 100755 --- a/tools/like_bmon.py +++ b/tools/like_bmon.py @@ -322,7 +322,7 @@ def main(args): k = _add_line(scr, k, 0, output, std) ### General - header k = _add_line(scr, k, 0, ' ', std) - output = '%6s %9s %6s %9s %6s' % ('PID', 'RX Rate', 'RX #/s', 'TX Rate', 'TX #/s') + output = '%7s %9s %6s %9s %6s' % ('PID', 'RX Rate', 'RX #/s', 'TX Rate', 'TX #/s') output += ' '*(size[1]-len(output)) output += '\n' k = _add_line(scr, k, 0, output, rev) @@ -342,7 +342,7 @@ def main(args): drateT, drateuT = _set_units(drateT) - output = '%6i %7.2f%2s %6i %7.2f%2s %6i\n' % (o, drateR, drateuR, prateR, drateT, drateuT, prateT) + output = '%7i %7.2f%2s %6i %7.2f%2s %6i\n' % (o, drateR, drateuR, prateR, drateT, drateuT, prateT) try: if o == order[sel]: sty = std|curses.A_BOLD From 0ff964196aa80bdb741ee98395f215d56ea966b1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 18 May 2023 19:10:34 -0600 Subject: [PATCH 0799/1155] Better C++ standard selection. --- configure | 30 ++++++++++++++++++++++++++---- configure.ac | 25 +++++++++++++++++-------- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/configure b/configure index 2ad321011..8e0fb0dff 100755 --- a/configure +++ b/configure @@ -24514,7 +24514,7 @@ PACKAGE_VERSION_MICRO=`echo $PACKAGE_VERSION | $AWK -F. '{print $3}'` # -# C++17/C++14/C++11 toggling +# C++20/C++17/C++14/C++11 toggling # MAP_KERNEL_STDCXX=c++11 @@ -24554,36 +24554,57 @@ then : STDCXX_IS_SET=1 CXXFLAGS="-std=c++17 $CXXFLAGS" - if test x$CUDA_HAVE_CXX17 = x1 + if test x$CUDA_HAVE_CXX20 = x1 then : NVCCFLAGS="-std=c++17 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++17 +else $as_nop + if test x$CUDA_HAVE_CXX17 = x1 +then : + NVCCFLAGS="-std=c++17 $NVCCFLAGS" + MAP_KERNEL_STDCXX=c++17 + else $as_nop if test x$CUDA_HAVE_CXX14 = x1 then : NVCCFLAGS="-std=c++14 $NVCCFLAGS" - MAP_KERNEL_STDCXX=c++14 + MAP_KERNEL_STDCXX=c++14 else $as_nop NVCCFLAGS="-std=c++11 $NVCCFLAGS" fi fi fi +fi if test x$HAVE_CXX14 = x1 then : STDCXX_IS_SET=1 CXXFLAGS="-std=c++14 $CXXFLAGS" - if test x$CUDA_HAVE_CXX14 = x1 + if test x$CUDA_HAVE_CXX20 = x1 then : NVCCFLAGS="-std=c++14 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++14 +else $as_nop + if test x$CUDA_HAVE_CXX17 = x1 +then : + NVCCFLAGS="-std=c++14 $NVCCFLAGS" + MAP_KERNEL_STDCXX=c++14 + +else $as_nop + if test x$CUDA_HAVE_CXX14 = x1 +then : + NVCCFLAGS="-std=c++14 $NVCCFLAGS" + MAP_KERNEL_STDCXX=c++14 + else $as_nop NVCCFLAGS="-std=c++11 $NVCCFLAGS" fi fi +fi +fi if test x$STDCXX_IS_SET != x1 then : STDCXX_IS_SET=1 @@ -26972,3 +26993,4 @@ printf "%s\n" "$as_me: options:$OPTIONS" >&6;} echo "" echo "Bifrost is now ready to be compiled. Please run 'make'" echo "" + diff --git a/configure.ac b/configure.ac index 3e42ecb14..5bd707d89 100644 --- a/configure.ac +++ b/configure.ac @@ -293,7 +293,7 @@ AC_SUBST([PACKAGE_VERSION_MINOR], [`echo $PACKAGE_VERSION | $AWK -F. '{print $2} AC_SUBST([PACKAGE_VERSION_MICRO], [`echo $PACKAGE_VERSION | $AWK -F. '{print $3}'`]) # -# C++17/C++14/C++11 toggling +# C++20/C++17/C++14/C++11 toggling # AC_SUBST([MAP_KERNEL_STDCXX], [c++11]) @@ -314,20 +314,29 @@ AS_IF([test x$HAVE_CXX20 = x1], AS_IF([test x$HAVE_CXX17 = x1], [AC_SUBST([STDCXX_IS_SET], [1]) CXXFLAGS="-std=c++17 $CXXFLAGS" - AS_IF([test x$CUDA_HAVE_CXX17 = x1], + AS_IF([test x$CUDA_HAVE_CXX20 = x1], [NVCCFLAGS="-std=c++17 $NVCCFLAGS" AC_SUBST([MAP_KERNEL_STDCXX], [c++17])], - [AS_IF([test x$CUDA_HAVE_CXX14 = x1], - [NVCCFLAGS="-std=c++14 $NVCCFLAGS" - AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], - [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])])]) + [AS_IF([test x$CUDA_HAVE_CXX17 = x1], + [NVCCFLAGS="-std=c++17 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++17])], + [AS_IF([test x$CUDA_HAVE_CXX14 = x1], + [NVCCFLAGS="-std=c++14 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], + [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])])])]) AS_IF([test x$HAVE_CXX14 = x1], [AC_SUBST([STDCXX_IS_SET], [1]) CXXFLAGS="-std=c++14 $CXXFLAGS" - AS_IF([test x$CUDA_HAVE_CXX14 = x1], + AS_IF([test x$CUDA_HAVE_CXX20 = x1], [NVCCFLAGS="-std=c++14 $NVCCFLAGS" AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], - [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])]) + [AS_IF([test x$CUDA_HAVE_CXX17 = x1], + [NVCCFLAGS="-std=c++14 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], + [AS_IF([test x$CUDA_HAVE_CXX14 = x1], + [NVCCFLAGS="-std=c++14 $NVCCFLAGS" + AC_SUBST([MAP_KERNEL_STDCXX], [c++14])], + [NVCCFLAGS="-std=c++11 $NVCCFLAGS"])])])]) AS_IF([test x$STDCXX_IS_SET != x1], [AC_SUBST([STDCXX_IS_SET], [1]) CXXFLAGS="-std=c++11 $CXXFLAGS" From 5b4ebf7400739611a4ffc67d3cf8276c5d21f74e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 May 2023 07:15:43 -0600 Subject: [PATCH 0800/1155] Try to detect which thrust pinned allocator style to use. --- config/cuda.m4 | 25 ++++++++++++++++++ configure | 56 +++++++++++++++++++++++++++++++++++++++++ src/bifrost/config.h.in | 1 + src/cuda/stream.hpp | 2 +- src/fft.cu | 9 +++++++ src/fft_kernels.h | 2 +- 6 files changed, 93 insertions(+), 2 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 5f8a9f215..c8df9bd55 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -238,7 +238,32 @@ AC_DEFUN([AX_CHECK_CUDA], AC_SUBST([GPU_PASCAL_MANAGEDMEM], [0]) AC_MSG_RESULT([no]) fi + + AC_MSG_CHECKING([for thrust pinned allocated support]) + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include + #include ]], + [[]])], + [AC_SUBST([GPU_EXP_PINNED_ALLOC], [1]) + AC_MSG_RESULT([experimental])], + [AC_SUBST([GPU_EXP_PINNED_ALLOC], [0]) + AC_MSG_RESULT([full])]) + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + else AC_SUBST([GPU_PASCAL_MANAGEDMEM], [0]) + AC_SUBST([GPU_EXP_PINNED_ALLOC], [1]) fi ]) diff --git a/configure b/configure index 8e0fb0dff..a446ad7cf 100755 --- a/configure +++ b/configure @@ -717,6 +717,7 @@ HAVE_DEBUG HAVE_TMPFS ALIGNMENT GPU_SHAREDMEM +GPU_EXP_PINNED_ALLOC GPU_PASCAL_MANAGEDMEM GPU_ARCHS NVCCFLAGS @@ -21730,9 +21731,64 @@ printf "%s\n" "yes" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thrust pinned allocated support" >&5 +printf %s "checking for thrust pinned allocated support... " >&6; } + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #include + #include +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO" +then : + GPU_EXP_PINNED_ALLOC=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: experimental" >&5 +printf "%s\n" "experimental" >&6; } +else $as_nop + GPU_EXP_PINNED_ALLOC=0 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: full" >&5 +printf "%s\n" "full" >&6; } +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + else GPU_PASCAL_MANAGEDMEM=0 + GPU_EXP_PINNED_ALLOC=1 + fi diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index d2909456d..9e078678f 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -49,6 +49,7 @@ extern "C" { #define BF_GPU_MAX_ARCH @GPU_MAX_ARCH@ #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ +#dfined BF_GPU_EXP_PINNED_ALLOC @GPU_EXP_PINNED_ALLOC@ #define BF_MAP_KERNEL_STDCXX "@MAP_KERNEL_STDCXX@" #define BF_MAP_KERNEL_DISK_CACHE @HAVE_MAP_CACHE@ #define BF_MAP_KERNEL_DISK_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) diff --git a/src/cuda/stream.hpp b/src/cuda/stream.hpp index 1d67c2b12..88a41c7a3 100644 --- a/src/cuda/stream.hpp +++ b/src/cuda/stream.hpp @@ -82,7 +82,7 @@ namespace cuda { inline void check_error(cudaError_t ret) { if( ret != cudaSuccess ) { - throw std::runtime_error(cudaGetErrorString(ret)); + throw ::std::runtime_error(cudaGetErrorString(ret)); } } diff --git a/src/fft.cu b/src/fft.cu index eeace96fb..b10f229de 100644 --- a/src/fft.cu +++ b/src/fft.cu @@ -34,6 +34,7 @@ TODO: Implicitly padded/cropped transforms using load callback */ +#include #include #include "assert.hpp" #include "utils.hpp" @@ -44,7 +45,11 @@ #include "ArrayIndexer.cuh" #include #include +#if defined(BF_GPU_EXP_PINNED_ALLOC) && BF_GPU_EXP_PINNED_ALLOC #include +#else +#include +#endif #include #include @@ -63,7 +68,11 @@ class BFfft_impl { bool _using_load_callback; thrust::device_vector _dv_tmp_storage; thrust::device_vector _dv_callback_data; +#if defined(BF_GPU_EXP_PINNED_ALLOC) && BF_GPU_EXP_PINNED_ALLOC typedef thrust::cuda::experimental::pinned_allocator pinned_allocator_type; +#else + using pinned_allocator_type = thrust::mr::stateless_resource_allocator; +#endif thrust::host_vector _hv_callback_data; BFstatus execute_impl(BFarray const* in, diff --git a/src/fft_kernels.h b/src/fft_kernels.h index f347d0635..892d3e39a 100644 --- a/src/fft_kernels.h +++ b/src/fft_kernels.h @@ -95,7 +95,7 @@ inline BFstatus bifrost_status(cufftResult status) { bifrost_status(cufft_ret)); \ } while(0) -struct CallbackData { +struct __attribute__((aligned(4))) CallbackData { int ptr_offset; int ndim; // Note: These array sizes must be at least the max supported FFT rank From 6b6029ecb4a36258343344c18c319d81c47ff0f5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 May 2023 07:17:54 -0600 Subject: [PATCH 0801/1155] And here we go... --- src/bifrost/config.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 9e078678f..5e58f1c95 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -49,7 +49,7 @@ extern "C" { #define BF_GPU_MAX_ARCH @GPU_MAX_ARCH@ #define BF_GPU_SHAREDMEM @GPU_SHAREDMEM@ #define BF_GPU_MANAGEDMEM @GPU_PASCAL_MANAGEDMEM@ -#dfined BF_GPU_EXP_PINNED_ALLOC @GPU_EXP_PINNED_ALLOC@ +#define BF_GPU_EXP_PINNED_ALLOC @GPU_EXP_PINNED_ALLOC@ #define BF_MAP_KERNEL_STDCXX "@MAP_KERNEL_STDCXX@" #define BF_MAP_KERNEL_DISK_CACHE @HAVE_MAP_CACHE@ #define BF_MAP_KERNEL_DISK_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) From 2535c47458a98a09e8d831f5e56ce71577dc2107 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 May 2023 07:25:56 -0600 Subject: [PATCH 0802/1155] Flip pinned allocator selection logic. --- configure | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/configure b/configure index a446ad7cf..99436f268 100755 --- a/configure +++ b/configure @@ -21765,15 +21765,15 @@ main (void) _ACEOF if ac_fn_cxx_try_run "$LINENO" then : - GPU_EXP_PINNED_ALLOC=1 - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: experimental" >&5 -printf "%s\n" "experimental" >&6; } -else $as_nop GPU_EXP_PINNED_ALLOC=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: full" >&5 printf "%s\n" "full" >&6; } +else $as_nop + GPU_EXP_PINNED_ALLOC=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: experimental" >&5 +printf "%s\n" "experimental" >&6; } fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext From 66e31b92858e5bc6582ac3857361c071533d8a1d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 May 2023 07:40:51 -0600 Subject: [PATCH 0803/1155] Missing file from previous commit. --- config/cuda.m4 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index c8df9bd55..2d34c6036 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -253,10 +253,10 @@ AC_DEFUN([AX_CHECK_CUDA], #include #include ]], [[]])], - [AC_SUBST([GPU_EXP_PINNED_ALLOC], [1]) - AC_MSG_RESULT([experimental])], [AC_SUBST([GPU_EXP_PINNED_ALLOC], [0]) - AC_MSG_RESULT([full])]) + AC_MSG_RESULT([full])], + [AC_SUBST([GPU_EXP_PINNED_ALLOC], [1]) + AC_MSG_RESULT([experimental])]) CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" From ba167a06073b5cc52a1f505ee970c5da711c6392 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 May 2023 07:41:03 -0600 Subject: [PATCH 0804/1155] Throw in packed as well. --- src/fft_kernels.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fft_kernels.h b/src/fft_kernels.h index 892d3e39a..0dad4f916 100644 --- a/src/fft_kernels.h +++ b/src/fft_kernels.h @@ -95,7 +95,7 @@ inline BFstatus bifrost_status(cufftResult status) { bifrost_status(cufft_ret)); \ } while(0) -struct __attribute__((aligned(4))) CallbackData { +struct __attribute__((packed,aligned(4))) CallbackData { int ptr_offset; int ndim; // Note: These array sizes must be at least the max supported FFT rank From a68989e5944a1084db2a0d0305a9df6d9d479623 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 May 2023 08:06:52 -0600 Subject: [PATCH 0805/1155] Update cupy to the CUDA 12.0 version. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d67d35044..bf368745e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -76,7 +76,7 @@ jobs: CPLUS_INCLUDE_PATH: "${{ env.pythonLocation }}/include/python\ ${{ matrix.python-version }}" run: python -m pip install \ - cupy-cuda112 \ + cupy-cuda120 \ pycuda \ numba \ jupyterlab \ From abee49a98094143d90cd146427822ac893ee3d2f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 May 2023 08:10:42 -0600 Subject: [PATCH 0806/1155] Update cupy to the CUDA 12.x version. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bf368745e..b6e68385d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -76,7 +76,7 @@ jobs: CPLUS_INCLUDE_PATH: "${{ env.pythonLocation }}/include/python\ ${{ matrix.python-version }}" run: python -m pip install \ - cupy-cuda120 \ + cupy-cuda12x \ pycuda \ numba \ jupyterlab \ From 5eb580b6e0a990eca1067e48b897de2cac86256c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 May 2023 12:22:04 -0600 Subject: [PATCH 0807/1155] Drop support for CUDA <10.0. --- config/cuda.m4 | 6 ++++-- configure | 8 +++++--- src/Complex.hpp | 14 -------------- src/Vector.hpp | 17 ----------------- src/linalg_kernels.cu | 13 +------------ 5 files changed, 10 insertions(+), 48 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 2d34c6036..4b33fb58b 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -31,7 +31,7 @@ AC_DEFUN([AX_CHECK_CUDA], fi if test "$HAVE_CUDA" = "1"; then - AC_MSG_CHECKING([for a working CUDA installation]) + AC_MSG_CHECKING([for a working CUDA 10+ installation]) CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -42,7 +42,9 @@ AC_DEFUN([AX_CHECK_CUDA], AC_LANG_PROGRAM([[ #include #include ]], - [[cudaMalloc(0, 0);]])], + [[#if __CUDACC_VER_MAJOR__ < 10 + asdfdsfd + #endif]])], [], [AC_SUBST([HAVE_CUDA], [0])]) diff --git a/configure b/configure index 99436f268..bf92f3c6e 100755 --- a/configure +++ b/configure @@ -21422,8 +21422,8 @@ fi fi if test "$HAVE_CUDA" = "1"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA installation" >&5 -printf %s "checking for a working CUDA installation... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA 10+ installation" >&5 +printf %s "checking for a working CUDA 10+ installation... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" @@ -21439,7 +21439,9 @@ printf %s "checking for a working CUDA installation... " >&6; } int main (void) { -cudaMalloc(0, 0); +#if __CUDACC_VER_MAJOR__ < 10 + asdfdsfd + #endif ; return 0; } diff --git a/src/Complex.hpp b/src/Complex.hpp index d9930a786..5730b7cbd 100644 --- a/src/Complex.hpp +++ b/src/Complex.hpp @@ -122,10 +122,8 @@ template struct is_storage_type { enum { value = false }; }; template<> struct is_storage_type { enum { value = true }; }; template<> struct is_storage_type { enum { value = true }; }; template<> struct is_storage_type { enum { value = true }; }; -#if defined(__CUDACC_VER_MAJOR__) && __CUDACC_VER_MAJOR__ >= 9 // TODO: Complex breaks because there's no half(int) constructor //template<> struct is_storage_type { enum { value = true }; }; -#endif #ifdef __CUDACC_VER_MAJOR__ template struct cuda_vector2_type {}; @@ -184,9 +182,7 @@ Complex c) : x(c.x), y(c.y) {} inline __host__ __device__ Complex(Complex c) : x(c.x), y(c.y) {} inline __host__ __device__ Complex(Complex c) : x(c.x), y(c.y) {} -#if defined(__CUDACC_VER_MAJOR__) && __CUDACC_VER_MAJOR__ >= 9 //inline __device__ Complex(Complex c) : x(__half2float(c.x)), y(__half2float(c.y)) {} -#endif #ifdef __CUDACC_VER_MAJOR__ // Note: Use float2 to ensure vectorized load/store inline __host__ __device__ Complex(typename Complex_detail::cuda_vector2_type::type c) : x(c.x), y(c.y) {} @@ -304,7 +300,6 @@ inline T type_pun(U x) { } #ifdef __CUDA_ARCH__ -#if defined(__CUDACC_VER_MAJOR__) && __CUDACC_VER_MAJOR__ >= 9 __device__ inline Complex __shfl_sync(unsigned mask, Complex const& c, int index, int width=warpSize) { @@ -312,15 +307,6 @@ inline Complex __shfl_sync(unsigned mask, Complex const& c, return detail::type_pun >( __shfl_sync(mask, detail::type_pun(c), index, width)); } -#else -__device__ -inline Complex __shfl(Complex const& c, - int index, int width=warpSize) { - typedef unsigned long long shfl_type; - return detail::type_pun >( - __shfl(detail::type_pun(c), index, width)); -} -#endif #endif // __CUDA_ARCH__ __host__ __device__ diff --git a/src/Vector.hpp b/src/Vector.hpp index 3d4e586f7..446cd04ea 100644 --- a/src/Vector.hpp +++ b/src/Vector.hpp @@ -28,21 +28,6 @@ #pragma once -#if defined __CUDACC_VER_MAJOR__ && __CUDACC_VER_MAJOR__ < 9 - -#define COUNT_TRAILING_ZEROS(x) \ - (32 \ - - 1 * bool((unsigned(x) & unsigned(-signed(x))) & 0xFFFFFFFF) \ - - 16 * bool((unsigned(x) & unsigned(-signed(x))) & 0x0000FFFF) \ - - 8 * bool((unsigned(x) & unsigned(-signed(x))) & 0x00FF00FF) \ - - 4 * bool((unsigned(x) & unsigned(-signed(x))) & 0x0F0F0F0F) \ - - 2 * bool((unsigned(x) & unsigned(-signed(x))) & 0x33333333) \ - - 1 * bool((unsigned(x) & unsigned(-signed(x))) & 0x55555555)) -#define LARGEST_POW2_FACTOR(x) \ - (1 << COUNT_TRAILING_ZEROS(x)) - -#else // CUDA 9+ - template struct CountTrailingZeros { enum { @@ -62,8 +47,6 @@ struct LargestPow2Factor { }; #define LARGEST_POW2_FACTOR(x) LargestPow2Factor::value -#endif - template class __attribute__((aligned( LARGEST_POW2_FACTOR(sizeof(T)*N) ))) Vector { T _v[N]; diff --git a/src/linalg_kernels.cu b/src/linalg_kernels.cu index 23e8f843e..122085b25 100644 --- a/src/linalg_kernels.cu +++ b/src/linalg_kernels.cu @@ -73,10 +73,7 @@ public: template inline __device__ T shfl_warp_sync(T var, int srcLane, int width=warpSize) { -#if defined(__CUDACC_VER_MAJOR__) && __CUDACC_VER_MAJOR__ >= 9 - return __shfl_sync(0xFFFFFFFF, var, srcLane, width); -#else - return __shfl(var, srcLane, width); +return __shfl_sync(0xFFFFFFFF, var, srcLane, width); #endif } @@ -653,11 +650,7 @@ inline __device__ T warp_all_sum(T x) { typedef typename shflable_type::type shfl_type; #pragma unroll for( int k=WIDTH>>1; k>=1; k>>=1 ) { -#if defined(__CUDACC_VER_MAJOR__) && __CUDACC_VER_MAJOR__ >= 9 x += type_pun(__shfl_xor_sync(0xFFFFFFFF, type_pun(x), k, WIDTH)); -#else - x += type_pun(__shfl_xor(type_pun(x), k, WIDTH)); -#endif } return x; } @@ -867,13 +860,11 @@ void bf_cgemm_TN_smallM_staticN_v2(int M, JonesVec, JonesVec, Complex); break; } -#if defined(__CUDACC_VER_MAJOR__) && __CUDACC_VER_MAJOR__ >= 9 //case BF_DTYPE_CF16: { // LAUNCH_BF_CGEMM_TN_SMALLM_KERNEL( // JonesVec, JonesVec, Complex); // break; //} -#endif case BF_DTYPE_CF32: { LAUNCH_BF_CGEMM_TN_SMALLM_KERNEL( JonesVec, JonesVec, Complex); @@ -892,13 +883,11 @@ void bf_cgemm_TN_smallM_staticN_v2(int M, JonesVec, JonesVec, Complex); break; } -#if defined(__CUDACC_VER_MAJOR__) && __CUDACC_VER_MAJOR__ >= 9 //case BF_DTYPE_CF16: { // LAUNCH_BF_CGEMM_TN_SMALLM_KERNEL( // JonesVec, JonesVec, Complex); // break; //} -#endif case BF_DTYPE_CF32: { LAUNCH_BF_CGEMM_TN_SMALLM_KERNEL( JonesVec, JonesVec, Complex); From d731173594bf59c42820311057bbfbc95cf1652a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 May 2023 12:28:57 -0600 Subject: [PATCH 0808/1155] Missed one. --- src/linalg_kernels.cu | 1 - 1 file changed, 1 deletion(-) diff --git a/src/linalg_kernels.cu b/src/linalg_kernels.cu index 122085b25..1e6633127 100644 --- a/src/linalg_kernels.cu +++ b/src/linalg_kernels.cu @@ -74,7 +74,6 @@ template inline __device__ T shfl_warp_sync(T var, int srcLane, int width=warpSize) { return __shfl_sync(0xFFFFFFFF, var, srcLane, width); -#endif } inline __host__ __device__ From f90695c62f595bb47307d9f0b5a3914a264013c1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 May 2023 15:10:25 -0600 Subject: [PATCH 0809/1155] Add a note about dropping old CUDA. --- ROADMAP.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ROADMAP.md b/ROADMAP.md index cd3b80c1c..08ca2f336 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -30,4 +30,5 @@ stated, the items on this page have not yet been developed. ## Platform and dependency updates - * Python 2.x will no longer be supported after the end of 2022. + * Python 2.x will no longer be supported after the end of 2022 + * CUDA <10.0 will no longer be supported after May 2023 From 04c490a3e11aa5cfa53750da58253a2d7c1e87ac Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 May 2023 10:00:42 -0600 Subject: [PATCH 0810/1155] Add telemetry. --- python/bifrost/blocks/dada_file.py | 6 ++++-- python/bifrost/blocks/psrdada.py | 6 ++++-- python/bifrost/psrdada.py | 5 ++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/python/bifrost/blocks/dada_file.py b/python/bifrost/blocks/dada_file.py index 9841a2cd2..979211b73 100755 --- a/python/bifrost/blocks/dada_file.py +++ b/python/bifrost/blocks/dada_file.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -39,6 +39,9 @@ import glob import os +from bifrost import telemetry +telemetry.track_module() + def _angle_str_to_sigproc(ang): aparts = ang.split(':') if len(aparts) == 2: @@ -202,4 +205,3 @@ def read_dada_file(filename, header_callback, gulp_nframe, *args, **kwargs): dtype (bifrost dtype string): dtype, e.g. f32, cf32 """ return DadaFileReadBlock(filename, header_callback, gulp_nframe, *args, **kwargs) - diff --git a/python/bifrost/blocks/psrdada.py b/python/bifrost/blocks/psrdada.py index 8a2f9fde0..ac1c990cf 100644 --- a/python/bifrost/blocks/psrdada.py +++ b/python/bifrost/blocks/psrdada.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -38,6 +38,9 @@ from copy import deepcopy import os +from bifrost import telemetry +telemetry.track_module() + # TODO: Move to memory.py? def _get_space(arr): if isinstance(arr, bifrost.ndarray): @@ -358,4 +361,3 @@ def write_psrdada_buffer(iring, buffer_key, gulp_nframe, *args, **kwargs): Initial version, currently only supports system space (not CUDA) """ return PsrDadaSinkBlock(iring, buffer_key, gulp_nframe) - diff --git a/python/bifrost/psrdada.py b/python/bifrost/psrdada.py index bb8124fc2..9d4842a89 100644 --- a/python/bifrost/psrdada.py +++ b/python/bifrost/psrdada.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -47,6 +47,9 @@ import ctypes +from bifrost import telemetry +telemetry.track_module() + def get_pointer_value(ptr): return ctypes.c_void_p.from_buffer(ptr).value From 22df34fa8c3368e1f1d642337263a6b5ebc5b34c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 May 2023 10:02:57 -0600 Subject: [PATCH 0811/1155] Switch back to EndOfDataStop. --- python/bifrost/psrdada.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/psrdada.py b/python/bifrost/psrdada.py index 9d4842a89..e91ece10b 100644 --- a/python/bifrost/psrdada.py +++ b/python/bifrost/psrdada.py @@ -126,7 +126,7 @@ def __next__(self): else: del block self.reset() - raise StopIteration() + raise EndOfDataStop('IpcBufBlock empty') def next(self): return self.__next__() def open(self): From ff62420f29f7d45e312783cf1b98bbe9a9a11ada Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 May 2023 10:12:10 -0600 Subject: [PATCH 0812/1155] Add in cf64/f64 and ci16/i16 data types. --- python/bifrost/blocks/psrdada.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/bifrost/blocks/psrdada.py b/python/bifrost/blocks/psrdada.py index ac1c990cf..18f1c1777 100644 --- a/python/bifrost/blocks/psrdada.py +++ b/python/bifrost/blocks/psrdada.py @@ -190,8 +190,12 @@ def generate_dada_header(hdr_dict, hdrlen=4096): print(hdr_dict['_tensor']) dtype = hdr_dict['_tensor']['dtype'] dtype_vals = { + 'cf64': { 'NBIT': '64', 'NDIM': '2' }, + 'f64': { 'NBIT': '64', 'NDIM': '1' }, 'cf32': { 'NBIT': '32', 'NDIM': '2' }, 'f32': { 'NBIT': '32', 'NDIM': '1' }, + 'ci16': { 'NBIT': '16', 'NDIM': '2' }, + 'i16': { 'NBIT': '16', 'NDIM': '1' } 'ci8': { 'NBIT': '8', 'NDIM': '2' }, 'i8': { 'NBIT': '8', 'NDIM': '1' } } if dtype in dtype_vals.keys(): From 104394ccb2d45ad568d5f1fe8c5179aedab0b7a4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 May 2023 10:13:49 -0600 Subject: [PATCH 0813/1155] Division change. --- python/bifrost/blocks/psrdada.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/blocks/psrdada.py b/python/bifrost/blocks/psrdada.py index 18f1c1777..703b6d2f6 100644 --- a/python/bifrost/blocks/psrdada.py +++ b/python/bifrost/blocks/psrdada.py @@ -25,7 +25,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from __future__ import absolute_import +from __future__ import absolute_import, division from bifrost.pipeline import SourceBlock, SinkBlock from bifrost.Space import Space @@ -239,7 +239,7 @@ def generate_dada_header(hdr_dict, hdrlen=4096): resolution = (bits_per_sample * fine_time) / 8 hdr_dict['RESOLUTION'] = resolution - bytes_per_second = int((bits_per_sample / 8) / tsamp) + bytes_per_second = int((bits_per_sample // 8) / tsamp) hdr_dict['BYTES_PER_SECOND'] = bytes_per_second hdr_dict['FILE_SIZE'] = bytes_per_second * 8 From a3a2ce3878904014ee242b2c19cc52bc3d234e18 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 May 2023 10:16:48 -0600 Subject: [PATCH 0814/1155] Missing comma. --- python/bifrost/blocks/psrdada.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/blocks/psrdada.py b/python/bifrost/blocks/psrdada.py index 703b6d2f6..10fa9d735 100644 --- a/python/bifrost/blocks/psrdada.py +++ b/python/bifrost/blocks/psrdada.py @@ -195,7 +195,7 @@ def generate_dada_header(hdr_dict, hdrlen=4096): 'cf32': { 'NBIT': '32', 'NDIM': '2' }, 'f32': { 'NBIT': '32', 'NDIM': '1' }, 'ci16': { 'NBIT': '16', 'NDIM': '2' }, - 'i16': { 'NBIT': '16', 'NDIM': '1' } + 'i16': { 'NBIT': '16', 'NDIM': '1' }, 'ci8': { 'NBIT': '8', 'NDIM': '2' }, 'i8': { 'NBIT': '8', 'NDIM': '1' } } if dtype in dtype_vals.keys(): From 090f7f28fcec957daa496127991d87cd552844e3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 May 2023 10:20:31 -0600 Subject: [PATCH 0815/1155] Try to install PSRDADA for testing. --- .github/workflows/main.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 59d67ddb1..6fd636983 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -49,6 +49,16 @@ jobs: gawk \ gnu-sed \ pkg-config + -name: "Software Install - PSRDADA" + if: ${{ matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} + run: | + git clone git://git.code.sf.net/p/psrdada/code psrdada + cd psrdada + ./bootstrap + ./configure + make -j all + sudo make install + cd .. - uses: actions/setup-python@v4.3.0 with: python-version: ${{ matrix.python-version }} From 3b6d0988bfa6fb4179c90f7c4aa960451a642e0a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 May 2023 10:26:11 -0600 Subject: [PATCH 0816/1155] Typos. --- .github/workflows/main.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6fd636983..c89d125b1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -49,16 +49,16 @@ jobs: gawk \ gnu-sed \ pkg-config - -name: "Software Install - PSRDADA" - if: ${{ matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} - run: | - git clone git://git.code.sf.net/p/psrdada/code psrdada - cd psrdada - ./bootstrap - ./configure - make -j all - sudo make install - cd .. + - name: "Software Install - PSRDADA" + if: ${{ matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} + run: | + git clone git://git.code.sf.net/p/psrdada/code psrdada + cd psrdada + ./bootstrap + ./configure + make -j all + sudo make install + cd .. - uses: actions/setup-python@v4.3.0 with: python-version: ${{ matrix.python-version }} From 806fc6448baf4e9c8a4f5aa42e01790a5c9e3775 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 May 2023 11:11:47 -0600 Subject: [PATCH 0817/1155] Add in autoconf and automake. --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c89d125b1..8bf9e4bd8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -31,6 +31,8 @@ jobs: run: | sudo apt-get update && \ sudo apt-get install -y \ + autoconf \ + automake \ build-essential \ ca-certificates \ curl \ From f0c62fed0f33bfc21355e11497fcbb6a903f2004 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 May 2023 11:19:16 -0600 Subject: [PATCH 0818/1155] Add in libtool. --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8bf9e4bd8..39d9061dc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -40,6 +40,7 @@ jobs: gfortran \ git \ libopenblas-dev \ + libtool \ pkg-config \ software-properties-common - name: "Software Install - MacOS" From 78de6d44c99f55beaa8f95e4d143ee8c8d480cd4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 May 2023 11:23:33 -0600 Subject: [PATCH 0819/1155] PSRDADA dies on a missing python for self-hosted. --- .github/workflows/main.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 39d9061dc..30baeefaa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -52,16 +52,6 @@ jobs: gawk \ gnu-sed \ pkg-config - - name: "Software Install - PSRDADA" - if: ${{ matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} - run: | - git clone git://git.code.sf.net/p/psrdada/code psrdada - cd psrdada - ./bootstrap - ./configure - make -j all - sudo make install - cd .. - uses: actions/setup-python@v4.3.0 with: python-version: ${{ matrix.python-version }} @@ -92,6 +82,16 @@ jobs: jupyter_client \ nbformat \ nbconvert + - name: "Software Install - PSRDADA" + if: ${{ matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} + run: | + git clone git://git.code.sf.net/p/psrdada/code psrdada + cd psrdada + ./bootstrap + ./configure + make -j all + sudo make install + cd .. - uses: actions/checkout@v3 - name: "Build and Install" run: | From 4452b71608eae4b00af9a9ed0226303edd4304fe Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 31 May 2023 09:51:02 -0600 Subject: [PATCH 0820/1155] Fixed AVX512 detection and report on SSE/AVX/AVX512 support. --- configure | 370 +++++++++++++++++---------------------------------- configure.ac | 8 +- 2 files changed, 126 insertions(+), 252 deletions(-) diff --git a/configure b/configure index 160cfe771..9bc4555e3 100755 --- a/configure +++ b/configure @@ -775,7 +775,6 @@ ac_ct_AR AR DLLTOOL OBJDUMP -FILECMD LN_S NM ac_ct_DUMPBIN @@ -3345,8 +3344,8 @@ esac -macro_version='2.4.7' -macro_revision='2.4.7' +macro_version='2.4.6' +macro_revision='2.4.6' @@ -4969,13 +4968,13 @@ else mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) - case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 @@ -5113,7 +5112,7 @@ esac fi fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; @@ -5217,7 +5216,7 @@ else $as_nop lt_cv_sys_max_cmd_len=8192; ;; - bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -5260,7 +5259,7 @@ else $as_nop sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi @@ -5465,114 +5464,6 @@ esac -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args. -set dummy ${ac_tool_prefix}file; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_FILECMD+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$FILECMD"; then - ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_FILECMD="${ac_tool_prefix}file" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -FILECMD=$ac_cv_prog_FILECMD -if test -n "$FILECMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 -printf "%s\n" "$FILECMD" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_FILECMD"; then - ac_ct_FILECMD=$FILECMD - # Extract the first word of "file", so it can be a program name with args. -set dummy file; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_FILECMD+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_FILECMD"; then - ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_FILECMD="file" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD -if test -n "$ac_ct_FILECMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5 -printf "%s\n" "$ac_ct_FILECMD" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_FILECMD" = x; then - FILECMD=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - FILECMD=$ac_ct_FILECMD - fi -else - FILECMD="$ac_cv_prog_FILECMD" -fi - - - - - - - if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 @@ -5716,7 +5607,7 @@ beos*) bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='$FILECMD -L' + lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; @@ -5750,14 +5641,14 @@ darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; -freebsd* | dragonfly* | midnightbsd*) +freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=$FILECMD + lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac @@ -5771,7 +5662,7 @@ haiku*) ;; hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=$FILECMD + lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' @@ -5818,7 +5709,7 @@ netbsd*) newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=$FILECMD + lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; @@ -6567,29 +6458,13 @@ esac fi : ${AR=ar} +: ${AR_FLAGS=cru} -# Use ARFLAGS variable as AR's operation code to sync the variable naming with -# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have -# higher priority because thats what people were doing historically (setting -# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS -# variable obsoleted/removed. - -test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} -lt_ar_flags=$AR_FLAGS - - - - - - -# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override -# by AR_FLAGS because that was never working and AR_FLAGS is about to die. - @@ -7053,7 +6928,7 @@ esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" @@ -7071,20 +6946,20 @@ fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ @@ -7108,7 +6983,7 @@ for ac_symprfx in "" "_"; do if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++ or ICC, + # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ @@ -7126,9 +7001,9 @@ for ac_symprfx in "" "_"; do " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else - lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -7331,7 +7206,7 @@ case $with_sysroot in #( fi ;; #( /*) - lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( @@ -7457,7 +7332,7 @@ ia64-*-hpux*) ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `$FILECMD conftest.$ac_objext` in + case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; @@ -7478,7 +7353,7 @@ ia64-*-hpux*) printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then - case `$FILECMD conftest.$ac_objext` in + case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; @@ -7490,7 +7365,7 @@ ia64-*-hpux*) ;; esac else - case `$FILECMD conftest.$ac_objext` in + case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; @@ -7516,7 +7391,7 @@ mips64*-*linux*) printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf - case `$FILECMD conftest.$ac_objext` in + case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; @@ -7524,7 +7399,7 @@ mips64*-*linux*) emul="${emul}64" ;; esac - case `$FILECMD conftest.$ac_objext` in + case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; @@ -7532,7 +7407,7 @@ mips64*-*linux*) emul="${emul}ltsmip" ;; esac - case `$FILECMD conftest.$ac_objext` in + case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; @@ -7556,14 +7431,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `$FILECMD conftest.o` in + case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - case `$FILECMD conftest.o` in + case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; @@ -7671,7 +7546,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `$FILECMD conftest.o` in + case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) @@ -8454,8 +8329,8 @@ int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 - $AR $AR_FLAGS libconftest.a conftest.o 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF @@ -8483,11 +8358,11 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; } darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) - case $MACOSX_DEPLOYMENT_TARGET,$host in - 10.[012],*|,*powerpc*-darwin[5-8]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - *) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + case ${MACOSX_DEPLOYMENT_TARGET},$host in + 10.[012],*|,*powerpc*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac @@ -8885,8 +8760,8 @@ esac ofile=libtool can_build_shared=yes -# All known linkers require a '.a' archive for static linking (except MSVC and -# ICC, which need '.lib'). +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld @@ -9398,7 +9273,7 @@ lt_prog_compiler_static= lt_prog_compiler_static='-qstaticlink' ;; *) - case `$CC -V 2>&1 | $SED 5q` in + case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' @@ -9821,15 +9696,15 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time + # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using - # Microsoft Visual C++ or Intel C++ Compiler. + # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) + # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) @@ -9881,7 +9756,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries whole_archive_flag_spec= fi supports_anon_versioning=no - case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -9993,7 +9868,6 @@ _LT_EOF emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes - file_list_spec='@' ;; interix[3-9]*) @@ -10008,7 +9882,7 @@ _LT_EOF # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) @@ -10051,7 +9925,7 @@ _LT_EOF compiler_needs_object=yes ;; esac - case `$CC -V 2>&1 | $SED 5q` in + case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes @@ -10063,7 +9937,7 @@ _LT_EOF if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi @@ -10079,7 +9953,7 @@ _LT_EOF archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi @@ -10211,7 +10085,7 @@ _LT_EOF if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no @@ -10482,12 +10356,12 @@ fi cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using - # Microsoft Visual C++ or Intel C++ Compiler. + # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in - cl* | icl*) - # Native MSVC or ICC + cl*) + # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes @@ -10528,7 +10402,7 @@ fi fi' ;; *) - # Assume MSVC and ICC wrapper + # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. @@ -10569,8 +10443,8 @@ fi output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no @@ -10604,7 +10478,7 @@ fi ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly* | midnightbsd*) + freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes @@ -10855,7 +10729,6 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes - file_list_spec='@' ;; osf3*) @@ -11548,7 +11421,7 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; @@ -11558,14 +11431,14 @@ cygwin* | mingw* | pw32* | cegcc*) ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; - *,cl* | *,icl*) - # Native MSVC or ICC + *,cl*) + # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' @@ -11584,7 +11457,7 @@ cygwin* | mingw* | pw32* | cegcc*) done IFS=$lt_save_ifs # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form @@ -11621,7 +11494,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) - # Assume MSVC and ICC wrapper + # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; @@ -11654,7 +11527,7 @@ dgux*) shlibpath_var=LD_LIBRARY_PATH ;; -freebsd* | dragonfly* | midnightbsd*) +freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then @@ -12807,41 +12680,30 @@ striplib= old_striplib= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } -if test -z "$STRIP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -else - if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - old_striplib="$STRIP --strip-debug" - striplib="$STRIP --strip-unneeded" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - else - case $host_os in - darwin*) - # FIXME - insert some real tests, host_os isn't really good enough +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - ;; - freebsd*) - if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then - old_striplib="$STRIP --strip-debug" - striplib="$STRIP --strip-unneeded" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - fi - ;; - *) + else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - ;; - esac - fi + fi + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + esac fi @@ -13611,8 +13473,8 @@ fi cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in - ,cl* | no,cl* | ,icl* | no,icl*) - # Native MSVC or ICC + ,cl* | no,cl*) + # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' @@ -13703,11 +13565,11 @@ fi output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds_CXX="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" if test yes != "$lt_cv_apple_cc_single_mod"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" - archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi else @@ -13742,7 +13604,6 @@ fi emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_CXX=yes - file_list_spec_CXX='@' ;; dgux*) @@ -13773,7 +13634,7 @@ fi archive_cmds_need_lc_CXX=no ;; - freebsd* | dragonfly* | midnightbsd*) + freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes @@ -13910,7 +13771,7 @@ fi # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in @@ -14050,13 +13911,13 @@ fi archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) - case `$CC -V 2>&1 | $SED 5q` in + case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' @@ -14713,7 +14574,7 @@ lt_prog_compiler_static_CXX= ;; esac ;; - freebsd* | dragonfly* | midnightbsd*) + freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) @@ -14796,7 +14657,7 @@ lt_prog_compiler_static_CXX= lt_prog_compiler_static_CXX='-qstaticlink' ;; *) - case `$CC -V 2>&1 | $SED 5q` in + case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' @@ -15183,7 +15044,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) @@ -15191,7 +15052,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries ;; cygwin* | mingw* | cegcc*) case $cc_basename in - cl* | icl*) + cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) @@ -15539,7 +15400,7 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; mingw* | cegcc*) @@ -15548,14 +15409,14 @@ cygwin* | mingw* | pw32* | cegcc*) ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; - *,cl* | *,icl*) - # Native MSVC or ICC + *,cl*) + # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' @@ -15574,7 +15435,7 @@ cygwin* | mingw* | pw32* | cegcc*) done IFS=$lt_save_ifs # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form @@ -15611,7 +15472,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) - # Assume MSVC and ICC wrapper + # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; @@ -15643,7 +15504,7 @@ dgux*) shlibpath_var=LD_LIBRARY_PATH ;; -freebsd* | dragonfly* | midnightbsd*) +freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then @@ -21241,7 +21102,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # -HAVE_AVX512=1 +HAVE_AVX512=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AVX-512 support" >&5 @@ -25772,7 +25633,6 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' @@ -25781,7 +25641,6 @@ want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' @@ -25956,7 +25815,6 @@ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ -FILECMD \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ @@ -25965,6 +25823,7 @@ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ +AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ @@ -26686,9 +26545,6 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd -# A file(cmd) program that detects file types. -FILECMD=$lt_FILECMD - # An object symbol dumper. OBJDUMP=$lt_OBJDUMP @@ -26713,11 +26569,8 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR -# Flags to create an archive (by configure). -lt_ar_flags=$lt_ar_flags - # Flags to create an archive. -AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} +AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec @@ -27107,7 +26960,7 @@ ltmain=$ac_aux_dir/ltmain.sh # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? - $SED '$q' "$ltmain" >> "$cfgfile" \ + sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || @@ -27397,6 +27250,21 @@ if test x$enable_native_arch != xno then : OPTIONS="$OPTIONS native" +fi +if test x$HAVE_SSE != x0 +then : + OPTIONS="$OPTIONS sse" + +fi +if test x$HAVE_AVX != x0 +then : + OPTIONS="$OPTIONS avx" + +fi +if test x$HAVE_AVX512 != x0 +then : + OPTIONS="$OPTIONS avx512" + fi if test x$HAVE_FLOAT128 != x0 then : diff --git a/configure.ac b/configure.ac index cd7bf0bc9..46ada4dc1 100644 --- a/configure.ac +++ b/configure.ac @@ -166,7 +166,7 @@ AC_DEFUN([AC_CHECK_AVX512], [ AC_MSG_RESULT([no]) ]) ]) -AC_SUBST([HAVE_AVX512], [1]) +AC_SUBST([HAVE_AVX512], [0]) AC_CHECK_AVX512 # @@ -502,6 +502,12 @@ AS_IF([test x$enable_cuda_debug != xno], [AC_SUBST([OPTIONS], ["$OPTIONS cuda_debug"])]) AS_IF([test x$enable_native_arch != xno], [AC_SUBST([OPTIONS], ["$OPTIONS native"])]) +AS_IF([test x$HAVE_SSE != x0], + [AC_SUBST([OPTIONS], ["$OPTIONS sse"])]) +AS_IF([test x$HAVE_AVX != x0], + [AC_SUBST([OPTIONS], ["$OPTIONS avx"])]) +AS_IF([test x$HAVE_AVX512 != x0], + [AC_SUBST([OPTIONS], ["$OPTIONS avx512"])]) AS_IF([test x$HAVE_FLOAT128 != x0], [AC_SUBST([OPTIONS], ["$OPTIONS float128"])]) AS_IF([test x$enable_map_cache != xno], From 9a628e76e865e895c9a54df63d1793d9d10d57c6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 31 May 2023 09:53:51 -0600 Subject: [PATCH 0821/1155] More explicit. --- configure | 6 ++++++ configure.ac | 3 +++ 2 files changed, 9 insertions(+) diff --git a/configure b/configure index 9bc4555e3..8f307530d 100755 --- a/configure +++ b/configure @@ -21049,6 +21049,8 @@ printf "%s\n" "yes" >&6; } else $as_nop + HAVE_SSE=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -21090,6 +21092,8 @@ printf "%s\n" "yes" >&6; } else $as_nop + HAVE_AVX=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -21131,6 +21135,8 @@ printf "%s\n" "yes" >&6; } else $as_nop + HAVE_AVX512=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } diff --git a/configure.ac b/configure.ac index 46ada4dc1..c727be91c 100644 --- a/configure.ac +++ b/configure.ac @@ -111,6 +111,7 @@ AC_DEFUN([AC_CHECK_SSE], [ AC_SUBST([HAVE_SSE], [1]) AC_MSG_RESULT([yes]) ], [ + AC_SUBST([HAVE_SSE], [0]) AC_MSG_RESULT([no]) ]) ]) @@ -137,6 +138,7 @@ AC_DEFUN([AC_CHECK_AVX], [ AC_SUBST([HAVE_AVX], [1]) AC_MSG_RESULT([yes]) ], [ + AC_SUBST([HAVE_AVX], [0]) AC_MSG_RESULT([no]) ]) ]) @@ -163,6 +165,7 @@ AC_DEFUN([AC_CHECK_AVX512], [ AC_SUBST([HAVE_AVX512], [1]) AC_MSG_RESULT([yes]) ], [ + AC_SUBST([HAVE_AVX512], [0]) AC_MSG_RESULT([no]) ]) ]) From 0388e5fbf48c6f59f35323bd018dcc09d4f1b40a Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Wed, 31 May 2023 13:58:52 -0600 Subject: [PATCH 0822/1155] Single polarization transpose works in tests and tutorial --- src/map.cpp | 7 +++--- src/transpose.cu | 48 +++++++++++++++++++++++++++--------------- test/test_transpose.py | 4 +++- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index ca6a30cd6..cd123704e 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -129,7 +129,6 @@ BFstatus build_map_kernel(int* external_ndim, ::memcpy(shape, external_shape, ndim*sizeof(*shape)); long y_size = 1; long x_size = 1; - std::vector mutable_arrays; std::vector mutable_array_ptrs; if( basic_indexing_only ) { @@ -363,8 +362,8 @@ BFstatus build_map_kernel(int* external_ndim, size_t logsize; // Note: Includes the trailing NULL BF_CHECK_NVRTC( nvrtcGetProgramLogSize(program, &logsize) ); - if( (logsize > 1 || EnvVars::get("BF_PRINT_MAP_KERNELS", "0") != "0") && - !basic_indexing_only ) { + if( (logsize > 1 || EnvVars::get("BF_PRINT_MAP_KERNELS", "0") != "0") && + !basic_indexing_only ) { std::vector log(logsize, 0); BF_CHECK_NVRTC( nvrtcGetProgramLog(program, &log[0]) ); int i = 1; @@ -376,7 +375,7 @@ BFstatus build_map_kernel(int* external_ndim, std::cout << "---------------------------------------------------" << std::endl; std::cout << &log[0] << std::endl; std::cout << "---------------------------------------------------" << std::endl; - } + } #endif // BIFROST_DEBUG if( ret != NVRTC_SUCCESS ) { // Note: Don't print debug msg here, failure may not be expected diff --git a/src/transpose.cu b/src/transpose.cu index 67baecfc7..ea48fe060 100644 --- a/src/transpose.cu +++ b/src/transpose.cu @@ -340,7 +340,7 @@ BFstatus transpose_simple(BFarray const* in, char const* arg_names[] = {"in", "out"}; char const* func = func_str.c_str(); char const* extra_code = 0; - return bfMap(ndim, out->shape, axis_names, narg, args, arg_names, + return bfMap(ndim, out->shape, axis_names, narg, args, arg_names, "transpose_simple", func, extra_code, 0, 0); } @@ -379,13 +379,18 @@ BFstatus transpose_vector_read(BFarray const* in, } } std::string func_str; - func_str += "enum { K = " + std::to_string(K) + " };\n"; - func_str += - "in_type ivals = in(" + in_inds_str + ");\n" - "#pragma unroll\n" - "for( int k=0; k Date: Wed, 31 May 2023 15:15:23 -0600 Subject: [PATCH 0823/1155] Revert "Single polarization transpose works in tests and tutorial" This reverts commit 0388e5fbf48c6f59f35323bd018dcc09d4f1b40a. --- src/map.cpp | 7 +++--- src/transpose.cu | 48 +++++++++++++++--------------------------- test/test_transpose.py | 4 +--- 3 files changed, 22 insertions(+), 37 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index cd123704e..ca6a30cd6 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -129,6 +129,7 @@ BFstatus build_map_kernel(int* external_ndim, ::memcpy(shape, external_shape, ndim*sizeof(*shape)); long y_size = 1; long x_size = 1; + std::vector mutable_arrays; std::vector mutable_array_ptrs; if( basic_indexing_only ) { @@ -362,8 +363,8 @@ BFstatus build_map_kernel(int* external_ndim, size_t logsize; // Note: Includes the trailing NULL BF_CHECK_NVRTC( nvrtcGetProgramLogSize(program, &logsize) ); - if( (logsize > 1 || EnvVars::get("BF_PRINT_MAP_KERNELS", "0") != "0") && - !basic_indexing_only ) { + if( (logsize > 1 || EnvVars::get("BF_PRINT_MAP_KERNELS", "0") != "0") && + !basic_indexing_only ) { std::vector log(logsize, 0); BF_CHECK_NVRTC( nvrtcGetProgramLog(program, &log[0]) ); int i = 1; @@ -375,7 +376,7 @@ BFstatus build_map_kernel(int* external_ndim, std::cout << "---------------------------------------------------" << std::endl; std::cout << &log[0] << std::endl; std::cout << "---------------------------------------------------" << std::endl; - } + } #endif // BIFROST_DEBUG if( ret != NVRTC_SUCCESS ) { // Note: Don't print debug msg here, failure may not be expected diff --git a/src/transpose.cu b/src/transpose.cu index ea48fe060..67baecfc7 100644 --- a/src/transpose.cu +++ b/src/transpose.cu @@ -340,7 +340,7 @@ BFstatus transpose_simple(BFarray const* in, char const* arg_names[] = {"in", "out"}; char const* func = func_str.c_str(); char const* extra_code = 0; - return bfMap(ndim, out->shape, axis_names, narg, args, arg_names, + return bfMap(ndim, out->shape, axis_names, narg, args, arg_names, "transpose_simple", func, extra_code, 0, 0); } @@ -379,18 +379,13 @@ BFstatus transpose_vector_read(BFarray const* in, } } std::string func_str; - if(K==1){ - func_str+= "int k=0;\n"; - func_str+= " out(" + out_inds_str + ") = in(" + in_inds_str + ");\n"; - } else{ - func_str += "enum { K = " + std::to_string(K) + " };\n"; - func_str += - "in_type ivals = in(" + in_inds_str + ");\n" - "#pragma unroll\n" - "for( int k=0; k Date: Thu, 1 Jun 2023 09:22:42 -0600 Subject: [PATCH 0824/1155] Need to actually save files... --- python/bifrost/ring.py | 8 ------ src/Makefile.in | 61 ------------------------------------------ 2 files changed, 69 deletions(-) diff --git a/python/bifrost/ring.py b/python/bifrost/ring.py index e1d7342e1..e4335e1f6 100644 --- a/python/bifrost/ring.py +++ b/python/bifrost/ring.py @@ -118,11 +118,7 @@ def read(self, whence='earliest', guarantee=True): try: yield cur_seq cur_seq.increment() -<<<<<<< HEAD - except StopIteration: -======= except EndOfDataStop: ->>>>>>> 9a628e76e865e895c9a54df63d1793d9d10d57c6 return #def _data(self): # data_ptr = _get(self.lib.bfRingLockedGetData, self.obj) @@ -287,11 +283,7 @@ def read(self, span_size, stride=None, begin=0): with self.acquire(offset, span_size) as ispan: yield ispan offset += stride -<<<<<<< HEAD - except StopIteration: -======= except EndOfDataStop: ->>>>>>> 9a628e76e865e895c9a54df63d1793d9d10d57c6 return class SpanBase(object): diff --git a/src/Makefile.in b/src/Makefile.in index d89cd783c..8c4e09740 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -107,67 +107,6 @@ NVCCFLAGS += $(NVCC_GENCODE) #NVCCFLAGS += -Xcudafe "--diag_suppress=unrecognized_gcc_pragma" #NVCCFLAGS += --expt-relaxed-constexpr -<<<<<<< HEAD:src/Makefile -ifndef NODEBUG - CPPFLAGS += -DBF_DEBUG=1 - CXXFLAGS += -g - NVCCFLAGS += -g -endif - -LIB += -lgomp - -ifdef TRACE - CPPFLAGS += -DBF_TRACE_ENABLED=1 -endif - -ifdef NUMA - # Requires libnuma-dev to be installed - LIB += -lnuma - CPPFLAGS += -DBF_NUMA_ENABLED=1 -endif - -ifdef HWLOC - # Requires libhwloc-dev to be installed - LIB += -lhwloc - CPPFLAGS += -DBF_HWLOC_ENABLED=1 -endif - -ifdef VMA - # Requires Mellanox libvma to be installed - LIB += -lvma - CPPFLAGS += -DBF_VMA_ENABLED=1 -endif - -ifdef VERBS - # Requires Mellanox libvma to be installed - LIB += -libverbs - CPPFLAGS += -DBF_VERBS_ENABLED=1 -endif - -ifdef ALIGNMENT - CPPFLAGS += -DBF_ALIGNMENT=$(ALIGNMENT) -endif - -ifdef CUDA_DEBUG - NVCCFLAGS += -G -endif - -ifndef NOCUDA - CPPFLAGS += -DBF_CUDA_ENABLED=1 - LIB += -L$(CUDA_LIBDIR64) -L$(CUDA_LIBDIR) -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt -ifdef XGPU - CPPFLAGS += -DBF_XGPU_ENABLED=1 - LIB += -lxgpu -endif -endif - -ifndef ANY_ARCH - CXXFLAGS += -march=native - NVCCFLAGS += -Xcompiler "-march=native" -endif - -======= ->>>>>>> 9a628e76e865e895c9a54df63d1793d9d10d57c6:src/Makefile.in LIB_DIR = ../lib INC_DIR = . CPPFLAGS += -I. -I$(INC_DIR) -I$(CUDA_INCDIR) From 90886715fbb4dc0a1c97202909be158a776dd171 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 09:23:47 -0600 Subject: [PATCH 0825/1155] Revert to the ibverb-support version. --- tools/like_top.py | 12 +++++------- tools/pipeline2dot.py | 1 + 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/tools/like_top.py b/tools/like_top.py index c4ad90ed9..89ca700dd 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -341,11 +341,10 @@ def main(args): ac = max([0.0, log['acquire_time']]) pr = max([0.0, log['process_time']]) re = max([0.0, log['reserve_time']]) - gb = max([0.0, log.get('gbps', 0.0)]) except KeyError: - ac, pr, re, gb = 0.0, 0.0, 0.0, 0.0 + ac, pr, re = 0.0, 0.0, 0.0 - blockList['%i-%s' % (pid, block)] = {'pid': pid, 'name':block, 'cmd': cmd, 'core': cr, 'acquire': ac, 'process': pr, 'reserve': re, 'total':ac+pr+re, 'gbps':gb} + blockList['%i-%s' % (pid, block)] = {'pid': pid, 'name':block, 'cmd': cmd, 'core': cr, 'acquire': ac, 'process': pr, 'reserve': re, 'total':ac+pr+re} ## Sort order = sorted(blockList, key=lambda x: blockList[x][sort_key], reverse=sort_rev) @@ -383,7 +382,7 @@ def main(args): k = _add_line(scr, k, 0, output, std) ### Header k = _add_line(scr, k, 0, ' ', std) - output = '%6s %15s %4s %5s %7s %7s %7s %7s %7s Cmd' % ('PID', 'Block', 'Core', '%CPU', 'Total', 'Acquire', 'Process', 'Reserve', 'Gbits/s') + output = '%6s %15s %4s %5s %7s %7s %7s %7s Cmd' % ('PID', 'Block', 'Core', '%CPU', 'Total', 'Acquire', 'Process', 'Reserve') csize = size[1]-len(output) if csize < 0: csize = 0 @@ -398,7 +397,7 @@ def main(args): c = '%5.1f' % c except KeyError: c = '%5s' % ' ' - output = '%6i %15s %4i %5s %7.3f %7.3f %7.3f %7.3f %7.3f %s' % (d['pid'], d['name'][:15], d['core'], c, d['total'], d['acquire'], d['process'], d['reserve'], d['gbps'], d['cmd'][:csize+3]) + output = '%6i %15s %4i %5s %7.3f %7.3f %7.3f %7.3f %s' % (d['pid'], d['name'][:15], d['core'], c, d['total'], d['acquire'], d['process'], d['reserve'], d['cmd'][:csize+3]) k = _add_line(scr, k, 0, output, std) if k >= size[0] - 1: break @@ -413,8 +412,7 @@ def main(args): except KeyboardInterrupt: pass - except Exception as err: - error = err + except Exception as error: exc_type, exc_value, exc_traceback = sys.exc_info() fileObject = StringIO() traceback.print_tb(exc_traceback, file=fileObject) diff --git a/tools/pipeline2dot.py b/tools/pipeline2dot.py index d2c772bd8..b6f20f640 100755 --- a/tools/pipeline2dot.py +++ b/tools/pipeline2dot.py @@ -353,3 +353,4 @@ def main(args): help='exclude associated blocks') args = parser.parse_args() main(args) + From aa064b1524a3f0b9407646bec4d69edf3922fec9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 09:26:00 -0600 Subject: [PATCH 0826/1155] Focus on packet formats for now. --- src/Makefile.in | 8 +- src/beamform.cpp | 87 ---------- src/bf_xgpu.cpp | 284 ------------------------------ src/bifrost/beamform.h | 73 -------- src/bifrost/bf_xgpu.h | 25 --- src/cublas_beamform.cu | 373 ---------------------------------------- src/cublas_beamform.cuh | 37 ---- 7 files changed, 1 insertion(+), 886 deletions(-) delete mode 100644 src/beamform.cpp delete mode 100644 src/bf_xgpu.cpp delete mode 100644 src/bifrost/beamform.h delete mode 100644 src/bifrost/bf_xgpu.h delete mode 100644 src/cublas_beamform.cu delete mode 100644 src/cublas_beamform.cuh diff --git a/src/Makefile.in b/src/Makefile.in index 8c4e09740..360859f60 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -69,13 +69,7 @@ ifeq ($(HAVE_CUDA),1) reduce.o \ fir.o \ guantize.o \ - gunpack.o \ - beamform.o \ - cublas_beamform.o -ifdef XGPU - LIBBIFROST_OBJS += \ - bf_xgpu.o -endif + gunpack.o endif JIT_SOURCES ?= \ diff --git a/src/beamform.cpp b/src/beamform.cpp deleted file mode 100644 index 16d874222..000000000 --- a/src/beamform.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "cublas_beamform.cuh" - -extern "C" { - - -/* - * Initialize the beamformer library - */ - -BFstatus bfBeamformInitialize( - int gpudev, - int ninputs, - int nchans, - int ntimes, - int nbeams, - int ntime_blocks -) { - // TODO: array size checking - // TODO: use complex data types - cublas_beamform_init( - gpudev, - ninputs, - nchans, - ntimes, - nbeams, - ntime_blocks - ); - return BF_STATUS_SUCCESS; -} - -BFstatus bfBeamformRun(BFarray *in, BFarray *out, BFarray *weights) { - if (in->space != BF_SPACE_CUDA) { - fprintf(stderr, "Beamformer input buffer must be in CUDA space\n"); - return BF_STATUS_INVALID_SPACE; - } - if (out->space != BF_SPACE_CUDA) { - fprintf(stderr, "Beamformer output buffer must be in CUDA space\n"); - return BF_STATUS_INVALID_SPACE; - } - if (weights->space != BF_SPACE_CUDA) { - fprintf(stderr, "Beamformer weights buffer must be in CUDA space\n"); - return BF_STATUS_INVALID_SPACE; - } - cublas_beamform((unsigned char *)in->data, (float *)out->data, (float *)weights->data); - return BF_STATUS_SUCCESS; -} - -BFstatus bfBeamformIntegrate(BFarray *in, BFarray *out, int ntimes_sum) { - if (in->space != BF_SPACE_CUDA) { - fprintf(stderr, "Beamformer input buffer must be in CUDA space\n"); - return BF_STATUS_INVALID_SPACE; - } - if (out->space != BF_SPACE_CUDA) { - fprintf(stderr, "Beamformer output buffer must be in CUDA space\n"); - return BF_STATUS_INVALID_SPACE; - } - cublas_beamform_integrate((float *)in->data, (float *)out->data, ntimes_sum); - return BF_STATUS_SUCCESS; -} - -BFstatus bfBeamformIntegrateSingleBeam(BFarray *in, BFarray *out, int ntimes_sum, int beam_index) { - if (in->space != BF_SPACE_CUDA) { - fprintf(stderr, "Beamformer input buffer must be in CUDA space\n"); - return BF_STATUS_INVALID_SPACE; - } - if (out->space != BF_SPACE_CUDA) { - fprintf(stderr, "Beamformer output buffer must be in CUDA space\n"); - return BF_STATUS_INVALID_SPACE; - } - cublas_beamform_integrate_single_beam((float *)in->data, (float *)out->data, ntimes_sum, beam_index); - return BF_STATUS_SUCCESS; -} -} // C diff --git a/src/bf_xgpu.cpp b/src/bf_xgpu.cpp deleted file mode 100644 index 5a340247d..000000000 --- a/src/bf_xgpu.cpp +++ /dev/null @@ -1,284 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -extern "C" { - -static XGPUContext context; -static XGPUInfo info; - -/* - * Initialize the xGPU library by providing - * a pointer to the input and output data (on the host), - * and a GPU device ID - */ -BFstatus bfXgpuInitialize(BFarray *in, BFarray *out, int gpu_dev) { - int xgpu_error; - xgpuInfo(&info); - // Don't bother checking sizes if the input space is CUDA. - // We're not going to use these arrays anyway - if (in->space != BF_SPACE_CUDA) { - if (num_contiguous_elements(in) != info.vecLength) { - fprintf(stderr, "ERROR: xgpuInitialize: number of elements in != vecLength\n"); - fprintf(stderr, "number of elements in: %lu\n", num_contiguous_elements(in)); - fprintf(stderr, "vecLength: %llu\n", info.vecLength); - return BF_STATUS_INVALID_SHAPE; - } - if (num_contiguous_elements(out) != info.matLength) { - fprintf(stderr, "ERROR: xgpuInitialize: number of elements out != matLength\n"); - fprintf(stderr, "number of elements out: %lu\n", num_contiguous_elements(out)); - fprintf(stderr, "matLength: %llu\n", info.matLength); - return BF_STATUS_INVALID_SHAPE; - } - } - context.array_h = (SwizzleInput *)in->data; - context.array_len = info.vecLength; - context.matrix_h = (Complex *)out->data; - context.matrix_len = info.matLength; - if (in->space == BF_SPACE_CUDA) { - xgpu_error = xgpuInit(&context, gpu_dev | XGPU_DONT_REGISTER | XGPU_DONT_MALLOC_GPU); - } else { - xgpu_error = xgpuInit(&context, gpu_dev); - } - if (xgpu_error != XGPU_OK) { - fprintf(stderr, "ERROR: xgpuInitialize: call returned %d\n", xgpu_error); - return BF_STATUS_INTERNAL_ERROR; - } else { - return BF_STATUS_SUCCESS; - } -} - -/* - * Call the xGPU kernel. - * in : pointer to input data array on host - * out: pointer to output data array on host - * doDump : if 1, this is the last call in an integration, and results - * will be copied to the host. - */ -BFstatus bfXgpuCorrelate(BFarray *in, BFarray *out, int doDump) { - if (in->space == BF_SPACE_CUDA) { - return BF_STATUS_UNSUPPORTED_SPACE; - } - if (out->space == BF_SPACE_CUDA) { - return BF_STATUS_UNSUPPORTED_SPACE; - } - int xgpu_error; - context.array_h = (SwizzleInput *)in->data; - context.array_len = info.vecLength; - context.matrix_h = (Complex *)out->data; - context.matrix_len = info.matLength; - xgpu_error = xgpuCudaXengineSwizzle(&context, doDump ? SYNCOP_DUMP : SYNCOP_SYNC_TRANSFER); - if (doDump) { - xgpuClearDeviceIntegrationBuffer(&context); - } - if (xgpu_error != XGPU_OK) { - return BF_STATUS_INTERNAL_ERROR; - } else { - return BF_STATUS_SUCCESS; - } -} - -/* - * Call the xGPU kernel having pre-copied data to device memory. - * Note that this means xGPU can't take advantage of its inbuild - * copy/compute pipelining. - * in : pointer to input data array on device - * out: pointer to output data array on device - * doDump : if 1, this is the last call in an integration, and results - * will be copied to the host. - */ -static int newAcc = 1; // flush vacc on the first call -BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump) { - if (in->space != BF_SPACE_CUDA) { - return BF_STATUS_UNSUPPORTED_SPACE; - } - if (out->space != BF_SPACE_CUDA) { - return BF_STATUS_UNSUPPORTED_SPACE; - } - int xgpu_error; - context.array_h = (ComplexInput *)in->data; - context.array_len = info.vecLength; - context.matrix_h = (Complex *)out->data; - context.matrix_len = info.matLength; - xgpu_error = xgpuCudaXengineSwizzleKernel(&context, doDump ? SYNCOP_DUMP : 0, newAcc, - (SwizzleInput *)in->data, (Complex *)out->data); - - if (newAcc) { - newAcc = 0; - } - if (doDump) { - newAcc = 1; - } - if (xgpu_error != XGPU_OK) { - fprintf(stderr, "ERROR: xgpuKernel: kernel call returned %d\n", xgpu_error); - return BF_STATUS_INTERNAL_ERROR; - } else { - return BF_STATUS_SUCCESS; - } -} - -/* - * Given an xGPU accumulation buffer, grab a subset of visibilities from - * and gather them in a new buffer, in order - * chan x visibility x complexity [int32] (if transpose=0) - * or - * visibility x chan * complexity [int32] (if transpose!=0) - * BFarray *in : Pointer to a BFarray with storage in device memory, where xGPU results reside - * BFarray *in : Pointer to a BFarray with storage in device memory where collated visibilities should be written. - * BFarray *vismap : array of visibilities in [[polA, polB], [polC, polD], ... ] form. - * int nchan_sum: The number of frequency channels to sum over - */ -BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *conj, int nchan_sum, int transpose) { - long long unsigned nvis = num_contiguous_elements(vismap); - int xgpu_error; - if (in->space != BF_SPACE_CUDA) { - return BF_STATUS_UNSUPPORTED_SPACE; - } - if (out->space != BF_SPACE_CUDA) { - return BF_STATUS_UNSUPPORTED_SPACE; - } - if (vismap->space != BF_SPACE_CUDA) { - return BF_STATUS_UNSUPPORTED_SPACE; - } - if (conj->space != BF_SPACE_CUDA) { - return BF_STATUS_UNSUPPORTED_SPACE; - } - if (num_contiguous_elements(conj) != nvis) { - return BF_STATUS_INVALID_SHAPE; - } - xgpu_error = xgpuCudaSubSelect(&context, (Complex *)in->data, (Complex *)out->data, (int *)vismap->data, (int *)conj->data, nvis, nchan_sum, transpose); - if (xgpu_error != XGPU_OK) { - fprintf(stderr, "ERROR: xgpuKernel: kernel call returned %d\n", xgpu_error); - return BF_STATUS_INTERNAL_ERROR; - } else { - return BF_STATUS_SUCCESS; - } -} - -/* Computes the triangular index of an (i,j) pair as shown here... - * NB: Output is valid only if i >= j. - * - * i=0 1 2 3 4.. - * +--------------- - * j=0 | 00 01 03 06 10 - * 1 | 02 04 07 11 - * 2 | 05 08 12 - * 3 | 09 13 - * 4 | 14 - * : - */ -int tri_index(int i, int j){ - return (i * (i+1))/2 + j; - } - -/* Returns index into the GPU's register tile ordered output buffer for the - * real component of the cross product of inputs in0 and in1. Note that in0 - * and in1 are input indexes (i.e. 0 based) and often represent antenna and - * polarization by passing (2*ant_idx+pol_idx) as the input number (NB: ant_idx - * and pol_idx are also 0 based). Return value is valid if in1 >= in0. The - * corresponding imaginary component is located xgpu_info.matLength words after - * the real component. - */ -int regtile_index(int in0, int in1, int nstand) { - int a0, a1, p0, p1; - int num_words_per_cell=4; - int quadrant, quadrant_index, quadrant_size, cell_index, pol_offset, index; - a0 = in0 >> 1; - a1 = in1 >> 1; - p0 = in0 & 1; - p1 = in1 & 1; - - // Index within a quadrant - quadrant_index = tri_index(a1/2, a0/2); - // Quadrant for this input pair - quadrant = 2*(a0&1) + (a1&1); - // Size of quadrant - quadrant_size = (nstand/2 + 1) * nstand/4; - // Index of cell (in units of cells) - cell_index = quadrant*quadrant_size + quadrant_index; - // Pol offset - pol_offset = 2*p1 + p0; - // Word index (in units of words (i.e. floats) of real component - index = (cell_index * num_words_per_cell) + pol_offset; - return index; - } - -BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray *is_conj) { - int *ip_map = (int *)antpol_to_input->data; // indexed by stand, pol - int *bl_map = (int *)antpol_to_bl->data; // indexed by stand0, stand1, pol0, pol1 - int *conj_map = (int *)is_conj->data; // indexed by stand0, stand1, pol0, pol1 - int s0, s1, p0, p1, i0, i1; - int nstand, npol; - XGPUInfo xgpu_info; - xgpuInfo(&xgpu_info); - nstand = xgpu_info.nstation; - npol = xgpu_info.npol; - for (s0=0; s0 i0) { - bl_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = regtile_index(i0, i1, nstand); - conj_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = 1; - } else { - bl_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = regtile_index(i1, i0, nstand); - conj_map[s0*nstand*npol*npol + s1*npol*npol + p0*npol + p1] = 0; - } - } - } - } - } - return BF_STATUS_SUCCESS; -} - -/* - * Reorder a DP4A xGPU spec output into something more sane, throwing - * away unwanted baselines and re-concatenating real and imag parts in - * a reasonable way. - * Also remove conjugation weirdness so baselines a,b has conjugation a*conj(b) - */ -BFstatus bfXgpuReorder(BFarray *xgpu_output, BFarray *reordered, BFarray *baselines, BFarray *is_conjugated) { - XGPUInfo xgpu_info; - xgpuInfo(&xgpu_info); - - int *output = (int *)reordered->data; - int *input_r = (int *)xgpu_output->data; - int *input_i = input_r + xgpu_info.matLength; - int *bl = (int *)baselines->data; - int *conj = (int *)is_conjugated->data; - int n_bl = num_contiguous_elements(baselines); - int xgpu_n_input = xgpu_info.nstation * xgpu_info.npol; - int n_chan = xgpu_info.nfrequency; - int i, c; - // number of entries per channel - size_t regtile_chan_len = 4 * 4 * xgpu_n_input/4 * (xgpu_n_input/4+1) / 2; - for (i=0; i -#include - -/* - * gpudev: GPU device ID to use - * ninputs: Number of inputs (single-polarization) to the beamformer - * nchans: Number of frequency channels - * ntimes: Number of time samples per beamforming call - * nbeams: Number of beams to generate. If using ntime_blocks > 0, beams=N will deliver N/2 beams. - * (See bfBeamformRun) - * ntime_blocks: Number of time blocks to output. Eg. if ntimes=1000 and ntime_blocks=10, the beamformer - will integrate over 100 samples per call. Set to 0 for no accumulation, in which case - raw beam voltages are output. - */ -BFstatus bfBeamformInitialize( - int gpudev, - int ninputs, - int nchans, - int ntimes, - int nbeams, - int ntime_blocks -); - -/* - * in: Pointer to ntime x nchan x ninputs x 4+4 bit data block - * out: Pointer to output data. - * If ntime_blocks > 0: !!!!UNTESTED, probably broken!!!! - * For the purposes of generating dynamic spectra, beam 2n and 2n+1 are considered - * to be two pols of the same pointing, and are cross-multipled and summed over - * ntimes/ntime_blocks to form the output array: - * nbeam/2 x ntime_blocks x nchan x 4 x float32 (powers, XX, YY, re(XY, im(XY)) - * Note that this means for N dual-pol beam pointings, the beamformer should be - * constructed with nbeams=2N. This isn't very efficient, but makes it easy to deal - * with arbitrary polarization orderings in the input buffer (suitable beamforming - * coefficients can make appropriate single-pol beam pairs). - * If ntime_blocks = 0: - * Data are returned as voltages, in order: - * nchan x nbeam x ntime x complex64 beamformer block - * - * weights -- pointer to nbeams x nchans x ninputs x complex64 weights - */ -BFstatus bfBeamformRun( - BFarray *in, - BFarray *out, - BFarray *weights -); - -/* - * Take the output of bfBeamformRun with ntime_blocks = 0, and perform transposing and integration - * of data, to deliver a time integrated dual-pol dynamic spectra of the form: - * nbeam/2 x ntime/ntimes_sum x nchan x 4 x float32 (powers, XX, YY, re(XY, im(XY)) - * I.e., the format which would be returned by bfBeamformRun if ntime_blocks > 0 - */ -BFstatus bfBeamformIntegrate( - BFarray *in, - BFarray *out, - int ntimes_sum -); - -/* - * Take the output of bfBeamformRun with ntime_blocks = 0, and - * deliver a time integrated dual-pol dynamic spectra for a single beam of the form: - * ntime/ntimes_sum x nchan x 4 x float32 (powers, XX, YY, re(XY, im(XY)) - * - * ntime_sum: the number of times to integrate - * beam_index: The beam to select (if beam_index=N, beams N and N+1 will be used as a polarization pair) - */ -BFstatus bfBeamformIntegrateSingleBeam( - BFarray *in, - BFarray *out, - int ntimes_sum, - int beam_index -); diff --git a/src/bifrost/bf_xgpu.h b/src/bifrost/bf_xgpu.h deleted file mode 100644 index b8f21b783..000000000 --- a/src/bifrost/bf_xgpu.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef BF_XGPU_H_INCLUDE_GUARD_ -#define BF_XGPU_H_INCLUDE_GUARD_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -//TODO: figure out how to make ctypesgen to the right thing with python generation -//#if(BF_XGPU_ENABLED) -BFstatus bfXgpuInitialize(BFarray *in, BFarray *out, int gpu_dev); -BFstatus bfXgpuCorrelate(BFarray *in, BFarray *out, int doDump); -BFstatus bfXgpuKernel(BFarray *in, BFarray *out, int doDump); -BFstatus bfXgpuSubSelect(BFarray *in, BFarray *out, BFarray *vismap, BFarray *conj, int nchan_sum, int transpose); -BFstatus bfXgpuGetOrder(BFarray *antpol_to_input, BFarray *antpol_to_bl, BFarray *is_conj); -BFstatus bfXgpuReorder(BFarray *xgpu_output, BFarray *reordered, BFarray *baselines, BFarray *is_conjugated); -//#endif // BF_XGPU_ENABLED - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // BF_XGPU_H_INCLUDE_GUARD diff --git a/src/cublas_beamform.cu b/src/cublas_beamform.cu deleted file mode 100644 index 7e2b7bdbb..000000000 --- a/src/cublas_beamform.cu +++ /dev/null @@ -1,373 +0,0 @@ -#include -#include -#include - -#include "cublas_beamform.cuh" - -__constant__ float lut[16] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, -8.0, -7.0, -6.0, -5.0, -4.0, -3.0, -2.0, -1.0}; - -// Transpose time x chan x pol x 4+4 bit to -// chan x pol x time x 32+32 bit float -__global__ void trans_4bit_to_float(unsigned char *in, - float *out, - int n_pol, - int n_chan, - int n_time - ) { - //long long int tid = blockDim.y*blockDim.x*blockIdx.y + blockDim.x*blockIdx.x + threadIdx.x; - //int pol = tid % n_pol; - //int chan = (tid / n_pol) % n_chan; - //int time = (tid / (n_pol * n_chan)); - int time = blockIdx.x; - int chan = blockIdx.y; - int pol = TRANSPOSE_POL_BLOCK_SIZE*threadIdx.x; - unsigned char *in_off = in + time*n_chan*n_pol + chan*n_pol + pol; // 4+4 bit - float *out_off = out + 2*( chan*n_pol*n_time + pol*n_time + time); // 32+32 bit - //long long int old_index = time*n_chan*n_pol + chan*n_pol + pol; - //long long int new_index = chan*n_pol*n_time + pol*n_time + time; - float real, imag; - unsigned char temp; - #pragma unroll - for (int i=0; i> 4]; - //imag = lut[in[old_index+i] & 0b1111]; - //out[2*(new_index+i)] = real; - //out[2*(new_index+i)+1] = imag; - real = lut[(temp >> 4) & 0b1111]; - imag = lut[temp & 0b1111]; - out_off[0] = real; - out_off[1] = imag; - out_off += 2*n_time; - } -} - -// Transpose chan x beam x pol x time x 32+32 float to -// beam x time[part-summed] x chan x [XX,YY,XY*_r,XY*_i] x 32 float -// Each thread deals with two pols of a beam, and sums over n_time_sum time samples -// n_beam is the _output_ number of beams. I.e., the number of dual-pol beams -__global__ void trans_output_and_sum(float *in, - float *out, - int n_chan, - int n_beam, - int n_time, - int n_time_sum - ) { - int chan = blockIdx.x; - int beam = blockIdx.y; - int time = threadIdx.x; - // n_beam here is a dual pol beam - // input is: chan x beam x pol [2] x time x complexity - long long int old_index = 2*(chan*n_beam*2*n_time + beam*2*n_time + time*n_time_sum); // start index for n_time/n_time_sum samples - // output is: beam x time x chan x pol-products [4] - long long int new_index = 4*(beam*(n_time / n_time_sum)*n_chan + time*n_chan + chan); - float xx=0., yy=0., xy_r=0., xy_i=0.; // accumulator registers - float x_r, x_i, y_r, y_i; - int t; - for (t=0; t 0 - int ninputs; // Number of inputs (ants * pols) - int npols; // Number of polarizations per antenna - int nchans; // Number of channels input - int ntimes; // Number of time samples input - int nbeams; // Number of beams output - int ntimeblocks; // Number of time samples to keep after summation -}; - -static struct beamform_context context; - -void cublas_beamform_destroy(){ - cudaFree(context.in32_d); - if (context.ntimeblocks > 0) { - cudaFree(context.out_d); - } -} - -void cublas_beamform_init(int device, int ninputs, int nchans, int ntimes, int nbeams, int ntimeblocks) { - context.gpu_device = device; - gpuErrchk( cudaSetDevice(context.gpu_device) ); - gpuErrchk(cudaStreamCreate(&(context.stream))); - gpuBLASchk(cublasCreate(&(context.handle))); - gpuBLASchk(cublasSetStream(context.handle, context.stream)); - gpuBLASchk(cublasSetPointerMode(context.handle, CUBLAS_POINTER_MODE_HOST)); - //gpuBLASchk(cublasSetPointerMode(context.handle, CUBLAS_POINTER_MODE_DEVICE)); - gpuBLASchk(cublasSetMathMode(context.handle, CUBLAS_TENSOR_OP_MATH)); - - context.ninputs = ninputs; - context.nchans = nchans; - context.ntimes = ntimes; - context.nbeams = nbeams; - context.ntimeblocks = ntimeblocks; - - // Internally allocate intermediate buffers - gpuErrchk( cudaMalloc(&context.in32_d, ninputs * nchans * ntimes * 2 * sizeof(float)) ); - //gpuErrchk( cudaMemcpy(context.in32_d, in32_h, ninputs * nchans * ntimes * 2 * sizeof(float), cudaMemcpyHostToDevice) ); - // If the context is initialized with ntimeblocks=0, then we do no summing so don't - // need the intermediate buffer allocated internally. - if (ntimeblocks > 0) { - gpuErrchk( cudaMalloc(&context.out_d, ntimes * nchans * nbeams * 2 * sizeof(float)) ); - } -} - -void cublas_beamform(unsigned char *in4_d, float *out_d, float *weights_d) { - // Transpose input data and promote to float. - // CUBLAS doesn't support float coeffs with int8 data - dim3 transBlockGrid(context.ntimes, context.nchans); - dim3 transThreadGrid(context.ninputs / TRANSPOSE_POL_BLOCK_SIZE); - trans_4bit_to_float<<>>( - in4_d, - context.in32_d, - context.ninputs, - context.nchans, - context.ntimes - ); - cudaStreamSynchronize(context.stream); - - // If we are integrating beam powers, put the - // GEM output in the internal intermediate - // buffer. If not, then write beamformer output - // to the address given by the user. - float *gem_out_d; - if (context.ntimeblocks > 0) { - gem_out_d = context.out_d; - } else { - gem_out_d = out_d; - } - - // Beamform using GEMM - float alpha = 1.0; - float beta = 0.0; - // GEMM: - // C <= alpha*AB + beta*C - // alpha = 1.0 - // beta = 0.0 - // A matrix: beamforming coeffs (NBEAMS * NANTS) - // B matrix: data matrix (NANTS * NTIMES) - - /* - gpuBLASchk(cublasGemmStridedBatchedEx( - context.handle, - CUBLAS_OP_T, // transpose A? - CUBLAS_OP_T, // transpose B? - context.nbeams, // m - context.ntimes, // n - context.ninputs, // k - // Coeffs: [nchans x] nbeams x ninputs (m x k) - &alpha, // alpha - weights_d, // A - CUDA_C_32F, // A type - context.ninputs, // Lda - context.nbeams*context.ninputs,// strideA : stride size - // Data: [nchans x] ninputs x ntimes (k x n) - context.in32_d, // B - CUDA_C_32F, // B type - context.ntimes, // Ldb - context.ninputs*context.ntimes,// strideB : stride size - &beta, // beta - // Results - gem_out_d, // C - CUDA_C_32F, // Ctype - context.nbeams, // Ldc - context.nbeams*context.ntimes,// Stride C - context.nchans, // batchCount - CUDA_C_32F, // compute type - CUBLAS_GEMM_DEFAULT_TENSOR_OP // algo - )); - */ - - gpuBLASchk(cublasGemmStridedBatchedEx( - context.handle, - CUBLAS_OP_N, // transpose A? - CUBLAS_OP_N, // transpose B? - context.ntimes, // n - context.nbeams, // m - context.ninputs, // k - &alpha, // alpha - // - // Data: [nchans x] ninputs x ntimes (k x n) - context.in32_d, // B - CUDA_C_32F, // B type - context.ntimes, // Ldb - context.ninputs*context.ntimes,// strideB : stride size - // - // Coeffs: [nchans x] nbeams x ninputs (m x k) - weights_d, // A - CUDA_C_32F, // A type - context.ninputs, // Lda - context.nbeams*context.ninputs,// strideA : stride size - // - &beta, // beta - // Results - gem_out_d, // C - CUDA_C_32F, // Ctype - context.ntimes, // Ldc - context.nbeams*context.ntimes,// Stride C - context.nchans, // batchCount - CUDA_C_32F, // compute type - CUBLAS_GEMM_DEFAULT_TENSOR_OP // algo - )); - cudaStreamSynchronize(context.stream); - - // Optionally: - if (context.ntimeblocks > 0) { - // Create XX, YY, XY beam powers. - // Sum over `ntimes_sum` samples - // Write to the user-provided output buffer - int ntimes_sum = context.ntimes / context.ntimeblocks; - dim3 sumBlockGrid(context.nchans, context.nbeams/2); - dim3 sumThreadGrid(context.ntimes / ntimes_sum); - trans_output_and_sum<<>>( - gem_out_d, - out_d, - context.nchans, - context.nbeams/2, - context.ntimes, - ntimes_sum - ); - cudaStreamSynchronize(context.stream); - } -} - -/* Take input data of form - nchan x nbeam x time x complex64 [i.e. the output of cublas_beamform], - sum over ``ntimes_sum``, interpret beams `2n` and `2n+1` as a dual pol pair, - and generate an output array of form - nbeam x ntime / ntime_sum x nchan x nbeam / 2 x 4 x complex64. - The last 4-element axis holds XX, YY, Re(XY), Im(XY -*/ -void cublas_beamform_integrate(float *in_d, float *out_d, int ntimes_sum) { - // Create XX, YY, XY beam powers. - // Sum over `ntimes_sum` samples - dim3 sumBlockGrid(context.nchans, context.nbeams/2); - dim3 sumThreadGrid(context.ntimes / ntimes_sum); - trans_output_and_sum<<>>( - in_d, - out_d, - context.nchans, - context.nbeams/2, - context.ntimes, - ntimes_sum - ); -} - -void cublas_beamform_integrate_single_beam(float *in_d, float *out_d, int ntimes_sum, int beam_index) { - // Create XX, YY, XY beam powers. - // Sum over `ntimes_sum` samples - dim3 sumBlockGrid(context.nchans); - dim3 sumThreadGrid(context.ntimes / ntimes_sum); - trans_output_and_sum_single_beam<<>>( - in_d, - out_d, - context.nchans, - context.nbeams/2, - context.ntimes, - ntimes_sum, - beam_index - ); -} diff --git a/src/cublas_beamform.cuh b/src/cublas_beamform.cuh deleted file mode 100644 index a33919e3b..000000000 --- a/src/cublas_beamform.cuh +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _CUBLAS_BEAMFORM_H -#define _CUBLAS_BEAMFORM_H - -#include -#include -#include - -// Transpose time x chan x pol x 4+4 bit to -#define TRANSPOSE_POL_BLOCK_SIZE 8 -// chan x pol x time x 32+32 bit float -__global__ void trans_4bit_to_float(unsigned char *in, - float *out, - int n_pol, - int n_chan, - int n_time - ); - -// Transpose chan x beam x pol x pol x 32+32 float to -// beam x time[part-summed] x chan x [XX,YY,XY*_r,XY*_i] x 32 float -// Each thread deals with two pols of a beam, and sums over n_time_sum time samples -__global__ void trans_output_and_sum(float *in, - float *out, - int n_chan, - int n_beam, - int n_time, - int n_time_sum - ); - -__global__ void complex2pow(float *in, float *out, int N); - -void cublas_beamform_destroy(); -void cublas_beamform(unsigned char *in4_d, float *sum_out_d, float *weights_d); -void cublas_beamform_integrate(float *in_d, float *sum_out_d, int ntimes_sum); -void cublas_beamform_integrate_single_beam(float *in_d, float *sum_out_d, int ntimes_sum, int beam_index); -void cublas_beamform_init(int device, int ninputs, int nchans, int ntimes, int nbeams, int ntimeblocks); - -#endif From 4e1d3180175f4f13fd86d17259ac03c478a33dc5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 09:31:56 -0600 Subject: [PATCH 0827/1155] Focus on packet formats for now. --- .gitignore | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.gitignore b/.gitignore index 31f0cd390..65ddc68fe 100644 --- a/.gitignore +++ b/.gitignore @@ -109,9 +109,3 @@ target/ # Benchmarking files test/benchmarks/development_vs_gpuspec/with_bifrost/ test/benchmarks/development_vs_gpuspec/without_bifrost/ - -# ctags files -python/bifrost/tags -python/tags -src/tags -tags From 49722302b0b39858d6899de4892cee06f1bcbec1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 09:39:38 -0600 Subject: [PATCH 0828/1155] Move verbs buffer control into configure. --- configure.ac | 7 +++++++ src/bifrost/config.h.in | 1 + src/ib_verbs.hpp | 6 ++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index c727be91c..588ae1baa 100644 --- a/configure.ac +++ b/configure.ac @@ -220,6 +220,13 @@ AS_IF([test x$enable_verbs != xno], [AC_SUBST([HAVE_VERBS], [1]) LIBS="$LIBS -libverbs"])]) +AC_ARG_WITH([verbs_npktbuf], + [AS_HELP_STRING([--with-verbs-npktbuf=N], + [default Infiniband verbs buffer size in packets (default=8192)])], + [], + [with_verbs_npktbuf=8192]) +AC_SUBST([VERBS_NPKTBUF], [$with_verbs_npktbuf]) + # # RDMA # diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index c20559a15..1e3e52ed4 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -63,6 +63,7 @@ extern "C" { #define BF_HWLOC_ENABLED @HAVE_HWLOC@ #define BF_VMA_ENABLED @HAVE_VMA@ #define BF_VERBS_ENABLED @HAVE_VERBS@ +#define BF_VERBS_NPKTBUF @VERBS_NPKTBUF@ #define BF_RDMA_ENABLED @HAVE_RDMA@ #define BF_RDMA_MAXMEM @RDMA_MAXMEM@ diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 2d4176e30..2c3fab598 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -28,6 +28,8 @@ #pragma once +#include + #include #include #include @@ -58,10 +60,6 @@ #define BF_VERBS_NQP 1 #endif -#ifndef BF_VERBS_NPKTBUF -#define BF_VERBS_NPKTBUF 32768 -#endif - #ifndef BF_VERBS_WCBATCH #define BF_VERBS_WCBATCH 16 #endif From d07b153f019068568ff14c74f2e2685ddc8179dc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 13:24:30 -0600 Subject: [PATCH 0829/1155] lwa352_vbeam_* -> vbeam_* --- src/formats/formats.hpp | 2 +- src/formats/{lwa352_vbeam.hpp => vbeam.hpp} | 10 +++++----- src/packet_writer.hpp | 14 +++++++------- 3 files changed, 13 insertions(+), 13 deletions(-) rename src/formats/{lwa352_vbeam.hpp => vbeam.hpp} (86%) diff --git a/src/formats/formats.hpp b/src/formats/formats.hpp index 225811895..e52aefd39 100644 --- a/src/formats/formats.hpp +++ b/src/formats/formats.hpp @@ -37,4 +37,4 @@ #include "ibeam.hpp" #include "snap2.hpp" #include "pbeam.hpp" -#include "lwa352_vbeam.hpp" +#include "vbeam.hpp" diff --git a/src/formats/lwa352_vbeam.hpp b/src/formats/vbeam.hpp similarity index 86% rename from src/formats/lwa352_vbeam.hpp rename to src/formats/vbeam.hpp index e7c7fe402..29f98d749 100644 --- a/src/formats/lwa352_vbeam.hpp +++ b/src/formats/vbeam.hpp @@ -30,7 +30,7 @@ #include "base.hpp" -struct __attribute__((packed)) lwa352_vbeam_hdr_type { +struct __attribute__((packed)) vbeam_hdr_type { uint64_t sync_word; uint64_t sync_time; uint64_t time_tag; @@ -41,14 +41,14 @@ struct __attribute__((packed)) lwa352_vbeam_hdr_type { uint32_t npol; }; -class LWA352VBeamHeaderFiller : virtual public PacketHeaderFiller { +class VBeamHeaderFiller : virtual public PacketHeaderFiller { public: - inline int get_size() { return sizeof(lwa352_vbeam_hdr_type); } + inline int get_size() { return sizeof(vbeam_hdr_type); } inline void operator()(const PacketDesc* hdr_base, BFoffset framecount, char* hdr) { - lwa352_vbeam_hdr_type* header = reinterpret_cast(hdr); - memset(header, 0, sizeof(lwa352_vbeam_hdr_type)); + vbeam_hdr_type* header = reinterpret_cast(hdr); + memset(header, 0, sizeof(vbeam_hdr_type)); header->sync_word = 0xAABBCCDD00000000L; header->time_tag = htobe64(hdr_base->seq); diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index b1272f5fb..acab4d31c 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -485,14 +485,14 @@ class BFpacketwriter_tbf_impl : public BFpacketwriter_impl { } }; -class BFpacketwriter_lwa352_vbeam_impl : public BFpacketwriter_impl { +class BFpacketwriter_vbeam_impl : public BFpacketwriter_impl { ProcLog _type_log; public: - inline BFpacketwriter_lwa352_vbeam_impl(PacketWriterThread* writer, + inline BFpacketwriter_vbeam_impl(PacketWriterThread* writer, int nsamples) : BFpacketwriter_impl(writer, nullptr, nsamples, BF_DTYPE_CF32), _type_log((std::string(writer->get_name())+"/type").c_str()) { - _filler = new LWA352VBeamHeaderFiller(); + _filler = new VBeamHeaderFiller(); _type_log.update("type : %s\n", "tbf"); } }; @@ -526,8 +526,8 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, nsamples = 4096; } else if( format == std::string("tbf") ) { nsamples = 6144; - } else if( std::string(format).substr(0, 13) == std::string("lwa352_vbeam_") ) { - // e.g. "lwa352_vbeam_184" is a 184-channel voltage beam" + } else if( std::string(format).substr(0, 6) == std::string("vbeam_") ) { + // e.g. "vbeam_184" is a 184-channel voltage beam" int nchan = std::atoi((std::string(format).substr(13, std::string(format).length())).c_str()); nsamples = 2*nchan; // 2 polarizations. Natively 32-bit floating complex (see implementation class) } @@ -579,8 +579,8 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, } else if( format == std::string("tbf") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_tbf_impl(writer, nsamples), *obj = 0); - } else if( std::string(format).substr(0, 13) == std::string("lwa352_vbeam_") ) { - BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_lwa352_vbeam_impl(writer, nsamples), + } else if( std::string(format).substr(0, 6) == std::string("vbeam_") ) { + BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_vbeam_impl(writer, nsamples), *obj = 0); } else { return BF_STATUS_UNSUPPORTED; From b37bf9bdc44225dba45eea6f74397fef6cfb1bc5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 13:33:31 -0600 Subject: [PATCH 0830/1155] Remove some debugging. --- src/packet_capture.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index 115d72505..454e610a4 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -268,12 +268,9 @@ BFpacketcapture_status BFpacketcapture_impl::recv() { ret = BF_CAPTURE_CONTINUED; } } - BF_PRINTD("_bufs.size(): " << _bufs.size()); if( _bufs.size() == 2 ) { - BF_PRINTD("Committing buffer"); this->commit_buf(); } - BF_PRINTD("Rseerving buffer"); this->reserve_buf(); } else { From 9d67edb1f8feeaed91799cb60181a852b42bfbb8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 13:34:27 -0600 Subject: [PATCH 0831/1155] Catch here as well. --- src/ib_verbs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 2c3fab598..fb5b0b5ea 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -430,7 +430,7 @@ class Verbs { _verbs.send_mr_size = (size_t) BF_VERBS_NPKTBUF*BF_VERBS_NQP * _pkt_size_max; _verbs.send_mr_buf = (uint8_t *) ::mmap(NULL, _verbs.send_mr_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED, -1, 0); - check_error(_verbs.send_mr_buf == MAP_FAILED, + check_error(_verbs.send_mr_buf == MAP_FAILED ? -1 : 0, "allocate memory region buffer"); check_error(::mlock(_verbs.send_mr_buf, _verbs.send_mr_size), "lock memory region buffer"); From bc6add7cb1e72432b37c4e548dcccf5e22e53d65 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 13:40:42 -0600 Subject: [PATCH 0832/1155] Attempt to add a non-AVX version of the snap2 packet processor. --- src/formats/snap2.hpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index ea93244b3..228405b93 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -163,21 +163,28 @@ class SNAP2Processor : virtual public PacketProcessor { // Output buffer order is chans * npol_total * complexity // Spacing with which channel chunks are copied depends // on the total number of channels/pols in the system + int c=0; +#if defined BF_AVX_ENABLED && BF_AVX_ENABLED __m256i *dest_p; __m256i vecbuf[2]; uint64_t *in64 = (uint64_t *)in; - int c; dest_p = (__m256i *)(out + (words_per_chan_out * (pkt_chan)) + pol_offset_out); +#endif //if((pol_offset_out == 0) && (pkt_chan==0) && ((pkt->seq % 120)==0) ){ // fprintf(stderr, "nsrc: %d seq: %d, dest_p: %p obuf idx %d, obuf offset %lu, nseq_per_obuf %d, seq0 %d, nbuf: %d\n", pkt->nsrc, pkt->seq, dest_p, obuf_idx, obuf_offset, nseq_per_obuf, seq0, nbuf); //} for(c=0; cnchan; c++) { +#if defined BF_AVX_ENABLED && BF_AVX_ENABLED vecbuf[0] = _mm256_set_epi64x(in64[3], in64[2], in64[1], in64[0]); vecbuf[1] = _mm256_set_epi64x(in64[7], in64[6], in64[5], in64[4]); _mm256_stream_si256(dest_p, vecbuf[0]); _mm256_stream_si256(dest_p+1, vecbuf[1]); in64 += 8; dest_p += words_per_chan_out; +#else + ::memcpy(&out[pkt->src + pkt->nsrc*chan], + &in[c], sizeof(otype)); +#endif } } From 74320677fb1e07fc2e0b6d77d941e463b8218c82 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 13:42:47 -0600 Subject: [PATCH 0833/1155] Now in formats/base.hpp. --- src/formats/snap2.hpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index 228405b93..f34a82c4f 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -30,9 +30,6 @@ #include "base.hpp" -#include // SSE -#include - // TODO: parameterize somewhere. This isn't // related to the packet formatting #define PIPELINE_NPOL 704 From d9736b400336ab5560ea6141eee0c233da5be129 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 13:43:47 -0600 Subject: [PATCH 0834/1155] Revert to the ibverb-support version. --- src/formats/cor.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/cor.hpp b/src/formats/cor.hpp index c7c7b0787..bf1660ded 100644 --- a/src/formats/cor.hpp +++ b/src/formats/cor.hpp @@ -72,7 +72,7 @@ class CORDecoder : virtual public PacketDecoder { pkt->sync = pkt_hdr->sync_word; pkt->time_tag = be64toh(pkt_hdr->time_tag); pkt->decimation = be32toh(pkt_hdr->navg); - pkt->seq = pkt->time_tag / pkt->decimation; + pkt->seq = pkt->time_tag / 196000000 / (pkt->decimation / 100); pkt->nsrc = _nsrc; pkt->src = (stand0*(2*(nstand-1)+1-stand0)/2 + stand1 + 1 - _src0)*nserver \ + (server - 1); From 70bf2918ddfb2c5ae0989bf699f3b1ec08c7152f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 13:45:37 -0600 Subject: [PATCH 0835/1155] Ugh. --- src/formats/snap2.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index f34a82c4f..2e5672853 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -179,7 +179,7 @@ class SNAP2Processor : virtual public PacketProcessor { in64 += 8; dest_p += words_per_chan_out; #else - ::memcpy(&out[pkt->src + pkt->nsrc*chan], + ::memcpy(&out[pkt->src + pkt->nsrc*c], &in[c], sizeof(otype)); #endif } From 21210ba5d4ba44ddb03533939c1a3e3a8bea7875 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 13:48:47 -0600 Subject: [PATCH 0836/1155] This block seems to be causing problems in CI. --- src/packet_capture.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index 454e610a4..60d3c3bf7 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -91,15 +91,6 @@ int PacketCaptureThread::run(uint64_t seq_beg, BF_PRINTD("HERE" << " " << _pkt.seq << " < " << seq_beg); _have_pkt = false; if( less_than(_pkt.seq, seq_beg) ) { - // If lots [TODO: what is lots] of packets are late - // return. Otherwise a seq reset can lead to being stuck - // here endlessly counting late packets. - if( less_than(_pkt.seq + 1000*nseq_per_obuf, seq_beg) ) { - fprintf(stderr, "Breaking from packet receive because of so many late packets\n"); - _have_pkt = true; - ret = CAPTURE_SUCCESS; - break; - } ++_stats.nlate; _stats.nlate_bytes += _pkt.payload_size; ++_src_stats[_pkt.src].nlate; From 2ff21893099b5018a919100cfa59df06bdef7c4e Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 1 Jun 2023 13:55:06 -0600 Subject: [PATCH 0837/1155] new feature branch with changes, take 2 --- src/transpose.cu | 48 +++++++++++++++++++++++++++--------------- test/test_transpose.py | 4 +++- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/transpose.cu b/src/transpose.cu index 67baecfc7..ea48fe060 100644 --- a/src/transpose.cu +++ b/src/transpose.cu @@ -340,7 +340,7 @@ BFstatus transpose_simple(BFarray const* in, char const* arg_names[] = {"in", "out"}; char const* func = func_str.c_str(); char const* extra_code = 0; - return bfMap(ndim, out->shape, axis_names, narg, args, arg_names, + return bfMap(ndim, out->shape, axis_names, narg, args, arg_names, "transpose_simple", func, extra_code, 0, 0); } @@ -379,13 +379,18 @@ BFstatus transpose_vector_read(BFarray const* in, } } std::string func_str; - func_str += "enum { K = " + std::to_string(K) + " };\n"; - func_str += - "in_type ivals = in(" + in_inds_str + ");\n" - "#pragma unroll\n" - "for( int k=0; k Date: Thu, 1 Jun 2023 16:24:04 -0600 Subject: [PATCH 0838/1155] Add in pylint. --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b6e68385d..e54324437 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -66,6 +66,7 @@ jobs: pint \ graphviz \ ctypesgen==1.0.2 \ + pylint \ coverage - name: "Software Install - Python, part 2" if: ${{ matrix.os == 'self-hosted' && matrix.python-version != '2.7' }} From 9262b79ca89bb5197cb073e9d3a0a324ef5bade4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 16:28:55 -0600 Subject: [PATCH 0839/1155] Add in testbench tests. --- .github/workflows/main.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e54324437..2f87ad317 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -101,6 +101,19 @@ jobs: coverage run --source=bifrost.ring,bifrost,bifrost.pipeline \ -m unittest discover coverage xml + - name: "Test, part 2" + env: + LD_LIBRARY_PATH: /usr/local/lib:${{ env.LD_LIBRARY_PATH }} + run: | + python generate_test_data.py + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_file_read_write.py + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fft.py + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline your_first_block.py + python download_breakthrough_listen_data.py -y + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_guppi.py + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_guppi_reader.py + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fdmt.py ./testdata/pulsars/blc0_guppi_57407_61054_PSR_J1840%2B5640_0004.fil + coverage xml - name: "Upload Coverage" env: UNITTEST_OS: ${{ matrix.os }} @@ -108,7 +121,7 @@ jobs: if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} uses: codecov/codecov-action@v2 with: - directory: ./test/ + files: ./test/coverage.xml, ./testbench/coverage.xml env_vars: UNITTEST_OS,UNITTEST_PY fail_ci_if_error: false verbose: true From e4bdf9239acf379c80c1ca02c73f6798746643e4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 16:32:10 -0600 Subject: [PATCH 0840/1155] Only run testbench on self-hosted. --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2f87ad317..672238d93 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -102,6 +102,7 @@ jobs: -m unittest discover coverage xml - name: "Test, part 2" + if: ${{ matrix.os == 'self-hosted' }} env: LD_LIBRARY_PATH: /usr/local/lib:${{ env.LD_LIBRARY_PATH }} run: | From 00e334392cbeb35bc641fad70387d23b17fb92c3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 16:33:16 -0600 Subject: [PATCH 0841/1155] Run the testbench tests in the correct directory. --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 672238d93..d6115e854 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -106,6 +106,7 @@ jobs: env: LD_LIBRARY_PATH: /usr/local/lib:${{ env.LD_LIBRARY_PATH }} run: | + cd testbench python generate_test_data.py coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_file_read_write.py coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fft.py From 9645f4f1e7dc2381ebda65f31e8d5c158ca8baf5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 Jun 2023 16:42:21 -0600 Subject: [PATCH 0842/1155] Move to pylint.lint.Run. --- test/test_scripts.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/test/test_scripts.py b/test/test_scripts.py index 9a75b08fa..ba92af232 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -34,6 +34,11 @@ import sys import glob +try: + from io import StringIO +except ImportError: + from StringIO import StringIO + TEST_DIR = os.path.dirname(__file__) TOOLS_DIR = os.path.join(TEST_DIR, '..', 'tools') TESTBENCH_DIR = os.path.join(TEST_DIR, '..', 'testbench') @@ -42,7 +47,8 @@ run_scripts_tests = False try: - from pylint import epylint as lint + from pylint.lint import Run + from pylint.reporters.text import TextReporter run_scripts_tests = True except ImportError: pass @@ -53,11 +59,12 @@ class ScriptTest(unittest.TestCase): def _test_script(self, script): self.assertTrue(os.path.exists(script)) - out, err = lint.py_run("%s -E --extension-pkg-whitelist=numpy,scipy.fftpack --init-hook='import sys; sys.path=[%s]; sys.path.insert(0, \"%s\")'" % (script, ",".join(['"%s"' % p for p in sys.path]), os.path.dirname(BIFROST_DIR)), return_std=True) - out_lines = out.read().split('\n') - err_lines = err.read().split('\n') - out.close() - err.close() + + pylint_output = StringIO() + reporter = TextReporter(pylint_output) + Run([script, '-E', '--extension-pkg-whitelist=numpy'], reporter=reporter, do_exit=False) + out = pylint_output.getvalue() + out_lines = out.split('\n') for line in out_lines: #if line.find("Module 'numpy") != -1: From 0d4b437f00a8e9835a5870430a9cd454046bd0d9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 6 Jun 2023 14:26:26 -0600 Subject: [PATCH 0843/1155] Already decoded. --- python/bifrost/guppi_raw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/guppi_raw.py b/python/bifrost/guppi_raw.py index 9e9341f84..cdf20ac4c 100644 --- a/python/bifrost/guppi_raw.py +++ b/python/bifrost/guppi_raw.py @@ -75,7 +75,7 @@ def read_header(f): except AttributeError: # Python2 catch pass - if record.startswith(b'END'): + if record.startswith('END'): break key, val = record.split('=', 1) key, val = key.strip(), val.strip() From 13ae7325ec3ae649a6635b1f50d2465cd9eb13a2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 6 Jun 2023 14:39:47 -0600 Subject: [PATCH 0844/1155] Try to fix pylint testing on Py2.7. --- test/test_scripts.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/test_scripts.py b/test/test_scripts.py index ba92af232..de0ba6ef2 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -62,7 +62,11 @@ def _test_script(self, script): pylint_output = StringIO() reporter = TextReporter(pylint_output) - Run([script, '-E', '--extension-pkg-whitelist=numpy'], reporter=reporter, do_exit=False) + try: + Run([script, '-E', '--extension-pkg-whitelist=numpy'], reporter=reporter, do_exit=False) + except TypeError: + # Python2 catch + Run([script, '-E', '--extension-pkg-whitelist=numpy'], reporter=reporter) out = pylint_output.getvalue() out_lines = out.split('\n') From 47eec5dd420745f92d01117ca8c77021ef917fa3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 8 Jun 2023 18:01:42 -0600 Subject: [PATCH 0845/1155] Give up on pylint for Py2.7. --- test/test_scripts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_scripts.py b/test/test_scripts.py index de0ba6ef2..ea68edd74 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -52,6 +52,7 @@ run_scripts_tests = True except ImportError: pass +run_scipts_tests &= (sys.version_info[0] >= 3) _LINT_RE = re.compile('(?P.*?)\:(?P\d+)\: \[(?P.*?)\] (?P.*)') From c41a0c989f0e6e825c2861fd6c20d9c4b93b14c5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 8 Jun 2023 18:02:02 -0600 Subject: [PATCH 0846/1155] Typo. --- test/test_scripts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_scripts.py b/test/test_scripts.py index ea68edd74..19aa119de 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -52,7 +52,7 @@ run_scripts_tests = True except ImportError: pass -run_scipts_tests &= (sys.version_info[0] >= 3) +run_scripts_tests &= (sys.version_info[0] >= 3) _LINT_RE = re.compile('(?P.*?)\:(?P\d+)\: \[(?P.*?)\] (?P.*)') From aaf6db7d86745ee753d694497196cd997699b588 Mon Sep 17 00:00:00 2001 From: jaycedowell <> Date: Fri, 16 Jun 2023 15:22:35 -0600 Subject: [PATCH 0847/1155] Auto-detect shared memory per block. --- config/cuda.m4 | 63 +++++++++++++++++++++++-- configure | 125 ++++++++++++++++++++++++++++++++++++++----------- configure.ac | 9 ---- 3 files changed, 157 insertions(+), 40 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 2d34c6036..3c999b16d 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -22,6 +22,9 @@ AC_DEFUN([AX_CHECK_CUDA], AC_SUBST([CUDA_HAVE_CXX11], [0]) AC_SUBST([GPU_MIN_ARCH], [0]) AC_SUBST([GPU_MAX_ARCH], [0]) + AC_SUBST([GPU_SHAREDMEM], [0]) + AC_SUBST([GPU_PASCAL_MANAGEDMEM], [0]) + AC_SUBST([GPU_EXP_PINNED_ALLOC], [1]) if test "$enable_cuda" != "no"; then AC_SUBST([HAVE_CUDA], [1]) @@ -229,6 +232,62 @@ AC_DEFUN([AX_CHECK_CUDA], ar_max_valid=$(echo $ar_valid | ${SED} -e 's/.* //g;' ) AC_SUBST([GPU_MAX_ARCH], [$ar_max_valid]) + AC_ARG_WITH([shared_mem], + [AS_HELP_STRING([--with-shared-mem=N], + [default GPU shared memory in bytes (default=detect)])], + [], + [with_shared_mem='auto']) + if test "$with_gpu_archs" = "auto"; then + AC_MSG_CHECKING([for minimum shared memory per block]) + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include + #include + #include + #include ]], + [[ + std::set smem; + int smemSize; + int deviceCount = 0; + cudaGetDeviceCount(&deviceCount); + if( deviceCount == 0 ) { + return 1; + } + for(int dev=0; dev&6; } GPU_MAX_ARCH=$ar_max_valid + +# Check whether --with-shared_mem was given. +if test ${with_shared_mem+y} +then : + withval=$with_shared_mem; +else $as_nop + with_shared_mem='auto' +fi + + if test "$with_gpu_archs" = "auto"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for minimum shared memory per block" >&5 +printf %s "checking for minimum shared memory per block... " >&6; } + + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + LIBS_save="$LIBS" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #include + #include + #include + #include +int +main (void) +{ + + std::set smem; + int smemSize; + int deviceCount = 0; + cudaGetDeviceCount(&deviceCount); + if( deviceCount == 0 ) { + return 1; + } + for(int dev=0; dev&5 +printf "%s\n" "$GPU_SHAREDMEM B" >&6; } +else $as_nop + as_fn_error $? "failed to determine a value" "$LINENO" 5 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + LIBS="$LIBS_save" + else + GPU_SHAREDMEM=$with_shared_mem + + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Pascal-style CUDA managed memory" >&5 printf %s "checking for Pascal-style CUDA managed memory... " >&6; } cm_invalid=$( echo $GPU_ARCHS | ${SED} -e 's/\b[1-5][0-9]\b/PRE/g;' ) @@ -21783,32 +21877,9 @@ fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" LIBS="$LIBS_save" - - else - GPU_PASCAL_MANAGEDMEM=0 - - GPU_EXP_PINNED_ALLOC=1 - fi - -# Check whether --with-shared_mem was given. -if test ${with_shared_mem+y} -then : - withval=$with_shared_mem; -else $as_nop - with_shared_mem=16384 -fi - -GPU_SHAREDMEM=$with_shared_mem - -if test x$HAVE_CUDA = x0 -then : - GPU_SHAREDMEM=0 - -fi - # # Bifrost memory alignment # diff --git a/configure.ac b/configure.ac index 5bd707d89..9aebfd263 100644 --- a/configure.ac +++ b/configure.ac @@ -153,15 +153,6 @@ AS_IF([test x$enable_vma != xno], AX_CHECK_CUDA -AC_ARG_WITH([shared_mem], - [AS_HELP_STRING([--with-shared-mem=N], - [default GPU shared memory in bytes (default=16384)])], - [], - [with_shared_mem=16384]) -AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) -AS_IF([test x$HAVE_CUDA = x0], - [AC_SUBST([GPU_SHAREDMEM], [0])]) - # # Bifrost memory alignment # From 585efded19ecfb21b96773098ff1b7f703188adc Mon Sep 17 00:00:00 2001 From: jaycedowell <> Date: Fri, 16 Jun 2023 15:24:34 -0600 Subject: [PATCH 0848/1155] Use BF_GPU_SHAREDMEM for shared memory size checks. --- src/linalg_kernels.cu | 2 +- src/linalg_kernels.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/linalg_kernels.cu b/src/linalg_kernels.cu index 23e8f843e..50b568685 100644 --- a/src/linalg_kernels.cu +++ b/src/linalg_kernels.cu @@ -836,7 +836,7 @@ void bf_cgemm_TN_smallM_staticN_v2(int M, int K_blocks = (K - 1) / BLOCK_X + 1; int s_B_stride = K_blocks * BLOCK_X; size_t smem = N * s_B_stride * BF_DTYPE_NBYTE(B_type)*2; - bool B_fits_in_shared_mem = (smem <= 48*1024); + bool B_fits_in_shared_mem = (smem <= BF_GPU_SHAREDMEM); BF_ASSERT_EXCEPTION(B_fits_in_shared_mem, BF_STATUS_UNSUPPORTED); /* // TODO: Use cudaLaunchKernel instead of <<< >>> diff --git a/src/linalg_kernels.h b/src/linalg_kernels.h index 71f4fc0e9..ffd4698d5 100644 --- a/src/linalg_kernels.h +++ b/src/linalg_kernels.h @@ -32,6 +32,7 @@ #include +#include #include inline const char* _cublasGetErrorString(cublasStatus_t status) { From 372ce0352a83abb263d9001957af705e5c16270a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 16 Jun 2023 15:33:55 -0600 Subject: [PATCH 0849/1155] Drop CUDART checks. --- src/linalg.cu | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/linalg.cu b/src/linalg.cu index 5f2fc0078..1ef5fce68 100644 --- a/src/linalg.cu +++ b/src/linalg.cu @@ -127,7 +127,6 @@ BFstatus bfMatMul_aa_exec_nobatch(BFlinalg handle, (double*)c_data, c_stride)); break; } -#if CUDART_VERSION >= 8000 case BF_DTYPE_CI8: { BF_ASSERT(c_type == BF_DTYPE_CF32, BF_STATUS_UNSUPPORTED_DTYPE); float alpha_f = (float)alpha; @@ -147,12 +146,10 @@ BFstatus bfMatMul_aa_exec_nobatch(BFlinalg handle, } BF_FAIL("Supported dtype for array a", BF_STATUS_UNSUPPORTED_DTYPE); } -#endif case BF_DTYPE_CF32: { BF_ASSERT(c_type == BF_DTYPE_CF32, BF_STATUS_UNSUPPORTED_DTYPE); float alpha_f = (float)alpha; float beta_f = (float)beta; -#if CUDART_VERSION >= 8000 if( get_cuda_device_cc() >= 50 ) { BF_CHECK_CUBLAS(cublasCherk3mEx(handle->cublas(), uplo, trans, n, k, @@ -166,7 +163,6 @@ BFstatus bfMatMul_aa_exec_nobatch(BFlinalg handle, c_stride)); break; } -#endif BF_CHECK_CUBLAS(cublasCherk(handle->cublas(), uplo, trans, n, k, &alpha_f, @@ -213,7 +209,7 @@ BFstatus bfMatMul_aa_exec(BFlinalg handle, //bool use_bf_cherk = use_bf_cherk_str && atoi(use_bf_cherk_str); enum { BF_CUBLAS_CHERK_THRESHOLD = 896 }; if( //use_bf_cherk && - (CUDART_VERSION < 8000 || n < BF_CUBLAS_CHERK_THRESHOLD) && + n < BF_CUBLAS_CHERK_THRESHOLD && trans == CUBLAS_OP_N && n % 2 == 0 && a_stride % 2 == 0 && a_batchstride % 2 == 0 && @@ -413,7 +409,6 @@ BFstatus bfMatMul_ab_exec_nobatch(BFlinalg handle, (double*)c_data, c_stride)); break; } -#if CUDART_VERSION >= 8000 case BF_DTYPE_CI8: { BF_ASSERT(c_type == BF_DTYPE_CF32, BF_STATUS_UNSUPPORTED_DTYPE); cuComplex alpha_cf = make_cuComplex(alpha, 0); @@ -436,12 +431,10 @@ BFstatus bfMatMul_ab_exec_nobatch(BFlinalg handle, } BF_FAIL("Supported dtype for input array", BF_STATUS_UNSUPPORTED_DTYPE); } -#endif case BF_DTYPE_CF32: { BF_ASSERT(c_type == BF_DTYPE_CF32, BF_STATUS_UNSUPPORTED_DTYPE); cuComplex alpha_cf = make_cuComplex(alpha, 0); cuComplex beta_cf = make_cuComplex(beta, 0); -#if CUDART_VERSION >= 8000 if( get_cuda_device_cc() >= 50 ) { BF_CHECK_CUBLAS(cublasCgemm3m(handle->cublas(), trans_a, trans_b, m, n, k, @@ -455,7 +448,6 @@ BFstatus bfMatMul_ab_exec_nobatch(BFlinalg handle, c_stride)); break; } -#endif BF_CHECK_CUBLAS(cublasCgemm(handle->cublas(), trans_a, trans_b, m, n, k, &alpha_cf, From 3fb4d375a3c35267bd05e71a8b09170fb1ea76c2 Mon Sep 17 00:00:00 2001 From: jaycedowell <> Date: Fri, 16 Jun 2023 15:42:31 -0600 Subject: [PATCH 0850/1155] Option text cleanup. --- config/cuda.m4 | 2 +- configure | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 3c999b16d..2d52d8e6c 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -234,7 +234,7 @@ AC_DEFUN([AX_CHECK_CUDA], AC_ARG_WITH([shared_mem], [AS_HELP_STRING([--with-shared-mem=N], - [default GPU shared memory in bytes (default=detect)])], + [default GPU shared memory per block in bytes (default=detect)])], [], [with_shared_mem='auto']) if test "$with_gpu_archs" = "auto"; then diff --git a/configure b/configure index c509e6b18..f050ceb99 100755 --- a/configure +++ b/configure @@ -1563,7 +1563,8 @@ Optional Packages: --with-stream-model CUDA default stream model to use: 'legacy' or 'per-thread' (default='per-thread') --with-gpu-archs=... default GPU architectures (default=detect) - --with-shared-mem=N default GPU shared memory in bytes (default=detect) + --with-shared-mem=N default GPU shared memory per block in bytes + (default=detect) --with-alignment=N default memory alignment in bytes (default=4096) --with-logging-dir=DIR directory for Bifrost proclog logging (default=autodetect) From 52e801d5af5b621cd4763b8eb24c1c425413f7c0 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Wed, 21 Jun 2023 12:12:41 -0600 Subject: [PATCH 0851/1155] Updated to improve readability of the python code. Also added portion to read back the file and show results --- docs/source/Create-a-pipeline.rst | 129 +++++++++++++++++++++++++++++- 1 file changed, 125 insertions(+), 4 deletions(-) diff --git a/docs/source/Create-a-pipeline.rst b/docs/source/Create-a-pipeline.rst index 7f83a1461..605524592 100644 --- a/docs/source/Create-a-pipeline.rst +++ b/docs/source/Create-a-pipeline.rst @@ -60,12 +60,23 @@ library as ``bf``: Next, let's load in some function libraries. We want ``blocks``, which is the block module in Bifrost, which is a collection of previously-written blocks for various functionality,and -``views``, which is a library for manipulations of ring headers. +``views``, which is a library for manipulations of ring headers. +We'll also import the ``Pipeline`` class from bifrost to +improve readibility: .. code:: python import bifrost.blocks as blocks import bifrost.views as views + from bifrost import Pipeline + +Before we start working with the data we want to initialize an +instance of the pipeline class with the default parameters: + +.. code:: python + + pipeline = Pipeline() + pipeline.as_default() Now, let's create our data "source," our source block. This is the block that feeds our pipeline with data. In this example, @@ -201,9 +212,17 @@ the header information, which contains the name of the original is the `channelized` version of the original music file. It is the frequency decomposition of the audio. +In order to tell the pipeline when to shutdown and to run: + +.. code:: python + + pipeline.shutdown_on_signals() + pipeline.run() + So, what have we done? We: -1. Read in the ``.wav`` file. +1. Initialized the pipeline. +#. Read in the ``.wav`` file. #. Copied the raw data to the GPU. #. Split the time axis into chunks which we could FFT over. #. FFT'd along this new axis. @@ -212,8 +231,9 @@ So, what have we done? We: #. Copied the data back to the CPU. #. Converted the data into integer data types. #. Wrote this data to a filterbank file. +#. Ran the pipeline -All the Code +All the Code for Your Pipeline ------------ For ease of reference, here is all the code at once: @@ -223,7 +243,10 @@ For ease of reference, here is all the code at once: import bifrost as bf import bifrost.blocks as blocks import bifrost.views as views + from bifrost import Pipeline + pipeline = Pipeline() + pipeline.as_default() raw_data = blocks.read_wav(['heyjude.wav'], gulp_nframe=4096) gpu_raw_data = blocks.copy(raw_data, space='cuda') chunked_data = views.split_axis(gpu_raw_data, 'time', 256, label='fine_time') @@ -234,6 +257,104 @@ For ease of reference, here is all the code at once: quantized = bf.blocks.quantize(host_transposed, 'i8') blocks.write_sigproc(quantized) - pipeline = bf.get_default_pipeline() pipeline.shutdown_on_signals() pipeline.run() + +Reading Back a Filterbank File +------------ + +In order to see what we have done, we can also read back the +file we just wrote. For this we will only need ``blocks``: + +.. code:: python + + import bifrost.blocks as blocks + +To visualize the results, we will import ``numpy`` +and ``matplotlib.pyplot``: + +.. code:: python + + import numpy as np + import matplotlib.pyplot as plt + +First, we will create a source block that will return the data from +the filterbank file: + +.. code:: python + + myfile = 'heyjude.wav.fil' + sigprocsource = blocks.read_sigproc(myfile, gulp_nframe=4096) + +Now we will create a file reader to read the file and use it to read +in all of the frames present in the file in order to get the data +and some header information from the filterbank file: + +.. code:: python + + filereader = sigprocsource.create_reader(myfile) + data = filereader.read(filereader.nframe()) + duration = filereader.duration() + +Making a Spectrograph/Waterfall Plot of the Results +------------ + +If we know the sample rate of the wav file we could set the x-axis +to correspond to frequencies, but for now we will just leave these +as channel numbers. For, the y-axis, however, we now know the duration +so we can label this axis in seconds. We store these values as numpy +arrays: + +.. code:: python + + freqaxis = np.arange(len(data[0,0,:]) + timeaxis = np.linspace(0,duration,len(date[:,0,0])) + +We now can prepare for plotting by making all of our data the same +shape with meshgrid and plotting the first channel with matplotlib: + +.. code:: python + + X,Y = np.meshgrid(freqaxis, timeaxis) + Z = data[:,0,:] # plot only one channel/polarization + fig = plt.figure() + lev = np.linspace(Z.min(), Z.max(), num=50) + cont = plt.contourf(X,Y,Z, levels=lev) + ax = plt.gca() + ax.set_xlabel('Frequency Channels') + ax.set_ylabel('Time (s)') + plt.colorbar(cont) + plt.show() + plt.close() + +If everything goes well we should see a figure similar to this one: + +.. image:: spectrum.png + +All the Code for Reading and Plotting the Results: +------------ + +.. code:: python + + import bifrost.blocks as blocks + import numpy as np + import matplotlib.pyplot as plt + myfile = 'heyjude.wav.fil' + sigprocsource = blocks.read_sigproc(myfile, gulp_nframe=4096) + filereader = sigprocsource.create_reader(myfile) + data = filereader.read(filereader.nframe()) + duration = filereader.duration() + freqaxis = np.arange(len(data[0,0,:]) + timeaxis = np.linspace(0,duration,len(date[:,0,0])) + X,Y = np.meshgrid(freqaxis, timeaxis) + Z = data[:,0,:] # plot only one channel/polarization + fig = plt.figure() + lev = np.linspace(Z.min(), Z.max(), num=50) + cont = plt.contourf(X,Y,Z, levels=lev) + ax = plt.gca() + ax.set_xlabel('Frequency Channels') + ax.set_ylabel('Time (s)') + plt.colorbar(cont) + plt.show() + plt.close() + From e7fe57e5533ba0b3222f8e8c8f5c1d815ad2c31f Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Wed, 21 Jun 2023 12:14:06 -0600 Subject: [PATCH 0852/1155] added example image --- docs/source/spectrum.png | Bin 0 -> 51256 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/source/spectrum.png diff --git a/docs/source/spectrum.png b/docs/source/spectrum.png new file mode 100644 index 0000000000000000000000000000000000000000..fe687926e0dee7126b9332181908c4770ea46590 GIT binary patch literal 51256 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

pWk_*C4nT;alKsJ>hB5IasU+N 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

c=~51&ef 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 Date: Wed, 21 Jun 2023 12:40:33 -0600 Subject: [PATCH 0853/1155] Still will happen with this PR. --- ROADMAP.md | 1 - 1 file changed, 1 deletion(-) diff --git a/ROADMAP.md b/ROADMAP.md index 08ca2f336..4524621be 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -31,4 +31,3 @@ stated, the items on this page have not yet been developed. ## Platform and dependency updates * Python 2.x will no longer be supported after the end of 2022 - * CUDA <10.0 will no longer be supported after May 2023 From 20b78e7fa3dbda02e29d8cb2719bc101681fb113 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 21 Jun 2023 12:41:01 -0600 Subject: [PATCH 0854/1155] Ugh, this didn't really change. --- ROADMAP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ROADMAP.md b/ROADMAP.md index 4524621be..cd3b80c1c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -30,4 +30,4 @@ stated, the items on this page have not yet been developed. ## Platform and dependency updates - * Python 2.x will no longer be supported after the end of 2022 + * Python 2.x will no longer be supported after the end of 2022. From 08e947bc98e8df25857707f3a65e3664be7b0f92 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 18 Jul 2023 16:46:03 -0600 Subject: [PATCH 0855/1155] Add in writer support for 8+8-bit complex DRX8. --- src/formats/drx8.hpp | 159 ++++++++++++++++++++++++++++++++++++++++ src/formats/formats.hpp | 3 +- src/packet_writer.hpp | 7 +- 3 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 src/formats/drx8.hpp diff --git a/src/formats/drx8.hpp b/src/formats/drx8.hpp new file mode 100644 index 000000000..c39fac09b --- /dev/null +++ b/src/formats/drx8.hpp @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2023, The Bifrost Authors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include "base.hpp" + +#define DRX8_FRAME_SIZE 8224 + +struct __attribute__((packed)) drx8_hdr_type { + uint32_t sync_word; + uint32_t frame_count_word; + uint32_t seconds_count; + uint16_t decimation; + uint16_t time_offset; + uint64_t time_tag; + uint32_t tuning_word; + uint32_t flags; +}; + +class DRX8Decoder : virtual public PacketDecoder { + inline bool valid_packet(const PacketDesc* pkt) const { + return (pkt->sync == 0x5CDEC0DE && + pkt->src >= 0 && + pkt->src < _nsrc && + pkt->time_tag >= 0 && + (((_nsrc == 4) && + (pkt->tuning > 0 && + pkt->tuning1 > 0)) || + (_nsrc == 2 && + (pkt->tuning > 0 || + pkt->tuning1 > 0))) && + pkt->valid_mode == 0); + } +public: + DRX8Decoder(int nsrc, int src0) : PacketDecoder(nsrc, src0) {} + inline bool operator()(const uint8_t* pkt_ptr, + int pkt_size, + PacketDesc* pkt) const { + if( pkt_size != DRX_FRAME_SIZE ) { + return false; + } + const drx8_hdr_type* pkt_hdr = (drx8_hdr_type*)pkt_ptr; + const uint8_t* pkt_pld = pkt_ptr + sizeof(drx8_hdr_type); + int pld_size = pkt_size - sizeof(drx8_hdr_type); + int pkt_id = pkt_hdr->frame_count_word & 0xFF; + pkt->beam = (pkt_id & 0x7) - 1; + int pkt_tune = ((pkt_id >> 3) & 0x7) - 1; + int pkt_pol = ((pkt_id >> 7) & 0x1); + pkt_id = (pkt_tune << 1) | pkt_pol; + pkt->sync = pkt_hdr->sync_word; + pkt->time_tag = be64toh(pkt_hdr->time_tag) - be16toh(pkt_hdr->time_offset); + pkt->seq = pkt->time_tag / be16toh(pkt_hdr->decimation) / 4096; + pkt->nsrc = _nsrc; + pkt->src = pkt_id - _src0; + if( pkt->src / 2 == 0 ) { + pkt->tuning = be32toh(pkt_hdr->tuning_word); + } else { + pkt->tuning1 = be32toh(pkt_hdr->tuning_word); + } + pkt->decimation = be16toh(pkt_hdr->decimation); + pkt->valid_mode = ((pkt_id >> 6) & 0x1); + pkt->payload_size = pld_size; + pkt->payload_ptr = pkt_pld; + return this->valid_packet(pkt); + } +}; + + +class DRX8Processor : virtual public PacketProcessor { +public: + inline void operator()(const PacketDesc* pkt, + uint64_t seq0, + uint64_t nseq_per_obuf, + int nbuf, + uint8_t* obufs[], + size_t ngood_bytes[], + size_t* src_ngood_bytes[]) { + int obuf_idx = ((pkt->seq - seq0 >= 1*nseq_per_obuf) + + (pkt->seq - seq0 >= 2*nseq_per_obuf)); + size_t obuf_seq0 = seq0 + obuf_idx*nseq_per_obuf; + size_t nbyte = pkt->payload_size; + ngood_bytes[obuf_idx] += nbyte; + src_ngood_bytes[obuf_idx][pkt->src] += nbyte; + int payload_size = pkt->payload_size; + + size_t obuf_offset = (pkt->seq-obuf_seq0)*pkt->nsrc*payload_size; + + // Note: Using these SSE types allows the compiler to use SSE instructions + // However, they require aligned memory (otherwise segfault) + uint16_t const* __restrict__ in = (uint8_t const*)pkt->payload_ptr; + uint16_t* __restrict__ out = (uint8_t* )&obufs[obuf_idx][obuf_offset]; + + for( int samp=0; samp<4096; ++samp ) { // HACK TESTING + *(out + pkt->src) = *in; + in++; + out += pkt->nsrc; + } + } + + inline void blank_out_source(uint8_t* data, + int src, + int nsrc, + int nchan, + int nseq) { + uint16_t* __restrict__ aligned_data = (uint16_t*) data; + for( int t=0; t(hdr); + memset(header, 0, sizeof(drx8_hdr_type)); + + header->sync_word = 0x5CDEC0DE; + // ID is stored in the lowest 8 bits; bit 2 is reserved for DRX8 vs DRX + header->frame_count_word = htobe32((uint32_t) ((hdr_base->src & 0xBF) | 0x40) << 24); + header->decimation = htobe16((uint16_t) hdr_base->decimation); + header->time_offset = 0; + header->time_tag = htobe64(hdr_base->seq); + header->tuning_word = htobe32(hdr_base->tuning); + } +}; diff --git a/src/formats/formats.hpp b/src/formats/formats.hpp index 28d24e221..14ed3ad9e 100644 --- a/src/formats/formats.hpp +++ b/src/formats/formats.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2020, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -32,6 +32,7 @@ #include "cor.hpp" #include "vdif.hpp" #include "drx.hpp" +#include "drx8.hpp" #include "tbn.hpp" #include "tbf.hpp" #include "ibeam.hpp" diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 7b977b416..55c904852 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -512,6 +512,8 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, nsamples = 512; } else if( format == std::string("drx") ) { nsamples = 4096; + } else if( format == std::string("drx8") ) { + nsamples = 4096; } else if( format == std::string("tbf") ) { nsamples = 6144; } @@ -560,6 +562,9 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, } else if( format == std::string("drx") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_drx_impl(writer, nsamples), *obj = 0); + } else if( format == std::string("drx8") ) { + BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_drx8_impl(writer, nsamples), + *obj = 0); } else if( format == std::string("tbf") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_tbf_impl(writer, nsamples), *obj = 0); From e9a9a4bab80a2d0e9420e169a1ba84ec6f873885 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 18 Jul 2023 16:55:49 -0600 Subject: [PATCH 0856/1155] Missed a couple of declaration changes. --- src/formats/drx8.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/formats/drx8.hpp b/src/formats/drx8.hpp index c39fac09b..cf1f38289 100644 --- a/src/formats/drx8.hpp +++ b/src/formats/drx8.hpp @@ -113,8 +113,8 @@ class DRX8Processor : virtual public PacketProcessor { // Note: Using these SSE types allows the compiler to use SSE instructions // However, they require aligned memory (otherwise segfault) - uint16_t const* __restrict__ in = (uint8_t const*)pkt->payload_ptr; - uint16_t* __restrict__ out = (uint8_t* )&obufs[obuf_idx][obuf_offset]; + uint16_t const* __restrict__ in = (uint16_t const*)pkt->payload_ptr; + uint16_t* __restrict__ out = (uint16_t* )&obufs[obuf_idx][obuf_offset]; for( int samp=0; samp<4096; ++samp ) { // HACK TESTING *(out + pkt->src) = *in; From 516b9d0a543191a7c84e3034baa6a3d50f2718e7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 18 Jul 2023 20:10:46 -0600 Subject: [PATCH 0857/1155] Add BFpacketwriter_drx8_impl. --- src/packet_writer.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 55c904852..4b774661b 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -473,6 +473,18 @@ class BFpacketwriter_drx_impl : public BFpacketwriter_impl { } }; +class BFpacketwriter_drx8_impl : public BFpacketwriter_impl { + ProcLog _type_log; +public: + inline BFpacketwriter_drx8_impl(PacketWriterThread* writer, + int nsamples) + : BFpacketwriter_impl(writer, nullptr, nsamples, BF_DTYPE_CI8), + _type_log((std::string(writer->get_name())+"/type").c_str()) { + _filler = new DRX8HeaderFiller(); + _type_log.update("type : %s\n", "drx8"); + } +}; + class BFpacketwriter_tbf_impl : public BFpacketwriter_impl { ProcLog _type_log; public: From f9223b88a846be2b182e548fb0ec44438fc38af0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 19 Jul 2023 07:20:12 -0600 Subject: [PATCH 0858/1155] Add in support for DRX8 capture. --- python/bifrost/packet_capture.py | 6 +- src/bifrost/packet_capture.h | 6 +- src/packet_capture.cpp | 9 ++- src/packet_capture.hpp | 98 +++++++++++++++++++++++++++++++- 4 files changed, 114 insertions(+), 5 deletions(-) diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index 36ef53ad3..760debd98 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -1,5 +1,5 @@ -# Copyright (c) 2019-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -66,6 +66,10 @@ def set_drx(self, fnc): self._ref_cache['drx'] = _bf.BFpacketcapture_drx_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetDRX( self.obj, self._ref_cache['drx'])) + def set_drx8(self, fnc): + self._ref_cache['drx8'] = _bf.BFpacketcapture_drx8_sequence_callback(fnc) + _check(_bf.bfPacketCaptureCallbackSetDRX8( + self.obj, self._ref_cache['drx8'])) class _CaptureBase(BifrostObject): @staticmethod diff --git a/src/bifrost/packet_capture.h b/src/bifrost/packet_capture.h index 06a9b70e1..f599824fc 100644 --- a/src/bifrost/packet_capture.h +++ b/src/bifrost/packet_capture.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2021, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -52,6 +52,8 @@ typedef int (*BFpacketcapture_tbn_sequence_callback)(BFoffset, BFoffset, int, in int, void const**, size_t*); typedef int (*BFpacketcapture_drx_sequence_callback)(BFoffset, BFoffset, int, int, int, int, void const**, size_t*); +typedef int (*BFpacketcapture_drx8_sequence_callback)(BFoffset, BFoffset, int, int, int, + int, void const**, size_t*); typedef struct BFpacketcapture_callback_impl* BFpacketcapture_callback; @@ -71,6 +73,8 @@ BFstatus bfPacketCaptureCallbackSetTBN(BFpacketcapture_callback obj, BFpacketcapture_tbn_sequence_callback callback); BFstatus bfPacketCaptureCallbackSetDRX(BFpacketcapture_callback obj, BFpacketcapture_drx_sequence_callback callback); +BFstatus bfPacketCaptureCallbackSetDRX8(BFpacketcapture_callback obj, + BFpacketcapture_drx8_sequence_callback callback); // Capture setup diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index 0e5b7af2c..bbe8526a1 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2021, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -174,6 +174,13 @@ BFstatus bfPacketCaptureCallbackSetDRX(BFpacketcapture_callback obj, return BF_STATUS_SUCCESS; } +BFstatus bfPacketCaptureCallbackSetDRX8(BFpacketcapture_callback obj, + BFpacketcapture_drx8_sequence_callback callback) { + BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); + obj->set_drx8(callback); + return BF_STATUS_SUCCESS; +} + BFpacketcapture_status BFpacketcapture_impl::recv() { _t0 = std::chrono::high_resolution_clock::now(); diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index d74a9997b..7f648c9ae 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2020, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -379,11 +379,12 @@ class BFpacketcapture_callback_impl { BFpacketcapture_vdif_sequence_callback _vdif_callback; BFpacketcapture_tbn_sequence_callback _tbn_callback; BFpacketcapture_drx_sequence_callback _drx_callback; + BFpacketcapture_drx8_sequence_callback _drx8_callback; public: BFpacketcapture_callback_impl() : _chips_callback(NULL), _ibeam_callback(NULL), _pbeam_callback(NULL), _cor_callback(NULL), _vdif_callback(NULL), _tbn_callback(NULL), - _drx_callback(NULL) {} + _drx_callback(NULL), _drx8_callback(NULL) {} inline void set_chips(BFpacketcapture_chips_sequence_callback callback) { _chips_callback = callback; } @@ -425,6 +426,9 @@ class BFpacketcapture_callback_impl { } inline BFpacketcapture_drx_sequence_callback get_drx() { return _drx_callback; + } + inline BFpacketcapture_drx8_sequence_callback get_drx8() { + return _drx8_callback; } }; @@ -1131,6 +1135,89 @@ class BFpacketcapture_drx_impl : public BFpacketcapture_impl { } }; +class BFpacketcapture_drx8_impl : public BFpacketcapture_impl { + ProcLog _type_log; + ProcLog _chan_log; + + BFpacketcapture_drx8_sequence_callback _sequence_callback; + + BFoffset _time_tag; + uint16_t _decim; + int _chan1; + + void on_sequence_start(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size ) { + _seq = round_nearest(pkt->seq, _nseq_per_buf); + this->on_sequence_changed(pkt, seq0, time_tag, hdr, hdr_size); + } + void on_sequence_active(const PacketDesc* pkt) { + if( pkt ) { + //cout << "Latest nchan, chan0 = " << pkt->nchan << ", " << pkt->chan0 << endl; + } + else { + //cout << "No latest packet" << endl; + } + } + inline bool has_sequence_changed(const PacketDesc* pkt) { + return ( (pkt->tuning != _chan0) + || (pkt->tuning1 != _chan1) + || (pkt->decimation != _decim) ); + } + void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { + *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); + *time_tag = pkt->time_tag; + _time_tag = pkt->time_tag; + _chan0 = pkt->tuning; + _chan1 = pkt->tuning1; + if( _nsrc == 2 ) { + _chan0 = std::max(_chan0, _chan1); + _chan1 = 0; + } + _decim = pkt->decimation; + _payload_size = pkt->payload_size; + + if( _sequence_callback ) { + int status = (*_sequence_callback)(*seq0, + *time_tag, + _decim, + _chan0, + _chan1, + _nsrc, + hdr, + hdr_size); + if( status != 0 ) { + // TODO: What to do here? Needed? + throw std::runtime_error("BAD HEADER CALLBACK STATUS"); + } + } else { + // Simple default for easy testing + *time_tag = *seq0; + *hdr = NULL; + *hdr_size = 0; + } + + _chan_log.update() << "chan0 : " << _chan0 << "\n" + << "chan1 : " << _chan1 << "\n" + << "payload_size : " << _payload_size << "\n"; + } +public: + inline BFpacketcapture_drx8_impl(PacketCaptureThread* capture, + BFring ring, + int nsrc, + int src0, + int buffer_ntime, + int slot_ntime, + BFpacketcapture_callback sequence_callback) + : BFpacketcapture_impl(capture, nullptr, nullptr, ring, nsrc, buffer_ntime, slot_ntime), + _type_log((std::string(capture->get_name())+"/type").c_str()), + _chan_log((std::string(capture->get_name())+"/chans").c_str()), + _sequence_callback(sequence_callback->get_drx8()), + _decim(0), _chan1(0) { + _decoder = new DRX8Decoder(nsrc, src0); + _processor = new DRX8Processor(); + _type_log.update("type : %s\n", "drx8"); + } +}; + BFstatus BFpacketcapture_create(BFpacketcapture* obj, const char* format, int fd, @@ -1180,6 +1267,8 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, max_payload_size = TBN_FRAME_SIZE; } else if( format == std::string("drx") ) { max_payload_size = DRX_FRAME_SIZE; + } else if( format == std::string("drx8") ) { + max_payload_size = DRX8_FRAME_SIZE; } PacketCaptureMethod* method; @@ -1239,6 +1328,11 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, buffer_ntime, slot_ntime, sequence_callback), *obj = 0); + } else if( format == std::string("drx8") ) { + BF_TRY_RETURN_ELSE(*obj = new BFpacketcapture_drx8_impl(capture, ring, nsrc, src0, + buffer_ntime, slot_ntime, + sequence_callback), + *obj = 0); } else { return BF_STATUS_UNSUPPORTED; } From 8859ca44cbbba726d86c23b75bcc8d93a90d2536 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 19 Jul 2023 07:27:46 -0600 Subject: [PATCH 0859/1155] Add missing set_drx8 method. --- src/packet_capture.hpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 7f648c9ae..a2551c3d7 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -426,6 +426,9 @@ class BFpacketcapture_callback_impl { } inline BFpacketcapture_drx_sequence_callback get_drx() { return _drx_callback; + } + inline void set_drx8(BFpacketcapture_drx8_sequence_callback callback) { + _drx8_callback = callback; } inline BFpacketcapture_drx8_sequence_callback get_drx8() { return _drx8_callback; From 725ba2170c0cb6cb816fb009f4ed144ea453c942 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 19 Jul 2023 09:14:17 -0600 Subject: [PATCH 0860/1155] Just trimming the diff slightly as I try to understand this solution. --- src/transpose.cu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/transpose.cu b/src/transpose.cu index ea48fe060..d20fc0615 100644 --- a/src/transpose.cu +++ b/src/transpose.cu @@ -340,7 +340,7 @@ BFstatus transpose_simple(BFarray const* in, char const* arg_names[] = {"in", "out"}; char const* func = func_str.c_str(); char const* extra_code = 0; - return bfMap(ndim, out->shape, axis_names, narg, args, arg_names, + return bfMap(ndim, out->shape, axis_names, narg, args, arg_names, "transpose_simple", func, extra_code, 0, 0); } @@ -474,7 +474,7 @@ BFstatus transpose_vector_write(BFarray const* in, "}\n" "out(" + out_inds_str + ") = ovals;\n"; } - // Minor HACK to avoid heap allocations + // Minor HACK to avoid heap allocations char const* axis_names[] = { "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "iA", "iB", "iC", "iD", "iE", "iF" From 8dc0a4f9618dbdb812b56e8c90ac15d16b874e2e Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 19 Jul 2023 12:00:08 -0600 Subject: [PATCH 0861/1155] Slight simplification of version bound in cuda.m4 Also include more .m4 files in config/ to support autoreconf on not-Jayce hosts. --- config/cuda.m4 | 40 +- config/doxygen.m4 | 586 ++++++++++++++++++++++++++ config/openmp.m4 | 123 ++++++ config/stdcxx.m4 | 1005 ++++++++++++++++++++++++++++++++++++++++++++ config/withprog.m4 | 70 +++ configure | 52 +-- flake.nix | 1 + 7 files changed, 1813 insertions(+), 64 deletions(-) create mode 100644 config/doxygen.m4 create mode 100644 config/openmp.m4 create mode 100644 config/stdcxx.m4 create mode 100644 config/withprog.m4 diff --git a/config/cuda.m4 b/config/cuda.m4 index 4b33fb58b..f1f2b2da7 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -38,34 +38,24 @@ AC_DEFUN([AX_CHECK_CUDA], LIBS_save="$LIBS" ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' - AC_COMPILE_IFELSE([ + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart" + + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' + AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include #include ]], - [[#if __CUDACC_VER_MAJOR__ < 10 - asdfdsfd - #endif]])], - [], - [AC_SUBST([HAVE_CUDA], [0])]) - - if test "$HAVE_CUDA" = "1"; then - LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart" - - ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([[ - #include - #include ]], - [[cudaMalloc(0, 0);]])], - [CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) - AC_MSG_RESULT(yes - v$CUDA_VERSION)], - [AC_MSG_RESULT(no) - AC_SUBST([HAVE_CUDA], [0])]) - else - AC_MSG_RESULT(no) - AC_SUBST([HAVE_CUDA], [0]) - fi + [[cudaMalloc(0, 0);]])], + [CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) + CUDA_MAJOR=$( echo "${CUDA_VERSION}" | cut -d. -f1 ) + if test "${CUDA_MAJOR}" -ge 10; then + AC_MSG_RESULT(yes - v$CUDA_VERSION) + else + AC_MSG_RESULT(no - found v$CUDA_VERSION) + fi], + [AC_MSG_RESULT(no - build failure) + AC_SUBST([HAVE_CUDA], [0])]) CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" diff --git a/config/doxygen.m4 b/config/doxygen.m4 new file mode 100644 index 000000000..ed1dc83b4 --- /dev/null +++ b/config/doxygen.m4 @@ -0,0 +1,586 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_prog_doxygen.html +# =========================================================================== +# +# SYNOPSIS +# +# DX_INIT_DOXYGEN(PROJECT-NAME, [DOXYFILE-PATH], [OUTPUT-DIR], ...) +# DX_DOXYGEN_FEATURE(ON|OFF) +# DX_DOT_FEATURE(ON|OFF) +# DX_HTML_FEATURE(ON|OFF) +# DX_CHM_FEATURE(ON|OFF) +# DX_CHI_FEATURE(ON|OFF) +# DX_MAN_FEATURE(ON|OFF) +# DX_RTF_FEATURE(ON|OFF) +# DX_XML_FEATURE(ON|OFF) +# DX_PDF_FEATURE(ON|OFF) +# DX_PS_FEATURE(ON|OFF) +# +# DESCRIPTION +# +# The DX_*_FEATURE macros control the default setting for the given +# Doxygen feature. Supported features are 'DOXYGEN' itself, 'DOT' for +# generating graphics, 'HTML' for plain HTML, 'CHM' for compressed HTML +# help (for MS users), 'CHI' for generating a separate .chi file by the +# .chm file, and 'MAN', 'RTF', 'XML', 'PDF' and 'PS' for the appropriate +# output formats. The environment variable DOXYGEN_PAPER_SIZE may be +# specified to override the default 'a4wide' paper size. +# +# By default, HTML, PDF and PS documentation is generated as this seems to +# be the most popular and portable combination. MAN pages created by +# Doxygen are usually problematic, though by picking an appropriate subset +# and doing some massaging they might be better than nothing. CHM and RTF +# are specific for MS (note that you can't generate both HTML and CHM at +# the same time). The XML is rather useless unless you apply specialized +# post-processing to it. +# +# The macros mainly control the default state of the feature. The use can +# override the default by specifying --enable or --disable. The macros +# ensure that contradictory flags are not given (e.g., +# --enable-doxygen-html and --enable-doxygen-chm, +# --enable-doxygen-anything with --disable-doxygen, etc.) Finally, each +# feature will be automatically disabled (with a warning) if the required +# programs are missing. +# +# Once all the feature defaults have been specified, call DX_INIT_DOXYGEN +# with the following parameters: a one-word name for the project for use +# as a filename base etc., an optional configuration file name (the +# default is '$(srcdir)/Doxyfile', the same as Doxygen's default), and an +# optional output directory name (the default is 'doxygen-doc'). To run +# doxygen multiple times for different configuration files and output +# directories provide more parameters: the second, forth, sixth, etc +# parameter are configuration file names and the third, fifth, seventh, +# etc parameter are output directories. No checking is done to catch +# duplicates. +# +# Automake Support +# +# The DX_RULES substitution can be used to add all needed rules to the +# Makefile. Note that this is a substitution without being a variable: +# only the @DX_RULES@ syntax will work. +# +# The provided targets are: +# +# doxygen-doc: Generate all doxygen documentation. +# +# doxygen-run: Run doxygen, which will generate some of the +# documentation (HTML, CHM, CHI, MAN, RTF, XML) +# but will not do the post processing required +# for the rest of it (PS, PDF). +# +# doxygen-ps: Generate doxygen PostScript documentation. +# +# doxygen-pdf: Generate doxygen PDF documentation. +# +# Note that by default these are not integrated into the automake targets. +# If doxygen is used to generate man pages, you can achieve this +# integration by setting man3_MANS to the list of man pages generated and +# then adding the dependency: +# +# $(man3_MANS): doxygen-doc +# +# This will cause make to run doxygen and generate all the documentation. +# +# The following variable is intended for use in Makefile.am: +# +# DX_CLEANFILES = everything to clean. +# +# Then add this variable to MOSTLYCLEANFILES. +# +# LICENSE +# +# Copyright (c) 2009 Oren Ben-Kiki +# Copyright (c) 2015 Olaf Mandel +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 24 + +## ----------## +## Defaults. ## +## ----------## + +DX_ENV="" +AC_DEFUN([DX_FEATURE_doc], ON) +AC_DEFUN([DX_FEATURE_dot], OFF) +AC_DEFUN([DX_FEATURE_man], OFF) +AC_DEFUN([DX_FEATURE_html], ON) +AC_DEFUN([DX_FEATURE_chm], OFF) +AC_DEFUN([DX_FEATURE_chi], OFF) +AC_DEFUN([DX_FEATURE_rtf], OFF) +AC_DEFUN([DX_FEATURE_xml], OFF) +AC_DEFUN([DX_FEATURE_pdf], ON) +AC_DEFUN([DX_FEATURE_ps], ON) + +## --------------- ## +## Private macros. ## +## --------------- ## + +# DX_ENV_APPEND(VARIABLE, VALUE) +# ------------------------------ +# Append VARIABLE="VALUE" to DX_ENV for invoking doxygen and add it +# as a substitution (but not a Makefile variable). The substitution +# is skipped if the variable name is VERSION. +AC_DEFUN([DX_ENV_APPEND], +[AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])dnl +m4_if([$1], [VERSION], [], [AC_SUBST([$1], [$2])dnl +AM_SUBST_NOTMAKE([$1])])dnl +]) + +# DX_DIRNAME_EXPR +# --------------- +# Expand into a shell expression prints the directory part of a path. +AC_DEFUN([DX_DIRNAME_EXPR], + [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']]) + +# DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF) +# ------------------------------------- +# Expands according to the M4 (static) status of the feature. +AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])]) + +# DX_REQUIRE_PROG(VARIABLE, PROGRAM) +# ---------------------------------- +# Require the specified program to be found for the DX_CURRENT_FEATURE to work. +AC_DEFUN([DX_REQUIRE_PROG], [ +AC_PATH_TOOL([$1], [$2]) +if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then + AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) + AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) +fi +]) + +# DX_TEST_FEATURE(FEATURE) +# ------------------------ +# Expand to a shell expression testing whether the feature is active. +AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1]) + +# DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE) +# ------------------------------------------------- +# Verify that a required features has the right state before trying to turn on +# the DX_CURRENT_FEATURE. +AC_DEFUN([DX_CHECK_DEPEND], [ +test "$DX_FLAG_$1" = "$2" \ +|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1, + requires, contradicts) doxygen-$1]) +]) + +# DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE) +# ---------------------------------------------------------- +# Turn off the DX_CURRENT_FEATURE if the required feature is off. +AC_DEFUN([DX_CLEAR_DEPEND], [ +test "$DX_FLAG_$1" = "$2" || AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) +]) + +# DX_FEATURE_ARG(FEATURE, DESCRIPTION, +# CHECK_DEPEND, CLEAR_DEPEND, +# REQUIRE, DO-IF-ON, DO-IF-OFF) +# -------------------------------------------- +# Parse the command-line option controlling a feature. CHECK_DEPEND is called +# if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND), +# otherwise CLEAR_DEPEND is called to turn off the default state if a required +# feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional +# requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and +# DO-IF-ON or DO-IF-OFF are called according to the final state of the feature. +AC_DEFUN([DX_ARG_ABLE], [ + AC_DEFUN([DX_CURRENT_FEATURE], [$1]) + AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2]) + AC_ARG_ENABLE(doxygen-$1, + [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1], + [--enable-doxygen-$1]), + DX_IF_FEATURE([$1], [don't $2], [$2]))], + [ +case "$enableval" in +#( +y|Y|yes|Yes|YES) + AC_SUBST([DX_FLAG_$1], 1) + $3 +;; #( +n|N|no|No|NO) + AC_SUBST([DX_FLAG_$1], 0) +;; #( +*) + AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1]) +;; +esac +], [ +AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)]) +$4 +]) +if DX_TEST_FEATURE([$1]); then + $5 + : +fi +if DX_TEST_FEATURE([$1]); then + $6 + : +else + $7 + : +fi +]) + +## -------------- ## +## Public macros. ## +## -------------- ## + +# DX_XXX_FEATURE(DEFAULT_STATE) +# ----------------------------- +AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])]) +AC_DEFUN([DX_DOT_FEATURE], [AC_DEFUN([DX_FEATURE_dot], [$1])]) +AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])]) +AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])]) +AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])]) +AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])]) +AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])]) +AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) +AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) +AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])]) +AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])]) + +# DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR], ...) +# -------------------------------------------------------------- +# PROJECT also serves as the base name for the documentation files. +# The default CONFIG-FILE is "$(srcdir)/Doxyfile" and OUTPUT-DOC-DIR is +# "doxygen-doc". +# More arguments are interpreted as interleaved CONFIG-FILE and +# OUTPUT-DOC-DIR values. +AC_DEFUN([DX_INIT_DOXYGEN], [ + +# Files: +AC_SUBST([DX_PROJECT], [$1]) +AC_SUBST([DX_CONFIG], ['ifelse([$2], [], [$(srcdir)/Doxyfile], [$2])']) +AC_SUBST([DX_DOCDIR], ['ifelse([$3], [], [doxygen-doc], [$3])']) +m4_if(m4_eval(3 < m4_count($@)), 1, [m4_for([DX_i], 4, m4_count($@), 2, + [AC_SUBST([DX_CONFIG]m4_eval(DX_i[/2]), + 'm4_default_nblank_quoted(m4_argn(DX_i, $@), + [$(srcdir)/Doxyfile])')])])dnl +m4_if(m4_eval(3 < m4_count($@)), 1, [m4_for([DX_i], 5, m4_count($@,), 2, + [AC_SUBST([DX_DOCDIR]m4_eval([(]DX_i[-1)/2]), + 'm4_default_nblank_quoted(m4_argn(DX_i, $@), + [doxygen-doc])')])])dnl +m4_define([DX_loop], m4_dquote(m4_if(m4_eval(3 < m4_count($@)), 1, + [m4_for([DX_i], 4, m4_count($@), 2, [, m4_eval(DX_i[/2])])], + [])))dnl + +# Environment variables used inside doxygen.cfg: +DX_ENV_APPEND(SRCDIR, $srcdir) +DX_ENV_APPEND(PROJECT, $DX_PROJECT) +DX_ENV_APPEND(VERSION, $PACKAGE_VERSION) + +# Doxygen itself: +DX_ARG_ABLE(doc, [generate any doxygen documentation], + [], + [], + [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen) + DX_REQUIRE_PROG([DX_PERL], perl)], + [DX_ENV_APPEND(PERL_PATH, $DX_PERL)]) + +# Dot for graphics: +DX_ARG_ABLE(dot, [generate graphics for doxygen documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_DOT], dot)], + [DX_ENV_APPEND(HAVE_DOT, YES) + DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])], + [DX_ENV_APPEND(HAVE_DOT, NO)]) + +# Man pages generation: +DX_ARG_ABLE(man, [generate doxygen manual pages], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_MAN, YES)], + [DX_ENV_APPEND(GENERATE_MAN, NO)]) + +# RTF file generation: +DX_ARG_ABLE(rtf, [generate doxygen RTF documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_RTF, YES)], + [DX_ENV_APPEND(GENERATE_RTF, NO)]) + +# XML file generation: +DX_ARG_ABLE(xml, [generate doxygen XML documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_XML, YES)], + [DX_ENV_APPEND(GENERATE_XML, NO)]) + +# (Compressed) HTML help generation: +DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_HHC], hhc)], + [DX_ENV_APPEND(HHC_PATH, $DX_HHC) + DX_ENV_APPEND(GENERATE_HTML, YES) + DX_ENV_APPEND(GENERATE_HTMLHELP, YES)], + [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)]) + +# Separate CHI file generation. +DX_ARG_ABLE(chi, [generate doxygen separate compressed HTML help index file], + [DX_CHECK_DEPEND(chm, 1)], + [DX_CLEAR_DEPEND(chm, 1)], + [], + [DX_ENV_APPEND(GENERATE_CHI, YES)], + [DX_ENV_APPEND(GENERATE_CHI, NO)]) + +# Plain HTML pages generation: +DX_ARG_ABLE(html, [generate doxygen plain HTML documentation], + [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)], + [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)], + [], + [DX_ENV_APPEND(GENERATE_HTML, YES)], + [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)]) + +# PostScript file generation: +DX_ARG_ABLE(ps, [generate doxygen PostScript documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_LATEX], latex) + DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) + DX_REQUIRE_PROG([DX_DVIPS], dvips) + DX_REQUIRE_PROG([DX_EGREP], egrep)]) + +# PDF file generation: +DX_ARG_ABLE(pdf, [generate doxygen PDF documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex) + DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) + DX_REQUIRE_PROG([DX_EGREP], egrep)]) + +# LaTeX generation for PS and/or PDF: +if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then + DX_ENV_APPEND(GENERATE_LATEX, YES) +else + DX_ENV_APPEND(GENERATE_LATEX, NO) +fi + +# Paper size for PS and/or PDF: +AC_ARG_VAR(DOXYGEN_PAPER_SIZE, + [a4wide (default), a4, letter, legal or executive]) +case "$DOXYGEN_PAPER_SIZE" in +#( +"") + AC_SUBST(DOXYGEN_PAPER_SIZE, "") +;; #( +a4wide|a4|letter|legal|executive) + DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE) +;; #( +*) + AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE']) +;; +esac + +# Rules: +AS_IF([[test $DX_FLAG_html -eq 1]], +[[DX_SNIPPET_html="## ------------------------------- ## +## Rules specific for HTML output. ## +## ------------------------------- ## + +DX_CLEAN_HTML = \$(DX_DOCDIR)/html]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/html]])[ + +"]], +[[DX_SNIPPET_html=""]]) +AS_IF([[test $DX_FLAG_chi -eq 1]], +[[DX_SNIPPET_chi=" +DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).chi]])["]], +[[DX_SNIPPET_chi=""]]) +AS_IF([[test $DX_FLAG_chm -eq 1]], +[[DX_SNIPPET_chm="## ------------------------------ ## +## Rules specific for CHM output. ## +## ------------------------------ ## + +DX_CLEAN_CHM = \$(DX_DOCDIR)/chm]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/chm]])[\ +${DX_SNIPPET_chi} + +"]], +[[DX_SNIPPET_chm=""]]) +AS_IF([[test $DX_FLAG_man -eq 1]], +[[DX_SNIPPET_man="## ------------------------------ ## +## Rules specific for MAN output. ## +## ------------------------------ ## + +DX_CLEAN_MAN = \$(DX_DOCDIR)/man]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/man]])[ + +"]], +[[DX_SNIPPET_man=""]]) +AS_IF([[test $DX_FLAG_rtf -eq 1]], +[[DX_SNIPPET_rtf="## ------------------------------ ## +## Rules specific for RTF output. ## +## ------------------------------ ## + +DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/rtf]])[ + +"]], +[[DX_SNIPPET_rtf=""]]) +AS_IF([[test $DX_FLAG_xml -eq 1]], +[[DX_SNIPPET_xml="## ------------------------------ ## +## Rules specific for XML output. ## +## ------------------------------ ## + +DX_CLEAN_XML = \$(DX_DOCDIR)/xml]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/xml]])[ + +"]], +[[DX_SNIPPET_xml=""]]) +AS_IF([[test $DX_FLAG_ps -eq 1]], +[[DX_SNIPPET_ps="## ----------------------------- ## +## Rules specific for PS output. ## +## ----------------------------- ## + +DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).ps]])[ + +DX_PS_GOAL = doxygen-ps + +doxygen-ps: \$(DX_CLEAN_PS) + +]m4_foreach([DX_i], [DX_loop], +[[\$(DX_DOCDIR]DX_i[)/\$(PACKAGE).ps: \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag + \$(DX_V_LATEX)cd \$(DX_DOCDIR]DX_i[)/latex; \\ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ + \$(DX_LATEX) refman.tex; \\ + \$(DX_MAKEINDEX) refman.idx; \\ + \$(DX_LATEX) refman.tex; \\ + countdown=5; \\ + while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ + refman.log > /dev/null 2>&1 \\ + && test \$\$countdown -gt 0; do \\ + \$(DX_LATEX) refman.tex; \\ + countdown=\`expr \$\$countdown - 1\`; \\ + done; \\ + \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi + +]])["]], +[[DX_SNIPPET_ps=""]]) +AS_IF([[test $DX_FLAG_pdf -eq 1]], +[[DX_SNIPPET_pdf="## ------------------------------ ## +## Rules specific for PDF output. ## +## ------------------------------ ## + +DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).pdf]])[ + +DX_PDF_GOAL = doxygen-pdf + +doxygen-pdf: \$(DX_CLEAN_PDF) + +]m4_foreach([DX_i], [DX_loop], +[[\$(DX_DOCDIR]DX_i[)/\$(PACKAGE).pdf: \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag + \$(DX_V_LATEX)cd \$(DX_DOCDIR]DX_i[)/latex; \\ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ + \$(DX_PDFLATEX) refman.tex; \\ + \$(DX_MAKEINDEX) refman.idx; \\ + \$(DX_PDFLATEX) refman.tex; \\ + countdown=5; \\ + while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ + refman.log > /dev/null 2>&1 \\ + && test \$\$countdown -gt 0; do \\ + \$(DX_PDFLATEX) refman.tex; \\ + countdown=\`expr \$\$countdown - 1\`; \\ + done; \\ + mv refman.pdf ../\$(PACKAGE).pdf + +]])["]], +[[DX_SNIPPET_pdf=""]]) +AS_IF([[test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1]], +[[DX_SNIPPET_latex="## ------------------------------------------------- ## +## Rules specific for LaTeX (shared for PS and PDF). ## +## ------------------------------------------------- ## + +DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) +_DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) +_DX_v_LATEX_0 = @echo \" LATEX \" \$][@; + +DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/latex]])[ + +"]], +[[DX_SNIPPET_latex=""]]) + +AS_IF([[test $DX_FLAG_doc -eq 1]], +[[DX_SNIPPET_doc="## --------------------------------- ## +## Format-independent Doxygen rules. ## +## --------------------------------- ## + +${DX_SNIPPET_html}\ +${DX_SNIPPET_chm}\ +${DX_SNIPPET_man}\ +${DX_SNIPPET_rtf}\ +${DX_SNIPPET_xml}\ +${DX_SNIPPET_ps}\ +${DX_SNIPPET_pdf}\ +${DX_SNIPPET_latex}\ +DX_V_DXGEN = \$(_DX_v_DXGEN_\$(V)) +_DX_v_DXGEN_ = \$(_DX_v_DXGEN_\$(AM_DEFAULT_VERBOSITY)) +_DX_v_DXGEN_0 = @echo \" DXGEN \" \$<; + +.PHONY: doxygen-run doxygen-doc \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +.INTERMEDIATE: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +doxygen-run:]m4_foreach([DX_i], [DX_loop], + [[ \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag]])[ + +doxygen-doc: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +]m4_foreach([DX_i], [DX_loop], +[[\$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag: \$(DX_CONFIG]DX_i[) \$(pkginclude_HEADERS) + \$(A""M_V_at)rm -rf \$(DX_DOCDIR]DX_i[) + \$(DX_V_DXGEN)\$(DX_ENV) DOCDIR=\$(DX_DOCDIR]DX_i[) \$(DX_DOXYGEN) \$(DX_CONFIG]DX_i[) + \$(A""M_V_at)echo Timestamp >\$][@ + +]])dnl +[DX_CLEANFILES = \\] +m4_foreach([DX_i], [DX_loop], +[[ \$(DX_DOCDIR]DX_i[)/doxygen_sqlite3.db \\ + \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag \\ +]])dnl +[ -r \\ + \$(DX_CLEAN_HTML) \\ + \$(DX_CLEAN_CHM) \\ + \$(DX_CLEAN_CHI) \\ + \$(DX_CLEAN_MAN) \\ + \$(DX_CLEAN_RTF) \\ + \$(DX_CLEAN_XML) \\ + \$(DX_CLEAN_PS) \\ + \$(DX_CLEAN_PDF) \\ + \$(DX_CLEAN_LATEX)"]], +[[DX_SNIPPET_doc=""]]) +AC_SUBST([DX_RULES], +["${DX_SNIPPET_doc}"])dnl +AM_SUBST_NOTMAKE([DX_RULES]) + +#For debugging: +#echo DX_FLAG_doc=$DX_FLAG_doc +#echo DX_FLAG_dot=$DX_FLAG_dot +#echo DX_FLAG_man=$DX_FLAG_man +#echo DX_FLAG_html=$DX_FLAG_html +#echo DX_FLAG_chm=$DX_FLAG_chm +#echo DX_FLAG_chi=$DX_FLAG_chi +#echo DX_FLAG_rtf=$DX_FLAG_rtf +#echo DX_FLAG_xml=$DX_FLAG_xml +#echo DX_FLAG_pdf=$DX_FLAG_pdf +#echo DX_FLAG_ps=$DX_FLAG_ps +#echo DX_ENV=$DX_ENV +]) diff --git a/config/openmp.m4 b/config/openmp.m4 new file mode 100644 index 000000000..866e1d664 --- /dev/null +++ b/config/openmp.m4 @@ -0,0 +1,123 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_openmp.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_OPENMP([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro tries to find out how to compile programs that use OpenMP a +# standard API and set of compiler directives for parallel programming +# (see http://www-unix.mcs/) +# +# On success, it sets the OPENMP_CFLAGS/OPENMP_CXXFLAGS/OPENMP_F77FLAGS +# output variable to the flag (e.g. -omp) used both to compile *and* link +# OpenMP programs in the current language. +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. +# +# If you want to compile everything with OpenMP, you should set: +# +# CFLAGS="$CFLAGS $OPENMP_CFLAGS" +# #OR# CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +# #OR# FFLAGS="$FFLAGS $OPENMP_FFLAGS" +# +# (depending on the selected language). +# +# The user can override the default choice by setting the corresponding +# environment variable (e.g. OPENMP_CFLAGS). +# +# ACTION-IF-FOUND is a list of shell commands to run if an OpenMP flag is +# found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is +# not found. If ACTION-IF-FOUND is not specified, the default action will +# define HAVE_OPENMP. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2015 John W. Peterson +# Copyright (c) 2016 Nick R. Papior +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 13 + +AC_DEFUN([AX_OPENMP], [ +AC_PREREQ([2.69]) dnl for _AC_LANG_PREFIX + +AC_CACHE_CHECK([for OpenMP flag of _AC_LANG compiler], ax_cv_[]_AC_LANG_ABBREV[]_openmp, [save[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS +ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown +# Flags to try: -fopenmp (gcc), -mp (SGI & PGI), +# -qopenmp (icc>=15), -openmp (icc), +# -xopenmp (Sun), -omp (Tru64), +# -qsmp=omp (AIX), +# none +ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none" +if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then + ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags" +fi +for ax_openmp_flag in $ax_openmp_flags; do + case $ax_openmp_flag in + none) []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[] ;; + *) []_AC_LANG_PREFIX[]FLAGS="$save[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flag" ;; + esac + AC_LINK_IFELSE([AC_LANG_SOURCE([[ +@%:@include + +static void +parallel_fill(int * data, int n) +{ + int i; +@%:@pragma omp parallel for + for (i = 0; i < n; ++i) + data[i] = i; +} + +int +main() +{ + int arr[100000]; + omp_set_num_threads(2); + parallel_fill(arr, 100000); + return 0; +} +]])],[ax_cv_[]_AC_LANG_ABBREV[]_openmp=$ax_openmp_flag; break],[]) +done +[]_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[]FLAGS +]) +if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then + m4_default([$2],:) +else + if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xnone"; then + OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ax_cv_[]_AC_LANG_ABBREV[]_openmp + fi + m4_default([$1], [AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled])]) +fi +])dnl AX_OPENMP diff --git a/config/stdcxx.m4 b/config/stdcxx.m4 new file mode 100644 index 000000000..51a35054d --- /dev/null +++ b/config/stdcxx.m4 @@ -0,0 +1,1005 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the specified +# version of the C++ standard. If necessary, add switches to CXX and +# CXXCPP to enable support. VERSION may be '11', '14', '17', or '20' for +# the respective C++ standard version. +# +# The second argument, if specified, indicates whether you insist on an +# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. +# -std=c++11). If neither is specified, you get whatever works, with +# preference for no added switch, and then for an extended mode. +# +# The third argument, if specified 'mandatory' or if left unspecified, +# indicates that baseline support for the specified C++ standard is +# required and that the macro should error out if no mode with that +# support is found. If specified 'optional', then configuration proceeds +# regardless, after defining HAVE_CXX${VERSION} if and only if a +# supporting mode is found. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik +# Copyright (c) 2012 Zack Weinberg +# Copyright (c) 2013 Roy Stogner +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov +# Copyright (c) 2015 Paul Norman +# Copyright (c) 2015 Moritz Klammler +# Copyright (c) 2016, 2018 Krzesimir Nowak +# Copyright (c) 2019 Enji Cooper +# Copyright (c) 2020 Jason Merrill +# Copyright (c) 2021 Jörn Heusipp +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 14 + +dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro +dnl (serial version number 13). + +AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl + m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"], + [$1], [14], [ax_cxx_compile_alternatives="14 1y"], + [$1], [17], [ax_cxx_compile_alternatives="17 1z"], + [$1], [20], [ax_cxx_compile_alternatives="20"], + [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl + m4_if([$2], [], [], + [$2], [ext], [], + [$2], [noext], [], + [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl + m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true], + [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], + [$3], [optional], [ax_cxx_compile_cxx$1_required=false], + [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) + AC_LANG_PUSH([C++])dnl + ac_success=no + + m4_if([$2], [], [dnl + AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, + ax_cv_cxx_compile_cxx$1, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [ax_cv_cxx_compile_cxx$1=yes], + [ax_cv_cxx_compile_cxx$1=no])]) + if test x$ax_cv_cxx_compile_cxx$1 = xyes; then + ac_success=yes + fi]) + + m4_if([$2], [noext], [], [dnl + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + switch="-std=gnu++${alternative}" + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + fi]) + + m4_if([$2], [ext], [], [dnl + if test x$ac_success = xno; then + dnl HP's aCC needs +std=c++11 according to: + dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf + dnl Cray's crayCC needs "-h std=c++11" + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi]) + AC_LANG_POP([C++]) + if test x$ax_cxx_compile_cxx$1_required = xtrue; then + if test x$ac_success = xno; then + AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.]) + fi + fi + if test x$ac_success = xno; then + HAVE_CXX$1=0 + AC_MSG_NOTICE([No compiler with C++$1 support was found]) + else + HAVE_CXX$1=1 + AC_DEFINE(HAVE_CXX$1,1, + [define if the compiler supports basic C++$1 syntax]) + fi + AC_SUBST(HAVE_CXX$1) +]) + + +dnl Test body for checking C++11 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 +) + +dnl Test body for checking C++14 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 +) + +dnl Test body for checking C++17 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 +) + +dnl Test body for checking C++20 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_20 +) + + +dnl Tests for new features in C++11 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[ + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; + + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + +]]) + + +dnl Tests for new features in C++14 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[ + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture + { + + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + + } + + namespace test_digit_separators + { + + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L + +]]) + + +dnl Tests for new features in C++17 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ + +// If the compiler admits that it is not ready for C++17, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201703L + +#error "This is not a C++17 compiler" + +#else + +#include +#include +#include + +namespace cxx17 +{ + + namespace test_constexpr_lambdas + { + + constexpr int foo = [](){return 42;}(); + + } + + namespace test::nested_namespace::definitions + { + + } + + namespace test_fold_expression + { + + template + int multiply(Args... args) + { + return (args * ... * 1); + } + + template + bool all(Args... args) + { + return (args && ...); + } + + } + + namespace test_extended_static_assert + { + + static_assert (true); + + } + + namespace test_auto_brace_init_list + { + + auto foo = {5}; + auto bar {5}; + + static_assert(std::is_same, decltype(foo)>::value); + static_assert(std::is_same::value); + } + + namespace test_typename_in_template_template_parameter + { + + template typename X> struct D; + + } + + namespace test_fallthrough_nodiscard_maybe_unused_attributes + { + + int f1() + { + return 42; + } + + [[nodiscard]] int f2() + { + [[maybe_unused]] auto unused = f1(); + + switch (f1()) + { + case 17: + f1(); + [[fallthrough]]; + case 42: + f1(); + } + return f1(); + } + + } + + namespace test_extended_aggregate_initialization + { + + struct base1 + { + int b1, b2 = 42; + }; + + struct base2 + { + base2() { + b3 = 42; + } + int b3; + }; + + struct derived : base1, base2 + { + int d; + }; + + derived d1 {{1, 2}, {}, 4}; // full initialization + derived d2 {{}, {}, 4}; // value-initialized bases + + } + + namespace test_general_range_based_for_loop + { + + struct iter + { + int i; + + int& operator* () + { + return i; + } + + const int& operator* () const + { + return i; + } + + iter& operator++() + { + ++i; + return *this; + } + }; + + struct sentinel + { + int i; + }; + + bool operator== (const iter& i, const sentinel& s) + { + return i.i == s.i; + } + + bool operator!= (const iter& i, const sentinel& s) + { + return !(i == s); + } + + struct range + { + iter begin() const + { + return {0}; + } + + sentinel end() const + { + return {5}; + } + }; + + void f() + { + range r {}; + + for (auto i : r) + { + [[maybe_unused]] auto v = i; + } + } + + } + + namespace test_lambda_capture_asterisk_this_by_value + { + + struct t + { + int i; + int foo() + { + return [*this]() + { + return i; + }(); + } + }; + + } + + namespace test_enum_class_construction + { + + enum class byte : unsigned char + {}; + + byte foo {42}; + + } + + namespace test_constexpr_if + { + + template + int f () + { + if constexpr(cond) + { + return 13; + } + else + { + return 42; + } + } + + } + + namespace test_selection_statement_with_initializer + { + + int f() + { + return 13; + } + + int f2() + { + if (auto i = f(); i > 0) + { + return 3; + } + + switch (auto i = f(); i + 4) + { + case 17: + return 2; + + default: + return 1; + } + } + + } + + namespace test_template_argument_deduction_for_class_templates + { + + template + struct pair + { + pair (T1 p1, T2 p2) + : m1 {p1}, + m2 {p2} + {} + + T1 m1; + T2 m2; + }; + + void f() + { + [[maybe_unused]] auto p = pair{13, 42u}; + } + + } + + namespace test_non_type_auto_template_parameters + { + + template + struct B + {}; + + B<5> b1; + B<'a'> b2; + + } + + namespace test_structured_bindings + { + + int arr[2] = { 1, 2 }; + std::pair pr = { 1, 2 }; + + auto f1() -> int(&)[2] + { + return arr; + } + + auto f2() -> std::pair& + { + return pr; + } + + struct S + { + int x1 : 2; + volatile double y1; + }; + + S f3() + { + return {}; + } + + auto [ x1, y1 ] = f1(); + auto& [ xr1, yr1 ] = f1(); + auto [ x2, y2 ] = f2(); + auto& [ xr2, yr2 ] = f2(); + const auto [ x3, y3 ] = f3(); + + } + + namespace test_exception_spec_type_system + { + + struct Good {}; + struct Bad {}; + + void g1() noexcept; + void g2(); + + template + Bad + f(T*, T*); + + template + Good + f(T1*, T2*); + + static_assert (std::is_same_v); + + } + + namespace test_inline_variables + { + + template void f(T) + {} + + template inline T g(T) + { + return T{}; + } + + template<> inline void f<>(int) + {} + + template<> int g<>(int) + { + return 5; + } + + } + +} // namespace cxx17 + +#endif // __cplusplus < 201703L + +]]) + + +dnl Tests for new features in C++20 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_20], [[ + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 202002L + +#error "This is not a C++20 compiler" + +#else + +#include + +namespace cxx20 +{ + +// As C++20 supports feature test macros in the standard, there is no +// immediate need to actually test for feature availability on the +// Autoconf side. + +} // namespace cxx20 + +#endif // __cplusplus < 202002L + +]]) diff --git a/config/withprog.m4 b/config/withprog.m4 new file mode 100644 index 000000000..b3a881c0d --- /dev/null +++ b/config/withprog.m4 @@ -0,0 +1,70 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_with_prog.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_WITH_PROG([VARIABLE],[program],[VALUE-IF-NOT-FOUND],[PATH]) +# +# DESCRIPTION +# +# Locates an installed program binary, placing the result in the precious +# variable VARIABLE. Accepts a present VARIABLE, then --with-program, and +# failing that searches for program in the given path (which defaults to +# the system path). If program is found, VARIABLE is set to the full path +# of the binary; if it is not found VARIABLE is set to VALUE-IF-NOT-FOUND +# if provided, unchanged otherwise. +# +# A typical example could be the following one: +# +# AX_WITH_PROG(PERL,perl) +# +# NOTE: This macro is based upon the original AX_WITH_PYTHON macro from +# Dustin J. Mitchell . +# +# LICENSE +# +# Copyright (c) 2008 Francesco Salvestrini +# Copyright (c) 2008 Dustin J. Mitchell +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 17 + +AC_DEFUN([AX_WITH_PROG],[ + AC_PREREQ([2.61]) + + pushdef([VARIABLE],$1) + pushdef([EXECUTABLE],$2) + pushdef([VALUE_IF_NOT_FOUND],$3) + pushdef([PATH_PROG],$4) + + AC_ARG_VAR(VARIABLE,Absolute path to EXECUTABLE executable) + + AS_IF(test -z "$VARIABLE",[ + AC_MSG_CHECKING(whether EXECUTABLE executable path has been provided) + AC_ARG_WITH(EXECUTABLE,AS_HELP_STRING([--with-EXECUTABLE=[[[PATH]]]],absolute path to EXECUTABLE executable), [ + AS_IF([test "$withval" != yes && test "$withval" != no],[ + VARIABLE="$withval" + AC_MSG_RESULT($VARIABLE) + ],[ + VARIABLE="" + AC_MSG_RESULT([no]) + AS_IF([test "$withval" != no], [ + AC_PATH_PROG([]VARIABLE[],[]EXECUTABLE[],[]VALUE_IF_NOT_FOUND[],[]PATH_PROG[]) + ]) + ]) + ],[ + AC_MSG_RESULT([no]) + AC_PATH_PROG([]VARIABLE[],[]EXECUTABLE[],[]VALUE_IF_NOT_FOUND[],[]PATH_PROG[]) + ]) + ]) + + popdef([PATH_PROG]) + popdef([VALUE_IF_NOT_FOUND]) + popdef([EXECUTABLE]) + popdef([VARIABLE]) +]) diff --git a/configure b/configure index bf92f3c6e..896a69286 100755 --- a/configure +++ b/configure @@ -21430,6 +21430,10 @@ printf %s "checking for a working CUDA 10+ installation... " >&6; } LIBS_save="$LIBS" ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + LIBS="$LIBS -lcuda -lcudart" + + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21439,36 +21443,6 @@ printf %s "checking for a working CUDA 10+ installation... " >&6; } int main (void) { -#if __CUDACC_VER_MAJOR__ < 10 - asdfdsfd - #endif - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - -else $as_nop - HAVE_CUDA=0 - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - if test "$HAVE_CUDA" = "1"; then - LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart" - - ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - #include - #include -int -main (void) -{ cudaMalloc(0, 0); ; return 0; @@ -21477,22 +21451,22 @@ _ACEOF if ac_fn_cxx_try_link "$LINENO" then : CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) + CUDA_MAJOR=$( echo "${CUDA_VERSION}" | cut -d. -f1 ) + if test "${CUDA_MAJOR}" -ge 10; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes - v$CUDA_VERSION" >&5 printf "%s\n" "yes - v$CUDA_VERSION" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - found v$CUDA_VERSION" >&5 +printf "%s\n" "no - found v$CUDA_VERSION" >&6; } + fi else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - HAVE_CUDA=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - build failure" >&5 +printf "%s\n" "no - build failure" >&6; } + HAVE_CUDA=0 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - HAVE_CUDA=0 - - fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" diff --git a/flake.nix b/flake.nix index c40803ea8..1971beac3 100644 --- a/flake.nix +++ b/flake.nix @@ -349,6 +349,7 @@ pkgs.python3.pkgs.breathe pkgs.python3.pkgs.sphinx pkgs.yamllint + pkgs.autoconf ]; }; }); From d9b42b6854165b6c8c216b4c8bc2bb9159983d6a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 19 Jul 2023 12:54:10 -0600 Subject: [PATCH 0862/1155] Define bpm. --- docs/source/Create-a-pipeline.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/Create-a-pipeline.rst b/docs/source/Create-a-pipeline.rst index 605524592..76653699c 100644 --- a/docs/source/Create-a-pipeline.rst +++ b/docs/source/Create-a-pipeline.rst @@ -14,7 +14,7 @@ giving you a high-level view at arranging a series of blocks. We would like to construct the following pipeline, -which will serve to calculate the beats per minute +which will serve to calculate the beats per minute (bpm) of a song. As we will soon see, some intermediate operations will be required to get the bpm, and we can then write our own block. From fbf27be58eb4c469d7da62f21008efa4ec5cb6e3 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 19 Jul 2023 20:43:16 -0600 Subject: [PATCH 0863/1155] Slight simplification in K==1 case --- .github/workflows/main.yml | 4 +--- src/transpose.cu | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b6e68385d..6bb5e3dce 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,8 +22,6 @@ jobs: os: [self-hosted, ubuntu-latest, macos-latest] python-version: ['3.8', '3.10'] include: - - os: ubuntu-20.04 - python-version: '2.7' - os: ubuntu-20.04 python-version: '3.6' - os: macos-latest @@ -68,7 +66,7 @@ jobs: ctypesgen==1.0.2 \ coverage - name: "Software Install - Python, part 2" - if: ${{ matrix.os == 'self-hosted' && matrix.python-version != '2.7' }} + if: ${{ matrix.os == 'self-hosted' }} # Setting CPLUS_INCLUDE_PATH helps pycuda find the right # Python header files to use with its embedded # subset of Boost. diff --git a/src/transpose.cu b/src/transpose.cu index d20fc0615..1a6078b97 100644 --- a/src/transpose.cu +++ b/src/transpose.cu @@ -458,11 +458,9 @@ BFstatus transpose_vector_write(BFarray const* in, } std::string func_str; if(K==1){ - func_str += "enum { K = " + std::to_string(K) + " };\n"; func_str += " int k=0;\n" - " out_type ovals = in(" + in_inds_str + ");\n" - " out(" + out_inds_str + ") = ovals;\n"; + " out(" + out_inds_str + ") = in(" + in_inds_str + ");\n"; } else{ func_str += "enum { K = " + std::to_string(K) + " };\n"; From a8ddfa95e8b4e8da179c987b8c32b964f4f6e746 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 20 Jul 2023 08:40:29 -0600 Subject: [PATCH 0864/1155] Update dockerfiles to ubuntu-20.04 and autoconf The nvidia/cuda:10.2 image disappeared from the hub, so the GPU versions in master were not buildable anymore. Also, the two that build bifrost were not yet using the configure script. However, the full-build `.gpu` version doesn't quite work because nvidia-docker seems to provide access to GPU during run phase, but not during build phase. Perhaps relevant: https://stackoverflow.com/questions/59691207/docker-build-with-nvidia-runtime The `_prereq.gpu` version builds fully and is still helpful. Also pinging PR #92 which is outdated but relevant. --- Dockerfile.cpu | 34 ++++++++++++++++++++++++++-------- Dockerfile.gpu | 11 ++++++----- Dockerfile_prereq.gpu | 10 ++++++---- 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/Dockerfile.cpu b/Dockerfile.cpu index c07f1740a..15360a55d 100644 --- a/Dockerfile.cpu +++ b/Dockerfile.cpu @@ -1,28 +1,46 @@ -FROM ledatelescope/bifrost:cpu-base +FROM ubuntu:20.04 MAINTAINER Ben Barsdell ARG DEBIAN_FRONTEND=noninteractive -ENV TERM xterm - # Get dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ - python-pip \ + build-essential \ + curl \ + git \ + pkg-config \ + software-properties-common \ + python3 \ + python3-dev \ + python3-pip \ + python-is-python3 \ pylint \ + doxygen \ + exuberant-ctags \ + nano \ + vim \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* -# Update ctypesgen RUN pip --no-cache-dir install \ - ctypesgen==1.0.2 + setuptools \ + numpy \ + matplotlib \ + contextlib2 \ + simplejson \ + pint \ + ctypesgen==1.0.2 \ + graphviz + +ENV TERM xterm # Build the library WORKDIR /bifrost COPY . . -RUN make clean && \ - make -j NOCUDA=1 && \ +RUN ./configure --disable-cuda && \ + make -j && \ make doc && \ make install diff --git a/Dockerfile.gpu b/Dockerfile.gpu index c67f144ba..393bc1ca7 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -1,4 +1,4 @@ -FROM nvidia/cuda:10.2-devel-ubuntu18.04 +FROM nvidia/cuda:12.2.0-devel-ubuntu20.04 MAINTAINER Ben Barsdell @@ -11,9 +11,10 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ git \ pkg-config \ software-properties-common \ - python \ - python-dev \ - python-pip \ + python3 \ + python3-dev \ + python3-pip \ + python-is-python3 \ pylint \ doxygen \ exuberant-ctags \ @@ -38,7 +39,7 @@ ENV TERM xterm # Build the library WORKDIR /bifrost COPY . . -RUN make clean && \ +RUN ./configure && \ make -j && \ make doc && \ make install diff --git a/Dockerfile_prereq.gpu b/Dockerfile_prereq.gpu index ca8ca4e9c..5f3df4d98 100644 --- a/Dockerfile_prereq.gpu +++ b/Dockerfile_prereq.gpu @@ -1,4 +1,4 @@ -FROM nvidia/cuda:10.2-devel-ubuntu18.04 +FROM nvidia/cuda:12.2.0-devel-ubuntu20.04 MAINTAINER Ben Barsdell @@ -11,9 +11,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ git \ pkg-config \ software-properties-common \ - python \ - python-dev \ - python-pip \ + python3 \ + python3-dev \ + python3-pip \ + python-is-python3 \ + pylint \ doxygen \ exuberant-ctags \ nano \ From 5ab7e0c351d9fc54609240c17e1b91e94f3a787e Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 20 Jul 2023 09:13:41 -0600 Subject: [PATCH 0865/1155] Fix tiny typo --- docs/source/Create-a-pipeline.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/Create-a-pipeline.rst b/docs/source/Create-a-pipeline.rst index 76653699c..9616faa71 100644 --- a/docs/source/Create-a-pipeline.rst +++ b/docs/source/Create-a-pipeline.rst @@ -62,7 +62,7 @@ which is the block module in Bifrost, which is a collection of previously-written blocks for various functionality,and ``views``, which is a library for manipulations of ring headers. We'll also import the ``Pipeline`` class from bifrost to -improve readibility: +improve readability: .. code:: python From bb654f7db42d350109e9e9991ca57133b8ce6e62 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 20 Jul 2023 12:13:14 -0600 Subject: [PATCH 0866/1155] Dockerfiles: include dependencies needed for tests --- Dockerfile.cpu | 5 +++++ Dockerfile.gpu | 10 ++++++++++ Dockerfile_prereq.gpu | 10 ++++++++++ 3 files changed, 25 insertions(+) diff --git a/Dockerfile.cpu b/Dockerfile.cpu index 15360a55d..ce9e8a3dd 100644 --- a/Dockerfile.cpu +++ b/Dockerfile.cpu @@ -27,6 +27,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ RUN pip --no-cache-dir install \ setuptools \ numpy \ + scipy \ + jupyterlab \ + jupyter_client \ + nbformat \ + nbconvert \ matplotlib \ contextlib2 \ simplejson \ diff --git a/Dockerfile.gpu b/Dockerfile.gpu index 393bc1ca7..80b9a59d8 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -27,6 +27,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ RUN pip --no-cache-dir install \ setuptools \ numpy \ + scipy \ + jupyterlab \ + jupyter_client \ + nbformat \ + nbconvert \ matplotlib \ contextlib2 \ simplejson \ @@ -34,6 +39,11 @@ RUN pip --no-cache-dir install \ ctypesgen==1.0.2 \ graphviz +RUN pip --no-cache-dir install \ + cupy-cuda12x \ + pycuda \ + numba + ENV TERM xterm # Build the library diff --git a/Dockerfile_prereq.gpu b/Dockerfile_prereq.gpu index 5f3df4d98..4e38a0a15 100644 --- a/Dockerfile_prereq.gpu +++ b/Dockerfile_prereq.gpu @@ -27,6 +27,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ RUN pip --no-cache-dir install \ setuptools \ numpy \ + scipy \ + jupyterlab \ + jupyter_client \ + nbformat \ + nbconvert \ matplotlib \ contextlib2 \ simplejson \ @@ -34,6 +39,11 @@ RUN pip --no-cache-dir install \ ctypesgen==1.0.2 \ graphviz +RUN pip --no-cache-dir install \ + cupy-cuda12x \ + pycuda \ + numba + ENV TERM xterm # Build the library From 401566113fa379fcee06a1243980bbfaf01f5047 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 20 Jul 2023 12:14:13 -0600 Subject: [PATCH 0867/1155] Skip certain tutorial notebook tests when CUDA not enabled Also write `_all_output.ipynb` to temporary dir rather than tutorial dir, so they don't match the glob again the next time. (Not an issue on ephemeral containers/CI tests, but with a persistent source dir they accumulate like `_all_output_all_output_all_output`. :) --- test/test_tutorial.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/test/test_tutorial.py b/test/test_tutorial.py index 346cb1908..b7e21d111 100644 --- a/test/test_tutorial.py +++ b/test/test_tutorial.py @@ -15,6 +15,7 @@ import os from tempfile import mkdtemp from shutil import rmtree +from bifrost.libbifrost_generated import BF_CUDA_ENABLED run_tutorial_tests = False @@ -52,7 +53,7 @@ def run_notebook(notebook_path, run_path=None, kernel_name=None): proc.allow_errors = True proc.preprocess(nb, {'metadata': {'path': run_path}}) - output_path = os.path.join(dirname, '{}_all_output.ipynb'.format(nb_name)) + output_path = os.path.join(run_path, '{}_all_output.ipynb'.format(nb_name)) with open(output_path, mode='wt', encoding='utf-8') as f: nbformat.write(nb, f) @@ -112,12 +113,19 @@ def test(self): _NOTEBOOKS = glob.glob(os.path.join(os.path.dirname(__file__), '..', 'tutorial', '*.ipynb')) _NOTEBOOKS.sort() for notebook in _NOTEBOOKS: - if notebook.find('06_data_capture') != -1: + nb_name = os.path.splitext(os.path.basename(notebook))[0] + if nb_name in ['06_data_capture']: # Skip this for now continue + # These notebooks require CUDA + if (not BF_CUDA_ENABLED and nb_name in + ['00_getting_started', '01_useful_functions', + '02_building_complexity']): + continue test = _test_generator(notebook) - name = 'test_%s' % os.path.splitext(os.path.basename(notebook))[0].replace(' ', '_') - doc = """Execution of the '%s' notebook.""" % os.path.basename(notebook) + assert ' ' not in nb_name + name = 'test_%s' % nb_name + doc = """Execution of the '%s' notebook.""" % nb_name setattr(test, '__doc__', doc) setattr(tutorial_tests, name, test) From 2c73d155b8e35f05d6879228b53459c6df0b4b7b Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 20 Jul 2023 12:36:09 -0600 Subject: [PATCH 0868/1155] Conditionalize tests that require scipy --- test/test_fir.py | 8 +++++++- test/test_managed.py | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/test/test_fir.py b/test/test_fir.py index cca287c98..e25115619 100644 --- a/test/test_fir.py +++ b/test/test_fir.py @@ -34,12 +34,17 @@ import ctypes import unittest import numpy as np -from scipy.signal import lfilter, lfiltic from bifrost.fir import Fir import bifrost as bf from bifrost.libbifrost_generated import BF_CUDA_ENABLED +try: + from scipy.signal import lfilter, lfiltic + HAVE_SCIPY = True +except ImportError: + HAVE_SCIPY = False + MTOL = 1e-6 # Relative tolerance at the mean magnitude RTOL = 1e-1 @@ -52,6 +57,7 @@ def compare(result, gold): np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") +@unittest.skipUnless(HAVE_SCIPY, "requires scipy") class TestFIR(unittest.TestCase): def setUp(self): np.random.seed(1234) diff --git a/test/test_managed.py b/test/test_managed.py index 485829982..aa042a6fa 100644 --- a/test/test_managed.py +++ b/test/test_managed.py @@ -143,9 +143,14 @@ def test_r2c_3D(self): # FIR # -from scipy.signal import lfilter, lfiltic from bifrost.fir import Fir +try: + from scipy.signal import lfilter, lfiltic + HAVE_SCIPY = True +except ImportError: + HAVE_SCIPY = False + def compare(result, gold): #np.testing.assert_allclose(result, gold, RTOL, ATOL) # Note: We compare using an absolute tolerance equal to a fraction of the @@ -155,6 +160,7 @@ def compare(result, gold): np.testing.assert_allclose(result, gold, rtol=RTOL, atol=MTOL * absmean) @unittest.skipUnless(BF_GPU_MANAGEDMEM, "requires GPU managed memory support") +@unittest.skipUnless(HAVE_SCIPY, "requires scipy") class TestManagedFIR(unittest.TestCase): def setUp(self): np.random.seed(1234) From ef644d34c4b0c8344ff3cf6cc4a3c588a7357979 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Apr 2022 09:53:32 -0600 Subject: [PATCH 0869/1155] Removed commented out code in ring.py Cherry-picked from c2778a1ee1381adcb79c7ceef7ca85327d96c64f on branch apr2022-prune, PR #178 --- python/bifrost/ring.py | 36 ------------------------------------ 1 file changed, 36 deletions(-) diff --git a/python/bifrost/ring.py b/python/bifrost/ring.py index 53760aa44..50bd24854 100644 --- a/python/bifrost/ring.py +++ b/python/bifrost/ring.py @@ -114,35 +114,6 @@ def read(self, whence: str='earliest', guarantee: bool=True) -> "ReadSequence": cur_seq.increment() except EndOfDataStop: return - #def _data(self): - # data_ptr = _get(self.lib.bfRingLockedGetData, self.obj) - # #data_ptr = c_void_p() - # #self._check( self.lib.bfRingLockedGetData(self.obj, pointer(data_ptr)) ) - # #data_ptr = data_ptr.value - # #data_ptr = self.lib.bfRingLockedGetData(self.obj) - # if self.space == 'cuda': - # # TODO: See if can wrap this in something like PyCUDA's GPUArray - # # Ideally actual GPUArray, but it doesn't appear to support wrapping pointers - # return data_ptr - # span = self._total_span() - # stride = self._stride() - # nringlet = self._nringlet() - # #print("******", span, stride, nringlet) - # BufferType = c_byte*(nringlet*stride) - # data_buffer_ptr = cast(data_ptr, POINTER(BufferType)) - # data_buffer = data_buffer_ptr.contents - # data_array = np.ndarray(shape=(nringlet, span), - # strides=(stride, 1) if nringlet > 1 else None, - # buffer=data_buffer, dtype=np.uint8) - # return data_array - #def _contiguous_span(self): - # return self._get(BFsize, self.lib.bfRingLockedGetContiguousSpan, self.obj) - #def _total_span(self): - # return self._get(BFsize, self.lib.bfRingLockedGetTotalSpan, self.obj) - #def _nringlet(self): - # return self._get(BFsize, self.lib.bfRingLockedGetNRinglet, self.obj) - #def _stride(self): - # return self._get(BFsize, self.lib.bfRingLockedGetStride, self.obj) class RingWriter(object): def __init__(self, ring: Ring): @@ -308,15 +279,8 @@ def data_view(self, dtype: Union[str,np.dtype]=np.uint8, assert( self.size % itemsize == 0 ) assert( self.stride % itemsize == 0 ) data_ptr = self._data_ptr - #if self.sequence.ring.space == 'cuda': - # # TODO: See if can wrap this in something like PyCUDA's GPUArray - # # Ideally actual GPUArray, but it doesn't appear to support wrapping pointers - # # Could also try writing a custom GPUArray implem for this purpose - # return data_ptr span_size = self.size nringlet = self.nringlet - #print("******", span_size, stride, nringlet) - #BufferType = c_byte*(span_size*self.stride) # TODO: We should really map the actual ring memory space and index # it with offset rather than mapping from the current pointer. _shape = (nringlet, span_size // itemsize) From 02e2e941d4337973e192e7d28f0eca645f78e717 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 20 Jul 2023 15:19:30 -0600 Subject: [PATCH 0870/1155] Clean up header filler. --- src/formats/snap2.hpp | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index 2e5672853..c1a17b600 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -30,11 +30,6 @@ #include "base.hpp" -// TODO: parameterize somewhere. This isn't -// related to the packet formatting -#define PIPELINE_NPOL 704 -#define PIPELINE_NCHAN 32 - // All entries are network (i.e. big) endian struct __attribute__((packed)) snap2_hdr_type { uint64_t seq; // Spectra counter == packet counter @@ -122,8 +117,6 @@ class SNAP2Decoder : virtual public PacketDecoder { }; class SNAP2Processor : virtual public PacketProcessor { -protected: - int _pipeline_nchan = PIPELINE_NCHAN; public: inline void operator()(const PacketDesc* pkt, uint64_t seq0, @@ -205,20 +198,21 @@ class SNAP2Processor : virtual public PacketProcessor { class SNAP2HeaderFiller : virtual public PacketHeaderFiller { public: - inline int get_size() { return sizeof(chips_hdr_type); } + inline int get_size() { return sizeof(snap2_hdr_type); } inline void operator()(const PacketDesc* hdr_base, BFoffset framecount, char* hdr) { - chips_hdr_type* header = reinterpret_cast(hdr); - memset(header, 0, sizeof(chips_hdr_type)); + snap2_hdr_type* header = reinterpret_cast(hdr); + memset(header, 0, sizeof(snap2_hdr_type)); + + header->seq = htobe64(hdr_base->seq); + header->npol = 2; + header->npol_tot = 2; + header->nchan = hdr_base->nchan; + header->nchan_tot = hdr_base->nchan * hdr_base->nsrc; + header->chan_block_id = hdr-base->src; + header->chan0 = htons(hdr_base->chan0); + header->pol0 = 0; - header->roach = hdr_base->src + 1; - header->gbe = hdr_base->tuning; - header->nchan = hdr_base->nchan; - header->nsubband = 1; // Should be changable? - header->subband = 0; // Should be changable? - header->nroach = hdr_base->nsrc; - header->chan0 = htons(hdr_base->chan0); - header->seq = htobe64(hdr_base->seq); } }; From e783a2463b8be3f0b698beecefee0d765a45e723 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 20 Jul 2023 15:21:43 -0600 Subject: [PATCH 0871/1155] Re-enable missing source blanking. --- src/formats/snap2.hpp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index c1a17b600..10aee3788 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -179,20 +179,18 @@ class SNAP2Processor : virtual public PacketProcessor { } inline void blank_out_source(uint8_t* data, - int src, - int nsrc, - int nchan, - int nseq) { - //fprintf(stderr, "TRYING TO BLANK OUT A SOURCE WITH MISSING PACKETS. BUT BLANKING NOT IMPLEMENTED\n"); - //typedef aligned256_type otype; - //fprintf(stderr, "You really better not be here\n"); - //otype* __restrict__ aligned_data = (otype*)data; - //for( int t=0; t Date: Thu, 20 Jul 2023 15:33:34 -0600 Subject: [PATCH 0872/1155] Ugh. --- src/formats/snap2.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index 10aee3788..2b9a85322 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -208,7 +208,7 @@ class SNAP2HeaderFiller : virtual public PacketHeaderFiller { header->npol_tot = 2; header->nchan = hdr_base->nchan; header->nchan_tot = hdr_base->nchan * hdr_base->nsrc; - header->chan_block_id = hdr-base->src; + header->chan_block_id = hdr_base->src; header->chan0 = htons(hdr_base->chan0); header->pol0 = 0; From 8cdc0c7739790d5f22be2071ca1ba8939f9034d3 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 20 Jul 2023 19:26:24 -0600 Subject: [PATCH 0873/1155] Remove dtype in favor of DataType This supersedes e6bed74a50098a3adaba37ddbffa6a313369a033 in apr2022-prune branch (PR #178). There was a new usage of dtype.bifrost2string in ndarray.py, which wasn't part of the apr2022-prune branch. I think (?) I worked around it correctly using the enum. We also discovered and fixed a NameError bug in DataType. --- python/bifrost/DataType.py | 2 +- python/bifrost/dtype.py | 180 ------------------------------------- python/bifrost/ndarray.py | 5 +- 3 files changed, 3 insertions(+), 184 deletions(-) delete mode 100644 python/bifrost/dtype.py diff --git a/python/bifrost/DataType.py b/python/bifrost/DataType.py index 07928c627..72690b362 100644 --- a/python/bifrost/DataType.py +++ b/python/bifrost/DataType.py @@ -129,7 +129,7 @@ def __init__(self, t: Optional[Union[str,_th.BFdtype_enum,_bf.BFdtype,"DataType" self._veclen = 1 # TODO: Consider supporting this as part of string elif isinstance(t, (_th.BFdtype_enum, _bf.BFdtype)): # Note: This is actually just a c_int t = _th.BFdtype_enum(t).value - self._nbit = t & BF_DTYPE_NBIT_BITS + self._nbit = t & _bf.BF_DTYPE_NBIT_BITS is_complex = bool(t & _bf.BF_DTYPE_COMPLEX_BIT) self._kind = KINDMAP[t & _bf.BF_DTYPE_TYPE_BITS] if is_complex: diff --git a/python/bifrost/dtype.py b/python/bifrost/dtype.py deleted file mode 100644 index 0d43a33d1..000000000 --- a/python/bifrost/dtype.py +++ /dev/null @@ -1,180 +0,0 @@ - -# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of The Bifrost Authors nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -""" - -i: signed integer -u: unsigned integer -f: floating point -ci: complex signed integer -cu: complex unsigned integer -cf: complex floating pointer - -i4: 4-bit signed integer -f16: 16-bit floating point -ci4: 4+4-bit complex signed integer -cf32: 32+32-bit complex floating point - -""" - -from bifrost.libbifrost import _bf, _th -from bifrost.libbifrost_generated import BF_FLOAT128_ENABLED -import numpy as np -from typing import Tuple - -from bifrost import telemetry -telemetry.track_module() - -def split_name_nbit(dtype_str: str) -> Tuple[str,int]: - """Splits a dtype string into (name, nbit)""" - for i, char in enumerate(dtype_str): - if char.isdigit(): - break - name = dtype_str[:i] - nbit = int(dtype_str[i:]) - return name, nbit - -# Custom dtypes to represent additional complex types -ci8 = np.dtype([('re', np.int8), ('im', np.int8)]) -ci16 = np.dtype([('re', np.int16), ('im', np.int16)]) -ci32 = np.dtype([('re', np.int32), ('im', np.int32)]) -cf16 = np.dtype([('re', np.float16), ('im', np.float16)]) -def to_complex64(q): - real_type = q.dtype['re'] - return q.view(real_type).astype(np.float32).view(np.complex64) -def from_complex64(f, dtype: np.dtype): - real_type = dtype['re'] - return f.view(np.float32).astype(real_type).view(dtype) - -def numpy2bifrost(dtype: np.dtype) -> _th.BFdtype_enum: - if dtype == np.int8: return _bf.BF_DTYPE_I8 - elif dtype == np.int16: return _bf.BF_DTYPE_I16 - elif dtype == np.int32: return _bf.BF_DTYPE_I32 - elif dtype == np.uint8: return _bf.BF_DTYPE_U8 - elif dtype == np.uint16: return _bf.BF_DTYPE_U16 - elif dtype == np.uint32: return _bf.BF_DTYPE_U32 - elif dtype == np.float16: return _bf.BF_DTYPE_F16 - elif dtype == np.float32: return _bf.BF_DTYPE_F32 - elif dtype == np.float64: return _bf.BF_DTYPE_F64 - elif dtype == np.float128 \ - and BF_FLOAT128_ENABLED: return _bf.BF_DTYPE_F128 - elif dtype == ci8: return _bf.BF_DTYPE_CI8 - elif dtype == ci16: return _bf.BF_DTYPE_CI16 - elif dtype == ci32: return _bf.BF_DTYPE_CI32 - elif dtype == cf16: return _bf.BF_DTYPE_CF16 - elif dtype == np.complex64: return _bf.BF_DTYPE_CF32 - elif dtype == np.complex128: return _bf.BF_DTYPE_CF64 - elif dtype == np.complex256 \ - and BF_FLOAT128_ENABLED: return _bf.BF_DTYPE_CF128 - else: raise ValueError(f"Unsupported dtype: {dtype}") - -def name_nbit2numpy(name: str, nbit: int) -> np.dtype: - if name == 'i': - if nbit == 8: return np.int8 - elif nbit == 16: return np.int16 - elif nbit == 32: return np.int32 - elif nbit == 64: return np.int64 - else: raise TypeError(f"Invalid signed integer type size: {nbit}") - elif name == 'u': - if nbit == 8: return np.uint8 - elif nbit == 16: return np.uint16 - elif nbit == 32: return np.uint32 - elif nbit == 64: return np.uint64 - else: raise TypeError(f"Invalid unsigned integer type size: {nbit}") - elif name == 'f': - if nbit == 16: return np.float16 - elif nbit == 32: return np.float32 - elif nbit == 64: return np.float64 - elif nbit == 128: return np.float128 - else: raise TypeError(f"Invalid floating-point type size: {nbit}") - elif name == 'ci': - if nbit == 8: return ci8 - elif nbit == 16: return ci16 - elif nbit == 32: return ci32 - # elif name in set(['ci', 'cu']): - # Note: This gives integer types in place of proper complex types - # return name_nbit2numpy(name[1:], nbit*2) - elif name == 'cf': - if nbit == 16: return cf16 - elif nbit == 32: return np.complex64 - elif nbit == 64: return np.complex128 - elif nbit == 128: return np.complex256 - else: raise TypeError(f"Invalid complex floating-point type size: {nbit}") - else: - raise TypeError(f"Invalid type name: {name}") - -def string2numpy(dtype_str: str) -> np.dtype: - return name_nbit2numpy(*split_name_nbit(dtype_str)) - -def numpy2string(dtype: np.dtype) -> str: - if dtype == np.int8: return 'i8' - elif dtype == np.int16: return 'i16' - elif dtype == np.int32: return 'i32' - elif dtype == np.int64: return 'i64' - elif dtype == np.uint8: return 'u8' - elif dtype == np.uint16: return 'u16' - elif dtype == np.uint32: return 'u32' - elif dtype == np.uint64: return 'u64' - elif dtype == np.float16: return 'f16' - elif dtype == np.float32: return 'f32' - elif dtype == np.float64: return 'f64' - elif dtype == np.float128: return 'f128' - elif dtype == np.complex64: return 'cf32' - elif dtype == np.complex128: return 'cf64' - elif dtype == np.complex256: return 'cf128' - else: raise TypeError(f"Unsupported dtype: {dtype}") - -def bifrost2string(dtype: _th.BFdtype_enum) -> str: - """ Convert bifrost BF_DTYPE integer code to ndarray string """ - typedict = { - _bf.BF_DTYPE_I8: 'i8', - _bf.BF_DTYPE_I16: 'i16', - _bf.BF_DTYPE_I32: 'i32', - _bf.BF_DTYPE_I64: 'i64', - _bf.BF_DTYPE_U8: 'u8', - _bf.BF_DTYPE_U16: 'u16', - _bf.BF_DTYPE_U32: 'u32', - _bf.BF_DTYPE_U64: 'u64', - _bf.BF_DTYPE_F16: 'f16', - _bf.BF_DTYPE_F32: 'f32', - _bf.BF_DTYPE_F64: 'f64', - _bf.BF_DTYPE_CI8: 'ci8', - _bf.BF_DTYPE_CI16: 'ci16', - _bf.BF_DTYPE_CI32: 'ci32', - _bf.BF_DTYPE_CF16: 'cf16', - _bf.BF_DTYPE_CF32: 'cf32', - _bf.BF_DTYPE_CF64: 'cf64', - } - if BF_FLOAT128_ENABLED: - typedict[_bf.BF_DTYPE_CF128] = 'cf128' - typedict[_bf.BF_DTYPE_F128] = 'f128' - - dtype_str = typedict.get(dtype) - if dtype_str is None: - raise ValueError("Could not convert dtype integer to string. Value not understood.") - else: - return dtype_str diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index d632b0897..98f9da658 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -40,9 +40,8 @@ import ctypes import numpy as np from bifrost.memory import raw_malloc, raw_free, raw_get_space, space_accessible -from bifrost.libbifrost import _bf, _check, _space2string +from bifrost.libbifrost import _bf, _th, _check, _space2string from bifrost import device -from bifrost.dtype import bifrost2string from bifrost.DataType import DataType from bifrost.Space import Space from bifrost.libbifrost_generated import struct_BFarray_ @@ -171,7 +170,7 @@ def __new__(cls, base=None, space=None, shape=None, dtype=None, shape = list(base.shape)[:ndim] strides = list(base.strides)[:ndim] space = _space2string(base.space) - dtype = bifrost2string(base.dtype) + dtype = _th.BFdtype_enum(base.dtype) return ndarray.__new__(cls, space=space, From 6faac9521dca809ced49b9820dc8710a00c65770 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 20 Jul 2023 19:41:43 -0600 Subject: [PATCH 0874/1155] Oops, somehow this didn't make it into last commit --- python/bifrost/blocks/binary_io.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/blocks/binary_io.py b/python/bifrost/blocks/binary_io.py index c34766166..bbcbba515 100644 --- a/python/bifrost/blocks/binary_io.py +++ b/python/bifrost/blocks/binary_io.py @@ -32,7 +32,7 @@ """ import numpy as np import bifrost.pipeline as bfp -from bifrost.dtype import name_nbit2numpy +from bifrost.DataType import DataType from bifrost import telemetry telemetry.track_module() @@ -76,7 +76,7 @@ def create_reader(self, filename): # Do a lookup on bifrost datatype to numpy datatype dcode = self.dtype.rstrip('0123456789') nbits = int(self.dtype[len(dcode):]) - np_dtype = name_nbit2numpy(dcode, nbits) + np_dtype = DataType(dcode+str(nbits)).as_numpy_dtype() return BinaryFileRead(filename, self.gulp_size, np_dtype) From 8cff5c27be4c7d8cae70d9f9f561a42e7d435b14 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 21 Jul 2023 10:11:49 -0600 Subject: [PATCH 0875/1155] Switch to `Run(exit=False)` for #214. --- test/test_scripts.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/test/test_scripts.py b/test/test_scripts.py index 333eb9ca9..03a061932 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -62,11 +62,7 @@ def _test_script(self, script): pylint_output = StringIO() reporter = TextReporter(pylint_output) - try: - Run([script, '-E', '--extension-pkg-whitelist=numpy'], reporter=reporter, do_exit=False) - except TypeError: - # Python2 catch - Run([script, '-E', '--extension-pkg-whitelist=numpy'], reporter=reporter) + Run([script, '-E', '--extension-pkg-whitelist=numpy'], reporter=reporter, exit=False) out = pylint_output.getvalue() out_lines = out.split('\n') From 26637e25413b0eb5e44ff92c3dd7e5e74f47dfe7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 21 Jul 2023 10:13:43 -0600 Subject: [PATCH 0876/1155] `.data` is 2D so try `.data[0,0]` for #214. --- test/test_block.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_block.py b/test/test_block.py index d7ab481b4..3382bea79 100644 --- a/test/test_block.py +++ b/test/test_block.py @@ -476,11 +476,11 @@ def monitor_block_sequences(array): if self.i > 1 and self.i < 11: with self.monitor_block.rings['out_1'].open_latest_sequence(guarantee=False) as curr_seq: span_gen = curr_seq.read(1) - self.all_sequence_starts.append(int(next(span_gen).data[0])) + self.all_sequence_starts.append(int(next(span_gen).data[0,0])) if self.i > 12: with self.monitor_block.rings['out_1'].open_latest_sequence(guarantee=False) as curr_seq: span_gen = curr_seq.read(1) - self.all_sequence_starts.append(int(next(span_gen).data[0])) + self.all_sequence_starts.append(int(next(span_gen).data[0,0])) self.i += 1 return array From f25ee950a436e3507d6e49f2d8b53d7147a0dd7d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 21 Jul 2023 10:23:14 -0600 Subject: [PATCH 0877/1155] Another str -> bytes-related Py2 catch. --- python/bifrost/map.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/python/bifrost/map.py b/python/bifrost/map.py index a74da1297..cb11189c3 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -110,15 +110,11 @@ def map(func_string: str, data: Dict[str,Any], # Slice an array with a scalar index bf.map("c(i) = a(i,k)", {'c': c, 'a': a, 'k': 7}, ['i'], shape=c.shape) """ - try: - func_string = func_string.encode() - if func_name is not None: - func_name = func_name.encode() - if extra_code is not None: - extra_code = extra_code.encode() - except AttributeError: - # Python2 catch - pass + func_string = func_string.encode() + if func_name is not None: + func_name = func_name.encode() + if extra_code is not None: + extra_code = extra_code.encode() narg = len(data) ndim = len(shape) if shape is not None else 0 arg_arrays = [] From fa3449b90dea8755d8f677e70beadb37fd0fca26 Mon Sep 17 00:00:00 2001 From: Danny Price Date: Thu, 10 Aug 2023 16:34:02 +0800 Subject: [PATCH 0878/1155] Update detect.py - add stokes_i Adding Stokes I and coherence modes, which were in a previous PR that was too difficult to merge --- python/bifrost/blocks/detect.py | 55 +++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/python/bifrost/blocks/detect.py b/python/bifrost/blocks/detect.py index 4ac1a81ab..0bdc00c47 100644 --- a/python/bifrost/blocks/detect.py +++ b/python/bifrost/blocks/detect.py @@ -1,5 +1,4 @@ - -# Copyright (c) 2016-2020, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,21 +24,14 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility from __future__ import absolute_import -import sys -if sys.version_info < (3,): - range = xrange - -from bifrost.map import map as bf_map + +import bifrost as bf from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType from copy import deepcopy -from bifrost import telemetry -telemetry.track_module() - class DetectBlock(TransformBlock): def __init__(self, iring, mode, axis=None, *args, **kwargs): @@ -62,7 +54,7 @@ def on_sequence(self, iseq): self.mode != 'scalar' and 'pol' in itensor['labels']): self.axis = itensor['labels'].index('pol') - elif isinstance(self.axis, str): + elif isinstance(self.axis, basestring): self.axis = itensor['labels'].index(self.axis) # Note: axis may be None here, which indicates single-pol mode ohdr = deepcopy(ihdr) @@ -71,8 +63,10 @@ def on_sequence(self, iseq): self.npol = otensor['shape'][self.axis] if self.npol not in [1, 2]: raise ValueError("Axis must have length 1 or 2") - if self.mode == 'stokes' and self.npol == 2: + if (self.mode == 'stokes' or self.mode == 'coherence') and self.npol == 2: otensor['shape'][self.axis] = 4 + if self.mode == 'stokes_i' and self.npol == 2: + otensor['shape'][self.axis] = 1 if 'labels' in otensor: otensor['labels'][self.axis] = 'pol' else: @@ -87,7 +81,7 @@ def on_data(self, ispan, ospan): idata = ispan.data odata = ospan.data if self.npol == 1: - bf_map("b = Complex(a).mag2()", {'a': idata, 'b': odata}) + bf.map("b = Complex(a).mag2()", {'a': idata, 'b': odata}) else: shape = idata.shape[:self.axis] + idata.shape[self.axis + 1:] inds = ['i%i' % i for i in range(idata.ndim)] @@ -115,32 +109,47 @@ def on_data(self, ispan, ospan): b(%s) = -2*xy.imag; """ % (inds_[0], inds_[1], inds_[0], inds_[1], inds_[2], inds_[3]) - bf_map(func, shape=shape, axis_names=inds, + elif self.mode == 'stokes_i': + func = """ + Complex x = a(%s); + Complex y = a(%s); + auto xx = x.mag2(); + auto yy = y.mag2(); + b(%s) = xx + yy; + """ % (inds_[0], inds_[1], + inds_[0]) + elif self.mode == 'coherence': + func = """ + Complex x = a(%s); + Complex y = a(%s); + auto xx = x.mag2(); + auto yy = y.mag2(); + auto xy = x.conj()*y; + b(%s) = xx; + b(%s) = yy; + b(%s) = xy.real; + b(%s) = xy.imag; + """ % (inds_[0], inds_[1], + inds_[0], inds_[1], inds_[2], inds_[3]) + bf.map(func, shape=shape, axis_names=inds, data={'a': ispan.data, 'b': ospan.data}) def detect(iring, mode, axis=None, *args, **kwargs): """Apply square-law detection to create polarization products. - Args: iring (Ring or Block): Input data source. mode (string): - ``'scalar': x -> real x.x*`` - ``'jones': x,y -> complex x.x* + 1j*y.y*, x.y*`` - ``'stokes': x,y -> real I, Q, U, V`` - + ``'stokes_I': x,y -> x.x* + y.y* (Stokes I)`` axis: Integer or string specifying the polarization axis. Defaults to 'pol'. Not used if mode = 'scalar'. *args: Arguments to ``bifrost.pipeline.TransformBlock``. **kwargs: Keyword Arguments to ``bifrost.pipeline.TransformBlock``. - **Tensor semantics**:: - Input: [..., 'pol', ...], dtype = any complex, space = CUDA Output: [..., 'pol', ...], dtype = real or complex, space = CUDA - Returns: DetectBlock: A new block instance. """ From 2441d5c9ec3ac39212ffe89f37fbfcdf15b3a283 Mon Sep 17 00:00:00 2001 From: Danny Price Date: Thu, 10 Aug 2023 16:46:47 +0800 Subject: [PATCH 0879/1155] Update sigproc.py with more telescopes The telescope -> integer ID scheme is insane, but I've added a few from https://github.com/SixByNine/sigproc/blob/28ba4f4539d41a8722c6ed194fa66e87bf4610fc/src/aliases.c#L52 and https://github.com/FRBs/sigpyproc3 and set MWA = 12 --- python/bifrost/sigproc.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index cfbd2f21f..b666d0d59 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -114,8 +114,17 @@ 6: 'GBT', 7: 'GMRT', 8: 'Effelsberg', + 9: 'Effelsberg LOFAR', + 11: 'Unknown', + 12: 'MWA', + 20: 'CHIME', 52: 'LWA-OV', - 53: 'LWA-SV'}) + 53: 'LWA-SV', + 64: 'MeerKAT', + 65: 'KAT-7', + 82: 'eMerlin'}) + + #the machine_id parameter names' translation _MACHINES = defaultdict(lambda: 'unknown', {0: 'FAKE', @@ -127,6 +136,8 @@ 6: 'SCAMP', 7: 'GMRTFB', 8: 'PULSAR2000', + 9: 'UNKNOWN', + 20: 'CHIME', 52: 'LWA-DP', 53: 'LWA-ADP'}) From 31efc6b0762694ea912b7da601d6ef07a1be7153 Mon Sep 17 00:00:00 2001 From: Danny Price Date: Thu, 10 Aug 2023 16:48:47 +0800 Subject: [PATCH 0880/1155] Update quantize.py - adding CUDA support I recall we tackled this a few years ago, perhaps in the ill-fated dcp-merge PR. --- python/bifrost/blocks/quantize.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index 309c3950d..6ccc854aa 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -1,4 +1,3 @@ - # Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -44,7 +43,7 @@ def __init__(self, iring, dtype, scale=1., self.scale = scale def define_valid_input_spaces(self): """Return set of valid spaces (or 'any') for each input""" - return ('system',) + return ('any') def on_sequence(self, iseq): ihdr = iseq.header ohdr = deepcopy(ihdr) @@ -75,10 +74,10 @@ def quantize(iring, dtype, scale=1., *args, **kwargs): **Tensor semantics**:: - Input: [...], dtype = [c]f32, space = SYSTEM - Output: [...], dtype = any (complex) integer type, space = SYSTEM + Input: [...], dtype = [c]f32, space = SYSTEM or CUDA + Output: [...], dtype = any (complex) integer type, space = SYSTEM or CUDA Returns: QuantizeBlock: A new block instance. """ - return QuantizeBlock(iring, dtype, *args, **kwargs) + return QuantizeBlock(iring, dtype, scale, *args, **kwargs) From c7983826d1a78c458afdd9919ec56a9d443c967d Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 16 Aug 2023 15:00:54 -0600 Subject: [PATCH 0881/1155] Doc improvement regarding bpm? --- docs/source/Create-a-pipeline.rst | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/source/Create-a-pipeline.rst b/docs/source/Create-a-pipeline.rst index 9616faa71..5e0e6f7c1 100644 --- a/docs/source/Create-a-pipeline.rst +++ b/docs/source/Create-a-pipeline.rst @@ -13,13 +13,9 @@ handles all the behind-the-scenes pipeline construction, giving you a high-level view at arranging a series of blocks. -We would like to construct the following pipeline, -which will serve to calculate the beats per minute (bpm) -of a song. As we will soon see, some intermediate -operations will be required to get the bpm, and -we can then write our own block. +We would like to construct a pipeline to perform the following: -1. Read in a ``.wav`` file to a ring buffer. +1. Read in a ``.wav`` audio file to a ring buffer. #. Channelize it with a GPU FFT. #. Write it back to disk as a filterbank file. @@ -39,7 +35,7 @@ This setup will require bifrost blocks which: #. Write this data to a filterbank file. This file could then be used to do things like calculating -the beats per minute of the song at different points of time, or +the beats per minute (bpm) of the song at different points of time, or could be used to just view the frequency components of the song with time. First, ensure you have a working Bifrost installation. You should From d2df8c306862c5eb90ac95b87fb163770d157515 Mon Sep 17 00:00:00 2001 From: dentalfloss1 Date: Fri, 18 Aug 2023 13:20:51 -0600 Subject: [PATCH 0882/1155] WIP --- python/bifrost/DataType.py | 2 +- python/bifrost/block.py | 10 +++++----- test/test_block.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/python/bifrost/DataType.py b/python/bifrost/DataType.py index a500e22d8..ffc6d1209 100644 --- a/python/bifrost/DataType.py +++ b/python/bifrost/DataType.py @@ -58,7 +58,7 @@ # E.g., np.ndarray([(0x10,), (0x32,)], dtype=ci4) # Special case # np.ndarray([ (0,1), (2,3)], dtype=ci8) # np.ndarray([ (0,1), (2,3)], dtype=ci16) -ci4 = np.dtype([('re_im', np.int8)]) +ci4 = np.dtype([('re_im', np.uint8)]) ci8 = np.dtype([('re', np.int8), ('im', np.int8)]) ci16 = np.dtype([('re', np.int16), ('im', np.int16)]) ci32 = np.dtype([('re', np.int32), ('im', np.int32)]) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index 9714188ce..31d865ac1 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -377,11 +377,11 @@ def __init__(self, sections): self.header['out_2']['shape'] = sections[1] def load_settings(self): """Set the gulp sizes appropriate to the input ring""" - self.gulp_size['in'] = np.product(self.header['in']['shape']) * self.header['in']['nbit'] // 8 - self.gulp_size['out_1'] = (self.gulp_size['in'] * np.product(self.header['out_1']['shape']) // - np.product(self.header['in']['shape'])) - self.gulp_size['out_2'] = (self.gulp_size['in'] * np.product(self.header['out_2']['shape']) // - np.product(self.header['in']['shape'])) + self.gulp_size['in'] = np.prod(self.header['in']['shape']) * self.header['in']['nbit'] // 8 + self.gulp_size['out_1'] = (self.gulp_size['in'] * np.prod(self.header['out_1']['shape']) // + np.prod(self.header['in']['shape'])) + self.gulp_size['out_2'] = (self.gulp_size['in'] * np.prod(self.header['out_2']['shape']) // + np.prod(self.header['in']['shape'])) def main(self): """Split the incoming ring into the outputs rings""" for inspan, outspan1, outspan2 in self.izip( diff --git a/test/test_block.py b/test/test_block.py index d7ab481b4..4f49539c4 100644 --- a/test/test_block.py +++ b/test/test_block.py @@ -476,11 +476,11 @@ def monitor_block_sequences(array): if self.i > 1 and self.i < 11: with self.monitor_block.rings['out_1'].open_latest_sequence(guarantee=False) as curr_seq: span_gen = curr_seq.read(1) - self.all_sequence_starts.append(int(next(span_gen).data[0])) + self.all_sequence_starts.append(int(next(span_gen).data[0][0])) if self.i > 12: with self.monitor_block.rings['out_1'].open_latest_sequence(guarantee=False) as curr_seq: span_gen = curr_seq.read(1) - self.all_sequence_starts.append(int(next(span_gen).data[0])) + self.all_sequence_starts.append(int(next(span_gen).data[0][0])) self.i += 1 return array From becbf48064dc6a333c724f0c2cb3aefcd8fccfac Mon Sep 17 00:00:00 2001 From: dentalfloss1 Date: Fri, 18 Aug 2023 13:56:24 -0600 Subject: [PATCH 0883/1155] Dep warning should be gone --- test/test_map.py | 2 +- test/test_resizing.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_map.py b/test/test_map.py index 749edcb36..165f1ef6d 100644 --- a/test/test_map.py +++ b/test/test_map.py @@ -162,7 +162,7 @@ def test_complex_integer(self): a_orig['im'] = np.random.randint(256, size=n) except ValueError: # ci4 is different - a_orig['re_im'] = np.random.randint(256, size=n) + a_orig['re_im'] = np.random.randint(256, size=n, dtype=np.uint8) for out_dtype in (in_dtype, 'cf32'): a = a_orig.copy(space='cuda') b = bf.ndarray(shape=(n,), dtype=out_dtype, space='cuda') diff --git a/test/test_resizing.py b/test/test_resizing.py index 731595094..ebf9493b0 100644 --- a/test/test_resizing.py +++ b/test/test_resizing.py @@ -45,7 +45,7 @@ def load_settings(self, input_header): self.shape = header_dict['shape'] size_of_float32 = 4 if self.gulp_size is None: - self.gulp_size = np.product(self.shape) * size_of_float32 + self.gulp_size = np.prod(self.shape) * size_of_float32 def iterate_ring_read(self, input_ring): """Iterate through one input ring @param[in] input_ring Ring to read through""" From 29a3858a981f041ea211e19476cbe54cd0c57f4b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 21 Aug 2023 16:19:27 -0600 Subject: [PATCH 0884/1155] Add support for cudaMemoryTypeUnregistred. --- src/memory.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/memory.cpp b/src/memory.cpp index 415847802..6fd3fd5e1 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -60,7 +60,20 @@ BFstatus bfGetSpace(const void* ptr, BFspace* space) { *space = BF_SPACE_SYSTEM; // WAR to avoid the ignored failure showing up later cudaGetLastError(); -#if defined(CUDA_VERSION) && CUDA_VERSION >= 10000 +#if defined(CUDA_VERSION) && CUDA_VERSION >= 11000 +} else { + switch( ptr_attrs.type ) { + case cudaMemoryTypeUnregistered: *space = BF_SPACE_SYSTEM; break + case cudaMemoryTypeHost: *space = BF_SPACE_CUDA_HOST; break; + case cudaMemoryTypeDevice: *space = BF_SPACE_CUDA; break; + case cudaMemoryTypeManaged: *space = BF_SPACE_CUDA_MANAGED; break; + default: { + // This should never be reached + BF_FAIL("Valid memoryType", BF_STATUS_INTERNAL_ERROR); + } + } + } +#elif defined(CUDA_VERSION) && CUDA_VERSION >= 10000 } else { switch( ptr_attrs.type ) { case cudaMemoryTypeHost: *space = BF_SPACE_SYSTEM; break; From 4a6a8a144b7f24c0e3086dec392098ea46687b98 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 21 Aug 2023 16:34:23 -0600 Subject: [PATCH 0885/1155] This might be the minimal fix. `cudaMemoryTypeUnregistered` wouldn't be returned on CUDA <11 (that would be an error condition instead). --- src/memory.cpp | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/memory.cpp b/src/memory.cpp index 6fd3fd5e1..d4ef81b7c 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -60,31 +60,19 @@ BFstatus bfGetSpace(const void* ptr, BFspace* space) { *space = BF_SPACE_SYSTEM; // WAR to avoid the ignored failure showing up later cudaGetLastError(); -#if defined(CUDA_VERSION) && CUDA_VERSION >= 11000 +#if defined(CUDA_VERSION) && CUDA_VERSION >= 10000 } else { switch( ptr_attrs.type ) { - case cudaMemoryTypeUnregistered: *space = BF_SPACE_SYSTEM; break - case cudaMemoryTypeHost: *space = BF_SPACE_CUDA_HOST; break; - case cudaMemoryTypeDevice: *space = BF_SPACE_CUDA; break; - case cudaMemoryTypeManaged: *space = BF_SPACE_CUDA_MANAGED; break; + case cudaMemoryTypeUnregistered: *space = BF_SPACE_SYSTEM; break + case cudaMemoryTypeHost: *space = BF_SPACE_CUDA_HOST; break; + case cudaMemoryTypeDevice: *space = BF_SPACE_CUDA; break; + case cudaMemoryTypeManaged: *space = BF_SPACE_CUDA_MANAGED; break; default: { // This should never be reached BF_FAIL("Valid memoryType", BF_STATUS_INTERNAL_ERROR); } } } -#elif defined(CUDA_VERSION) && CUDA_VERSION >= 10000 - } else { - switch( ptr_attrs.type ) { - case cudaMemoryTypeHost: *space = BF_SPACE_SYSTEM; break; - case cudaMemoryTypeDevice: *space = BF_SPACE_CUDA; break; - case cudaMemoryTypeManaged: *space = BF_SPACE_CUDA_MANAGED; break; - default: { - // This should never be reached - BF_FAIL("Valid memoryType", BF_STATUS_INTERNAL_ERROR); - } - } - } #else } else if( ptr_attrs.isManaged ) { *space = BF_SPACE_CUDA_MANAGED; From 5aa1f4b2c337f58e7503847de15344dde9165f62 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 21 Aug 2023 16:34:42 -0600 Subject: [PATCH 0886/1155] Date update. --- src/memory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/memory.cpp b/src/memory.cpp index d4ef81b7c..8676474aa 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. * * Redistribution and use in source and binary forms, with or without From af5a4017ee44d65485d3f190707530215dd64a2b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 21 Aug 2023 18:05:17 -0600 Subject: [PATCH 0887/1155] Missing semicolon. --- src/memory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/memory.cpp b/src/memory.cpp index 8676474aa..bd8819395 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -63,7 +63,7 @@ BFstatus bfGetSpace(const void* ptr, BFspace* space) { #if defined(CUDA_VERSION) && CUDA_VERSION >= 10000 } else { switch( ptr_attrs.type ) { - case cudaMemoryTypeUnregistered: *space = BF_SPACE_SYSTEM; break + case cudaMemoryTypeUnregistered: *space = BF_SPACE_SYSTEM; break; case cudaMemoryTypeHost: *space = BF_SPACE_CUDA_HOST; break; case cudaMemoryTypeDevice: *space = BF_SPACE_CUDA; break; case cudaMemoryTypeManaged: *space = BF_SPACE_CUDA_MANAGED; break; From 78b78f0e9321077ef5a381e1aa4cdd92c433d6f8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Aug 2023 09:34:53 -0600 Subject: [PATCH 0888/1155] do_exit -> exit --- test/test_scripts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_scripts.py b/test/test_scripts.py index 19aa119de..09276e263 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -64,7 +64,7 @@ def _test_script(self, script): pylint_output = StringIO() reporter = TextReporter(pylint_output) try: - Run([script, '-E', '--extension-pkg-whitelist=numpy'], reporter=reporter, do_exit=False) + Run([script, '-E', '--extension-pkg-whitelist=numpy'], reporter=reporter, exit=False) except TypeError: # Python2 catch Run([script, '-E', '--extension-pkg-whitelist=numpy'], reporter=reporter) From a5cb91d6f8dcf98c171dcd0fd0033603ffabd989 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 08:12:57 -0600 Subject: [PATCH 0889/1155] Use the TBF "unassigned" field to hold the number of stands. --- src/formats/tbf.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/formats/tbf.hpp b/src/formats/tbf.hpp index 289eda2b4..2c73b699d 100644 --- a/src/formats/tbf.hpp +++ b/src/formats/tbf.hpp @@ -37,7 +37,7 @@ struct __attribute__((packed)) tbf_hdr_type { uint32_t frame_count_word; uint32_t seconds_count; uint16_t first_chan; - uint16_t unassinged; + uint16_t nstand; uint64_t time_tag; }; @@ -55,6 +55,7 @@ class TBFHeaderFiller : virtual public PacketHeaderFiller { header->frame_count_word = htobe32((framecount & 0xFFFFFF) \ | ((uint32_t) 0x01 << 24)); header->first_chan = htons(hdr_base->src); + header->nstand = htobe16(hdr_base->nsrc); header->time_tag = htobe64(hdr_base->seq); } }; From c8c99b14c60300e8161572776d909b4619c31d9b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 08:19:44 -0600 Subject: [PATCH 0890/1155] Update the TBF format to take the number of stands in after an underscore. --- src/packet_writer.hpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 4b774661b..b2806b7fb 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -486,14 +486,16 @@ class BFpacketwriter_drx8_impl : public BFpacketwriter_impl { }; class BFpacketwriter_tbf_impl : public BFpacketwriter_impl { + int16_t _nstand; ProcLog _type_log; public: inline BFpacketwriter_tbf_impl(PacketWriterThread* writer, int nsamples) : BFpacketwriter_impl(writer, nullptr, nsamples, BF_DTYPE_CI4), - _type_log((std::string(writer->get_name())+"/type").c_str()) { + _nstand(0), _type_log((std::string(writer->get_name())+"/type").c_str()) { _filler = new TBFHeaderFiller(); - _type_log.update("type : %s\n", "tbf"); + _nstand = nsamples / 2 / 12; + _type_log.update("type : %s%i\n", "tbf", _nstand); } }; @@ -517,7 +519,7 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, } else if( std::string(format).substr(0, 5) == std::string("pbeam") ) { int nchan = std::atoi((std::string(format).substr(7, std::string(format).length())).c_str()); nsamples = 4*nchan; - } else if(std::string(format).substr(0, 4) == std::string("cor_") ) { + } else if( std::string(format).substr(0, 4) == std::string("cor_") ) { int nchan = std::atoi((std::string(format).substr(4, std::string(format).length())).c_str()); nsamples = 4*nchan; } else if( format == std::string("tbn") ) { @@ -526,8 +528,9 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, nsamples = 4096; } else if( format == std::string("drx8") ) { nsamples = 4096; - } else if( format == std::string("tbf") ) { - nsamples = 6144; + } else if( std::string(format).substr(0, 4) == std::string("tbf_") ) { + int nstand = std::atoi((std::string(format).substr(4, std::string(format).length())).c_str()); + nsamples = nstand*2*12; } PacketWriterMethod* method; @@ -577,7 +580,7 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, } else if( format == std::string("drx8") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_drx8_impl(writer, nsamples), *obj = 0); - } else if( format == std::string("tbf") ) { + } else if( std::string(format).substr(0, 4) == std::string("tbf_") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_tbf_impl(writer, nsamples), *obj = 0); } else { From 30a1aa6228125a619347cae8b1e01687ceed166e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 13:35:11 -0600 Subject: [PATCH 0891/1155] Date fix. --- python/bifrost/udp_transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/udp_transmit.py b/python/bifrost/udp_transmit.py index 5bb4c0060..f7bed1b71 100644 --- a/python/bifrost/udp_transmit.py +++ b/python/bifrost/udp_transmit.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2017-202, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. # Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without From b5f503a7ca8cd0808330c00581ed8662703a07b0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 13:40:18 -0600 Subject: [PATCH 0892/1155] Require Python 3.6+. --- python/setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/setup.py b/python/setup.py index 3c0ba4c22..d7546bf85 100755 --- a/python/setup.py +++ b/python/setup.py @@ -63,6 +63,7 @@ url='https://github.com/ledatelescope/bifrost', packages=find_packages(), scripts=scripts, + python_requires='>=3.6', install_requires=[ "numpy>=1.8.1", "contextlib2>=0.4.0", From a8dbc15d016207e651e0dd2d8571264eed0ea212 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 13:56:32 -0600 Subject: [PATCH 0893/1155] More f strings. --- python/bifrost/block.py | 6 +++--- python/bifrost/map.py | 10 +++++----- python/bifrost/ndarray.py | 5 ++--- python/bifrost/pipeline.py | 5 ++--- python/bifrost/sigproc2.py | 4 ++-- 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index 99c4d916e..16db2cc44 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -1010,7 +1010,7 @@ def __init__(self, generator, outputs=1, grab_headers=False, changing=True): equal to the number of outgoing rings attached to this block. @param[in] changing Whether or not the arrays will be different in shape""" super(NumpySourceBlock, self).__init__() - outputs = ['out_%d' % (i + 1) for i in range(outputs)] + outputs = [f"out_{i+1}" for i in range(outputs)] self.ring_names = {} for output_name in outputs: ring_description = "Output number " + output_name[4:] @@ -1026,7 +1026,7 @@ def calculate_output_settings(self, arrays): @param[in] arrays The arrays outputted by self.generator""" for index in range(len(self.ring_names)): assert isinstance(arrays[index], np.ndarray) - ring_name = 'out_%d' % (index + 1) + ring_name = f"out_{index+1}" self.header[ring_name] = { 'dtype': str(arrays[index].dtype), 'shape': list(arrays[index].shape), @@ -1038,7 +1038,7 @@ def load_user_headers(self, headers, arrays): @param[in] headers List of dictionaries from self.generator for each ring's sequence header""" for i, header in enumerate(headers): - ring_name = 'out_%d' % (i + 1) + ring_name = f"out_{i+1}" for parameter in header: self.header[ring_name][parameter] = header[parameter] if 'dtype' in header: diff --git a/python/bifrost/map.py b/python/bifrost/map.py index cb11189c3..4a50d1b2f 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -152,16 +152,16 @@ def list_map_cache() -> None: version = fh.read() mapcache, runtime, driver = version.split(None, 2) mapcache = int(mapcache, 10) - mapcache = "%i.%i" % (mapcache//1000, (mapcache//10) % 1000) + mapcache = f"{mapcache//1000}.{mapcache//10) % 1000}" runtime = int(runtime, 10) - runtime = "%i.%i" % (runtime//1000, (runtime//10) % 1000) + runtime = f"{runtime//1000}.{runtime//10) % 1000}" driver = int(driver, 10) - driver = "%i.%i" % (driver//1000, (driver//10) % 1000) + driver = f"{driver//1000}.{driver//10) % 1000}" entries = glob.glob(os.path.join(cache_path, '*.inf')) - output += "\nCache version: %s (map cache) %s (runtime), %s (driver)" % (mapcache, runtime, driver) - output += "\nCache entries: %i" % len(entries) + output += f"\nCache version: {mapcache} (map cache) {runtime} (runtime), {driver} (driver)" + output += f"\nCache entries: {len(entries)}" except OSError: pass diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 98f9da658..ba9a88385 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -204,9 +204,8 @@ def __new__(cls, base=None, space=None, shape=None, dtype=None, base = base.astype(dtype.as_numpy_dtype()) base = ndarray(base) # View base as bf.ndarray if dtype is not None and base.bf.dtype != dtype: - raise TypeError('Unable to convert type %s to %s during ' - 'array construction' % - (base.bf.dtype, dtype)) + raise TypeError(f"Unable to convert type {base.bf.dtype} to {dtype} during " + "array construction") #base = base.view(cls #if dtype is not None: # base = base.astype(DataType(dtype).as_numpy_dtype()) diff --git a/python/bifrost/pipeline.py b/python/bifrost/pipeline.py index 9058b0b67..c8d14a6fc 100644 --- a/python/bifrost/pipeline.py +++ b/python/bifrost/pipeline.py @@ -282,7 +282,7 @@ def _handle_signal_shutdown(self, signum, frame): reversed(sorted(signal.__dict__.items())) if v.startswith('SIG') and not v.startswith('SIG_')) - warnings.warn("Received signal %i %s, shutting down pipeline" % (signum, SIGNAL_NAMES[signum]), RuntimeWarning) + warnings.warn(f"Received signal {signum} {SIGNAL_NAMES[signum]}, shutting down pipeline", RuntimeWarning) self.shutdown() def __enter__(self): thread_local.pipeline_stack.append(self) @@ -340,8 +340,7 @@ def __init__(self, irings: List[Union["Block",Ring]], valid_inp_spaces = self._define_valid_input_spaces() for i, (iring, valid_spaces) in enumerate(zip(irings, valid_inp_spaces)): if not memory.space_accessible(iring.space, valid_spaces): - raise ValueError("Block %s input %i's space must be accessible from one of: %s" % - (self.name, i, str(valid_spaces))) + raise ValueError(f"Block {self.name} input {i}'s space must be accessible from one of: {valid_spaces}") self.orings = [] # Update this in subclass constructors self.shutdown_event = threading.Event() self.bind_proclog = ProcLog(self.name + "/bind") diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index f2b07086f..46bae42a8 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -337,7 +337,7 @@ def read(self, nframe_or_start: int, end: Optional[int]=None) -> np.ndarray: start = nframe_or_start or 0 if start * self.frame_size * self.nbit % 8 != 0: raise ValueError("Start index must be aligned with byte boundary " + - "(idx=%i, nbit=%i)" % (start, self.nbit)) + f"(idx={start}, nbit={self.nbit})") self.seek(start * self.frame_size * self.nbit // 8) if end == -1: end = self.nframe() @@ -347,7 +347,7 @@ def read(self, nframe_or_start: int, end: Optional[int]=None) -> np.ndarray: if self.nbit < 8: if nframe * self.frame_size * self.nbit % 8 != 0: raise ValueError("No. frames must correspond to whole number of bytes " + - "(idx=%i, nbit=%i)" % (nframe, self.nbit)) + f"(idx={nframe}, nbit={self.nbit})") #data = np.fromfile(self.f, np.uint8, # nframe * self.frame_size * self.nbit // 8) #requested_nbyte = nframe * self.frame_nbyte From 848a8d0e7b3336f4b135271554297a2ed425b745 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 13:58:27 -0600 Subject: [PATCH 0894/1155] Preserve spacing. --- python/bifrost/block.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index 16db2cc44..ce61b6935 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -1010,7 +1010,7 @@ def __init__(self, generator, outputs=1, grab_headers=False, changing=True): equal to the number of outgoing rings attached to this block. @param[in] changing Whether or not the arrays will be different in shape""" super(NumpySourceBlock, self).__init__() - outputs = [f"out_{i+1}" for i in range(outputs)] + outputs = [f"out_{i + 1}" for i in range(outputs)] self.ring_names = {} for output_name in outputs: ring_description = "Output number " + output_name[4:] @@ -1026,7 +1026,7 @@ def calculate_output_settings(self, arrays): @param[in] arrays The arrays outputted by self.generator""" for index in range(len(self.ring_names)): assert isinstance(arrays[index], np.ndarray) - ring_name = f"out_{index+1}" + ring_name = f"out_{index + 1}" self.header[ring_name] = { 'dtype': str(arrays[index].dtype), 'shape': list(arrays[index].shape), @@ -1038,7 +1038,7 @@ def load_user_headers(self, headers, arrays): @param[in] headers List of dictionaries from self.generator for each ring's sequence header""" for i, header in enumerate(headers): - ring_name = f"out_{i+1}" + ring_name = f"out_{i + 1}" for parameter in header: self.header[ring_name][parameter] = header[parameter] if 'dtype' in header: From 808422d77589d6284f8f4005d291ade6ed319671 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 14:04:26 -0600 Subject: [PATCH 0895/1155] A few more f strings. --- python/bifrost/views/basic_views.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/python/bifrost/views/basic_views.py b/python/bifrost/views/basic_views.py index d67e17a89..2e525af53 100644 --- a/python/bifrost/views/basic_views.py +++ b/python/bifrost/views/basic_views.py @@ -114,13 +114,12 @@ def header_transform(hdr, axis=axis): tensor = hdr['_tensor'] specified_axis = axis if isinstance(axis, str): - specified_axis = "'%s'" % specified_axis + specified_axis = f"'{specified_axis}'" axis = tensor['labels'].index(axis) if axis < 0: axis += len(tensor['shape']) + 1 if tensor['shape'][axis] != 1: - raise ValueError("Cannot delete non-unitary axis %s with shape %i" - % (specified_axis, tensor['shape'][axis])) + raise ValueError(f"Cannot delete non-unitary axis {specified_axis} with shape {tensor['shape'][axis]}") del tensor['shape'][axis] if 'labels' in tensor: del tensor['labels'][axis] @@ -160,8 +159,7 @@ def header_transform(hdr, axis=axis, n=n, label=label): else: # Axis is not frame axis if shape[axis] % n: - raise ValueError("Split does not evenly divide axis (%i // %i)" % - (tensor['shape'][axis], n)) + raise ValueError(f"Split does not evenly divide axis ({tensor['shape'][axis]} // {n})") shape[axis] //= n shape.insert(axis + 1, n) if 'units' in tensor: @@ -205,7 +203,7 @@ def header_transform(hdr, axis1=axis1, axis2=axis2, label=label): scale2 = convert_units(scale2, units2, units1) if not isclose(scale1, n * scale2): raise ValueError("Scales of merge axes do not line up: " - "%f != %f" % (scale1, n * scale2)) + f"{scale1} != {n * scale2}") tensor['scales'][axis1][1] = scale2 del tensor['scales'][axis2] del tensor['units'][axis2] From e01355f2b95b8be3101a11620e4800a707453b60 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 14:12:57 -0600 Subject: [PATCH 0896/1155] Add a Python version check to configure as well. --- configure | 14 +++++++++++++- configure.ac | 7 ++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 0ad981380..d71011c7d 100755 --- a/configure +++ b/configure @@ -22310,7 +22310,19 @@ fi fi if test x${PYTHON} != xno then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $PYTHON is version 3.6 or later" >&5 +printf %s "checking if $PYTHON is version 3.6 or later... " >&6; } + if ! ${PYTHON} -c "import sys; assert(sys.version_info >= (3,6,0))" 2>/dev/null +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 +printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 printf %s "checking whether $PYTHON as ctypesgen... " >&6; } if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null then : diff --git a/configure.ac b/configure.ac index 9aebfd263..50f6ebe88 100644 --- a/configure.ac +++ b/configure.ac @@ -232,7 +232,12 @@ AS_IF([test x$enable_python != xno], AS_IF([test x${PYTHON3} != xno], [AC_SUBST([PYTHON], [$PYTHON3])])]) AS_IF([test x${PYTHON} != xno], - [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) + [AC_MSG_CHECKING([if $PYTHON is version 3.6 or later]) + AS_IF([! ${PYTHON} -c "import sys; assert(sys.version_info >= (3,6,0))" 2>/dev/null], + [AC_MSG_RESULT([no]) + AC_MSG_WARN([python module will not be built])], + [AC_MSG_RESULT([yes])]) + AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) AS_IF([! ${PYTHON} -c "import ctypesgen" 2>/dev/null], [AC_MSG_RESULT([no]) AC_MSG_WARN([python module will not be built])], From 82cd44823f805d4ade59455c791270a010bb8660 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 14:23:16 -0600 Subject: [PATCH 0897/1155] a or b can by None. --- python/bifrost/linalg.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/bifrost/linalg.py b/python/bifrost/linalg.py index 368e33049..339f3deb9 100644 --- a/python/bifrost/linalg.py +++ b/python/bifrost/linalg.py @@ -25,6 +25,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from typing import Optional + from bifrost.libbifrost import _bf, _check, BifrostObject from bifrost.ndarray import asarray from bifrost.ndarray import ndarray @@ -35,7 +37,7 @@ class LinAlg(BifrostObject): def __init__(self): BifrostObject.__init__(self, _bf.bfLinAlgCreate, _bf.bfLinAlgDestroy) - def matmul(self, alpha: float, a: ndarray, b: ndarray, beta: float, c: ndarray) -> ndarray: + def matmul(self, alpha: float, a: Optional[ndarray], b: Optional[ndarray], beta: float, c: ndarray) -> ndarray: """Computes: c = alpha*a.b + beta*c or if b is None: From 523c8a4794617334aa7c7539b718ae50242f30bf Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 14:24:02 -0600 Subject: [PATCH 0898/1155] Reorder imports. --- python/bifrost/linalg.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/linalg.py b/python/bifrost/linalg.py index 339f3deb9..3c7ffc40d 100644 --- a/python/bifrost/linalg.py +++ b/python/bifrost/linalg.py @@ -25,12 +25,12 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from typing import Optional - from bifrost.libbifrost import _bf, _check, BifrostObject from bifrost.ndarray import asarray from bifrost.ndarray import ndarray +from typing import Optional + from bifrost import telemetry telemetry.track_module() From 5c4bdb1584a36508c3e3b486e32f01086f9b9a34 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 14:25:08 -0600 Subject: [PATCH 0899/1155] Drop encoding line. --- python/bifrost/udp_transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/udp_transmit.py b/python/bifrost/udp_transmit.py index f7bed1b71..f4f183c6f 100644 --- a/python/bifrost/udp_transmit.py +++ b/python/bifrost/udp_transmit.py @@ -1,6 +1,6 @@ -# -*- coding: utf-8 -*- + # Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2021, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2023, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions From 12313693ce55de97c1e11f278ea43640adb225be Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 25 Aug 2023 14:41:37 -0600 Subject: [PATCH 0900/1155] Ugh. --- python/bifrost/map.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/bifrost/map.py b/python/bifrost/map.py index 4a50d1b2f..8f3988f71 100644 --- a/python/bifrost/map.py +++ b/python/bifrost/map.py @@ -152,11 +152,11 @@ def list_map_cache() -> None: version = fh.read() mapcache, runtime, driver = version.split(None, 2) mapcache = int(mapcache, 10) - mapcache = f"{mapcache//1000}.{mapcache//10) % 1000}" + mapcache = f"{mapcache//1000}.{(mapcache//10) % 1000}" runtime = int(runtime, 10) - runtime = f"{runtime//1000}.{runtime//10) % 1000}" + runtime = f"{runtime//1000}.{(runtime//10) % 1000}" driver = int(driver, 10) - driver = f"{driver//1000}.{driver//10) % 1000}" + driver = f"{driver//1000}.{(driver//10) % 1000}" entries = glob.glob(os.path.join(cache_path, '*.inf')) From cf4dbc469b3a6d9c444d8305e053efc92e1cce81 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 10:40:27 -0600 Subject: [PATCH 0901/1155] Drop the frame size since it is now variable. --- src/formats/tbf.hpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/formats/tbf.hpp b/src/formats/tbf.hpp index 2c73b699d..af90066ce 100644 --- a/src/formats/tbf.hpp +++ b/src/formats/tbf.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -30,8 +30,6 @@ #include "base.hpp" -#define TBF_FRAME_SIZE 6168 - struct __attribute__((packed)) tbf_hdr_type { uint32_t sync_word; uint32_t frame_count_word; From ff06f4539f41f9b9d07169fe9b7af2519ffb9cb2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 16:10:15 -0600 Subject: [PATCH 0902/1155] Only check for ctypesgen if we have an allowed Python version. --- configure | 7 ++++++- configure.ac | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/configure b/configure index d71011c7d..b94108dcb 100755 --- a/configure +++ b/configure @@ -22318,11 +22318,16 @@ then : printf "%s\n" "no" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} + PYTHON=no + else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 +fi + if test x${PYTHON} != xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as ctypesgen" >&5 printf %s "checking whether $PYTHON as ctypesgen... " >&6; } if ! ${PYTHON} -c "import ctypesgen" 2>/dev/null then : diff --git a/configure.ac b/configure.ac index 50f6ebe88..062f52bca 100644 --- a/configure.ac +++ b/configure.ac @@ -235,9 +235,11 @@ AS_IF([test x$enable_python != xno], [AC_MSG_CHECKING([if $PYTHON is version 3.6 or later]) AS_IF([! ${PYTHON} -c "import sys; assert(sys.version_info >= (3,6,0))" 2>/dev/null], [AC_MSG_RESULT([no]) - AC_MSG_WARN([python module will not be built])], - [AC_MSG_RESULT([yes])]) - AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) + AC_MSG_WARN([python module will not be built]) + AC_SUBST([PYTHON], [no])], + [AC_MSG_RESULT([yes])])]) + AS_IF([test x${PYTHON} != xno], + [AC_MSG_CHECKING([whether $PYTHON as ctypesgen]) AS_IF([! ${PYTHON} -c "import ctypesgen" 2>/dev/null], [AC_MSG_RESULT([no]) AC_MSG_WARN([python module will not be built])], From f5b0b02cb1cc8cd446a3f4d90cfc824276c56b64 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 16:17:15 -0600 Subject: [PATCH 0903/1155] Drop shell=True. --- tools/pipeline2dot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/pipeline2dot.py b/tools/pipeline2dot.py index 4c436387d..b9652796a 100755 --- a/tools/pipeline2dot.py +++ b/tools/pipeline2dot.py @@ -62,7 +62,7 @@ def get_process_details(pid): data = {'user':'', 'cpu':0.0, 'mem':0.0, 'etime':'00:00', 'threads':0} try: - output = subprocess.check_output(f"ps o user,pcpu,pmem,etime,nlwp {pid}", shell=True) + output = subprocess.check_output(['ps', 'o', 'user,pcpu,pmem,etime,nlwp', str(pid)]) output = output.decode() output = output.split('\n')[1] fields = output.split(None, 4) From ab80ce3a5548811872f0baabe395131e74682816 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 16:59:50 -0600 Subject: [PATCH 0904/1155] Add back in telemetry. --- python/bifrost/blocks/detect.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python/bifrost/blocks/detect.py b/python/bifrost/blocks/detect.py index 234351fe3..d25d6482a 100644 --- a/python/bifrost/blocks/detect.py +++ b/python/bifrost/blocks/detect.py @@ -31,6 +31,9 @@ from copy import deepcopy +from bifrost import telemetry +telemetry.track_module() + class DetectBlock(TransformBlock): def __init__(self, iring, mode, axis=None, *args, **kwargs): From 5a93e5d4e906694cf754ac4f1015640a710ffc02 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 17:06:11 -0600 Subject: [PATCH 0905/1155] Missed a 'shell=True' in #216. --- tools/like_ps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/like_ps.py b/tools/like_ps.py index 1ae8a8d77..21440e068 100755 --- a/tools/like_ps.py +++ b/tools/like_ps.py @@ -62,7 +62,7 @@ def get_process_details(pid): data = {'user':'', 'cpu':0.0, 'mem':0.0, 'etime':'00:00', 'threads':0} try: - output = subprocess.check_output(f"ps o user,pcpu,pmem,etime,nlwp {pid}", shell=True) + output = subprocess.check_output(['ps', 'o', 'user,pcpu,pmem,etime,nlwp', str(pid)]) output = output.decode() output = output.split('\n')[1] fields = output.split(None, 4) From fe8568c994bb714fda0e95e5d3ddfd9b2c5c09c5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 18:34:15 -0600 Subject: [PATCH 0906/1155] Unpack also works on the GPU. --- python/bifrost/blocks/unpack.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/bifrost/blocks/unpack.py b/python/bifrost/blocks/unpack.py index 4baa6a4d0..6bbf7b243 100644 --- a/python/bifrost/blocks/unpack.py +++ b/python/bifrost/blocks/unpack.py @@ -46,7 +46,7 @@ def __init__(self, iring: Ring, dtype: Union[str,np.dtype], align_msb: bool=Fals self.align_msb = align_msb def define_valid_input_spaces(self) -> Tuple[str]: """Return set of valid spaces (or 'any') for each input""" - return ('system',) + return ('any',) def on_sequence(self, iseq: ReadSequence) -> Dict[str,Any]: ihdr = iseq.header ohdr = deepcopy(ihdr) @@ -76,8 +76,8 @@ def unpack(iring: Ring, dtype: Union[str,np.dtype], *args, **kwargs) -> UnpackBl **Tensor semantics**:: - Input: [...], dtype = one of: i/u2, i/u4, ci2, ci4, space = SYSTEM - Output: [...], dtype = i8 or ci8 (matching input), space = SYSTEM + Input: [...], dtype = one of: i/u2, i/u4, ci2, ci4, space = SYSTEM or CUDA + Output: [...], dtype = i8 or ci8 (matching input), space = SYSTEM or CUDA Returns: UnpackBlock: A new block instance. From 53be8aa365e277e7d87202c60364e815d28f0325 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 18:40:29 -0600 Subject: [PATCH 0907/1155] Add type hints. --- python/bifrost/blocks/quantize.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index 433409a00..5cc54b10b 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -28,6 +28,7 @@ from bifrost.quantize import quantize as bf_quantize from bifrost.pipeline import TransformBlock from bifrost.DataType import DataType +from bifrost.ring2 import Ring, ReadSequence, ReadSpan, WriteSpan from copy import deepcopy @@ -35,15 +36,15 @@ telemetry.track_module() class QuantizeBlock(TransformBlock): - def __init__(self, iring, dtype, scale=1., + def __init__(self, iring: Ring, dtype: Union[str,np.dtype], scale: float=1., *args, **kwargs): super(QuantizeBlock, self).__init__(iring, *args, **kwargs) self.dtype = dtype self.scale = scale - def define_valid_input_spaces(self): + def define_valid_input_spaces(self) -> Tuple[str]: """Return set of valid spaces (or 'any') for each input""" return ('any') - def on_sequence(self, iseq): + def on_sequence(self, iseq: ReadSequence) -> Dict[str,Any]: ihdr = iseq.header ohdr = deepcopy(ihdr) itype = DataType(ihdr['_tensor']['dtype']) @@ -56,12 +57,12 @@ def on_sequence(self, iseq): otype = self.dtype ohdr['_tensor']['dtype'] = otype return ohdr - def on_data(self, ispan, ospan): + def on_data(self, ispan: ReadSpan, ospan: WriteSpan) -> None: idata = ispan.data odata = ospan.data bf_quantize(idata, odata, self.scale) -def quantize(iring, dtype, scale=1., *args, **kwargs): +def quantize(iring: Ring, dtype: Union[str,np.dtype], scale: float=1., *args, **kwargs) -> QuantizeBlock: """Apply a requantization of bit depth for the data. Args: From 1c5ed5c5ee6e0e62eaa4d9e4c17900348b2f6d59 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 18:43:32 -0600 Subject: [PATCH 0908/1155] Missing import. --- python/bifrost/quantize.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/bifrost/quantize.py b/python/bifrost/quantize.py index 1f9f1df68..985f7b92e 100644 --- a/python/bifrost/quantize.py +++ b/python/bifrost/quantize.py @@ -29,6 +29,8 @@ from bifrost.ndarray import asarray from bifrost.ndarray import ndarray +from typing import Any, Dict, Tuple, Union + from bifrost import telemetry telemetry.track_module() From 67242686cb7423806a5455e5e7f8267440a13657 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 18:49:44 -0600 Subject: [PATCH 0909/1155] Wrong file... --- python/bifrost/quantize.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/python/bifrost/quantize.py b/python/bifrost/quantize.py index 985f7b92e..1f9f1df68 100644 --- a/python/bifrost/quantize.py +++ b/python/bifrost/quantize.py @@ -29,8 +29,6 @@ from bifrost.ndarray import asarray from bifrost.ndarray import ndarray -from typing import Any, Dict, Tuple, Union - from bifrost import telemetry telemetry.track_module() From 2ea2911d91638a7d909d5e54ddcbdb30eae48abe Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 18:50:35 -0600 Subject: [PATCH 0910/1155] Right file... --- python/bifrost/blocks/quantize.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index 5cc54b10b..0bfce87a2 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -32,6 +32,8 @@ from copy import deepcopy +from typing import Any, Dict, Tuple, Union + from bifrost import telemetry telemetry.track_module() From e9ffd7c395ae511b1a0aafdf6bd1bd6a225ada7e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 18:52:51 -0600 Subject: [PATCH 0911/1155] Ugh, another missing import. --- python/bifrost/blocks/quantize.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index 0bfce87a2..f82e825e1 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -31,6 +31,7 @@ from bifrost.ring2 import Ring, ReadSequence, ReadSpan, WriteSpan from copy import deepcopy +import numpy as np from typing import Any, Dict, Tuple, Union From 74e620fcb0778b889039b0df4fca35ebdbbcd6e5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 19:08:36 -0600 Subject: [PATCH 0912/1155] Reallocate on resize to keep the references clean. --- python/bifrost/sigproc2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index 46bae42a8..d568ea6ad 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -353,12 +353,12 @@ def read(self, nframe_or_start: int, end: Optional[int]=None) -> np.ndarray: #requested_nbyte = nframe * self.frame_nbyte requested_nbyte = nframe * self.frame_nbyte * self.nbit // 8 if self.buf.nbytes != requested_nbyte: - self.buf.resize(requested_nbyte) + self.buf = np.resize(self.buf, requested_nbyte) nbyte = self.f.readinto(self.buf) if nbyte * 8 % self.frame_nbit != 0: raise IOError("File read returned incomplete frame (truncated file?)") if nbyte < self.buf.nbytes: - self.buf.resize(nbyte) + self.buf = np.resize(self.buf, nbyte) nframe = nbyte * 8 // (self.frame_size * self.nbit) data = self.buf data = unpack(data, self.nbit) From 5853bc100bb276baba06fa597dc7738df913fb7e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 28 Aug 2023 19:13:09 -0600 Subject: [PATCH 0913/1155] Updated the telescope and machines list to better match sigproc.py. --- python/bifrost/sigproc2.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index 46bae42a8..a30357600 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -113,11 +113,17 @@ 6: 'GBT', 7: 'GMRT', 8: 'Effelsberg', - 9: 'ATA', + 9: 'Effelsberg LOFAR', + 11: 'Unknown', + 12: 'MWA', + 20: 'CHIME', 10: 'UTR-2', 11: 'LOFAR', 52: 'LWA-OV', - 53: 'LWA-SV'}) + 53: 'LWA-SV', + 64: 'MeerKAT', + 65: 'KAT-7', + 82: 'eMerlin'}) _machines = defaultdict(lambda: 'unknown', {0: 'FAKE', 1: 'PSPM', @@ -128,6 +134,8 @@ 6: 'SCAMP', 7: 'GMRTFB', # aka GBT Pulsar Spigot, SPIGOT 8: 'PULSAR2000', + 9: 'UNKNOWN', + 20: 'CHIME', 11: 'BG/P', 12: "PDEV", 20: 'GUPPI', From c9665032f79977f35024ef2cd9c77c1657f13b1b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 5 Sep 2023 10:50:48 -0600 Subject: [PATCH 0914/1155] Add a helpful message for https://github.com/ledatelescope/bifrost/issues/196. --- src/ib_verbs.hpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 84bf0bc25..d30ef67a1 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -553,8 +553,8 @@ class Verbs { qp_init.send_cq = _verbs.send_cq[i]; qp_init.recv_cq = _verbs.cq[i]; _verbs.qp[i] = ibv_create_qp(_verbs.pd, &qp_init); - check_null(_verbs.qp[i], - "create queue pair"); + check_null_qp(_verbs.qp[i], + "create queue pair"); // Transition queue pair to INIT state ibv_qp_attr qp_attr; @@ -961,6 +961,23 @@ class Verbs { throw Verbs::Error(ss.str()); } } + inline void check_null_qp(void* ptr, std::string what) { + if( ptr == NULL ) { + destroy_flows(); + destroy_queues(); + destroy_buffers(); + destroy_context(); + + std::stringstream ss; + ss << "Failed to " << what << ": (" << errno << ") " + << strerror(errno); + if( errno == EPERM ) { + ss << " Do you need to set 'options ibverbs disable_raw_qp_enforcement=1' " + << "or add the CAP_NET_RAW capability?"; + } + throw Verbs::Error(ss.str()); + } + } public: class Error : public std::runtime_error { typedef std::runtime_error super_t; From 1440c126cc5d263bf16130aadaab196d43aff3d8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Sep 2023 14:37:59 -0600 Subject: [PATCH 0915/1155] Have _get_space() use raw_get_space(). --- python/bifrost/memory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/memory.py b/python/bifrost/memory.py index 5d89d8c9b..7160bb0f6 100644 --- a/python/bifrost/memory.py +++ b/python/bifrost/memory.py @@ -63,7 +63,7 @@ def alignment() -> int: # **TODO: Deprecate below here! def _get_space(arr: Any) -> str: - try: return arr.flags['SPACE'] + try: return raw_get_space(arr.ctypes.data) except KeyError: return 'system' # TODO: Dangerous to assume? # Note: These functions operate on numpy or GPU arrays From b8de9cd80ad45cc9f829cb7a9cb1cb04820bdf03 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Sep 2023 14:39:55 -0600 Subject: [PATCH 0916/1155] Adjust type hints. --- python/bifrost/memory.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/bifrost/memory.py b/python/bifrost/memory.py index 7160bb0f6..aa57a1001 100644 --- a/python/bifrost/memory.py +++ b/python/bifrost/memory.py @@ -67,7 +67,7 @@ def _get_space(arr: Any) -> str: except KeyError: return 'system' # TODO: Dangerous to assume? # Note: These functions operate on numpy or GPU arrays -def memcpy(dst: int, src: int) -> None: +def memcpy(dst: "bifrost.ndarray", src: "bifrost.ndarray") -> None: assert(dst.flags['C_CONTIGUOUS']) assert(src.shape == dst.shape) dst_space = _string2space(_get_space(dst)) @@ -77,7 +77,7 @@ def memcpy(dst: int, src: int) -> None: src.ctypes.data, src_space, count)) return dst -def memcpy2D(dst: int, src: int) -> None: +def memcpy2D(dst: "bifrost.ndarray", src: "bifrost.ndarray") -> None: assert(len(dst.shape) == 2) assert(src.shape == dst.shape) dst_space = _string2space(_get_space(dst)) @@ -87,12 +87,12 @@ def memcpy2D(dst: int, src: int) -> None: _check(_bf.bfMemcpy2D(dst.ctypes.data, dst.strides[0], dst_space, src.ctypes.data, src.strides[0], src_space, width_bytes, height)) -def memset(dst: int, val: int=0) -> None: +def memset(dst: "bifrost.ndarray", val: int=0) -> None: assert(dst.flags['C_CONTIGUOUS']) space = _string2space(_get_space(dst)) count = dst.nbytes _check(_bf.bfMemset(dst.ctypes.data, space, val, count)) -def memset2D(dst: int, val: int=0) -> None: +def memset2D(dst: "bifrost.ndarray", val: int=0) -> None: assert(len(dst.shape) == 2) space = _string2space(_get_space(dst)) height, width = dst.shape From 21ffe549f50bd21adaa4970a134262f1701277be Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 6 Sep 2023 16:31:41 -0600 Subject: [PATCH 0917/1155] Typo. --- share/bifrost.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/bifrost.m4 b/share/bifrost.m4 index db8ec6c6b..6f7790a2c 100644 --- a/share/bifrost.m4 +++ b/share/bifrost.m4 @@ -8,7 +8,7 @@ AC_DEFUN([AX_CHECK_BIFROST], [with_bifrost=/usr/local/]) AC_SUBST([BIFROST_PATH], [$with_bifrost]) - AS_SUBST([HAVE_BIFROST], [1]) + AC_SUBST([HAVE_BIFROST], [1]) AC_CHECK_HEADER([bifrost/config.h], [], [AC_SUBST([HAVE_BIFROST], [0])]) if test "$HAVE_BIFROST" = "1"; then AC_MSG_CHECKING([for a working Bifrost installation]) From 4cd168d9a85625c0f7b6ea1f5b2cf416ed198a46 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Sep 2023 10:33:23 -0600 Subject: [PATCH 0918/1155] That was bad. --- python/bifrost/memory.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/python/bifrost/memory.py b/python/bifrost/memory.py index aa57a1001..5c1db97c8 100644 --- a/python/bifrost/memory.py +++ b/python/bifrost/memory.py @@ -63,8 +63,12 @@ def alignment() -> int: # **TODO: Deprecate below here! def _get_space(arr: Any) -> str: - try: return raw_get_space(arr.ctypes.data) - except KeyError: return 'system' # TODO: Dangerous to assume? + try: + space = arr.bf.space + if space is None: + space = 'system' + except KeyError: + return 'system' # TODO: Dangerous to assume? # Note: These functions operate on numpy or GPU arrays def memcpy(dst: "bifrost.ndarray", src: "bifrost.ndarray") -> None: From 9e7a01913ebd13df2beb99b4a70998ebbcd8d65f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Sep 2023 10:50:22 -0600 Subject: [PATCH 0919/1155] That's better. --- python/bifrost/memory.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/python/bifrost/memory.py b/python/bifrost/memory.py index 5c1db97c8..47ba0f2e4 100644 --- a/python/bifrost/memory.py +++ b/python/bifrost/memory.py @@ -67,8 +67,9 @@ def _get_space(arr: Any) -> str: space = arr.bf.space if space is None: space = 'system' - except KeyError: - return 'system' # TODO: Dangerous to assume? + except AttributeError: + space = 'system' # TODO: Dangerous to assume? + return space # Note: These functions operate on numpy or GPU arrays def memcpy(dst: "bifrost.ndarray", src: "bifrost.ndarray") -> None: From 25b81870ae987b02cbeba54fcaf0348e91bd1461 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 7 Sep 2023 18:37:17 -0600 Subject: [PATCH 0920/1155] Save the string conversion. --- python/bifrost/memory.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/python/bifrost/memory.py b/python/bifrost/memory.py index 47ba0f2e4..ad2a73928 100644 --- a/python/bifrost/memory.py +++ b/python/bifrost/memory.py @@ -62,21 +62,18 @@ def alignment() -> int: # **TODO: Deprecate below here! -def _get_space(arr: Any) -> str: +def _get_space(arr: Any) -> _bf.BFspace: try: - space = arr.bf.space - if space is None: - space = 'system' + return raw_get_space(arr.ctypes.data) except AttributeError: - space = 'system' # TODO: Dangerous to assume? - return space + return _bf.BF_SPACE_SYSTEM # TODO: Dangerous to assume? # Note: These functions operate on numpy or GPU arrays def memcpy(dst: "bifrost.ndarray", src: "bifrost.ndarray") -> None: assert(dst.flags['C_CONTIGUOUS']) assert(src.shape == dst.shape) - dst_space = _string2space(_get_space(dst)) - src_space = _string2space(_get_space(src)) + dst_space = _get_space(dst) + src_space = _get_space(src) count = dst.nbytes _check(_bf.bfMemcpy(dst.ctypes.data, dst_space, src.ctypes.data, src_space, @@ -85,8 +82,8 @@ def memcpy(dst: "bifrost.ndarray", src: "bifrost.ndarray") -> None: def memcpy2D(dst: "bifrost.ndarray", src: "bifrost.ndarray") -> None: assert(len(dst.shape) == 2) assert(src.shape == dst.shape) - dst_space = _string2space(_get_space(dst)) - src_space = _string2space(_get_space(src)) + dst_space = _get_space(dst) + src_space = _get_space(src) height, width = dst.shape width_bytes = width * dst.dtype.itemsize _check(_bf.bfMemcpy2D(dst.ctypes.data, dst.strides[0], dst_space, @@ -94,12 +91,12 @@ def memcpy2D(dst: "bifrost.ndarray", src: "bifrost.ndarray") -> None: width_bytes, height)) def memset(dst: "bifrost.ndarray", val: int=0) -> None: assert(dst.flags['C_CONTIGUOUS']) - space = _string2space(_get_space(dst)) + space = _get_space(dst) count = dst.nbytes _check(_bf.bfMemset(dst.ctypes.data, space, val, count)) def memset2D(dst: "bifrost.ndarray", val: int=0) -> None: assert(len(dst.shape) == 2) - space = _string2space(_get_space(dst)) + space = _get_space(dst) height, width = dst.shape width_bytes = width * dst.dtype.itemsize _check(_bf.bfMemset2D(dst.ctypes.data, dst.strides[0], space, From 3d24679dcaeadef0db5db9d35c89359b424b6955 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Sep 2023 10:30:26 -0600 Subject: [PATCH 0921/1155] Protect 192.168.1.100 from matching 192.168.1.10. --- src/ib_verbs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index d30ef67a1..457e3e8fe 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -237,7 +237,7 @@ class Verbs { char* end; sprintf(cmd, "ping -c 1 %s", ip_str); FILE* fp = popen(cmd, "r"); - sprintf(cmd, "ip neigh | grep %s | awk '{print $5}'", ip_str); + sprintf(cmd, "ip neigh | grep -e \"%s \" | awk '{print $5}'", ip_str); fp = popen(cmd, "r"); if( fgets(line, sizeof(line), fp) != NULL) { if( line[strlen(line)-1] == '\n' ) { From 00c65eeee713591b9d31d4cb33fa166f2690689c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Sep 2023 10:31:15 -0600 Subject: [PATCH 0922/1155] Cleanup send flags. --- src/ib_verbs.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 457e3e8fe..b76f835fa 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -664,10 +664,10 @@ class Verbs { } // Link the work requests to send queue - uint32_t send_flags = 0; + uint32_t send_flags = IBV_SEND_SIGNALED; #if defined BF_ENABLE_VERBS_OFFLOAD && BF_ENABLE_VERBS_OFFLOAD if( _verbs.offload_csum ) { - send_flags = IBV_SEND_IP_CSUM; + send_flags |= IBV_SEND_IP_CSUM; } #endif From d294fade84caeb18dca8015f8c11e06fe91d95e3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Sep 2023 10:33:59 -0600 Subject: [PATCH 0923/1155] Cleanup send work request linking. --- src/ib_verbs.hpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index b76f835fa..b00d47307 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -671,17 +671,14 @@ class Verbs { } #endif - for(i=0; i Date: Thu, 14 Sep 2023 14:33:24 -0600 Subject: [PATCH 0924/1155] Work on splitting Verbs into a send side and a receive side. --- src/ib_verbs.hpp | 381 +-------------------- src/ib_verbs_send.hpp | 772 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 776 insertions(+), 377 deletions(-) create mode 100644 src/ib_verbs_send.hpp diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index b00d47307..506be63d9 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020-2022, The Bifrost Authors. All rights reserved. + * Copyright (c) 2020-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -46,14 +46,6 @@ #include -// Catch for older InfiniBand verbs installs that do not have the -// IBV_RAW_PACKET_CAP_IP_CSUM feature check. -#ifndef IBV_RAW_PACKET_CAP_IP_CSUM -#define BF_ENABLE_VERBS_OFFLOAD 0 -#else -#define BF_ENABLE_VERBS_OFFLOAD 1 -#endif - #ifndef BF_VERBS_NQP #define BF_VERBS_NQP 1 #endif @@ -74,11 +66,6 @@ struct bf_ibv_recv_pkt{ uint32_t length; }; -struct bf_ibv_send_pkt{ - ibv_send_wr wr; - ibv_sge sg; -}; - struct bf_ibv_flow { ibv_flow_attr attr; ibv_flow_spec_eth eth; @@ -102,65 +89,6 @@ struct bf_ibv { bf_ibv_recv_pkt* pkt_buf; bf_ibv_recv_pkt* pkt; bf_ibv_recv_pkt* pkt_batch; - - // Send - ibv_cq** send_cq; - - uint8_t* send_mr_buf; - size_t send_mr_size; - ibv_mr* send_mr; - - bf_ibv_send_pkt* send_pkt_buf; - bf_ibv_send_pkt* send_pkt_head; - - uint8_t offload_csum; - uint8_t hardware_pacing; -}; - -struct __attribute__((packed)) bf_ethernet_hdr { - uint8_t dst_mac[6]; - uint8_t src_mac[6]; - uint16_t type; -}; - -struct __attribute__((packed)) bf_ipv4_hdr { - uint8_t version_ihl; - uint8_t tos; - uint16_t length; - uint16_t id; - uint16_t flags_frag; - uint8_t ttl; - uint8_t proto; - uint16_t checksum; - uint32_t src_addr; - uint32_t dst_addr; -}; - -inline void bf_ipv4_update_checksum(bf_ipv4_hdr* hdr) { - hdr->checksum = 0; - uint16_t *block = reinterpret_cast(hdr); - - uint32_t checksum = 0; - for(uint32_t i=0; i 0xFFFF ) { - checksum = (checksum & 0xFFFF) + (checksum >> 16); - } - hdr->checksum = ~htons((uint16_t) checksum); -} - -struct __attribute__((packed)) bf_udp_hdr { - uint16_t src_port; - uint16_t dst_port; - uint16_t length; - uint16_t checksum; -}; - -struct __attribute__((packed)) bf_comb_udp_hdr { - bf_ethernet_hdr ethernet; - bf_ipv4_hdr ipv4; - bf_udp_hdr udp; }; @@ -222,40 +150,6 @@ class Verbs { ::memcpy(mac, (uint8_t*) ethreq.ifr_hwaddr.sa_data, 6); } - void get_remote_mac_address(uint8_t* mac) { - uint32_t ip; - char ip_str[INET_ADDRSTRLEN]; - this->get_remote_ip_address(&(ip_str[0])); - inet_pton(AF_INET, &(ip_str[0]), &ip); - - if( ((ip & 0xFF) >= 224) && ((ip & 0xFF) < 240) ) { - ETHER_MAP_IP_MULTICAST(&ip, mac); - } else { - int ret = -1; - char cmd[256] = {'\0'}; - char line[256] = {'\0'}; - char* end; - sprintf(cmd, "ping -c 1 %s", ip_str); - FILE* fp = popen(cmd, "r"); - sprintf(cmd, "ip neigh | grep -e \"%s \" | awk '{print $5}'", ip_str); - fp = popen(cmd, "r"); - if( fgets(line, sizeof(line), fp) != NULL) { - if( line[strlen(line)-1] == '\n' ) { - line[strlen(line)-1] = '\0'; - } - if( strncmp(&(line[2]), ":", 1) == 0 ) { - ret = 0; - mac[0] = (uint8_t) strtol(&line[0], &end, 16); - mac[1] = (uint8_t) strtol(&line[3], &end, 16); - mac[2] = (uint8_t) strtol(&line[6], &end, 16); - mac[3] = (uint8_t) strtol(&line[9], &end, 16); - mac[4] = (uint8_t) strtol(&line[12], &end, 16); - mac[5] = (uint8_t) strtol(&line[15], &end, 16); - } - } - check_error(ret, "determine remote hardware address"); - } - } void get_ip_address(char* ip) { sockaddr_in sin; socklen_t len = sizeof(sin); @@ -263,13 +157,6 @@ class Verbs { "query socket name"); inet_ntop(AF_INET, &(sin.sin_addr), ip, INET_ADDRSTRLEN); } - void get_remote_ip_address(char* ip) { - sockaddr_in sin; - socklen_t len = sizeof(sin); - check_error(::getpeername(_fd, (sockaddr *)&sin, &len), - "query peer name"); - inet_ntop(AF_INET, &(sin.sin_addr), ip, INET_ADDRSTRLEN); - } uint16_t get_port() { sockaddr_in sin; socklen_t len = sizeof(sin); @@ -277,20 +164,6 @@ class Verbs { "query socket name"); return ntohs(sin.sin_port); } - uint16_t get_remote_port() { - sockaddr_in sin; - socklen_t len = sizeof(sin); - check_error(::getpeername(_fd, (sockaddr *)&sin, &len), - "query peer name"); - return ntohs(sin.sin_port); - } - uint8_t get_ttl() { - uint8_t ttl; - socklen_t len = sizeof(ttl); - check_error(::getsockopt(_fd, IPPROTO_IP, IP_TTL, &ttl, &len), - "determine TTL"); - return ttl; - } int get_timeout_ms() { timeval value; socklen_t size = sizeof(value); @@ -422,25 +295,6 @@ class Verbs { _verbs.mr = ibv_reg_mr(_verbs.pd, _verbs.mr_buf, _verbs.mr_size, IBV_ACCESS_LOCAL_WRITE); check_null(_verbs.mr, "register memory region"); - - // Start Send - - _verbs.send_pkt_buf = (bf_ibv_send_pkt*) ::malloc(BF_VERBS_NPKTBUF*BF_VERBS_NQP * sizeof(struct bf_ibv_send_pkt)); - check_null(_verbs.send_pkt_buf, - "allocate send packet buffer"); - ::memset(_verbs.send_pkt_buf, 0, BF_VERBS_NPKTBUF*BF_VERBS_NQP * sizeof(struct bf_ibv_send_pkt)); - _verbs.send_mr_size = (size_t) BF_VERBS_NPKTBUF*BF_VERBS_NQP * _pkt_size_max; - _verbs.send_mr_buf = (uint8_t *) ::mmap(NULL, _verbs.send_mr_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED, -1, 0); - - check_error(_verbs.send_mr_buf == MAP_FAILED, - "allocate memory region buffer"); - check_error(::mlock(_verbs.send_mr_buf, _verbs.send_mr_size), - "lock memory region buffer"); - _verbs.send_mr = ibv_reg_mr(_verbs.pd, _verbs.send_mr_buf, _verbs.send_mr_size, IBV_ACCESS_LOCAL_WRITE); - check_null(_verbs.send_mr, - "register memory region"); - - // End Send } void destroy_buffers() { int failures = 0; @@ -460,26 +314,6 @@ class Verbs { free(_verbs.pkt_buf); } - // Start Send - - if( _verbs.send_mr ) { - if( ibv_dereg_mr(_verbs.send_mr) ) { - failures += 1; - } - } - - if( _verbs.send_mr_buf ) { - if( ::munmap(_verbs.send_mr_buf, _verbs.send_mr_size) ) { - failures += 1; - } - } - - if( _verbs.send_pkt_buf ) { - free(_verbs.send_pkt_buf); - } - - // End Send - if( _verbs.pd ) { if( ibv_dealloc_pd(_verbs.pd) ) { failures += 1; @@ -517,29 +351,14 @@ class Verbs { "change completion queue request notifications"); } - // Start Send - - // Setup the completion queues - _verbs.send_cq = (ibv_cq**) ::malloc(BF_VERBS_NQP * sizeof(ibv_cq*)); - check_null(_verbs.send_cq, - "allocate send completion queues"); - ::memset(_verbs.send_cq, 0, BF_VERBS_NQP * sizeof(ibv_cq*)); - for(i=0; ilkey; - } - } - - // Link the work requests to send queue - uint32_t send_flags = IBV_SEND_SIGNALED; - #if defined BF_ENABLE_VERBS_OFFLOAD && BF_ENABLE_VERBS_OFFLOAD - if( _verbs.offload_csum ) { - send_flags |= IBV_SEND_IP_CSUM; - } - #endif - - for(i=0; istate) { - case IBV_QPS_RESET: // Unexpected, but maybe user reset it - qp_attr.qp_state = IBV_QPS_INIT; - qp_attr.port_num = _verbs.port_num; - if( ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE|IBV_QP_PORT) ) { - return NULL; - } - case IBV_QPS_INIT: - qp_attr.qp_state = IBV_QPS_RTR; - qp_attr.port_num = _verbs.port_num; - if( ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE) ) { - return NULL; - } - case IBV_QPS_RTR: - qp_attr.qp_state = IBV_QPS_RTS; - if(ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE)) { - return NULL; - } - break; - case IBV_QPS_RTS: - break; - default: - return NULL; - } - } - - for(i=0; iwr.next = &(_verbs.send_pkt_head->wr); - _verbs.send_pkt_head = send_pkt; - } // for each work completion - } while(num_wce); - } - - if( npackets == 0 || !_verbs.send_pkt_head ) { - return NULL; - } - - send_head = _verbs.send_pkt_head; - send_tail = _verbs.send_pkt_head; - for(i=0; iwr.next; i++) { - send_tail = (bf_ibv_send_pkt*) send_tail->wr.next; - } - - _verbs.send_pkt_head = (bf_ibv_send_pkt*) send_tail->wr.next; - send_tail->wr.next = NULL; - - return send_head; - } inline void check_error(int retval, std::string what) { if( retval < 0 ) { destroy_flows(); @@ -1032,78 +733,4 @@ class Verbs { *pkt_ptr = (uint8_t *) _verbs.pkt->wr.sg_list->addr + BF_VERBS_PAYLOAD_OFFSET; return _verbs.pkt->length - BF_VERBS_PAYLOAD_OFFSET; } - inline void get_ethernet_header(bf_ethernet_hdr* hdr) { - uint8_t src_mac[6], dst_mac[6]; - this->get_mac_address(&(src_mac[0])); - this->get_remote_mac_address(&(dst_mac[0])); - - ::memset(hdr, 0, sizeof(bf_ethernet_hdr)); - ::memcpy(hdr->dst_mac, dst_mac, 6); - ::memcpy(hdr->src_mac, src_mac, 6); - hdr->type = htons(0x0800); // IPv4 - } - inline void get_ipv4_header(bf_ipv4_hdr* hdr, size_t udp_length=0) { - uint8_t ttl = this->get_ttl(); - uint32_t src_ip, dst_ip; - char src_ip_str[INET_ADDRSTRLEN], dst_ip_str[INET_ADDRSTRLEN]; - this->get_ip_address(&(src_ip_str[0])); - inet_pton(AF_INET, &(src_ip_str[0]), &src_ip); - this->get_remote_ip_address(&(dst_ip_str[0])); - inet_pton(AF_INET, &(dst_ip_str[0]), &dst_ip); - - ::memset(hdr, 0, sizeof(bf_ipv4_hdr)); - hdr->version_ihl = htons(0x4500); // v4 + 20-byte header - hdr->length = htons((uint16_t) (20 + 8 + udp_length)); - hdr->flags_frag = htons(1<<14); // don't fragment - hdr->ttl = ttl; - hdr->proto = 0x11; // UDP - hdr->src_addr = src_ip; - hdr->dst_addr = dst_ip; - if( !_verbs.offload_csum ) { - bf_ipv4_update_checksum(hdr); - } - } - inline void get_udp_header(bf_udp_hdr* hdr, size_t udp_length=0) { - uint16_t src_port, dst_port; - src_port = this->get_port(); - dst_port = this->get_remote_port(); - - ::memset(hdr, 0, sizeof(bf_udp_hdr)); - hdr->src_port = htons(src_port); - hdr->dst_port = htons(dst_port); - hdr->length = htons((uint16_t) (8 + udp_length)); - } - inline int sendmmsg(mmsghdr *mmsg, int npackets, int flags=0) { - int ret; - bf_ibv_send_pkt* head; - ibv_send_wr *s; - - int i; - uint64_t offset; - for(i=0; iqueue(npackets); - ret = ibv_post_send(_verbs.qp[0], &(head->wr), &s); - if( ret ) { - ret = -1; - } else { - ret = npackets; - } - return ret; - } }; diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp new file mode 100644 index 000000000..cbc2bff33 --- /dev/null +++ b/src/ib_verbs_send.hpp @@ -0,0 +1,772 @@ +/* + * Copyright (c) 2020-2023, The Bifrost Authors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +// Catch for older InfiniBand verbs installs that do not have the +// IBV_RAW_PACKET_CAP_IP_CSUM feature check. +#ifndef IBV_RAW_PACKET_CAP_IP_CSUM +#define BF_ENABLE_VERBS_OFFLOAD 0 +#else +#define BF_ENABLE_VERBS_OFFLOAD 1 +#endif + +#ifndef BF_VERBS_SEND_NQP +#define BF_VERBS_SEND_NQP 1 +#endif + +#ifndef BF_VERBS_SEND_NPKTBUF +#define BF_VERBS_SEND_NPKTBUF 1024 +#endif + +#ifndef BF_VERBS_SEND_WCBATCH +#define BF_VERBS_SEND_WCBATCH 16 +#endif + +struct bf_ibv_send_pkt{ + ibv_send_wr wr; + ibv_sge sg; +}; + +struct bf_ibv_send { + ibv_context* ctx; + uint8_t port_num; + ibv_pd* pd; + ibv_comp_channel* cc; + ibv_cq** cq; + ibv_qp** qp; + + uint8_t* mr_buf; + size_t mr_size; + ibv_mr* mr; + + ibv_cq** send_cq; + + uint8_t* send_mr_buf; + size_t send_mr_size; + ibv_mr* send_mr; + + bf_ibv_send_pkt* send_pkt_buf; + bf_ibv_send_pkt* send_pkt_head; + + uint8_t offload_csum; + uint8_t hardware_pacing; +}; + +struct __attribute__((packed)) bf_ethernet_hdr { + uint8_t dst_mac[6]; + uint8_t src_mac[6]; + uint16_t type; +}; + +struct __attribute__((packed)) bf_ipv4_hdr { + uint8_t version_ihl; + uint8_t tos; + uint16_t length; + uint16_t id; + uint16_t flags_frag; + uint8_t ttl; + uint8_t proto; + uint16_t checksum; + uint32_t src_addr; + uint32_t dst_addr; +}; + +inline void bf_ipv4_update_checksum(bf_ipv4_hdr* hdr) { + hdr->checksum = 0; + uint16_t *block = reinterpret_cast(hdr); + + uint32_t checksum = 0; + for(uint32_t i=0; i 0xFFFF ) { + checksum = (checksum & 0xFFFF) + (checksum >> 16); + } + hdr->checksum = ~htons((uint16_t) checksum); +} + +struct __attribute__((packed)) bf_udp_hdr { + uint16_t src_port; + uint16_t dst_port; + uint16_t length; + uint16_t checksum; +}; + +struct __attribute__((packed)) bf_comb_udp_hdr { + bf_ethernet_hdr ethernet; + bf_ipv4_hdr ipv4; + bf_udp_hdr udp; +}; + + +class VerbsSend { + int _fd; + size_t _pkt_size_max; + int _timeout; + bf_ibv_send _verbs; + + void get_interface_name(char* name) { + sockaddr_in sin; + char ip[INET_ADDRSTRLEN]; + socklen_t len = sizeof(sin); + check_error(::getsockname(_fd, (sockaddr *)&sin, &len), + "query socket name"); + inet_ntop(AF_INET, &(sin.sin_addr), ip, INET_ADDRSTRLEN); + + // TODO: Is there a better way to find this? + char cmd[256] = {'\0'}; + char line[256] = {'\0'}; + int is_lo = 0; + sprintf(cmd, "ip route get to %s | grep dev | awk '{print $4}'", ip); + FILE* fp = popen(cmd, "r"); + if( fgets(line, sizeof(line), fp) != NULL) { + if( line[strlen(line)-1] == '\n' ) { + line[strlen(line)-1] = '\0'; + } + if( strncmp(&(line[0]), "lo", 2) == 0 ) { + is_lo = 1; + } + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wstringop-truncation" + strncpy(name, &(line[0]), IFNAMSIZ); + #pragma GCC diagnostic pop + } + pclose(fp); + + if( is_lo ) { + // TODO: Is there a way to avoid having to do this? + sprintf(cmd, "ip route show | grep %s | grep -v default | awk '{print $3}'", ip); + fp = popen(cmd, "r"); + if( fgets(line, sizeof(line), fp) != NULL) { + if( line[strlen(line)-1] == '\n' ) { + line[strlen(line)-1] = '\0'; + } + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wstringop-truncation" + strncpy(name, &(line[0]), IFNAMSIZ); + #pragma GCC diagnostic pop + } + pclose(fp); + } + } + void get_mac_address(uint8_t* mac) { + ifreq ethreq; + this->get_interface_name(&(ethreq.ifr_name[0])); + check_error(::ioctl(_fd, SIOCGIFHWADDR, ðreq), + "query interface hardware address"); + + ::memcpy(mac, (uint8_t*) ethreq.ifr_hwaddr.sa_data, 6); + } + void get_remote_mac_address(uint8_t* mac) { + uint32_t ip; + char ip_str[INET_ADDRSTRLEN]; + this->get_remote_ip_address(&(ip_str[0])); + inet_pton(AF_INET, &(ip_str[0]), &ip); + + if( ((ip & 0xFF) >= 224) && ((ip & 0xFF) < 240) ) { + ETHER_MAP_IP_MULTICAST(&ip, mac); + } else { + int ret = -1; + char cmd[256] = {'\0'}; + char line[256] = {'\0'}; + char* end; + sprintf(cmd, "ping -c 1 %s", ip_str); + FILE* fp = popen(cmd, "r"); + sprintf(cmd, "ip neigh | grep -e \"%s \" | awk '{print $5}'", ip_str); + fp = popen(cmd, "r"); + if( fgets(line, sizeof(line), fp) != NULL) { + if( line[strlen(line)-1] == '\n' ) { + line[strlen(line)-1] = '\0'; + } + if( strncmp(&(line[2]), ":", 1) == 0 ) { + ret = 0; + mac[0] = (uint8_t) strtol(&line[0], &end, 16); + mac[1] = (uint8_t) strtol(&line[3], &end, 16); + mac[2] = (uint8_t) strtol(&line[6], &end, 16); + mac[3] = (uint8_t) strtol(&line[9], &end, 16); + mac[4] = (uint8_t) strtol(&line[12], &end, 16); + mac[5] = (uint8_t) strtol(&line[15], &end, 16); + } + } + check_error(ret, "determine remote hardware address"); + } + } + void get_ip_address(char* ip) { + sockaddr_in sin; + socklen_t len = sizeof(sin); + check_error(::getsockname(_fd, (sockaddr *)&sin, &len), + "query socket name"); + inet_ntop(AF_INET, &(sin.sin_addr), ip, INET_ADDRSTRLEN); + } + void get_remote_ip_address(char* ip) { + sockaddr_in sin; + socklen_t len = sizeof(sin); + check_error(::getpeername(_fd, (sockaddr *)&sin, &len), + "query peer name"); + inet_ntop(AF_INET, &(sin.sin_addr), ip, INET_ADDRSTRLEN); + } + uint16_t get_port() { + sockaddr_in sin; + socklen_t len = sizeof(sin); + check_error(::getsockname(_fd, (sockaddr *)&sin, &len), + "query socket name"); + return ntohs(sin.sin_port); + } + uint16_t get_remote_port() { + sockaddr_in sin; + socklen_t len = sizeof(sin); + check_error(::getpeername(_fd, (sockaddr *)&sin, &len), + "query peer name"); + return ntohs(sin.sin_port); + } + uint8_t get_ttl() { + uint8_t ttl; + socklen_t len = sizeof(ttl); + check_error(::getsockopt(_fd, IPPROTO_IP, IP_TTL, &ttl, &len), + "determine TTL"); + return ttl; + } + int get_timeout_ms() { + timeval value; + socklen_t size = sizeof(value); + check_error(::getsockopt(_fd, SOL_SOCKET, SO_RCVTIMEO, &value, &size), + "query socket timeout"); + return int(value.tv_sec*1000) + int(value.tv_usec/1000); + } + uint64_t get_interface_gid() { + uint64_t id; + uint8_t mac[6] = {0}; + uint8_t buf[8] = {0}; + this->get_mac_address(&(mac[0])); + + ::memcpy(buf, (unsigned char*) &(mac[0]), 3); + buf[0] ^= 2; // Toggle G/L bit per modified EUI-64 spec + buf[3] = 0xff; + buf[4] = 0xfe; + ::memcpy(buf+5, (unsigned char*) &(mac[3]), 3); + ::memcpy(&id, buf, 8); + return id; + } + void create_context() { + int d, p, g; + int ndev, found; + ibv_device** ibv_dev_list = NULL; + ibv_context* ibv_ctx = NULL; + ibv_device_attr_ex ibv_dev_attr; + ibv_port_attr ibv_port_attr; + union ibv_gid ibv_gid; + + // Get the interface MAC address and GID + found = 0; + uint8_t mac[6] = {0}; + this->get_mac_address(&(mac[0])); + uint64_t gid = this->get_interface_gid(); + + // Find the right device + /* Query all devices */ + ibv_dev_list = ibv_get_device_list(&ndev); + check_null(ibv_dev_list, + "ibv_get_device_list"); + + /* Interogate */ + for(d=0; dfd, F_GETFL); + check_error(::fcntl(_verbs.cc->fd, F_SETFL, flags | O_NONBLOCK), + "set completion channel to non-blocking"); + flags = ::fcntl(_verbs.cc->fd, F_GETFD); + check_error(::fcntl(_verbs.cc->fd, F_SETFD, flags | O_CLOEXEC), + "set completion channel to non-blocking"); + ::madvise(_verbs.cc, sizeof(ibv_pd), MADV_DONTFORK); + + // Setup the completion queues + _verbs.send_cq = (ibv_cq**) ::malloc(BF_VERBS_SEND_NQP * sizeof(ibv_cq*)); + check_null(_verbs.send_cq, + "allocate send completion queues"); + ::memset(_verbs.send_cq, 0, BF_VERBS_SEND_NQP * sizeof(ibv_cq*)); + for(i=0; ilkey; + } + } + + // Link the work requests to send queue + uint32_t send_flags = IBV_SEND_SIGNALED; + #if defined BF_ENABLE_VERBS_OFFLOAD && BF_ENABLE_VERBS_OFFLOAD + if( _verbs.offload_csum ) { + send_flags |= IBV_SEND_IP_CSUM; + } + #endif + + for(i=0; istate) { + case IBV_QPS_RESET: // Unexpected, but maybe user reset it + qp_attr.qp_state = IBV_QPS_INIT; + qp_attr.port_num = _verbs.port_num; + if( ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE|IBV_QP_PORT) ) { + return NULL; + } + case IBV_QPS_INIT: + qp_attr.qp_state = IBV_QPS_RTR; + qp_attr.port_num = _verbs.port_num; + if( ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE) ) { + return NULL; + } + case IBV_QPS_RTR: + qp_attr.qp_state = IBV_QPS_RTS; + if(ibv_modify_qp(_verbs.qp[i], &qp_attr, IBV_QP_STATE)) { + return NULL; + } + break; + case IBV_QPS_RTS: + break; + default: + return NULL; + } + } + + for(i=0; iwr.next = &(_verbs.send_pkt_head->wr); + _verbs.send_pkt_head = send_pkt; + } // for each work completion + } while(num_wce); + } + + if( npackets == 0 || !_verbs.send_pkt_head ) { + return NULL; + } + + send_head = _verbs.send_pkt_head; + send_tail = _verbs.send_pkt_head; + for(i=0; iwr.next; i++) { + send_tail = (bf_ibv_send_pkt*) send_tail->wr.next; + } + + _verbs.send_pkt_head = (bf_ibv_send_pkt*) send_tail->wr.next; + send_tail->wr.next = NULL; + + return send_head; + } + inline void check_error(int retval, std::string what) { + if( retval < 0 ) { + destroy_flows(); + destroy_queues(); + destroy_buffers(); + destroy_context(); + + std::stringstream ss; + ss << "Failed to " << what << ": (" << errno << ") " + << strerror(errno); + throw Verbs::Error(ss.str()); + } + } + inline void check_null(void* ptr, std::string what) { + if( ptr == NULL ) { + destroy_flows(); + destroy_queues(); + destroy_buffers(); + destroy_context(); + + std::stringstream ss; + ss << "Failed to " << what << ": (" << errno << ") " + << strerror(errno); + throw Verbs::Error(ss.str()); + } + } + inline void check_null_qp(void* ptr, std::string what) { + if( ptr == NULL ) { + destroy_flows(); + destroy_queues(); + destroy_buffers(); + destroy_context(); + + std::stringstream ss; + ss << "Failed to " << what << ": (" << errno << ") " + << strerror(errno); + if( errno == EPERM ) { + ss << " Do you need to set 'options ibverbs disable_raw_qp_enforcement=1' " + << "or add the CAP_NET_RAW capability?"; + } + throw Verbs::Error(ss.str()); + } + } +public: + class Error : public std::runtime_error { + typedef std::runtime_error super_t; + protected: + virtual const char* what() const throw() { + return super_t::what(); + } + public: + Error(const std::string& what_arg) + : super_t(what_arg) {} + }; + + VerbsSend(int fd, size_t pkt_size_max) + : _fd(fd), _pkt_size_max(pkt_size_max), _timeout(1) { + _timeout = get_timeout_ms(); + + ::memset(&_verbs, 0, sizeof(_verbs)); + check_error(ibv_fork_init(), + "make verbs fork safe"); + create_context(); + create_buffers(); + create_queues(); + link_work_requests(); + } + ~VerbsSend() { + destroy_queues(); + destroy_buffers(); + destroy_context(); + } + inline void get_ethernet_header(bf_ethernet_hdr* hdr) { + uint8_t src_mac[6], dst_mac[6]; + this->get_mac_address(&(src_mac[0])); + this->get_remote_mac_address(&(dst_mac[0])); + + ::memset(hdr, 0, sizeof(bf_ethernet_hdr)); + ::memcpy(hdr->dst_mac, dst_mac, 6); + ::memcpy(hdr->src_mac, src_mac, 6); + hdr->type = htons(0x0800); // IPv4 + } + inline void get_ipv4_header(bf_ipv4_hdr* hdr, size_t udp_length=0) { + uint8_t ttl = this->get_ttl(); + uint32_t src_ip, dst_ip; + char src_ip_str[INET_ADDRSTRLEN], dst_ip_str[INET_ADDRSTRLEN]; + this->get_ip_address(&(src_ip_str[0])); + inet_pton(AF_INET, &(src_ip_str[0]), &src_ip); + this->get_remote_ip_address(&(dst_ip_str[0])); + inet_pton(AF_INET, &(dst_ip_str[0]), &dst_ip); + + ::memset(hdr, 0, sizeof(bf_ipv4_hdr)); + hdr->version_ihl = htons(0x4500); // v4 + 20-byte header + hdr->length = htons((uint16_t) (20 + 8 + udp_length)); + hdr->flags_frag = htons(1<<14); // don't fragment + hdr->ttl = ttl; + hdr->proto = 0x11; // UDP + hdr->src_addr = src_ip; + hdr->dst_addr = dst_ip; + if( !_verbs.offload_csum ) { + bf_ipv4_update_checksum(hdr); + } + } + inline void get_udp_header(bf_udp_hdr* hdr, size_t udp_length=0) { + uint16_t src_port, dst_port; + src_port = this->get_port(); + dst_port = this->get_remote_port(); + + ::memset(hdr, 0, sizeof(bf_udp_hdr)); + hdr->src_port = htons(src_port); + hdr->dst_port = htons(dst_port); + hdr->length = htons((uint16_t) (8 + udp_length)); + } + inline int sendmmsg(mmsghdr *mmsg, int npackets, int flags=0) { + int ret; + bf_ibv_send_pkt* head; + ibv_send_wr *s; + + int i; + uint64_t offset; + for(i=0; iqueue(npackets); + ret = ibv_post_send(_verbs.qp[0], &(head->wr), &s); + if( ret ) { + ret = -1; + } else { + ret = npackets; + } + return ret; + } +}; From 0b8bdcfda46c2b7b6e912694956977a5e1529e9a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Sep 2023 14:34:58 -0600 Subject: [PATCH 0925/1155] Verbs -> VerbsSend --- src/packet_writer.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index b2806b7fb..0051e88bb 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -120,7 +120,7 @@ class DiskPacketWriter : public PacketWriterMethod { status = ::write(_fd, hdrs+hdr_size*i, hdr_size); if( status != hdr_size ) continue; status = ::write(_fd, data+data_size*i, data_size); - if( status != data_size) continue; + if( status != data_size ) continue; nsent += 1; } return nsent; @@ -187,10 +187,10 @@ class UDPPacketSender : public PacketWriterMethod { }; #if defined BF_VERBS_ENABLED && BF_VERBS_ENABLED -#include "ib_verbs.hpp" +#include "ib_verbs_send.hpp" class UDPVerbsSender : public PacketWriterMethod { - Verbs _ibv; + VerbsSend _ibv; bf_comb_udp_hdr _udp_hdr; int _last_size; int _last_count; From 927b897177a8154d4a40e9cc19d35eadda969b42 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Sep 2023 14:48:44 -0600 Subject: [PATCH 0926/1155] Checksum offloading is only for send. --- src/ib_verbs.hpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 506be63d9..ac77fe348 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -229,16 +229,6 @@ class Verbs { if( (ibv_gid.global.subnet_prefix == 0x80feUL) \ && (ibv_gid.global.interface_id == gid) ) { found = 1; - #if defined BF_ENABLE_VERBS_OFFLOAD && BF_ENABLE_VERBS_OFFLOAD - if( ibv_dev_attr.raw_packet_caps & IBV_RAW_PACKET_CAP_IP_CSUM ) { - _verbs.offload_csum = 1; - } else { - _verbs.offload_csum = 0; - } - #else - _verbs.offload_csum = 0; - #endif - std::cout << "_verbs.offload_csum: " << (int) _verbs.offload_csum << std::endl; break; } } From c4bf808f3645422f2e9301eae578219a8b928e8f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Sep 2023 14:49:46 -0600 Subject: [PATCH 0927/1155] More Verbs -> VerbsSend. --- src/ib_verbs_send.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index cbc2bff33..9bc392371 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -371,7 +371,7 @@ class VerbsSend { // Done if( !found ) { destroy_context(); - throw Verbs::Error("specified device not found"); + throw VerbsSend::Error("specified device not found"); } } void destroy_context() { @@ -633,7 +633,7 @@ class VerbsSend { std::stringstream ss; ss << "Failed to " << what << ": (" << errno << ") " << strerror(errno); - throw Verbs::Error(ss.str()); + throw VerbsSend::Error(ss.str()); } } inline void check_null(void* ptr, std::string what) { @@ -646,7 +646,7 @@ class VerbsSend { std::stringstream ss; ss << "Failed to " << what << ": (" << errno << ") " << strerror(errno); - throw Verbs::Error(ss.str()); + throw VerbsSend::Error(ss.str()); } } inline void check_null_qp(void* ptr, std::string what) { @@ -663,7 +663,7 @@ class VerbsSend { ss << " Do you need to set 'options ibverbs disable_raw_qp_enforcement=1' " << "or add the CAP_NET_RAW capability?"; } - throw Verbs::Error(ss.str()); + throw VerbsSend::Error(ss.str()); } } public: From 89bcba12c7262cec97c5a7dd8f4da3ff3a40b1e7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Sep 2023 14:52:45 -0600 Subject: [PATCH 0928/1155] A few more things related to the split. --- src/ib_verbs_send.hpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 9bc392371..841be430b 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -518,7 +518,7 @@ class VerbsSend { } void link_work_requests() { // Make sure we are ready to go - check_null(_verbs.pkt_buf, + check_null(_verbs.send_pkt_buf, "find existing packet buffer"); check_null(_verbs.qp, "find existing queue pairs"); @@ -625,7 +625,6 @@ class VerbsSend { } inline void check_error(int retval, std::string what) { if( retval < 0 ) { - destroy_flows(); destroy_queues(); destroy_buffers(); destroy_context(); @@ -638,7 +637,6 @@ class VerbsSend { } inline void check_null(void* ptr, std::string what) { if( ptr == NULL ) { - destroy_flows(); destroy_queues(); destroy_buffers(); destroy_context(); @@ -651,7 +649,6 @@ class VerbsSend { } inline void check_null_qp(void* ptr, std::string what) { if( ptr == NULL ) { - destroy_flows(); destroy_queues(); destroy_buffers(); destroy_context(); From 58e234b239d0db2529808cf6058092e4df9b11d2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Sep 2023 15:16:46 -0600 Subject: [PATCH 0929/1155] Tweak the AVX/AVX512 tests. --- configure | 6 ++++-- configure.ac | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 8f307530d..7907179e1 100755 --- a/configure +++ b/configure @@ -21077,7 +21077,8 @@ printf %s "checking for AVX support... " >&6; } int main() { __m256d x = _mm256_set1_pd(1.0); x = _mm256_add_pd(x, x); - return _mm256_cvtsd_f64(x) != 2.0; + double f = _mm256_cvtsd_f64(x); + return f != 2.0; } @@ -21120,7 +21121,8 @@ printf %s "checking for AVX-512 support... " >&6; } int main() { __m512d x = _mm512_set1_pd(1.0); x = _mm512_add_pd(x, x); - return _mm512_cvtsd_f64(x) != 2.0; + double f = _mm512_cvtsd_f64(x); + return f != 2.0; } diff --git a/configure.ac b/configure.ac index c727be91c..0fecdd21d 100644 --- a/configure.ac +++ b/configure.ac @@ -131,7 +131,8 @@ AC_DEFUN([AC_CHECK_AVX], [ int main() { __m256d x = _mm256_set1_pd(1.0); x = _mm256_add_pd(x, x); - return _mm256_cvtsd_f64(x) != 2.0; + double f = _mm256_cvtsd_f64(x); + return f != 2.0; } ]]) ], [ @@ -158,7 +159,8 @@ AC_DEFUN([AC_CHECK_AVX512], [ int main() { __m512d x = _mm512_set1_pd(1.0); x = _mm512_add_pd(x, x); - return _mm512_cvtsd_f64(x) != 2.0; + double f = _mm512_cvtsd_f64(x); + return f != 2.0; } ]]) ], [ From 6f456a8b702fb3a1187c09ed3c68cd1692227839 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 14 Sep 2023 16:53:26 -0600 Subject: [PATCH 0930/1155] A few more things. --- src/ib_verbs_send.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 841be430b..3dbdba453 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -448,7 +448,7 @@ class VerbsSend { ::memset(_verbs.send_cq, 0, BF_VERBS_SEND_NQP * sizeof(ibv_cq*)); for(i=0; i Date: Thu, 14 Sep 2023 17:10:15 -0600 Subject: [PATCH 0931/1155] Error message cleanup now that there is send and receive. --- src/ib_verbs.hpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index ac77fe348..37b559068 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -279,12 +279,12 @@ class Verbs { _verbs.mr_buf = (uint8_t *) ::mmap(NULL, _verbs.mr_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED, -1, 0); check_error(_verbs.mr_buf == MAP_FAILED, - "allocate memory region buffer"); + "allocate receive memory region buffer"); check_error(::mlock(_verbs.mr_buf, _verbs.mr_size), - "lock memory region buffer"); + "lock receive memory region buffer"); _verbs.mr = ibv_reg_mr(_verbs.pd, _verbs.mr_buf, _verbs.mr_size, IBV_ACCESS_LOCAL_WRITE); check_null(_verbs.mr, - "register memory region"); + "register receive memory region"); } void destroy_buffers() { int failures = 0; @@ -316,29 +316,29 @@ class Verbs { // Setup the completion channel and make it non-blocking _verbs.cc = ibv_create_comp_channel(_verbs.ctx); check_null(_verbs.cc, - "create completion channel"); + "create receive completion channel"); int flags = ::fcntl(_verbs.cc->fd, F_GETFL); check_error(::fcntl(_verbs.cc->fd, F_SETFL, flags | O_NONBLOCK), - "set completion channel to non-blocking"); + "set receive completion channel to non-blocking"); flags = ::fcntl(_verbs.cc->fd, F_GETFD); check_error(::fcntl(_verbs.cc->fd, F_SETFD, flags | O_CLOEXEC), - "set completion channel to non-blocking"); + "set receive completion channel to non-blocking"); ::madvise(_verbs.cc, sizeof(ibv_pd), MADV_DONTFORK); // Setup the completion queues _verbs.cq = (ibv_cq**) ::malloc(BF_VERBS_NQP * sizeof(ibv_cq*)); check_null(_verbs.cq, - "allocate completion queues"); + "allocate receive completion queues"); ::memset(_verbs.cq, 0, BF_VERBS_NQP * sizeof(ibv_cq*)); for(i=0; i Date: Fri, 15 Sep 2023 13:00:11 -0600 Subject: [PATCH 0932/1155] Cleanup naming. --- src/ib_verbs_send.hpp | 143 +++++++++++++++++++++--------------------- 1 file changed, 71 insertions(+), 72 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 3dbdba453..9db1a9e97 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -83,14 +83,14 @@ struct bf_ibv_send { size_t mr_size; ibv_mr* mr; - ibv_cq** send_cq; + ibv_cq** cq; - uint8_t* send_mr_buf; - size_t send_mr_size; - ibv_mr* send_mr; + uint8_t* mr_buf; + size_t mr_size; + ibv_mr* mr; - bf_ibv_send_pkt* send_pkt_buf; - bf_ibv_send_pkt* send_pkt_head; + bf_ibv_send_pkt* pkt_buf; + bf_ibv_send_pkt* pkt_head; uint8_t offload_csum; uint8_t hardware_pacing; @@ -387,37 +387,37 @@ class VerbsSend { _verbs.pd = ibv_alloc_pd(_verbs.ctx); // Create the buffers and the memory region - _verbs.send_pkt_buf = (bf_ibv_send_pkt*) ::malloc(BF_VERBS_SEND_NPKTBUF*BF_VERBS_SEND_NQP * sizeof(struct bf_ibv_send_pkt)); - check_null(_verbs.send_pkt_buf, + _verbs.pkt_buf = (bf_ibv_send_pkt*) ::malloc(BF_VERBS_SEND_NPKTBUF*BF_VERBS_SEND_NQP * sizeof(struct bf_ibv_send_pkt)); + check_null(_verbs.pkt_buf, "allocate send packet buffer"); - ::memset(_verbs.send_pkt_buf, 0, BF_VERBS_SEND_NPKTBUF*BF_VERBS_SEND_NQP * sizeof(struct bf_ibv_send_pkt)); - _verbs.send_mr_size = (size_t) BF_VERBS_SEND_NPKTBUF*BF_VERBS_SEND_NQP * _pkt_size_max; - _verbs.send_mr_buf = (uint8_t *) ::mmap(NULL, _verbs.send_mr_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED, -1, 0); + ::memset(_verbs.pkt_buf, 0, BF_VERBS_SEND_NPKTBUF*BF_VERBS_SEND_NQP * sizeof(struct bf_ibv_send_pkt)); + _verbs.mr_size = (size_t) BF_VERBS_SEND_NPKTBUF*BF_VERBS_SEND_NQP * _pkt_size_max; + _verbs.mr_buf = (uint8_t *) ::mmap(NULL, _verbs.mr_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED, -1, 0); - check_error(_verbs.send_mr_buf == MAP_FAILED, - "allocate memory region buffer"); - check_error(::mlock(_verbs.send_mr_buf, _verbs.send_mr_size), - "lock memory region buffer"); - _verbs.send_mr = ibv_reg_mr(_verbs.pd, _verbs.send_mr_buf, _verbs.send_mr_size, IBV_ACCESS_LOCAL_WRITE); - check_null(_verbs.send_mr, - "register memory region"); + check_error(_verbs.mr_buf == MAP_FAILED, + "allocate send memory region buffer"); + check_error(::mlock(_verbs.mr_buf, _verbs.mr_size), + "lock send memory region buffer"); + _verbs.mr = ibv_reg_mr(_verbs.pd, _verbs.mr_buf, _verbs.mr_size, IBV_ACCESS_LOCAL_WRITE); + check_null(_verbs.mr, + "register send memory region"); } void destroy_buffers() { int failures = 0; - if( _verbs.send_mr ) { - if( ibv_dereg_mr(_verbs.send_mr) ) { + if( _verbs.mr ) { + if( ibv_dereg_mr(_verbs.mr) ) { failures += 1; } } - if( _verbs.send_mr_buf ) { - if( ::munmap(_verbs.send_mr_buf, _verbs.send_mr_size) ) { + if( _verbs.mr_buf ) { + if( ::munmap(_verbs.mr_buf, _verbs.mr_size) ) { failures += 1; } } - if( _verbs.send_pkt_buf ) { - free(_verbs.send_pkt_buf); + if( _verbs.pkt_buf ) { + free(_verbs.pkt_buf); } if( _verbs.pd ) { @@ -432,23 +432,23 @@ class VerbsSend { // Setup the completion channel and make it non-blocking _verbs.cc = ibv_create_comp_channel(_verbs.ctx); check_null(_verbs.cc, - "create completion channel"); + "create send completion channel"); int flags = ::fcntl(_verbs.cc->fd, F_GETFL); check_error(::fcntl(_verbs.cc->fd, F_SETFL, flags | O_NONBLOCK), - "set completion channel to non-blocking"); + "set send completion channel to non-blocking"); flags = ::fcntl(_verbs.cc->fd, F_GETFD); check_error(::fcntl(_verbs.cc->fd, F_SETFD, flags | O_CLOEXEC), - "set completion channel to non-blocking"); + "set send completion channel to non-blocking"); ::madvise(_verbs.cc, sizeof(ibv_pd), MADV_DONTFORK); // Setup the completion queues - _verbs.send_cq = (ibv_cq**) ::malloc(BF_VERBS_SEND_NQP * sizeof(ibv_cq*)); - check_null(_verbs.send_cq, + _verbs.cq = (ibv_cq**) ::malloc(BF_VERBS_SEND_NQP * sizeof(ibv_cq*)); + check_null(_verbs.cq, "allocate send completion queues"); - ::memset(_verbs.send_cq, 0, BF_VERBS_SEND_NQP * sizeof(ibv_cq*)); + ::memset(_verbs.cq, 0, BF_VERBS_SEND_NQP * sizeof(ibv_cq*)); for(i=0; ilkey; + _verbs.pkt_buf[i].wr.sg_list = &(_verbs.pkt_buf[i].sg); + for(j=0; j<_verbs.pkt_buf[i].wr.num_sge; j++) { + _verbs.pkt_buf[i].wr.sg_list[j].lkey = _verbs.mr->lkey; } } @@ -547,16 +547,15 @@ class VerbsSend { #endif for(i=0; iwr.next = &(_verbs.send_pkt_head->wr); - _verbs.send_pkt_head = send_pkt; + send_pkt = &(_verbs.pkt_buf[wc[j].wr_id]); + send_pkt->wr.next = &(_verbs.pkt_head->wr); + _verbs.pkt_head = send_pkt; } // for each work completion } while(num_wce); } - if( npackets == 0 || !_verbs.send_pkt_head ) { + if( npackets == 0 || !_verbs.pkt_head ) { return NULL; } - send_head = _verbs.send_pkt_head; - send_tail = _verbs.send_pkt_head; + send_head = _verbs.pkt_head; + send_tail = _verbs.pkt_head; for(i=0; iwr.next; i++) { send_tail = (bf_ibv_send_pkt*) send_tail->wr.next; } - _verbs.send_pkt_head = (bf_ibv_send_pkt*) send_tail->wr.next; + _verbs.pkt_head = (bf_ibv_send_pkt*) send_tail->wr.next; send_tail->wr.next = NULL; return send_head; @@ -744,19 +743,19 @@ class VerbsSend { uint64_t offset; for(i=0; iqueue(npackets); From 6268a3a9d5ca5a34187b55fc52f99b61f62cba23 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Sep 2023 13:00:58 -0600 Subject: [PATCH 0933/1155] Bad rename. --- src/ib_verbs_send.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 9db1a9e97..fc2f65035 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -549,7 +549,7 @@ class VerbsSend { for(i=0; i Date: Fri, 15 Sep 2023 13:08:02 -0600 Subject: [PATCH 0934/1155] Remove duplicate declarations and add in a place to store a rate limit. --- src/ib_verbs_send.hpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index fc2f65035..129306c79 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -83,12 +83,6 @@ struct bf_ibv_send { size_t mr_size; ibv_mr* mr; - ibv_cq** cq; - - uint8_t* mr_buf; - size_t mr_size; - ibv_mr* mr; - bf_ibv_send_pkt* pkt_buf; bf_ibv_send_pkt* pkt_head; @@ -147,6 +141,7 @@ class VerbsSend { int _fd; size_t _pkt_size_max; int _timeout; + uint32_t _rate_limit; bf_ibv_send _verbs; void get_interface_name(char* name) { @@ -677,7 +672,7 @@ class VerbsSend { }; VerbsSend(int fd, size_t pkt_size_max) - : _fd(fd), _pkt_size_max(pkt_size_max), _timeout(1) { + : _fd(fd), _pkt_size_max(pkt_size_max), _timeout(1), _rate_limit(0) { _timeout = get_timeout_ms(); ::memset(&_verbs, 0, sizeof(_verbs)); From 0ec345220dd135579cfe8009be3cc3b4860e32de Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Sep 2023 13:31:31 -0600 Subject: [PATCH 0935/1155] More work on hardware packet pacing. --- src/ib_verbs_send.hpp | 44 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 129306c79..f4b5f5073 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -47,12 +47,7 @@ #include // Catch for older InfiniBand verbs installs that do not have the -// IBV_RAW_PACKET_CAP_IP_CSUM feature check. -#ifndef IBV_RAW_PACKET_CAP_IP_CSUM -#define BF_ENABLE_VERBS_OFFLOAD 0 -#else -#define BF_ENABLE_VERBS_OFFLOAD 1 -#endif +//#define BF_ENABLE_VERBS_OFFLOAD 0 #ifndef BF_VERBS_SEND_NQP #define BF_VERBS_SEND_NQP 1 @@ -66,6 +61,8 @@ #define BF_VERBS_SEND_WCBATCH 16 #endif +#define BF_VERBS_SEND_PAYLOAD_OFFSET 42 + struct bf_ibv_send_pkt{ ibv_send_wr wr; ibv_sge sg; @@ -87,7 +84,7 @@ struct bf_ibv_send { bf_ibv_send_pkt* pkt_head; uint8_t offload_csum; - uint8_t hardware_pacing; + uint32_t hardware_pacing; }; struct __attribute__((packed)) bf_ethernet_hdr { @@ -330,6 +327,7 @@ class VerbsSend { if( (ibv_gid.global.subnet_prefix == 0x80feUL) \ && (ibv_gid.global.interface_id == gid) ) { found = 1; + #if defined BF_ENABLE_VERBS_OFFLOAD && BF_ENABLE_VERBS_OFFLOAD if( ibv_dev_attr.raw_packet_caps & IBV_RAW_PACKET_CAP_IP_CSUM ) { _verbs.offload_csum = 1; @@ -340,6 +338,13 @@ class VerbsSend { _verbs.offload_csum = 0; #endif std::cout << "_verbs.offload_csum: " << (int) _verbs.offload_csum << std::endl; + + _verbs.hardware_pacing = 0; + if( ibv_is_qpt_supported(ibv_dev_attr.packet_pacing_caps.supported_qpts, IBV_QPT_RAW_PACKET) == 0 ) { + _verbs.hardware_pacing = ibv_dev_attr.packet_pacing_caps.qp_rate_limit_max; + } + std::cout << "_verbs.hardware_pacing: " << (int) _verbs.hardware_pacing << std::endl; + break; } } @@ -688,6 +693,31 @@ class VerbsSend { destroy_buffers(); destroy_context(); } + inline void set_rate_limit(uint32_t rate_limit, size_t udp_length=1) { + int i; + + // Converts to B/s to kb/s assuming a packet size + size_t pkt_size = udp_length + BF_VERBS_SEND_PAYLOAD_OFFSET; + rate_limit = ((float) rate_limit) / udp_length * pkt_size / 8 / 1000; + + // Verify that this rate limit is valid + if( rate_limit > _verbs.hardware_pacing ) { + throw VerbsSend::Error("Failed to set rate limit, specified rate limit is out of range"); + } + + // Apply the rate limit + ibv_qp_rate_limit_attr qp_attr; + ::memset(&qp_attr, 0, sizeof(ibv_qp_rate_limit_attr)); + attr.rate_limit = rate_limit; + attr.typical_pkt_sz = pkt_size; + attr.max_burst_sz = 0; + for(i=0; iget_mac_address(&(src_mac[0])); From 97483f431b942cb0cc5ef65e91dfca3c8fabddf0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Sep 2023 13:33:27 -0600 Subject: [PATCH 0936/1155] Fix and rename. --- src/ib_verbs_send.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index f4b5f5073..be359948e 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -706,13 +706,13 @@ class VerbsSend { } // Apply the rate limit - ibv_qp_rate_limit_attr qp_attr; - ::memset(&qp_attr, 0, sizeof(ibv_qp_rate_limit_attr)); - attr.rate_limit = rate_limit; - attr.typical_pkt_sz = pkt_size; - attr.max_burst_sz = 0; + ibv_qp_rate_limit_attr rl_attr; + ::memset(&rl_attr, 0, sizeof(ibv_qp_rate_limit_attr)); + rl_attr.rate_limit = rate_limit; + rl_attr.typical_pkt_sz = pkt_size; + rl_attr.max_burst_sz = 0; for(i=0; i Date: Fri, 15 Sep 2023 13:48:37 -0600 Subject: [PATCH 0937/1155] Inverted logic. --- src/ib_verbs_send.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index be359948e..766f6daf6 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -340,7 +340,7 @@ class VerbsSend { std::cout << "_verbs.offload_csum: " << (int) _verbs.offload_csum << std::endl; _verbs.hardware_pacing = 0; - if( ibv_is_qpt_supported(ibv_dev_attr.packet_pacing_caps.supported_qpts, IBV_QPT_RAW_PACKET) == 0 ) { + if( ibv_is_qpt_supported(ibv_dev_attr.packet_pacing_caps.supported_qpts, IBV_QPT_RAW_PACKET) ) { _verbs.hardware_pacing = ibv_dev_attr.packet_pacing_caps.qp_rate_limit_max; } std::cout << "_verbs.hardware_pacing: " << (int) _verbs.hardware_pacing << std::endl; From 9e4c0549e4f89c3acbb76f619cf2c94276e84023 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Sep 2023 13:58:09 -0600 Subject: [PATCH 0938/1155] Bits not bytes. --- src/ib_verbs_send.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 766f6daf6..66fb1b54c 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -698,7 +698,7 @@ class VerbsSend { // Converts to B/s to kb/s assuming a packet size size_t pkt_size = udp_length + BF_VERBS_SEND_PAYLOAD_OFFSET; - rate_limit = ((float) rate_limit) / udp_length * pkt_size / 8 / 1000; + rate_limit = ((float) rate_limit) / udp_length * pkt_size * 8 / 1000; // Verify that this rate limit is valid if( rate_limit > _verbs.hardware_pacing ) { From 35d75bece4e5631c18ab2ea8ba4e1a1c8c069188 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Sep 2023 07:52:12 -0600 Subject: [PATCH 0939/1155] Fix SSE/AVX/AVX512 support detection. --- config/cuda.m4 | 32 ++-- config/intrinsics.m4 | 121 ++++++++++++++ configure | 386 ++++++++++++++++++++++++++----------------- configure.ac | 90 +--------- src/Makefile.in | 2 +- 5 files changed, 382 insertions(+), 249 deletions(-) create mode 100644 config/intrinsics.m4 diff --git a/config/cuda.m4 b/config/cuda.m4 index 2d34c6036..2500ef55f 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -14,6 +14,11 @@ AC_DEFUN([AX_CHECK_CUDA], [enable_cuda=no], [enable_cuda=yes]) + NVCCLIBS="$LIBS" + ac_compile_save="$ac_compile" + ac_link_save="$ac_link" + ac_run_save="$ac_run" + AC_SUBST([HAVE_CUDA], [0]) AC_SUBST([CUDA_VERSION], [0]) AC_SUBST([CUDA_HAVE_CXX20], [0]) @@ -48,9 +53,9 @@ AC_DEFUN([AX_CHECK_CUDA], if test "$HAVE_CUDA" = "1"; then LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart" + NVCCLIBS="$NVCCLIBS -lcuda -lcudart" - ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $NVCCLIBS conftest.$ac_ext >&5' AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include @@ -67,7 +72,7 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" + NVCCLIBS="$NVCCLIBS_save" fi if test "$HAVE_CUDA" = "1"; then @@ -136,7 +141,7 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" + NVCCLIBS="$NVCCLIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" fi AC_ARG_WITH([gpu_archs], @@ -155,11 +160,11 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" + NVCCLIBS_save="$NVCCLIBS" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="-lcuda -lcudart" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + NVCCLIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $NVCCLIBS conftest.$ac_ext>&5' AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #include @@ -209,7 +214,7 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" + NVCCLIBS="$NVCCLIBS_save" else AC_SUBST([GPU_ARCHS], [$with_gpu_archs]) fi @@ -242,11 +247,11 @@ AC_DEFUN([AX_CHECK_CUDA], AC_MSG_CHECKING([for thrust pinned allocated support]) CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" + NVCCLIBS_save="$NVCCLIBS" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $NVCCLIBS conftest.$ac_ext>&5' AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #include @@ -260,10 +265,13 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" - + NVCCLIBS="$NVCCLIBS_save" else AC_SUBST([GPU_PASCAL_MANAGEDMEM], [0]) AC_SUBST([GPU_EXP_PINNED_ALLOC], [1]) fi + + ac_compile="$ac_compile_save" + ac_link="$ac_link_save" + ac_run="$ac_run_save" ]) diff --git a/config/intrinsics.m4 b/config/intrinsics.m4 new file mode 100644 index 000000000..2f99a93de --- /dev/null +++ b/config/intrinsics.m4 @@ -0,0 +1,121 @@ +# +# SSE +# + +AC_DEFUN([AX_CHECK_SSE], +[ + AC_PROVIDE([AX_CHECK_SSE]) + AC_ARG_ENABLE([sse], + [AS_HELP_STRING([--disable-sse], + [disable SSE support (default=no)])], + [enable_sse=no], + [enable_sse=yes]) + + AC_SUBST([HAVE_SSE], [0]) + + if test "$enable_sse" = "yes"; then + AC_MSG_CHECKING([for SSE support via '-msse']) + + CXXFLAGS_temp="$CXXFLAGS -msse" + + ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + #include ]], + [[ + __m128 x = _mm_set1_ps(1.0f); + x = _mm_add_ps(x, x); + return _mm_cvtss_f32(x) != 2.0f;]])], + [ + CXXFLAGS="$CXXFLAGS -msse" + AC_SUBST([HAVE_SSE], [1]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) + fi +]) + + + +# +# AVX +# + +AC_DEFUN([AX_CHECK_AVX], +[ + AC_PROVIDE([AX_CHECK_AVX]) + AC_ARG_ENABLE([avx], + [AS_HELP_STRING([--disable-avx], + [disable AVX support (default=no)])], + [enable_avx=no], + [enable_avx=yes]) + + AC_SUBST([HAVE_AVX], [0]) + + if test "$enable_avx" = "yes"; then + AC_MSG_CHECKING([for AVX support via '-mavx']) + + CXXFLAGS_temp="$CXXFLAGS -mavx" + ac_run_save="$ac_run" + + ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + #include ]], + [[ + __m256d x = _mm256_set1_pd(1.0); + x = _mm256_add_pd(x, x); + return _mm256_cvtsd_f64(x) != 2.0;]])], + [ + CXXFLAGS="$CXXFLAGS -mavx" + AC_SUBST([HAVE_AVX], [1]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) + + ac_run="$ac_run_save" + fi +]) + +# +# AVX512 +# + +AC_DEFUN([AX_CHECK_AVX512], +[ + AC_PROVIDE([AX_CHECK_AVX512]) + AC_ARG_ENABLE([avx512], + [AS_HELP_STRING([--disable-avx512], + [disable AVX512 support (default=no)])], + [enable_avx512=no], + [enable_avx512=yes]) + + AC_SUBST([HAVE_AVX512], [0]) + + if test "$enable_avx512" = "yes"; then + AC_MSG_CHECKING([for AVX-512 support via '-mavx512f']) + + CXXFLAGS_temp="$CXXFLAGS -mavx512f" + ac_run_save="$ac_run" + + ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + #include ]], + [[ + __m512d x = _mm512_set1_pd(1.0); + x = _mm512_add_pd(x, x); + return _mm512_cvtsd_f64(x) != 2.0;]])], + [ + CXXFLAGS="$CXXFLAGS -mavx512f" + AC_SUBST([HAVE_AVX512], [1]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) + + ac_run="$ac_run_save" + fi +]) diff --git a/configure b/configure index 7907179e1..0d6140a84 100755 --- a/configure +++ b/configure @@ -712,6 +712,9 @@ HAVE_PYTHON HAVE_MAP_CACHE HAVE_CUDA_DEBUG enable_native_arch +HAVE_AVX512 +HAVE_AVX +HAVE_SSE HAVE_TRACE HAVE_DEBUG HAVE_TMPFS @@ -738,9 +741,6 @@ HAVE_RDMA HAVE_VERBS HAVE_VMA HAVE_HWLOC -HAVE_AVX512 -HAVE_AVX -HAVE_SSE HAVE_FLOAT128 HAVE_OPENMP LIBOBJS @@ -867,6 +867,9 @@ with_alignment with_logging_dir enable_debug enable_trace +enable_sse +enable_avx +enable_avx512 enable_native_arch enable_cuda_debug enable_map_cache @@ -1537,6 +1540,9 @@ Optional Features: --disable-cuda disable cuda support (default=no) --enable-debug enable debugging mode (default=no) --enable-trace enable tracing mode for nvprof/nvvp (default=no) + --disable-sse disable SSE support (default=no) + --disable-avx disable AVX support (default=no) + --disable-avx512 disable AVX512 support (default=no) --disable-native-arch disable native architecture compilation (default=no) --enable-cuda-debug enable CUDA debugging (nvcc -G; default=no) --disable-map-cache disable caching bifrost.map kernels (default=no) @@ -21015,137 +21021,6 @@ then : fi -# -# SSE -# - - -HAVE_SSE=0 - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SSE support" >&5 -printf %s "checking for SSE support... " >&6; } - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - #include - int main() { - __m128 x = _mm_set1_ps(1.0f); - x = _mm_add_ps(x, x); - return _mm_cvtss_f32(x) != 2.0f; - } - - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - HAVE_SSE=1 - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -else $as_nop - - HAVE_SSE=0 - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - -# -# AVX -# - - -HAVE_AVX=0 - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AVX support" >&5 -printf %s "checking for AVX support... " >&6; } - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - #include - int main() { - __m256d x = _mm256_set1_pd(1.0); - x = _mm256_add_pd(x, x); - double f = _mm256_cvtsd_f64(x); - return f != 2.0; - } - - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - HAVE_AVX=1 - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -else $as_nop - - HAVE_AVX=0 - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - -# -# AVX512 -# - - -HAVE_AVX512=0 - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AVX-512 support" >&5 -printf %s "checking for AVX-512 support... " >&6; } - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - #include - int main() { - __m512d x = _mm512_set1_pd(1.0); - x = _mm512_add_pd(x, x); - double f = _mm512_cvtsd_f64(x); - return f != 2.0; - } - - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - HAVE_AVX512=1 - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -else $as_nop - - HAVE_AVX512=0 - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # # HWLOC # @@ -21475,6 +21350,11 @@ else $as_nop fi + NVCCLIBS="$LIBS" + ac_compile_save="$ac_compile" + ac_link_save="$ac_link" + ac_run_save="$ac_run" + HAVE_CUDA=0 CUDA_VERSION=0 @@ -21672,9 +21552,9 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart" + NVCCLIBS="$NVCCLIBS -lcuda -lcudart" - ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $NVCCLIBS conftest.$ac_ext >&5' cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21711,7 +21591,7 @@ printf "%s\n" "no" >&6; } CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" + NVCCLIBS="$NVCCLIBS_save" fi if test "$HAVE_CUDA" = "1"; then @@ -21802,7 +21682,7 @@ printf "%s\n" "no, only the 'legacy' stream model is supported" >&6; } CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" + NVCCLIBS="$NVCCLIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" fi @@ -21828,11 +21708,11 @@ printf %s "checking which CUDA architectures to target... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" + NVCCLIBS_save="$NVCCLIBS" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="-lcuda -lcudart" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + NVCCLIBS="-lcuda -lcudart" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $NVCCLIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 @@ -21909,7 +21789,7 @@ fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" + NVCCLIBS="$NVCCLIBS_save" else GPU_ARCHS=$with_gpu_archs @@ -21953,11 +21833,11 @@ printf "%s\n" "no" >&6; } printf %s "checking for thrust pinned allocated support... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" + NVCCLIBS_save="$NVCCLIBS" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $NVCCLIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 @@ -21999,8 +21879,7 @@ fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" - + NVCCLIBS="$NVCCLIBS_save" else GPU_PASCAL_MANAGEDMEM=0 @@ -22008,6 +21887,10 @@ fi fi + ac_compile="$ac_compile_save" + ac_link="$ac_link_save" + ac_run="$ac_run_save" + # Check whether --with-shared_mem was given. @@ -22181,6 +22064,207 @@ fi + # Check whether --enable-sse was given. +if test ${enable_sse+y} +then : + enableval=$enable_sse; enable_sse=no +else $as_nop + enable_sse=yes +fi + + + HAVE_SSE=0 + + + if test "$enable_sse" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SSE support via '-msse'" >&5 +printf %s "checking for SSE support via '-msse'... " >&6; } + + CXXFLAGS_temp="$CXXFLAGS -msse" + + ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include +int +main (void) +{ + + __m128 x = _mm_set1_ps(1.0f); + x = _mm_add_ps(x, x); + return _mm_cvtss_f32(x) != 2.0f; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO" +then : + + CXXFLAGS="$CXXFLAGS -msse" + HAVE_SSE=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + + + + # Check whether --enable-avx was given. +if test ${enable_avx+y} +then : + enableval=$enable_avx; enable_avx=no +else $as_nop + enable_avx=yes +fi + + + HAVE_AVX=0 + + + if test "$enable_avx" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AVX support via '-mavx'" >&5 +printf %s "checking for AVX support via '-mavx'... " >&6; } + + CXXFLAGS_temp="$CXXFLAGS -mavx" + ac_run_save="$ac_run" + + ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include +int +main (void) +{ + + __m256d x = _mm256_set1_pd(1.0); + x = _mm256_add_pd(x, x); + return _mm256_cvtsd_f64(x) != 2.0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO" +then : + + CXXFLAGS="$CXXFLAGS -mavx" + HAVE_AVX=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + + ac_run="$ac_run_save" + fi + + + + # Check whether --enable-avx512 was given. +if test ${enable_avx512+y} +then : + enableval=$enable_avx512; enable_avx512=no +else $as_nop + enable_avx512=yes +fi + + + HAVE_AVX512=0 + + + if test "$enable_avx512" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AVX-512 support via '-mavx512f'" >&5 +printf %s "checking for AVX-512 support via '-mavx512f'... " >&6; } + + CXXFLAGS_temp="$CXXFLAGS -mavx512f" + ac_run_save="$ac_run" + + ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include +int +main (void) +{ + + __m512d x = _mm512_set1_pd(1.0); + x = _mm512_add_pd(x, x); + return _mm512_cvtsd_f64(x) != 2.0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO" +then : + + CXXFLAGS="$CXXFLAGS -mavx512f" + HAVE_AVX512=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + + ac_run="$ac_run_save" + fi + + + # Check whether --enable-native_arch was given. if test ${enable_native_arch+y} then : @@ -27253,11 +27337,6 @@ if test x$enable_cuda_debug != xno then : OPTIONS="$OPTIONS cuda_debug" -fi -if test x$enable_native_arch != xno -then : - OPTIONS="$OPTIONS native" - fi if test x$HAVE_SSE != x0 then : @@ -27273,6 +27352,11 @@ if test x$HAVE_AVX512 != x0 then : OPTIONS="$OPTIONS avx512" +fi +if test x$enable_native_arch != xno +then : + OPTIONS="$OPTIONS native" + fi if test x$HAVE_FLOAT128 != x0 then : diff --git a/configure.ac b/configure.ac index 0fecdd21d..f2b92186c 100644 --- a/configure.ac +++ b/configure.ac @@ -91,89 +91,6 @@ AC_SUBST([HAVE_FLOAT128], [0]) AS_IF([test x$HAVE_HAVE_LONG_DOUBLE_WIDER = x1], [AC_SUBST([HAVE_FLOAT128], [0])]) -# -# SSE -# - -AC_DEFUN([AC_CHECK_SSE], [ - AC_MSG_CHECKING([for SSE support]) - - AC_COMPILE_IFELSE([ - AC_LANG_SOURCE([[ - #include - int main() { - __m128 x = _mm_set1_ps(1.0f); - x = _mm_add_ps(x, x); - return _mm_cvtss_f32(x) != 2.0f; - } - ]]) - ], [ - AC_SUBST([HAVE_SSE], [1]) - AC_MSG_RESULT([yes]) - ], [ - AC_SUBST([HAVE_SSE], [0]) - AC_MSG_RESULT([no]) - ]) -]) -AC_SUBST([HAVE_SSE], [0]) -AC_CHECK_SSE - -# -# AVX -# - -AC_DEFUN([AC_CHECK_AVX], [ - AC_MSG_CHECKING([for AVX support]) - - AC_COMPILE_IFELSE([ - AC_LANG_SOURCE([[ - #include - int main() { - __m256d x = _mm256_set1_pd(1.0); - x = _mm256_add_pd(x, x); - double f = _mm256_cvtsd_f64(x); - return f != 2.0; - } - ]]) - ], [ - AC_SUBST([HAVE_AVX], [1]) - AC_MSG_RESULT([yes]) - ], [ - AC_SUBST([HAVE_AVX], [0]) - AC_MSG_RESULT([no]) - ]) -]) -AC_SUBST([HAVE_AVX], [0]) -AC_CHECK_AVX - -# -# AVX512 -# - -AC_DEFUN([AC_CHECK_AVX512], [ - AC_MSG_CHECKING([for AVX-512 support]) - - AC_COMPILE_IFELSE([ - AC_LANG_SOURCE([[ - #include - int main() { - __m512d x = _mm512_set1_pd(1.0); - x = _mm512_add_pd(x, x); - double f = _mm512_cvtsd_f64(x); - return f != 2.0; - } - ]]) - ], [ - AC_SUBST([HAVE_AVX512], [1]) - AC_MSG_RESULT([yes]) - ], [ - AC_SUBST([HAVE_AVX512], [0]) - AC_MSG_RESULT([no]) - ]) -]) -AC_SUBST([HAVE_AVX512], [0]) -AC_CHECK_AVX512 - # # HWLOC # @@ -310,6 +227,9 @@ AC_SUBST([HAVE_TRACE], [0]) AS_IF([test x$enable_trace != xno], [AC_SUBST([HAVE_TRACE], [1])]) +AX_CHECK_SSE +AX_CHECK_AVX +AX_CHECK_AVX512 AX_CHECK_NATIVE_ARCH AC_ARG_ENABLE([cuda_debug], @@ -505,14 +425,14 @@ AS_IF([test x$enable_trace != xno], [AC_SUBST([OPTIONS], ["$OPTIONS trace"])]) AS_IF([test x$enable_cuda_debug != xno], [AC_SUBST([OPTIONS], ["$OPTIONS cuda_debug"])]) -AS_IF([test x$enable_native_arch != xno], - [AC_SUBST([OPTIONS], ["$OPTIONS native"])]) AS_IF([test x$HAVE_SSE != x0], [AC_SUBST([OPTIONS], ["$OPTIONS sse"])]) AS_IF([test x$HAVE_AVX != x0], [AC_SUBST([OPTIONS], ["$OPTIONS avx"])]) AS_IF([test x$HAVE_AVX512 != x0], [AC_SUBST([OPTIONS], ["$OPTIONS avx512"])]) +AS_IF([test x$enable_native_arch != xno], + [AC_SUBST([OPTIONS], ["$OPTIONS native"])]) AS_IF([test x$HAVE_FLOAT128 != x0], [AC_SUBST([OPTIONS], ["$OPTIONS float128"])]) AS_IF([test x$enable_map_cache != xno], diff --git a/src/Makefile.in b/src/Makefile.in index 360859f60..d7330eec6 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -9,7 +9,7 @@ LINKER ?= @CXX@ CPPFLAGS ?= @CPPFLAGS@ CXXFLAGS ?= @CXXFLAGS@ NVCCFLAGS ?= @NVCCFLAGS@ -LDFLAGS ?= @LDFLAGS@ @LIBS@ +LDFLAGS ?= @LDFLAGS@ @NVCCLIBS@ DOXYGEN ?= @DX_DOXYGEN@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ From b4d06567c1d9cf5c20a21611c99709c002c76bc7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Sep 2023 08:01:04 -0600 Subject: [PATCH 0940/1155] Fix the fix. --- configure | 1 + configure.ac | 1 + src/Makefile.in | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 0d6140a84..6d1a1094c 100755 --- a/configure +++ b/configure @@ -24976,6 +24976,7 @@ fi CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" +LIBS="$NVCCLIBS" ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h" diff --git a/configure.ac b/configure.ac index f2b92186c..1513aead8 100644 --- a/configure.ac +++ b/configure.ac @@ -375,6 +375,7 @@ AS_IF([test x$STDCXX_IS_SET != x1], CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" +LIBS="$NVCCLIBS" AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h]) diff --git a/src/Makefile.in b/src/Makefile.in index d7330eec6..360859f60 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -9,7 +9,7 @@ LINKER ?= @CXX@ CPPFLAGS ?= @CPPFLAGS@ CXXFLAGS ?= @CXXFLAGS@ NVCCFLAGS ?= @NVCCFLAGS@ -LDFLAGS ?= @LDFLAGS@ @NVCCLIBS@ +LDFLAGS ?= @LDFLAGS@ @LIBS@ DOXYGEN ?= @DX_DOXYGEN@ PYBUILDFLAGS ?= @PYBUILDFLAGS@ PYINSTALLFLAGS ?= @PYINSTALLFLAGS@ From 74385c86374688066c00a1bd7eb886d0e2c6f108 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Sep 2023 08:06:57 -0600 Subject: [PATCH 0941/1155] Better? --- config/cuda.m4 | 10 +++++----- configure | 12 ++++++------ configure.ac | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 2500ef55f..205182530 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -14,7 +14,7 @@ AC_DEFUN([AX_CHECK_CUDA], [enable_cuda=no], [enable_cuda=yes]) - NVCCLIBS="$LIBS" + NVCCLIBS="" ac_compile_save="$ac_compile" ac_link_save="$ac_link" ac_run_save="$ac_run" @@ -40,7 +40,7 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" + NVCCLIBS_save="$NVCCLIBS" ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' AC_COMPILE_IFELSE([ @@ -55,7 +55,7 @@ AC_DEFUN([AX_CHECK_CUDA], LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" NVCCLIBS="$NVCCLIBS -lcuda -lcudart" - ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $NVCCLIBS conftest.$ac_ext >&5' + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext >&5' AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include @@ -164,7 +164,7 @@ AC_DEFUN([AX_CHECK_CUDA], LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" NVCCLIBS="-lcuda -lcudart" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $NVCCLIBS conftest.$ac_ext>&5' + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #include @@ -251,7 +251,7 @@ AC_DEFUN([AX_CHECK_CUDA], LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $NVCCLIBS conftest.$ac_ext>&5' + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #include diff --git a/configure b/configure index 6d1a1094c..cd5ba5996 100755 --- a/configure +++ b/configure @@ -21350,7 +21350,7 @@ else $as_nop fi - NVCCLIBS="$LIBS" + NVCCLIBS="" ac_compile_save="$ac_compile" ac_link_save="$ac_link" ac_run_save="$ac_run" @@ -21524,7 +21524,7 @@ printf %s "checking for a working CUDA installation... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" + NVCCLIBS_save="$NVCCLIBS" ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21554,7 +21554,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" NVCCLIBS="$NVCCLIBS -lcuda -lcudart" - ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $NVCCLIBS conftest.$ac_ext >&5' + ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext >&5' cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21712,7 +21712,7 @@ printf %s "checking which CUDA architectures to target... " >&6; } LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" NVCCLIBS="-lcuda -lcudart" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $NVCCLIBS conftest.$ac_ext>&5' + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 @@ -21837,7 +21837,7 @@ printf %s "checking for thrust pinned allocated support... " >&6; } LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $NVCCLIBS conftest.$ac_ext>&5' + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 @@ -24976,7 +24976,7 @@ fi CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -LIBS="$NVCCLIBS" +LIBS="$LIBS $NVCCLIBS" ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h" diff --git a/configure.ac b/configure.ac index 1513aead8..16e0145d5 100644 --- a/configure.ac +++ b/configure.ac @@ -375,7 +375,7 @@ AS_IF([test x$STDCXX_IS_SET != x1], CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -LIBS="$NVCCLIBS" +LIBS="$LIBS $NVCCLIBS" AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h]) From 6dd3ac15fce24d171d007e0859bb79a46d3dd91e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Sep 2023 08:14:18 -0600 Subject: [PATCH 0942/1155] Missed one LIBS -> NVCCLIBS. --- config/cuda.m4 | 2 +- configure | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 205182530..b03f84725 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -250,7 +250,7 @@ AC_DEFUN([AX_CHECK_CUDA], NVCCLIBS_save="$NVCCLIBS" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="-lcuda -lcudart" + NVCCLIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ diff --git a/configure b/configure index cd5ba5996..6ab41d46a 100755 --- a/configure +++ b/configure @@ -21836,7 +21836,7 @@ printf %s "checking for thrust pinned allocated support... " >&6; } NVCCLIBS_save="$NVCCLIBS" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="-lcuda -lcudart" + NVCCLIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : From 9cd4056d840ca9636746f9162008869318f886b6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Sep 2023 11:22:57 -0600 Subject: [PATCH 0943/1155] Move RateLimiter instantiation frinto PacketWriterMethod to make it work with the Verbs hardware packet pacing. --- python/bifrost/packet_writer.py | 6 +++--- src/bifrost/packet_writer.h | 4 ++-- src/ib_verbs_send.hpp | 3 +++ src/packet_writer.cpp | 6 +++--- src/packet_writer.hpp | 38 ++++++++++++++++++++++----------- 5 files changed, 36 insertions(+), 21 deletions(-) diff --git a/python/bifrost/packet_writer.py b/python/bifrost/packet_writer.py index 88d503e41..2ae2f7d95 100644 --- a/python/bifrost/packet_writer.py +++ b/python/bifrost/packet_writer.py @@ -1,5 +1,5 @@ -# Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -52,8 +52,8 @@ def __enter__(self): return self def __exit__(self, type, value, tb): pass - def set_rate_limit(self, rate_limit_Bps): - _check(_bf.bfPacketWriterSetRateLimit(self.obj, rate_limit_Bps)) + def set_rate_limit(self, rate_limit_pps): + _check(_bf.bfPacketWriterSetRateLimit(self.obj, rate_limit_pps)) def reset_counter(self): _check(_bf.bfPacketWriterResetCounter(self.obj)) def send(self, headerinfo, seq, seq_increment, src, src_increment, idata): diff --git a/src/bifrost/packet_writer.h b/src/bifrost/packet_writer.h index 76614c7d1..133a7ac4b 100644 --- a/src/bifrost/packet_writer.h +++ b/src/bifrost/packet_writer.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -69,7 +69,7 @@ BFstatus bfUdpVerbsTransmitCreate(BFpacketwriter* obj, BFstatus bfPacketWriterDestroy(BFpacketwriter obj); BFstatus bfPacketWriterSetRateLimit(BFpacketwriter obj, unsigned int rate_limit); -BFstatus bfPacketWriterResetRateLimit(BFpacketwriter obj); +BFstatus bfPacketWriterResetRateLimitCounter(BFpacketwriter obj); BFstatus bfPacketWriterResetCounter(BFpacketwriter obj); BFstatus bfPacketWriterSend(BFpacketwriter obj, BFheaderinfo info, diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 66fb1b54c..775d0aa54 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -701,6 +701,9 @@ class VerbsSend { rate_limit = ((float) rate_limit) / udp_length * pkt_size * 8 / 1000; // Verify that this rate limit is valid + if( rate_limit == 0 ) { + rate_limit = _verbs.hardware_pacing; + } if( rate_limit > _verbs.hardware_pacing ) { throw VerbsSend::Error("Failed to set rate limit, specified rate limit is out of range"); } diff --git a/src/packet_writer.cpp b/src/packet_writer.cpp index d89a41823..e358478eb 100644 --- a/src/packet_writer.cpp +++ b/src/packet_writer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. + * Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -172,9 +172,9 @@ BFstatus bfPacketWriterSetRateLimit(BFpacketwriter obj, BF_TRY_RETURN(obj->set_rate_limit(rate_limit)); } -BFstatus bfPacketWriterResetRateLimit(BFpacketwriter obj) { +BFstatus bfPacketWriterResetRateLimitCounter(BFpacketwriter obj) { BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); - BF_TRY_RETURN(obj->reset_rate_limit()); + BF_TRY_RETURN(obj->reset_rate_limit_counter()); } BFstatus bfPacketWriterResetCounter(BFpacketwriter obj) { diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 0051e88bb..5de858a3d 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -63,7 +63,7 @@ class RateLimiter { : _rate(rate_limit), _counter(0), _first(true) {} inline void set_rate(uint32_t rate_limit) { _rate = rate_limit; } inline uint32_t get_rate() { return _rate; } - inline void reset() { _first = true; _counter = 0; } + inline void reset_counter() { _first = true; _counter = 0; } inline void begin() { if( _first ) { _start = std::chrono::high_resolution_clock::now(); @@ -73,7 +73,7 @@ class RateLimiter { inline void end_and_wait(size_t npackets) { if( _rate > 0 ) { _stop = std::chrono::high_resolution_clock::now(); - _counter += npackets; + _counter += std::max(0, npackets); double elapsed_needed = (double) _counter / _rate; std::chrono::duration elapsed_actual = std::chrono::duration_cast>(_stop-_start); @@ -90,10 +90,11 @@ class RateLimiter { class PacketWriterMethod { protected: - int _fd; + int _fd; + RateLimiter _limiter; public: PacketWriterMethod(int fd) - : _fd(fd) {} + : _fd(fd), _limiter(0) {} virtual ssize_t send_packets(char* hdrs, int hdr_size, char* data, @@ -103,6 +104,9 @@ class PacketWriterMethod { return 0; } virtual const char* get_name() { return "generic_writer"; } + inline void set_rate(uint32_t rate_limit) { _limter.set_rate(rate); } + inline uint32_t get_rate() { return _limiter.get_rate(); } + inline void reset_counter() { _limiter.reset_counter(); } }; class DiskPacketWriter : public PacketWriterMethod { @@ -116,6 +120,7 @@ class DiskPacketWriter : public PacketWriterMethod { int npackets, int flags=0) { ssize_t status, nsent = 0; + _limiter.begin(); for(int i=0; i 0 ) { + _ibv.set_rate_limit(_rate_holder*_last_size); + } } for(int i=0; ireset_stats(); } - inline void set_rate_limit(uint32_t rate_limit) { _limiter.set_rate(rate_limit); } - inline uint32_t get_rate_limit() { return _limiter.get_rate(); } - inline void reset_rate_limit() { _limiter.reset(); } + inline void set_rate_limit(uint32_t rate_limit) { _method.set_rate(rate_limit); } + inline uint32_t get_rate_limit() { return _method.get_rate(); } + inline void reset_rate_limit_counter() { _method.reset_counter(); } inline ssize_t send(char* hdrs, int hdr_size, char* datas, int data_size, int npackets) { - _limiter.begin(); ssize_t nsent = _method->send_packets(hdrs, hdr_size, datas, data_size, npackets); if( nsent == -1 ) { _stats.ninvalid += npackets; @@ -300,7 +313,6 @@ class PacketWriterThread : public BoundThread { _stats.nvalid_bytes += nsent * (hdr_size + data_size); _stats.ninvalid += (npackets - nsent); _stats.ninvalid_bytes += (npackets - nsent) * (hdr_size + data_size); - _limiter.end_and_wait(npackets); } return nsent; } From b2ed5827b7516e3822201ffb666adb2c304f8962 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 18 Sep 2023 11:47:47 -0600 Subject: [PATCH 0944/1155] Cleanups to get things to compile. --- src/ib_verbs_send.hpp | 2 +- src/packet_writer.hpp | 16 ++++++++-------- src/udp_socket.cpp | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 775d0aa54..b6d3549d9 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -525,7 +525,7 @@ class VerbsSend { "find existing send queue pairs"); // Setup the work requests - int i, j, k; + int i, j; for(i=0; i 0 ) { _stop = std::chrono::high_resolution_clock::now(); - _counter += std::max(0, npackets); + _counter += std::max((size_t) 0, npackets); double elapsed_needed = (double) _counter / _rate; std::chrono::duration elapsed_actual = std::chrono::duration_cast>(_stop-_start); @@ -104,7 +104,7 @@ class PacketWriterMethod { return 0; } virtual const char* get_name() { return "generic_writer"; } - inline void set_rate(uint32_t rate_limit) { _limter.set_rate(rate); } + inline void set_rate(uint32_t rate_limit) { _limiter.set_rate(rate_limit); } inline uint32_t get_rate() { return _limiter.get_rate(); } inline void reset_counter() { _limiter.reset_counter(); } }; @@ -296,9 +296,9 @@ class PacketWriterThread : public BoundThread { : BoundThread(core), _method(method), _core(core) { this->reset_stats(); } - inline void set_rate_limit(uint32_t rate_limit) { _method.set_rate(rate_limit); } - inline uint32_t get_rate_limit() { return _method.get_rate(); } - inline void reset_rate_limit_counter() { _method.reset_counter(); } + inline void set_rate_limit(uint32_t rate_limit) { _method->set_rate(rate_limit); } + inline uint32_t get_rate_limit() { return _method->get_rate(); } + inline void reset_rate_limit_counter() { _method->reset_counter(); } inline ssize_t send(char* hdrs, int hdr_size, char* datas, @@ -387,7 +387,7 @@ class BFpacketwriter_impl { } } inline void set_rate_limit(uint32_t rate_limit) { _writer->set_rate_limit(rate_limit); } - inline void reset_rate_limit() { _writer->reset_rate_limit(); } + inline void reset_rate_limit_counter() { _writer->reset_rate_limit_counter(); } inline void reset_counter() { _framecount = 0; } BFstatus send(BFheaderinfo info, BFoffset seq, @@ -557,7 +557,7 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, } else { return BF_STATUS_UNSUPPORTED; } - PacketWriterThread* writer = new PacketWriterThread(method, 0, core); + PacketWriterThread* writer = new PacketWriterThread(method, core); if( std::string(format).substr(0, 8) == std::string("generic_") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_generic_impl(writer, nsamples), diff --git a/src/udp_socket.cpp b/src/udp_socket.cpp index 5bd694aaa..bd2cd10b4 100644 --- a/src/udp_socket.cpp +++ b/src/udp_socket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2021, The Bifrost Authors. All rights reserved. + * Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -101,7 +101,7 @@ BFstatus bfUdpSocketGetPromiscuous(BFudpsocket obj, int* promisc) { try { *promisc = obj->get_promiscuous(); } - catch( Socket::Error ) { + catch( Socket::Error& ) { *promisc = 0; return BF_STATUS_INVALID_STATE; } From 1233200cc02f9b25e87a66147c90e4e530c032de Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Sep 2023 18:03:54 -0600 Subject: [PATCH 0945/1155] Extra _CPU_STATE. --- tools/like_top.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/like_top.py b/tools/like_top.py index 2444a0498..8f9e8d4f2 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -72,7 +72,6 @@ def get_load_average(): data['lastPID'] = fields[4] return data -_CPU_STATE _CPU_STATE = {} def get_processor_usage(): """ From 5c265ede0d88d6846f14260baa17257e13a539d7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Sep 2023 18:04:30 -0600 Subject: [PATCH 0946/1155] Extra _CPU_STATE. --- tools/like_top.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/like_top.py b/tools/like_top.py index 89ca700dd..b22d43a90 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -81,7 +81,6 @@ def get_load_average(): data['lastPID'] = fields[4] return data -_CPU_STATE _CPU_STATE = {} def get_processor_usage(): """ From e7edee8c1c37c9b49c371bdd8dad3e0242da8443 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Sep 2023 07:52:23 -0600 Subject: [PATCH 0947/1155] Move CUDA gencode options into configure. --- configure | 11 +++++++++++ configure.ac | 9 +++++++++ src/Makefile.in | 18 +----------------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/configure b/configure index 6ab41d46a..fefa29a36 100755 --- a/configure +++ b/configure @@ -24978,6 +24978,17 @@ CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" LIBS="$LIBS $NVCCLIBS" +# +# Additional CUDA flags +# +if test x$HAVE_CUDA != x0 +then : + NVCC_GENCODE=$(echo $GPU_ARCHS | ${SED} -e 's/\([0-9]\{2,3\}\)/-gencode arch=compute_\1,\\"code=sm_\1\\"/g;') + NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE}-gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" + CPPFLAGS="$CPPFLAGS -I$CUDA_HOME/include" + +fi + ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h" diff --git a/configure.ac b/configure.ac index 16e0145d5..3f4ec4fd7 100644 --- a/configure.ac +++ b/configure.ac @@ -377,6 +377,15 @@ CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" LIBS="$LIBS $NVCCLIBS" +# +# Additional CUDA flags +# +AS_IF([test x$HAVE_CUDA != x0], + [NVCC_GENCODE=$(echo $GPU_ARCHS | ${SED} -e 's/\([[0-9]]\{2,3\}\)/-gencode arch=compute_\1,\\"code=sm_\1\\"/g;') + NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE}-gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" + CPPFLAGS="$CPPFLAGS -I$CUDA_HOME/include" + ]) + AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h]) AC_OUTPUT diff --git a/src/Makefile.in b/src/Makefile.in index 360859f60..6a4a5c8b7 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -82,28 +82,12 @@ JIT_SOURCES ?= \ MAKEFILES = ../config.mk Makefile -ifeq ($(HAVE_CUDA),1) -# All CUDA archs supported by this version of nvcc -GPU_ARCHS_SUPPORTED := $(shell $(NVCC) -h | grep -Po "compute_[0-9]{2}" | cut -d_ -f2 | sort | uniq) -# Intersection of user-specified archs and supported archs -GPU_ARCHS_VALID := $(shell echo $(GPU_ARCHS) $(GPU_ARCHS_SUPPORTED) | xargs -n1 | sort | uniq -d | xargs) -# Latest valid arch -GPU_ARCH_LATEST := $(shell echo $(GPU_ARCHS_VALID) | rev | cut -d' ' -f1 | rev) - -# This creates SASS for all valid requested archs, and PTX for the latest one -NVCC_GENCODE ?= $(foreach arch, $(GPU_ARCHS_VALID), \ - -gencode arch=compute_$(arch),\"code=sm_$(arch)\") \ - -gencode arch=compute_$(GPU_ARCH_LATEST),\"code=compute_$(GPU_ARCH_LATEST)\" -endif - -NVCCFLAGS += $(NVCC_GENCODE) - #NVCCFLAGS += -Xcudafe "--diag_suppress=unrecognized_gcc_pragma" #NVCCFLAGS += --expt-relaxed-constexpr LIB_DIR = ../lib INC_DIR = . -CPPFLAGS += -I. -I$(INC_DIR) -I$(CUDA_INCDIR) +CPPFLAGS += -I. -I$(INC_DIR) LIBBIFROST_VERSION_FILE = $(LIBBIFROST_NAME).version LIBBIFROST_SO_STEM = $(LIB_DIR)/$(LIBBIFROST_NAME)$(SO_EXT) From ebe95b7dbe2553a527cae89de96294d637146ad7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Sep 2023 08:39:11 -0600 Subject: [PATCH 0948/1155] Missing space. --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index fefa29a36..7a07367bc 100755 --- a/configure +++ b/configure @@ -24984,7 +24984,7 @@ LIBS="$LIBS $NVCCLIBS" if test x$HAVE_CUDA != x0 then : NVCC_GENCODE=$(echo $GPU_ARCHS | ${SED} -e 's/\([0-9]\{2,3\}\)/-gencode arch=compute_\1,\\"code=sm_\1\\"/g;') - NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE}-gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" + NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE} -gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" CPPFLAGS="$CPPFLAGS -I$CUDA_HOME/include" fi diff --git a/configure.ac b/configure.ac index 3f4ec4fd7..ec49f83bd 100644 --- a/configure.ac +++ b/configure.ac @@ -382,7 +382,7 @@ LIBS="$LIBS $NVCCLIBS" # AS_IF([test x$HAVE_CUDA != x0], [NVCC_GENCODE=$(echo $GPU_ARCHS | ${SED} -e 's/\([[0-9]]\{2,3\}\)/-gencode arch=compute_\1,\\"code=sm_\1\\"/g;') - NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE}-gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" + NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE} -gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" CPPFLAGS="$CPPFLAGS -I$CUDA_HOME/include" ]) From f5f604b809a219ed49f69368640203d53b2c3963 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Sep 2023 17:16:12 -0600 Subject: [PATCH 0949/1155] We still need NVCC_GENCODE for the cuFFT library. --- configure | 5 ++++- configure.ac | 4 +++- src/Makefile.in | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 7a07367bc..e96cbdc04 100755 --- a/configure +++ b/configure @@ -658,6 +658,7 @@ ac_includes_default="\ ac_header_c_list= ac_subst_vars='OPTIONS LTLIBOBJS +NVCC_GENCODE STDCXX_IS_SET MAP_KERNEL_STDCXX PACKAGE_VERSION_MICRO @@ -24981,10 +24982,12 @@ LIBS="$LIBS $NVCCLIBS" # # Additional CUDA flags # + if test x$HAVE_CUDA != x0 then : NVCC_GENCODE=$(echo $GPU_ARCHS | ${SED} -e 's/\([0-9]\{2,3\}\)/-gencode arch=compute_\1,\\"code=sm_\1\\"/g;') - NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE} -gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" + NVCC_GENCODE="$NVCC_GENCODE -gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" + NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE} CPPFLAGS="$CPPFLAGS -I$CUDA_HOME/include" fi diff --git a/configure.ac b/configure.ac index ec49f83bd..cbce8980a 100644 --- a/configure.ac +++ b/configure.ac @@ -380,9 +380,11 @@ LIBS="$LIBS $NVCCLIBS" # # Additional CUDA flags # +AC_SUBST([NVCC_GENCODE], []) AS_IF([test x$HAVE_CUDA != x0], [NVCC_GENCODE=$(echo $GPU_ARCHS | ${SED} -e 's/\([[0-9]]\{2,3\}\)/-gencode arch=compute_\1,\\"code=sm_\1\\"/g;') - NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE} -gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" + NVCC_GENCODE="$NVCC_GENCODE -gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" + NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE} CPPFLAGS="$CPPFLAGS -I$CUDA_HOME/include" ]) diff --git a/src/Makefile.in b/src/Makefile.in index 6a4a5c8b7..ca576c6fa 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -26,6 +26,8 @@ CUDA_LIBDIR ?= $(CUDA_HOME)/lib CUDA_LIBDIR64 ?= $(CUDA_HOME)/lib64 CUDA_INCDIR ?= $(CUDA_HOME)/include +NVCC_GENCODE ?= @NVCC_GENCODE@ + LIBBIFROST_OBJS = \ common.o \ memory.o \ From 5d2e720142b84a54343bf58696c24d633e0181fc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 25 Sep 2023 17:17:39 -0600 Subject: [PATCH 0950/1155] Ugh, typo. --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index e96cbdc04..845803bfe 100755 --- a/configure +++ b/configure @@ -24987,7 +24987,7 @@ if test x$HAVE_CUDA != x0 then : NVCC_GENCODE=$(echo $GPU_ARCHS | ${SED} -e 's/\([0-9]\{2,3\}\)/-gencode arch=compute_\1,\\"code=sm_\1\\"/g;') NVCC_GENCODE="$NVCC_GENCODE -gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" - NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE} + NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE}" CPPFLAGS="$CPPFLAGS -I$CUDA_HOME/include" fi diff --git a/configure.ac b/configure.ac index cbce8980a..249ed1568 100644 --- a/configure.ac +++ b/configure.ac @@ -384,7 +384,7 @@ AC_SUBST([NVCC_GENCODE], []) AS_IF([test x$HAVE_CUDA != x0], [NVCC_GENCODE=$(echo $GPU_ARCHS | ${SED} -e 's/\([[0-9]]\{2,3\}\)/-gencode arch=compute_\1,\\"code=sm_\1\\"/g;') NVCC_GENCODE="$NVCC_GENCODE -gencode arch=compute_${GPU_MAX_ARCH},\\\"code=compute_${GPU_MAX_ARCH}\\\"" - NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE} + NVCCFLAGS="$NVCCFLAGS ${NVCC_GENCODE}" CPPFLAGS="$CPPFLAGS -I$CUDA_HOME/include" ]) From 9465265fbc1026665b0906ce84c20ffd3969c753 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 4 Oct 2023 15:02:05 -0600 Subject: [PATCH 0951/1155] Set a burst size for rate limiting and add a mechanism to wait for the buffers to be free before queuing new packets. --- src/ib_verbs_send.hpp | 44 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index b6d3549d9..56e7346e3 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -54,13 +54,17 @@ #endif #ifndef BF_VERBS_SEND_NPKTBUF -#define BF_VERBS_SEND_NPKTBUF 1024 +#define BF_VERBS_SEND_NPKTBUF 512 #endif #ifndef BF_VERBS_SEND_WCBATCH #define BF_VERBS_SEND_WCBATCH 16 #endif +#ifndef BF_VERBS_SEND_NPKTBURST +#define BF_VERBS_SEND_NPKTBURST 16 +#endif + #define BF_VERBS_SEND_PAYLOAD_OFFSET 42 struct bf_ibv_send_pkt{ @@ -463,7 +467,7 @@ class VerbsSend { qp_init.cap.max_recv_sge = 0; qp_init.cap.max_inline_data = 0; qp_init.qp_type = IBV_QPT_RAW_PACKET; - qp_init.sq_sig_all = 0; + qp_init.sq_sig_all = 1; _verbs.qp = (ibv_qp**) ::malloc(BF_VERBS_SEND_NQP*sizeof(ibv_qp*)); check_null(_verbs.qp, @@ -556,6 +560,34 @@ class VerbsSend { _verbs.pkt_buf[BF_VERBS_SEND_NQP*BF_VERBS_SEND_NPKTBUF-1].wr.send_flags = send_flags; _verbs.pkt_head = _verbs.pkt_buf; } + inline void wait_for_buffers() { + int i; + pollfd pfd; + ibv_cq *ev_cq; + intptr_t ev_cq_ctx; + + // Setup for poll + pfd.fd = _verbs.cc->fd; + pfd.events = POLLIN; + pfd.revents = 0; + + // poll completion channel's fd with given timeout + int rc = ::poll(&pfd, 1, _timeout); + if( rc < 0) { + // Error + throw VerbsSend::Error("error"); + } + + // Request notification upon the next completion event + // Do NOT restrict to solicited-only completions + ibv_req_notify_cq(_verbs.cq[0], 0); + + // Get the completion event(s) + while( ibv_get_cq_event(_verbs.cc, &ev_cq, (void **)&ev_cq_ctx) == 0 ) { + // Ack the event + ibv_ack_cq_events(_verbs.cq[0], 1); + } + } inline bf_ibv_send_pkt* queue(int npackets) { int i, j; int num_wce; @@ -713,7 +745,7 @@ class VerbsSend { ::memset(&rl_attr, 0, sizeof(ibv_qp_rate_limit_attr)); rl_attr.rate_limit = rate_limit; rl_attr.typical_pkt_sz = pkt_size; - rl_attr.max_burst_sz = 0; + rl_attr.max_burst_sz = BF_VERBS_SEND_NPKTBURST*pkt_size; for(i=0; i BF_VERBS_SEND_NPKTBUF ) { + throw VerbsSend::Error(std::string("Too many packets for the current buffer size")); + } + + this->wait_for_buffers(); + int i; uint64_t offset; for(i=0; i Date: Wed, 4 Oct 2023 15:08:07 -0600 Subject: [PATCH 0952/1155] Unused variable. --- src/ib_verbs_send.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 56e7346e3..3f1f8f095 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -561,7 +561,6 @@ class VerbsSend { _verbs.pkt_head = _verbs.pkt_buf; } inline void wait_for_buffers() { - int i; pollfd pfd; ibv_cq *ev_cq; intptr_t ev_cq_ctx; From 6f21a1c9a091988b3b570223d03d16f3c7a0d662 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 6 Oct 2023 15:27:42 -0600 Subject: [PATCH 0953/1155] Remove most of the popen() calls. --- src/ib_verbs_send.hpp | 85 ++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 49 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 3f1f8f095..3b9207c2c 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -147,47 +148,25 @@ class VerbsSend { void get_interface_name(char* name) { sockaddr_in sin; - char ip[INET_ADDRSTRLEN]; socklen_t len = sizeof(sin); check_error(::getsockname(_fd, (sockaddr *)&sin, &len), "query socket name"); - inet_ntop(AF_INET, &(sin.sin_addr), ip, INET_ADDRSTRLEN); - // TODO: Is there a better way to find this? - char cmd[256] = {'\0'}; - char line[256] = {'\0'}; - int is_lo = 0; - sprintf(cmd, "ip route get to %s | grep dev | awk '{print $4}'", ip); - FILE* fp = popen(cmd, "r"); - if( fgets(line, sizeof(line), fp) != NULL) { - if( line[strlen(line)-1] == '\n' ) { - line[strlen(line)-1] = '\0'; - } - if( strncmp(&(line[0]), "lo", 2) == 0 ) { - is_lo = 1; - } - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstringop-truncation" - strncpy(name, &(line[0]), IFNAMSIZ); - #pragma GCC diagnostic pop - } - pclose(fp); - - if( is_lo ) { - // TODO: Is there a way to avoid having to do this? - sprintf(cmd, "ip route show | grep %s | grep -v default | awk '{print $3}'", ip); - fp = popen(cmd, "r"); - if( fgets(line, sizeof(line), fp) != NULL) { - if( line[strlen(line)-1] == '\n' ) { - line[strlen(line)-1] = '\0'; - } - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstringop-truncation" - strncpy(name, &(line[0]), IFNAMSIZ); - #pragma GCC diagnostic pop + ifaddrs *ifaddr; + check_error(::getifaddrs(&ifaddr), + "query interfaces"); + for(ifaddrs *ifa=ifaddr; ifa != NULL; ifa=ifa->ifa_next) { + if( ifa->ifa_addr != NULL) { + if( reinterpret_cast(ifa->ifa_addr)->sin_addr.s_addr == sin.sin_addr.s_addr ) { + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wstringop-truncation" + ::strncpy(name, ifa->ifa_name, IFNAMSIZ); + #pragma GCC diagnostic pop + break; + } } - pclose(fp); } + ::freeifaddrs(ifaddr); } void get_mac_address(uint8_t* mac) { ifreq ethreq; @@ -201,7 +180,7 @@ class VerbsSend { uint32_t ip; char ip_str[INET_ADDRSTRLEN]; this->get_remote_ip_address(&(ip_str[0])); - inet_pton(AF_INET, &(ip_str[0]), &ip); + ::inet_pton(AF_INET, &(ip_str[0]), &ip); if( ((ip & 0xFF) >= 224) && ((ip & 0xFF) < 240) ) { ETHER_MAP_IP_MULTICAST(&ip, mac); @@ -209,25 +188,33 @@ class VerbsSend { int ret = -1; char cmd[256] = {'\0'}; char line[256] = {'\0'}; + char ip_entry[INET_ADDRSTRLEN]; + unsigned int hw_type, flags; + char mac_str[17]; + char mask[24]; + char dev[IFNAMSIZ]; char* end; + sprintf(cmd, "ping -c 1 %s", ip_str); FILE* fp = popen(cmd, "r"); - sprintf(cmd, "ip neigh | grep -e \"%s \" | awk '{print $5}'", ip_str); - fp = popen(cmd, "r"); - if( fgets(line, sizeof(line), fp) != NULL) { - if( line[strlen(line)-1] == '\n' ) { - line[strlen(line)-1] = '\0'; - } - if( strncmp(&(line[2]), ":", 1) == 0 ) { + + fp = fopen("/proc/net/arp", "r"); + while( ::fgets(line, sizeof(line), fp) != NULL) { + ::sscanf(line, "%s 0x%x 0x%x %s %s %s\n", + ip_entry, &hw_type, &flags, mac_str, mask, dev); + + if( ::strcmp(ip_str, ip_entry) == 0 ) { ret = 0; - mac[0] = (uint8_t) strtol(&line[0], &end, 16); - mac[1] = (uint8_t) strtol(&line[3], &end, 16); - mac[2] = (uint8_t) strtol(&line[6], &end, 16); - mac[3] = (uint8_t) strtol(&line[9], &end, 16); - mac[4] = (uint8_t) strtol(&line[12], &end, 16); - mac[5] = (uint8_t) strtol(&line[15], &end, 16); + mac[0] = (uint8_t) strtol(&mac_str[0], &end, 16); + mac[1] = (uint8_t) strtol(&mac_str[3], &end, 16); + mac[2] = (uint8_t) strtol(&mac_str[6], &end, 16); + mac[3] = (uint8_t) strtol(&mac_str[9], &end, 16); + mac[4] = (uint8_t) strtol(&mac_str[12], &end, 16); + mac[5] = (uint8_t) strtol(&mac_str[15], &end, 16); + break; } } + fclose(fp); check_error(ret, "determine remote hardware address"); } } From 9573c021ca5fe03f3a460ef385e4286a4e6b59d3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 6 Oct 2023 15:33:21 -0600 Subject: [PATCH 0954/1155] Bug fix plus try to minimize how much gets reset at each call. --- src/packet_writer.hpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index c1a49346c..8b3207582 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -165,15 +165,19 @@ class UDPPacketSender : public PacketWriterMethod { _last_count = npackets; _mmsg = (struct mmsghdr *) malloc(sizeof(struct mmsghdr)*npackets); - _iovs = (struct iovec *) malloc(sizeof(struct iovec)*5*npackets); + _iovs = (struct iovec *) malloc(sizeof(struct iovec)2*npackets); ::mlock(_mmsg, sizeof(struct mmsghdr)*npackets); - ::mlock(_iovs, sizeof(struct iovec)*5*npackets); + ::mlock(_iovs, sizeof(struct iovec)*2*npackets); + + ::memset(_mmsg, 0, sizeof(struct mmsghdr)*npackets); + + for(int i=0; i Date: Fri, 6 Oct 2023 15:50:22 -0600 Subject: [PATCH 0955/1155] Ugh. --- src/packet_writer.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 8b3207582..37e938246 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -165,7 +165,7 @@ class UDPPacketSender : public PacketWriterMethod { _last_count = npackets; _mmsg = (struct mmsghdr *) malloc(sizeof(struct mmsghdr)*npackets); - _iovs = (struct iovec *) malloc(sizeof(struct iovec)2*npackets); + _iovs = (struct iovec *) malloc(sizeof(struct iovec)*2*npackets); ::mlock(_mmsg, sizeof(struct mmsghdr)*npackets); ::mlock(_iovs, sizeof(struct iovec)*2*npackets); From 03a45869400026e84954022d3c1b041f86596d1c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 Oct 2023 09:18:26 -0600 Subject: [PATCH 0956/1155] Make sure we only accept complete ARP entries. --- src/ib_verbs_send.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 3b9207c2c..dc85a7fbf 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -203,7 +204,7 @@ class VerbsSend { ::sscanf(line, "%s 0x%x 0x%x %s %s %s\n", ip_entry, &hw_type, &flags, mac_str, mask, dev); - if( ::strcmp(ip_str, ip_entry) == 0 ) { + if( (::strcmp(ip_str, ip_entry) == 0) && (flags & ATF_COM == ATF_COM) ) { ret = 0; mac[0] = (uint8_t) strtol(&mac_str[0], &end, 16); mac[1] = (uint8_t) strtol(&mac_str[3], &end, 16); From c4215875a48df5c5b94785a05c7ab6501ed75297 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 Oct 2023 09:19:51 -0600 Subject: [PATCH 0957/1155] Request completion event notification as soon as the CQ is created. --- src/ib_verbs_send.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index dc85a7fbf..2d1501674 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -442,6 +442,11 @@ class VerbsSend { _verbs.cq[i] = ibv_create_cq(_verbs.ctx, BF_VERBS_SEND_NPKTBUF, NULL, NULL, 0); check_null(_verbs.cq[i], "create send completion queue"); + + // Request notifications before any receive completion can be created. + // Do NOT restrict to solicited-only completions for receive. + check_error(ibv_req_notify_cq(_verbs.cq[i], 0), + "change receive completion queue request notifications"); } // Setup the queue pairs From 4a7e633f8ed372229e810aa7aa4d8b45bae9bfa9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 Oct 2023 09:35:15 -0600 Subject: [PATCH 0958/1155] Use a more detailed accounting of packets to make sure we don't overwrite the buffers before they are free. --- src/ib_verbs_send.hpp | 85 +++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 43 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 2d1501674..9ff8d98e2 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -89,6 +89,8 @@ struct bf_ibv_send { bf_ibv_send_pkt* pkt_buf; bf_ibv_send_pkt* pkt_head; + int nqueued; + uint8_t offload_csum; uint32_t hardware_pacing; }; @@ -553,37 +555,12 @@ class VerbsSend { _verbs.pkt_buf[BF_VERBS_SEND_NQP*BF_VERBS_SEND_NPKTBUF-1].wr.send_flags = send_flags; _verbs.pkt_head = _verbs.pkt_buf; } - inline void wait_for_buffers() { - pollfd pfd; - ibv_cq *ev_cq; - intptr_t ev_cq_ctx; - - // Setup for poll - pfd.fd = _verbs.cc->fd; - pfd.events = POLLIN; - pfd.revents = 0; - - // poll completion channel's fd with given timeout - int rc = ::poll(&pfd, 1, _timeout); - if( rc < 0) { - // Error - throw VerbsSend::Error("error"); - } - - // Request notification upon the next completion event - // Do NOT restrict to solicited-only completions - ibv_req_notify_cq(_verbs.cq[0], 0); - - // Get the completion event(s) - while( ibv_get_cq_event(_verbs.cc, &ev_cq, (void **)&ev_cq_ctx) == 0 ) { - // Ack the event - ibv_ack_cq_events(_verbs.cq[0], 1); - } - } - inline bf_ibv_send_pkt* queue(int npackets) { + inline void get_packet_buffers(int npackets) { int i, j; int num_wce; ibv_qp_attr qp_attr; + ibv_cq *ev_cq; + intptr_t ev_cq_ctx; ibv_wc wc[BF_VERBS_SEND_WCBATCH]; bf_ibv_send_pkt *send_pkt = NULL; bf_ibv_send_pkt *send_head = NULL; @@ -617,20 +594,39 @@ class VerbsSend { } } + // Get the completion event(s) + while( ibv_get_cq_event(_verbs.cc, &ev_cq, (void **)&ev_cq_ctx) == 0 ) { + // Ack the event + ibv_ack_cq_events(ev_cq, 1); + } + for(i=0; iwr.next = &(_verbs.pkt_head->wr); - _verbs.pkt_head = send_pkt; - } // for each work completion - } while(num_wce); + // Request notification upon the next completion event + // Do NOT restrict to solicited-only completions + if( ibv_req_notify_cq(_verbs.cq[i], 0) ) { + return NULL; + } + } + + while(_verbs.nqueued > 0 ) { + for(i=0; iwr.next = &(_verbs.pkt_head->wr); + _verbs.pkt_head = send_pkt; + } // for each work completion + + // Decrement the number of packet buffers in use + _verbs.nqueued -= num_wce; + } while(num_wce); + } } if( npackets == 0 || !_verbs.pkt_head ) { @@ -645,6 +641,7 @@ class VerbsSend { _verbs.pkt_head = (bf_ibv_send_pkt*) send_tail->wr.next; send_tail->wr.next = NULL; + _verbs.nqueued += npackets; return send_head; } @@ -795,8 +792,10 @@ class VerbsSend { throw VerbsSend::Error(std::string("Too many packets for the current buffer size")); } - this->wait_for_buffers(); + // Reclaim a set of buffers to use + this->get_packet_buffers(npackets); + // Load in the new data int i; uint64_t offset; for(i=0; iqueue(npackets); + // Queue for sending ret = ibv_post_send(_verbs.qp[0], &(head->wr), &s); if( ret ) { ret = -1; From c6e428be63dcd9baa412de041056b5df66ea1478 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 Oct 2023 09:36:20 -0600 Subject: [PATCH 0959/1155] Wrong return type. --- src/ib_verbs_send.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 9ff8d98e2..7ce7cfd29 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -555,7 +555,7 @@ class VerbsSend { _verbs.pkt_buf[BF_VERBS_SEND_NQP*BF_VERBS_SEND_NPKTBUF-1].wr.send_flags = send_flags; _verbs.pkt_head = _verbs.pkt_buf; } - inline void get_packet_buffers(int npackets) { + inline bf_ibv_send_pkt* get_packet_buffers(int npackets) { int i, j; int num_wce; ibv_qp_attr qp_attr; From f07c6d0d304c404cb5d3594661883ee06c98f075 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 Oct 2023 09:45:08 -0600 Subject: [PATCH 0960/1155] Use compatible headers. --- src/ib_verbs_send.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 7ce7cfd29..8d46fcc58 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -39,8 +39,8 @@ #include #include #include -#include #include +#include #include #include #include From 88625a6e51ab2c70b36a89b7a9fc6825dbf30365 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 11 Oct 2023 12:07:17 -0600 Subject: [PATCH 0961/1155] A couple of fixes to get things working. --- src/ib_verbs_send.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 8d46fcc58..b80fd8c63 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -206,7 +206,7 @@ class VerbsSend { ::sscanf(line, "%s 0x%x 0x%x %s %s %s\n", ip_entry, &hw_type, &flags, mac_str, mask, dev); - if( (::strcmp(ip_str, ip_entry) == 0) && (flags & ATF_COM == ATF_COM) ) { + if( (::strcmp(ip_str, ip_entry) == 0) && (flags & ATF_COM) ) { ret = 0; mac[0] = (uint8_t) strtol(&mac_str[0], &end, 16); mac[1] = (uint8_t) strtol(&mac_str[3], &end, 16); @@ -641,6 +641,7 @@ class VerbsSend { _verbs.pkt_head = (bf_ibv_send_pkt*) send_tail->wr.next; send_tail->wr.next = NULL; + _verbs.nqueued += npackets; return send_head; @@ -793,7 +794,7 @@ class VerbsSend { } // Reclaim a set of buffers to use - this->get_packet_buffers(npackets); + head = this->get_packet_buffers(npackets); // Load in the new data int i; From 0eb382b1ea158254c4f752a1f3d07ff6dd21bd68 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 27 Oct 2023 11:29:54 -0600 Subject: [PATCH 0962/1155] Enable burst sizes for packet rate limiting for all writer methods. --- src/ib_verbs_send.hpp | 4 +-- src/packet_writer.hpp | 79 +++++++++++++++++++++++++++++-------------- 2 files changed, 56 insertions(+), 27 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index b80fd8c63..387696b23 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -715,7 +715,7 @@ class VerbsSend { destroy_buffers(); destroy_context(); } - inline void set_rate_limit(uint32_t rate_limit, size_t udp_length=1) { + inline void set_rate_limit(uint32_t rate_limit, size_t udp_length=1, size_t max_burst_size=BF_VERBS_SEND_NPKTBURST) { int i; // Converts to B/s to kb/s assuming a packet size @@ -735,7 +735,7 @@ class VerbsSend { ::memset(&rl_attr, 0, sizeof(ibv_qp_rate_limit_attr)); rl_attr.rate_limit = rate_limit; rl_attr.typical_pkt_sz = pkt_size; - rl_attr.max_burst_sz = BF_VERBS_SEND_NPKTBURST*pkt_size; + rl_attr.max_burst_sz = max_burst_size*pkt_size; for(i=0; i #include +#ifndef BF_SEND_NPKTBURST +#define BF_SEND_NPKTBURST 16 +#endif + class RateLimiter { uint32_t _rate; uint64_t _counter; @@ -91,10 +95,11 @@ class RateLimiter { class PacketWriterMethod { protected: int _fd; + size_t _max_burst_size; RateLimiter _limiter; public: - PacketWriterMethod(int fd) - : _fd(fd), _limiter(0) {} + PacketWriterMethod(int fd, size_t max_burst_size=BF_SEND_NPKTBURST) + : _fd(fd), _max_burst_size(max_burst_size), _limiter(0) {} virtual ssize_t send_packets(char* hdrs, int hdr_size, char* data, @@ -111,24 +116,34 @@ class PacketWriterMethod { class DiskPacketWriter : public PacketWriterMethod { public: - DiskPacketWriter(int fd) - : PacketWriterMethod(fd) {} + DiskPacketWriter(int fd, size_t max_burst_size=BF_SEND_NPKTBURST) + : PacketWriterMethod(fd, max_burst_size) {} ssize_t send_packets(char* hdrs, int hdr_size, char* data, int data_size, int npackets, int flags=0) { - ssize_t status, nsent = 0; - _limiter.begin(); - for(int i=0; i 0) { + _limiter.begin(); + if( _max_burst_size > 0 ) { + nsend = std::min(_max_burst_size, (size_t) npackets); + } else { + nsend = npackets; + } + for(int j=0; j 0) { + _limiter.begin(); + if( _max_burst_size > 0 ) { + nsend = std::min(_max_burst_size, (size_t) npackets); + } else { + nsend = npackets; + } + nsent_batch = ::sendmmsg(_fd, _mmsg+i, nsend, flags); + if( nsent_batch > 0 ) { + nsent += nsent_batch; + } + /* + if( nsent_batch == -1 ) { + std::cout << "sendmmsg failed: " << std::strerror(errno) << " with " << hdr_size << " and " << data_size << std::endl; + } + */ + i += nsend; + npackets -= nsend; + _limiter.end_and_wait(nsend); } - */ return nsent; } @@ -210,8 +239,8 @@ class UDPVerbsSender : public PacketWriterMethod { iovec* _iovs; uint32_t _rate_holder; public: - UDPVerbsSender(int fd) - : PacketWriterMethod(fd), _ibv(fd, JUMBO_FRAME_SIZE), _last_size(0), + UDPVerbsSender(int fd, size_t max_burst_size=BF_VERBS_SEND_NPKTBURST) + : PacketWriterMethod(fd, max_burst_size), _ibv(fd, JUMBO_FRAME_SIZE), _last_size(0), _last_count(0), _mmsg(NULL), _iovs(NULL), _rate_holder(0) {} ~UDPVerbsSender() { if( _mmsg ) { @@ -256,7 +285,7 @@ class UDPVerbsSender : public PacketWriterMethod { _ibv.get_udp_header(&(_udp_hdr.udp), _last_size); if( _rate_holder > 0 ) { - _ibv.set_rate_limit(_rate_holder*_last_size); + _ibv.set_rate_limit(_rate_holder*_last_size, _last_size, _max_burst_size); } } From 66cac67695cbded90acb28d3785b6017bbc5ae3c Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Mon, 13 Nov 2023 13:17:27 -0700 Subject: [PATCH 0963/1155] Update linalg algorithms for better optimization --- src/linalg.cu | 208 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 192 insertions(+), 16 deletions(-) diff --git a/src/linalg.cu b/src/linalg.cu index 1ef5fce68..a27741e37 100644 --- a/src/linalg.cu +++ b/src/linalg.cu @@ -209,7 +209,7 @@ BFstatus bfMatMul_aa_exec(BFlinalg handle, //bool use_bf_cherk = use_bf_cherk_str && atoi(use_bf_cherk_str); enum { BF_CUBLAS_CHERK_THRESHOLD = 896 }; if( //use_bf_cherk && - n < BF_CUBLAS_CHERK_THRESHOLD && + (CUDART_VERSION < 8000 || n < BF_CUBLAS_CHERK_THRESHOLD) && trans == CUBLAS_OP_N && n % 2 == 0 && a_stride % 2 == 0 && a_batchstride % 2 == 0 && @@ -476,6 +476,166 @@ BFstatus bfMatMul_ab_exec_nobatch(BFlinalg handle, return BF_STATUS_SUCCESS; } +BFstatus bfMatMul_ab_exec_batch(BFlinalg handle, + cudaStream_t stream, + cublasOperation_t trans_a, + cublasOperation_t trans_b, + long m, + long n, + long k, + double alpha, + void const* a_data, + BFdtype a_type, + long a_stride, + long a_batchstride, + void const* b_data, + BFdtype b_type, + long b_stride, + long b_batchstride, + double beta, + void* c_data, + BFdtype c_type, + long c_stride, + long c_batchstride, + long nbatch) { + BF_TRACE_STREAM(stream); + BF_CHECK_CUBLAS(cublasSetStream(handle->cublas(), stream)); + BF_CHECK_CUBLAS(cublasSetPointerMode(handle->cublas(), + CUBLAS_POINTER_MODE_HOST)); + BF_ASSERT(a_data, BF_STATUS_INVALID_POINTER); + BF_ASSERT(b_data, BF_STATUS_INVALID_POINTER); + BF_ASSERT(c_data, BF_STATUS_INVALID_POINTER); + BF_ASSERT(a_type == b_type, BF_STATUS_UNSUPPORTED_DTYPE); + // TODO: Look into optimizations using cublasGemmEx algo selection and + // batched/strided APIs. + switch( a_type ) { + case BF_DTYPE_F32: { + BF_ASSERT(c_type == BF_DTYPE_F32, BF_STATUS_UNSUPPORTED_DTYPE); + BF_CHECK_CUBLAS(cublasSgemmStridedBatched(handle->cublas(), + trans_a, + trans_b, + m, + n, + k, + (float *)&alpha, + (const float *)a_data, + a_stride, + a_batchstride, + (const float *)b_data, + b_stride, + b_batchstride, + (float *)&beta, + (float *)c_data, + c_stride, + c_batchstride, + nbatch)); + break; + } + case BF_DTYPE_F64: { + BF_ASSERT(c_type == BF_DTYPE_F64, BF_STATUS_UNSUPPORTED_DTYPE); + BF_CHECK_CUBLAS(cublasDgemmStridedBatched(handle->cublas(), + trans_a, + trans_b, + m, + n, + k, + &alpha, + (const double *)a_data, + a_stride, + a_batchstride, + (const double *)b_data, + b_stride, + b_batchstride, + &beta, + (double *)c_data, + c_stride, + c_batchstride, + nbatch)); + break; + } + case BF_DTYPE_CI8: { + BF_ASSERT(c_type == BF_DTYPE_CF32, BF_STATUS_UNSUPPORTED_DTYPE); + cuComplex alpha_cf = make_cuComplex(alpha, 0); + cuComplex beta_cf = make_cuComplex(beta, 0); + BF_CHECK_CUBLAS(cublasGemmStridedBatchedEx(handle->cublas(), + trans_a, + trans_b, + m, + n, + k, + &alpha_cf, + a_data, + CUDA_C_8I, + a_stride, + a_batchstride, + b_data, + CUDA_C_8I, + b_stride, + b_batchstride, + &beta_cf, + c_data, + CUDA_C_32F, + c_stride, + c_batchstride, + nbatch, + CUBLAS_COMPUTE_32F, CUBLAS_GEMM_DEFAULT)); + } + case BF_DTYPE_CF32: { + BF_ASSERT(c_type == BF_DTYPE_CF32, BF_STATUS_UNSUPPORTED_DTYPE); + const cuComplex alpha_cf = make_cuComplex(alpha, 0); + const cuComplex beta_cf = make_cuComplex(beta, 0); + BF_CHECK_CUBLAS(cublasCgemm3mStridedBatched(handle->cublas(), + trans_a, + trans_b, + m, + n, + k, + &alpha_cf, + (const cuComplex *)a_data, + a_stride, + a_batchstride, + (const cuComplex *)b_data, + b_stride, + b_batchstride, + &beta_cf, + (cuComplex *)c_data, + c_stride, + c_batchstride, + nbatch + )); + break; + } + case BF_DTYPE_CF64: { + BF_ASSERT(c_type == BF_DTYPE_CF64, BF_STATUS_UNSUPPORTED_DTYPE); + const cuDoubleComplex alpha_cf = make_cuDoubleComplex(alpha, 0); + const cuDoubleComplex beta_cf = make_cuDoubleComplex(beta, 0); + BF_CHECK_CUBLAS(cublasZgemmStridedBatched(handle->cublas(), + trans_a, + trans_b, + m, + n, + k, + &alpha_cf, + (const cuDoubleComplex *)a_data, + a_stride, + a_batchstride, + (const cuDoubleComplex *)b_data, + b_stride, + b_batchstride, + &beta_cf, + (cuDoubleComplex *)c_data, + c_stride, + c_batchstride, + nbatch + )); + break; + } + default: + BF_FAIL("Supported dtype for input array", BF_STATUS_UNSUPPORTED_DTYPE); + } + return BF_STATUS_SUCCESS; +} + BFstatus bfMatMul_ab_exec(BFlinalg handle, cudaStream_t stream, cublasOperation_t trans_a, @@ -498,16 +658,18 @@ BFstatus bfMatMul_ab_exec(BFlinalg handle, BFdtype c_type, long c_stride, long c_batchstride) { - // TODO: Use batched algos here where possible + // We prefer the CI4@CF32 -> CF32 code + // second choice would be the batched algorithms //char* use_bf_cgemm_str = getenv("BF_CGEMM"); //bool use_bf_cgemm = use_bf_cgemm_str && atoi(use_bf_cgemm_str); + // std::cout << "nbatch: "< 12 && a_type != BF_DTYPE_CI8 ) { + //std::cout << "nbatch: " << nbatch << std::endl; + BF_CHECK( bfMatMul_ab_exec_batch(handle, stream, + trans_a, trans_b, + m, n, k, + alpha, + a_data, a_type, a_stride, a_batchstride, + b_data, b_type, b_stride, b_batchstride, + beta, + c_data, c_type, c_stride, c_batchstride, + nbatch) ); + } else { + for( long b=0; b Date: Tue, 14 Nov 2023 11:26:07 -0700 Subject: [PATCH 0964/1155] Update linalg.cu Missed one --- src/linalg.cu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linalg.cu b/src/linalg.cu index a27741e37..d8671a5aa 100644 --- a/src/linalg.cu +++ b/src/linalg.cu @@ -209,7 +209,7 @@ BFstatus bfMatMul_aa_exec(BFlinalg handle, //bool use_bf_cherk = use_bf_cherk_str && atoi(use_bf_cherk_str); enum { BF_CUBLAS_CHERK_THRESHOLD = 896 }; if( //use_bf_cherk && - (CUDART_VERSION < 8000 || n < BF_CUBLAS_CHERK_THRESHOLD) && + n < BF_CUBLAS_CHERK_THRESHOLD && trans == CUBLAS_OP_N && n % 2 == 0 && a_stride % 2 == 0 && a_batchstride % 2 == 0 && From 2dbe94cd10cd68bbf41a9c10fbb6e0cc995f163e Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 14 Nov 2023 12:05:47 -0700 Subject: [PATCH 0965/1155] Update linalg.cu missed some debugging lines --- src/linalg.cu | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/linalg.cu b/src/linalg.cu index d8671a5aa..c519e1ffc 100644 --- a/src/linalg.cu +++ b/src/linalg.cu @@ -661,15 +661,12 @@ BFstatus bfMatMul_ab_exec(BFlinalg handle, // We prefer the CI4@CF32 -> CF32 code // second choice would be the batched algorithms - //char* use_bf_cgemm_str = getenv("BF_CGEMM"); - //bool use_bf_cgemm = use_bf_cgemm_str && atoi(use_bf_cgemm_str); - // std::cout << "nbatch: "< 12 && a_type != BF_DTYPE_CI8 ) { - //std::cout << "nbatch: " << nbatch << std::endl; BF_CHECK( bfMatMul_ab_exec_batch(handle, stream, trans_a, trans_b, m, n, k, From 694fb3928c379bf65c0829319b3e0609697c2ebf Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 14 Nov 2023 12:08:36 -0700 Subject: [PATCH 0966/1155] Update linalg.cu fix formatting --- src/linalg.cu | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/linalg.cu b/src/linalg.cu index c519e1ffc..4bbe40fb7 100644 --- a/src/linalg.cu +++ b/src/linalg.cu @@ -679,15 +679,28 @@ BFstatus bfMatMul_ab_exec(BFlinalg handle, // TODO: Why does ci8 yield nans when we go into batched execution? if( nbatch > 12 && a_type != BF_DTYPE_CI8 ) { - BF_CHECK( bfMatMul_ab_exec_batch(handle, stream, - trans_a, trans_b, - m, n, k, - alpha, - a_data, a_type, a_stride, a_batchstride, - b_data, b_type, b_stride, b_batchstride, - beta, - c_data, c_type, c_stride, c_batchstride, - nbatch) ); + BF_CHECK( bfMatMul_ab_exec_batch(handle, + stream, + trans_a, + trans_b, + m, + n, + k, + alpha, + a_data, + a_type, + a_stride, + a_batchstride, + b_data, + b_type, + b_stride, + b_batchstride, + beta, + c_data, + c_type, + c_stride, + c_batchstride, + nbatch) ); } else { for( long b=0; b Date: Mon, 4 Dec 2023 16:00:01 -0700 Subject: [PATCH 0967/1155] Fix an off-by-one error from a header mis-match in how packets are generated vs received. --- src/formats/pbeam.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/pbeam.hpp b/src/formats/pbeam.hpp index a7dc966a7..bb910fbec 100644 --- a/src/formats/pbeam.hpp +++ b/src/formats/pbeam.hpp @@ -64,7 +64,7 @@ class PBeamDecoder: virtual public PacketDecoder { int pld_size = pkt_size - sizeof(pbeam_hdr_type); pkt->decimation = be16toh(pkt_hdr->navg); pkt->time_tag = be64toh(pkt_hdr->seq); - pkt->seq = (pkt->time_tag - 1) / pkt->decimation; + pkt->seq = pkt->time_tag / pkt->decimation; //pkt->nsrc = pkt_hdr->nserver; pkt->nsrc = _nsrc; pkt->src = (pkt_hdr->beam - _src0) * pkt_hdr->nserver + (pkt_hdr->server - 1); From af885c0cb4176ceba8f6787887572948809d19d6 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 7 Dec 2023 10:21:09 -0700 Subject: [PATCH 0968/1155] Update linalg_kernels.cu Apply fix for #210 --- src/linalg_kernels.cu | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/linalg_kernels.cu b/src/linalg_kernels.cu index e695bdf6e..d992f24ad 100644 --- a/src/linalg_kernels.cu +++ b/src/linalg_kernels.cu @@ -533,7 +533,9 @@ void bf_cherk_N(int N, int K, int nbatch, int A_offset = A_byte_offset / element_bytes; size_t A_nelement_total = - std::max(A_stride * K, A_batchstride * nbatch) + A_offset; + (A_offset + N) // the elements in the first row of first batch + + (K - 1) * A_stride // the elements in the rest of the first batch + + (nbatch - 1) * A_batchstride; // the elements for the remaining batches size_t texture_element_limit = 1 << 27; BF_ASSERT_EXCEPTION(A_nelement_total <= texture_element_limit, BF_STATUS_UNSUPPORTED_SHAPE); From b0254e8d522ee39e4ad5f103ca61a45b16572238 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Dec 2023 11:14:55 -0700 Subject: [PATCH 0969/1155] I thought this was in configure.ac already. --- src/bifrost/config.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 1e3e52ed4..752a5c067 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -63,7 +63,7 @@ extern "C" { #define BF_HWLOC_ENABLED @HAVE_HWLOC@ #define BF_VMA_ENABLED @HAVE_VMA@ #define BF_VERBS_ENABLED @HAVE_VERBS@ -#define BF_VERBS_NPKTBUF @VERBS_NPKTBUF@ +#define BF_VERBS_NPKTBUF 32768 #define BF_RDMA_ENABLED @HAVE_RDMA@ #define BF_RDMA_MAXMEM @RDMA_MAXMEM@ From b16dc15ada2da3de73bbacccb59b786567cfd77e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Dec 2023 13:06:47 -0700 Subject: [PATCH 0970/1155] Fix a bad merge. --- src/ib_verbs.hpp | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index fcf557660..37b559068 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -28,8 +28,6 @@ #pragma once -#include - #include #include #include @@ -52,6 +50,10 @@ #define BF_VERBS_NQP 1 #endif +#ifndef BF_VERBS_NPKTBUF +#define BF_VERBS_NPKTBUF 8192 +#endif + #ifndef BF_VERBS_WCBATCH #define BF_VERBS_WCBATCH 16 #endif @@ -276,32 +278,13 @@ class Verbs { _verbs.mr_size = (size_t) BF_VERBS_NPKTBUF*BF_VERBS_NQP * _pkt_size_max; _verbs.mr_buf = (uint8_t *) ::mmap(NULL, _verbs.mr_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED, -1, 0); - check_error(_verbs.mr_buf == MAP_FAILED ? -1 : 0, - "allocate memory region buffer"); + check_error(_verbs.mr_buf == MAP_FAILED, + "allocate receive memory region buffer"); check_error(::mlock(_verbs.mr_buf, _verbs.mr_size), "lock receive memory region buffer"); _verbs.mr = ibv_reg_mr(_verbs.pd, _verbs.mr_buf, _verbs.mr_size, IBV_ACCESS_LOCAL_WRITE); check_null(_verbs.mr, - "register memory region"); - - // Start Send - - _verbs.send_pkt_buf = (bf_ibv_send_pkt*) ::malloc(BF_VERBS_NPKTBUF*BF_VERBS_NQP * sizeof(struct bf_ibv_send_pkt)); - check_null(_verbs.send_pkt_buf, - "allocate send packet buffer"); - ::memset(_verbs.send_pkt_buf, 0, BF_VERBS_NPKTBUF*BF_VERBS_NQP * sizeof(struct bf_ibv_send_pkt)); - _verbs.send_mr_size = (size_t) BF_VERBS_NPKTBUF*BF_VERBS_NQP * _pkt_size_max; - _verbs.send_mr_buf = (uint8_t *) ::mmap(NULL, _verbs.send_mr_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED, -1, 0); - - check_error(_verbs.send_mr_buf == MAP_FAILED ? -1 : 0, - "allocate memory region buffer"); - check_error(::mlock(_verbs.send_mr_buf, _verbs.send_mr_size), - "lock memory region buffer"); - _verbs.send_mr = ibv_reg_mr(_verbs.pd, _verbs.send_mr_buf, _verbs.send_mr_size, IBV_ACCESS_LOCAL_WRITE); - check_null(_verbs.send_mr, - "register memory region"); - - // End Send + "register receive memory region"); } void destroy_buffers() { int failures = 0; From 749f0ba87d1d60b694ce28ddfc3eaf666c08ff7c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Dec 2023 13:17:22 -0700 Subject: [PATCH 0971/1155] Give up on packet pacing for now. --- src/ib_verbs_send.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 387696b23..498dd9873 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -334,9 +334,11 @@ class VerbsSend { std::cout << "_verbs.offload_csum: " << (int) _verbs.offload_csum << std::endl; _verbs.hardware_pacing = 0; + /* if( ibv_is_qpt_supported(ibv_dev_attr.packet_pacing_caps.supported_qpts, IBV_QPT_RAW_PACKET) ) { _verbs.hardware_pacing = ibv_dev_attr.packet_pacing_caps.qp_rate_limit_max; } + */ std::cout << "_verbs.hardware_pacing: " << (int) _verbs.hardware_pacing << std::endl; break; @@ -731,6 +733,7 @@ class VerbsSend { } // Apply the rate limit + /* ibv_qp_rate_limit_attr rl_attr; ::memset(&rl_attr, 0, sizeof(ibv_qp_rate_limit_attr)); rl_attr.rate_limit = rate_limit; @@ -740,7 +743,7 @@ class VerbsSend { check_error(ibv_modify_qp_rate_limit(_verbs.qp[i], &rl_attr), "set queue pair rate limit"); } - + */ _rate_limit = rate_limit; } inline void get_ethernet_header(bf_ethernet_hdr* hdr) { From e59a8cae17a665f82af8312b3f54ed2eee8e6bf1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Dec 2023 10:41:37 -0700 Subject: [PATCH 0972/1155] Make sure everything expects an OS index and use PU instead of CORE. --- src/hw_locality.cpp | 85 ++++++++++++++++++++++++++++++--------------- 1 file changed, 57 insertions(+), 28 deletions(-) diff --git a/src/hw_locality.cpp b/src/hw_locality.cpp index 4f40eeca6..dfbaa60d2 100644 --- a/src/hw_locality.cpp +++ b/src/hw_locality.cpp @@ -31,15 +31,24 @@ #if BF_HWLOC_ENABLED int HardwareLocality::get_numa_node_of_core(int core) { - int core_depth = hwloc_get_type_or_below_depth(_topo, HWLOC_OBJ_CORE); + int core_depth = hwloc_get_type_or_below_depth(_topo, HWLOC_OBJ_PU); int ncore = hwloc_get_nbobjs_by_depth(_topo, core_depth); int ret = -1; if( 0 <= core && core < ncore ) { - hwloc_obj_t obj = hwloc_get_obj_by_type(_topo, HWLOC_OBJ_CORE, core); + // Find correct processing unit (PU) for the core (which is an os_index) + hwloc_obj_t obj = NULL; hwloc_obj_t tmp = NULL; - while( (tmp = hwloc_get_next_obj_by_type(_topo, HWLOC_OBJ_NUMANODE, tmp)) != NULL ) { - if( hwloc_bitmap_isset(obj->nodeset, tmp->os_index) ) { + while( (tmp = hwloc_get_next_obj_by_type(_topo, HWLOC_OBJ_PU, tmp)) != NULL ) { + if( tmp->os_index == core ) { + obj = tmp; + break; + } + } + // Find the correct NUMA node for the PU + while( obj != NULL && (tmp = hwloc_get_next_obj_by_type(_topo, HWLOC_OBJ_NUMANODE, tmp)) != NULL ) { + if( hwloc_bitmap_intersects(obj->cpuset, tmp->cpuset) ) { ret = tmp->os_index; + break; } } } @@ -47,43 +56,63 @@ int HardwareLocality::get_numa_node_of_core(int core) { } int HardwareLocality::bind_thread_memory_to_core(int core) { - int core_depth = hwloc_get_type_or_below_depth(_topo, HWLOC_OBJ_CORE); + int core_depth = hwloc_get_type_or_below_depth(_topo, HWLOC_OBJ_PU); int ncore = hwloc_get_nbobjs_by_depth(_topo, core_depth); int ret = 0; if( 0 <= core && core < ncore ) { - hwloc_obj_t obj = hwloc_get_obj_by_depth(_topo, core_depth, core); -#if HWLOC_API_VERSION >= 0x00020000 - hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->cpuset); - if( !hwloc_bitmap_intersects(cpuset, hwloc_topology_get_allowed_cpuset(_topo)) ) { - throw std::runtime_error("requested core is not in the list of allowed cores"); + // Find correct processing unit (PU) for the core (with is a os_index) + hwloc_obj_t obj = NULL; + hwloc_obj_t tmp = NULL; + while( (tmp = hwloc_get_next_obj_by_type(_topo, HWLOC_OBJ_PU, tmp)) != NULL ) { + if( tmp->os_index == core ) { + obj = tmp; + break; + } } + if( obj != NULL ) { +#if HWLOC_API_VERSION >= 0x00020000 + hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->cpuset); + if( !hwloc_bitmap_intersects(cpuset, hwloc_topology_get_allowed_cpuset(_topo)) ) { + throw std::runtime_error("requested core is not in the list of allowed cores"); + } #else - hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->allowed_cpuset); + hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->allowed_cpuset); #endif - hwloc_bitmap_singlify(cpuset); // Avoid hyper-threads - hwloc_membind_policy_t policy = HWLOC_MEMBIND_BIND; - hwloc_membind_flags_t flags = HWLOC_MEMBIND_THREAD; - ret = hwloc_set_membind(_topo, cpuset, policy, flags); - hwloc_bitmap_free(cpuset); + hwloc_bitmap_singlify(cpuset); // Avoid hyper-threads + hwloc_membind_policy_t policy = HWLOC_MEMBIND_BIND; + hwloc_membind_flags_t flags = HWLOC_MEMBIND_THREAD; + ret = hwloc_set_membind(_topo, cpuset, policy, flags); + hwloc_bitmap_free(cpuset); + } } return ret; } int HardwareLocality::bind_memory_area_to_numa_node(const void* addr, size_t size, int node) { int nnode = hwloc_get_nbobjs_by_type(_topo, HWLOC_OBJ_NUMANODE); - int ret = 0; + int ret = -1; if( 0 <= node && node < nnode ) { - hwloc_obj_t obj = hwloc_get_obj_by_type(_topo, HWLOC_OBJ_NUMANODE, node); -#if HWLOC_API_VERSION >= 0x00020000 - hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->nodeset); -#else - hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->allowed_cpuset); -#endif - hwloc_bitmap_singlify(cpuset); // Avoid hyper-threads - hwloc_membind_policy_t policy = HWLOC_MEMBIND_BIND; - hwloc_membind_flags_t flags = HWLOC_MEMBIND_THREAD; - ret = hwloc_set_area_membind(_topo, addr, size, cpuset, policy, flags); - hwloc_bitmap_free(cpuset); + // Find correct NUMA node for the node (which is an os_index) + hwloc_obj_t obj = NULL; + hwloc_obj_t tmp = NULL; + while( (tmp = hwloc_get_next_obj_by_type(_topo, HWLOC_OBJ_NUMANODE, tmp)) != NULL ) { + if( tmp->os_index == node ) { + obj = tmp; + break; + } + } + if( obj != NULL ) { + #if HWLOC_API_VERSION >= 0x00020000 + hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->nodeset); + #else + hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->allowed_cpuset); + #endif + hwloc_bitmap_singlify(cpuset); // Avoid hyper-threads + hwloc_membind_policy_t policy = HWLOC_MEMBIND_BIND; + hwloc_membind_flags_t flags = HWLOC_MEMBIND_THREAD; + ret = hwloc_set_area_membind(_topo, addr, size, cpuset, policy, flags); + hwloc_bitmap_free(cpuset); + } } return ret; } From 451650b0548c57b468691fdad0bc7de6477106dc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Dec 2023 10:41:59 -0700 Subject: [PATCH 0973/1155] Additional verbs configuration options and packet pacing testing. --- configure | 88 +++++++++++++++++++++++++++++++++++++++++ configure.ac | 42 ++++++++++++++++++++ src/bifrost/config.h.in | 3 ++ src/ib_verbs_send.hpp | 9 ++++- 4 files changed, 141 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 845803bfe..2580e1202 100755 --- a/configure +++ b/configure @@ -739,6 +739,9 @@ HAVE_CUDA CUDA_HOME RDMA_MAXMEM HAVE_RDMA +VERBS_SEND_PACING +VERBS_SEND_NPKTBUF +VERBS_NPKTBUF HAVE_VERBS HAVE_VMA HAVE_HWLOC @@ -856,6 +859,8 @@ with_ctags enable_hwloc enable_vma enable_verbs +with_rx_buffer_size +with_tx_buffer_size enable_rdma with_rdma_max_mem with_cuda_home @@ -1572,6 +1577,10 @@ Optional Packages: --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-ctags=[PATH] absolute path to ctags executable + --with-rx-buffer-size=N default Infiniband verbs receive buffer size in + packets (default=8192) + --with-tx-buffer-size=N default Infiniband verbs send buffer size in packets + (default=512) --with-rdma-max-mem=N maximum RDMA buffer size in bytes (default=134217728) --with-cuda-home CUDA install path (default=/usr/local/cuda) @@ -21240,6 +21249,85 @@ fi fi + +# Check whether --with-rx-buffer-size was given. +if test ${with_rx_buffer_size+y} +then : + withval=$with_rx_buffer_size; +else $as_nop + with_rx_buffer_size=8192 +fi + + VERBS_NPKTBUF=$with_rx_buffer_size + + if test x$HAVE_VERBS = x0 +then : + VERBS_NPKTBUF=0 + +fi + + +# Check whether --with-tx-buffer-size was given. +if test ${with_tx_buffer_size+y} +then : + withval=$with_tx_buffer_size; +else $as_nop + with_tx_buffer_size=512 +fi + + VERBS_SEND_NPKTBUF=$with_tx_buffer_size + + if test x$HAVE_VERBS = x0 +then : + VERBS_SEND_NPKTBUF=0 + +fi + + if test x$HAVE_VERBS != x0 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Infiniband verbs packet pacing support" >&5 +printf %s "checking for Infiniband verbs packet pacing support... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include +int +main (void) +{ + + int ndev, d; + ibv_device** ibv_dev_list = NULL; + ibv_context* ibv_ctx = NULL; + ibv_device_attr_ex ibv_dev_attr; + + ibv_dev_list = ibv_get_device_list(&ndev); + for(d=0; d&5 +printf "%s\n" "yes" >&6; } +else $as_nop + VERBS_SEND_PACING=0 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi + # # RDMA # diff --git a/configure.ac b/configure.ac index 249ed1568..6847b4099 100644 --- a/configure.ac +++ b/configure.ac @@ -139,6 +139,48 @@ AS_IF([test x$enable_verbs != xno], [AC_SUBST([HAVE_VERBS], [1]) LIBS="$LIBS -libverbs"])]) + AC_ARG_WITH([rx-buffer-size], + [AS_HELP_STRING([--with-rx-buffer-size=N], + [default Infiniband verbs receive buffer size in packets (default=8192)])], + [], + [with_rx_buffer_size=8192]) + AC_SUBST([VERBS_NPKTBUF], [$with_rx_buffer_size]) + AS_IF([test x$HAVE_VERBS = x0], + [AC_SUBST([VERBS_NPKTBUF], [0])]) + + AC_ARG_WITH([tx-buffer-size], + [AS_HELP_STRING([--with-tx-buffer-size=N], + [default Infiniband verbs send buffer size in packets (default=512)])], + [], + [with_tx_buffer_size=512]) + AC_SUBST([VERBS_SEND_NPKTBUF], [$with_tx_buffer_size]) + AS_IF([test x$HAVE_VERBS = x0], + [AC_SUBST([VERBS_SEND_NPKTBUF], [0])]) + + AS_IF([test x$HAVE_VERBS != x0], + [AC_MSG_CHECKING([for Infiniband verbs packet pacing support]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #include ]], + [[ + int ndev, d; + ibv_device** ibv_dev_list = NULL; + ibv_context* ibv_ctx = NULL; + ibv_device_attr_ex ibv_dev_attr; + + ibv_dev_list = ibv_get_device_list(&ndev); + for(d=0; d Date: Mon, 11 Dec 2023 11:17:55 -0700 Subject: [PATCH 0974/1155] Reset tmp before trying to find the NUMA node. --- src/hw_locality.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hw_locality.cpp b/src/hw_locality.cpp index dfbaa60d2..ce505f500 100644 --- a/src/hw_locality.cpp +++ b/src/hw_locality.cpp @@ -45,6 +45,7 @@ int HardwareLocality::get_numa_node_of_core(int core) { } } // Find the correct NUMA node for the PU + tmp = NULL; while( obj != NULL && (tmp = hwloc_get_next_obj_by_type(_topo, HWLOC_OBJ_NUMANODE, tmp)) != NULL ) { if( hwloc_bitmap_intersects(obj->cpuset, tmp->cpuset) ) { ret = tmp->os_index; From 801ea2c79d61a11a6a320fdcc7aaeed23835c69e Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Fri, 19 Jan 2024 14:13:33 -0700 Subject: [PATCH 0975/1155] began simple header --- src/formats/simple.hpp | 157 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 src/formats/simple.hpp diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp new file mode 100644 index 000000000..b704d26a4 --- /dev/null +++ b/src/formats/simple.hpp @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2019, The Bifrost Authors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Bifrost Authors nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include "base.hpp" + +struct __attribute__((packed)) simple_hdr_type { + int32_t seq; //ms past the time packets started sending +}; + +class SIMPLEDecoder : virtual public PacketDecoder { + inline bool valid_packet(const PacketDesc* pkt) const { + return (pkt->seq >= 0 ) + } +public: + SIMPLEDecoder(int nsrc, int src0) : PacketDecoder(nsrc, src0) {} + inline bool operator()(const uint8_t* pkt_ptr, + int pkt_size, + PacketDesc* pkt) const { + if( pkt_size < (int)sizeof(simple_hdr_type) ) { + return false; + } + const simple_hdr_type* pkt_hdr = (simple_hdr_type*)pkt_ptr; + const uint8_t* pkt_pld = pkt_ptr + sizeof(simple_hdr_type); + int pld_size = pkt_size - sizeof(simple_hdr_type); + pkt->seq = be32toh(pkt_hdr->timetag); + pkt->nsrc = 1; + pkt->src = 0; + pkt->payload_size = pld_size; + pkt->payload_ptr = pkt_pld; + pkt->nchan = 1; + pkt->chan0 = 0; + return this->valid_packet(pkt); + } +}; + +class SIMPLEProcessor : virtual public PacketProcessor { +public: + inline void operator()(const PacketDesc* pkt, + uint64_t seq0, + uint64_t nseq_per_obuf, + int nbuf, + uint8_t* obufs[], + size_t ngood_bytes[], + size_t* src_ngood_bytes[]) { + int obuf_idx = ((pkt->seq - seq0 >= 1*nseq_per_obuf) + + (pkt->seq - seq0 >= 2*nseq_per_obuf)); + size_t obuf_seq0 = seq0 + obuf_idx*nseq_per_obuf; + size_t nbyte = pkt->payload_size * BF_UNPACK_FACTOR; + ngood_bytes[obuf_idx] += nbyte; + src_ngood_bytes[obuf_idx][0] += nbyte; + // **CHANGED RECENTLY + int payload_size = pkt->payload_size;//pkt->nchan*(PKT_NINPUT*2*PKT_NBIT/8); + + size_t obuf_offset = (pkt->seq-obuf_seq0)*pkt->nsrc*payload_size; + typedef unaligned256_type itype; + typedef aligned256_type otype; + + obuf_offset *= BF_UNPACK_FACTOR; + + // Note: Using these SSE types allows the compiler to use SSE instructions + // However, they require aligned memory (otherwise segfault) + itype const* __restrict__ in = (itype const*)pkt->payload_ptr; + otype* __restrict__ out = (otype* )&obufs[obuf_idx][obuf_offset]; + + int chan = 0; + //cout << pkt->src << ", " << pkt->nsrc << endl; + //cout << pkt->nchan << endl; + for( ; channchan; ++chan ) { +#if defined BF_AVX_ENABLED && BF_AVX_ENABLED + _mm256_store_si256(reinterpret_cast<__m256i*>(&out[pkt->src + pkt->nsrc*chan]), + _mm256_loadu_si256(reinterpret_cast(&in[chan]))); +#else +#if defined BF_SSE_ENABLED && BF_SSE_ENABLED + const unaligned128_type* dsrc = (const unaligned128_type*) &in[chan]; + aligned128_type* ddst = (aligned128_type*) &out[pkt->src + pkt->nsrc*chan]; + + _mm_store_si128(reinterpret_cast<__m128i*>(ddst), + _mm_loadu_si128(reinterpret_cast(dsrc))); + _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), + _mm_loadu_si128(reinterpret_cast(dsrc+1))); +#else + ::memcpy(&out[pkt->src + pkt->nsrc*chan], + &in[chan], sizeof(otype)); +#endif +#endif + } + } + + inline void blank_out_source(uint8_t* data, + int src, + int nsrc, + int nchan, + int nseq) { + typedef aligned256_type otype; + otype* __restrict__ aligned_data = (otype*)data; + for( int t=0; t(&aligned_data[src + nsrc*(c + nchan*t)]), + _mm256_setzero_si256()); +#else +#if defined BF_SSE_ENABLED && BF_SSE_ENABLED + aligned128_type* ddst = (aligned128_type*) &aligned_data[src + nsrc*(c + nchan*t)]; + + _mm_store_si128(reinterpret_cast<__m128i*>(ddst), + _mm_setzero_si128()); + _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), + _mm_setzero_si128()); +#else + ::memset(&aligned_data[src + nsrc*(c + nchan*t)], + 0, sizeof(otype)); +#endif +#endif + } + } + } +}; + +class SIMPLEHeaderFiller : virtual public PacketHeaderFiller { +public: + inline int get_size() { return sizeof(simple_hdr_type); } + inline void operator()(const PacketDesc* hdr_base, + BFoffset framecount, + char* hdr) { + chips_hdr_type* header = reinterpret_cast(hdr); + memset(header, 0, sizeof(simple_hdr_type)); + + header->seq = htobe32(hdr_base->seq); + } +}; From c4164969666473b58c8195ed259d5cf04fe08fc6 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Fri, 19 Jan 2024 16:11:22 -0700 Subject: [PATCH 0976/1155] progress --- src/bifrost/packet_capture.h | 4 ++ src/formats/formats.hpp | 1 + src/formats/simple.hpp | 2 +- src/packet_capture.hpp | 93 ++++++++++++++++++++++++++++++++++-- src/packet_writer.hpp | 14 ++++++ 5 files changed, 109 insertions(+), 5 deletions(-) diff --git a/src/bifrost/packet_capture.h b/src/bifrost/packet_capture.h index f599824fc..b280c20d4 100644 --- a/src/bifrost/packet_capture.h +++ b/src/bifrost/packet_capture.h @@ -38,6 +38,8 @@ extern "C" { // Callback setup +typedef int (*BFpacketcapture_simple_sequence_callback)(BFoffset, int, int, int, + BFoffset*, void const**, size_t*); typedef int (*BFpacketcapture_chips_sequence_callback)(BFoffset, int, int, int, BFoffset*, void const**, size_t*); typedef int (*BFpacketcapture_ibeam_sequence_callback)(BFoffset, int, int, int, @@ -59,6 +61,8 @@ typedef struct BFpacketcapture_callback_impl* BFpacketcapture_callback; BFstatus bfPacketCaptureCallbackCreate(BFpacketcapture_callback* obj); BFstatus bfPacketCaptureCallbackDestroy(BFpacketcapture_callback obj); +BFstatus bfPacketCaptureCallbackSetSIMPLE(BFpacketcapture_callback obj, + BFpacketcapture_simple_sequence_callback callback); BFstatus bfPacketCaptureCallbackSetCHIPS(BFpacketcapture_callback obj, BFpacketcapture_chips_sequence_callback callback); BFstatus bfPacketCaptureCallbackSetIBeam(BFpacketcapture_callback obj, diff --git a/src/formats/formats.hpp b/src/formats/formats.hpp index 14ed3ad9e..885030bc7 100644 --- a/src/formats/formats.hpp +++ b/src/formats/formats.hpp @@ -37,3 +37,4 @@ #include "tbf.hpp" #include "ibeam.hpp" #include "pbeam.hpp" +#include "simple.hpp" diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index b704d26a4..3e10b59a5 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -31,7 +31,7 @@ #include "base.hpp" struct __attribute__((packed)) simple_hdr_type { - int32_t seq; //ms past the time packets started sending + uint32_t seq; }; class SIMPLEDecoder : virtual public PacketDecoder { diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index a2551c3d7..10e3483a3 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -372,6 +372,7 @@ inline uint64_t round_nearest(uint64_t val, uint64_t mult) { } class BFpacketcapture_callback_impl { + BFpacketcapture_simple_sequence_callback _simple_callback; BFpacketcapture_chips_sequence_callback _chips_callback; BFpacketcapture_ibeam_sequence_callback _ibeam_callback; BFpacketcapture_pbeam_sequence_callback _pbeam_callback; @@ -382,9 +383,15 @@ class BFpacketcapture_callback_impl { BFpacketcapture_drx8_sequence_callback _drx8_callback; public: BFpacketcapture_callback_impl() - : _chips_callback(NULL), _ibeam_callback(NULL), _pbeam_callback(NULL), - _cor_callback(NULL), _vdif_callback(NULL), _tbn_callback(NULL), - _drx_callback(NULL), _drx8_callback(NULL) {} + : _simple_callback(NULL), _chips_callback(NULL), _ibeam_callback(NULL), + _pbeam_callback(NULL), _cor_callback(NULL), _vdif_callback(NULL), + _tbn_callback(NULL), _drx_callback(NULL), _drx8_callback(NULL) {} + inline void set_simple(BFpacketcapture_simple_sequence_callback callback) { + _simple_callback = callback; + } + inline BFpacketcapture_simple_sequence_callback get_simple() { + return _simple_callback; + inline void set_chips(BFpacketcapture_chips_sequence_callback callback) { _chips_callback = callback; } @@ -590,6 +597,78 @@ class BFpacketcapture_impl { BFpacketcapture_status recv(); }; +class BFpacketcapture_simple_impl : public BFpacketcapture_impl { + ProcLog _type_log; + ProcLog _chan_log; + + BFpacketcapture_simple_sequence_callback _sequence_callback; + + void on_sequence_start(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size ) { + // TODO: Might be safer to round to nearest here, but the current firmware + // always starts things ~3 seq's before the 1sec boundary anyway. + //seq = round_up(pkt->seq, _slot_ntime); + //*_seq = round_nearest(pkt->seq, _slot_ntime); + _seq = round_up(pkt->seq, _slot_ntime); + this->on_sequence_changed(pkt, seq0, time_tag, hdr, hdr_size); + } + void on_sequence_active(const PacketDesc* pkt) { + if( pkt ) { + //cout << "Latest nchan, chan0 = " << pkt->nchan << ", " << pkt->chan0 << endl; + } + else { + //cout << "No latest packet" << endl; + } + } + inline bool has_sequence_changed(const PacketDesc* pkt) { + return (pkt->chan0 != _chan0) \ + || (pkt->nchan != _nchan); + } + void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { + *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); + _chan0 = pkt->chan0; + _nchan = pkt->nchan; + _payload_size = pkt->payload_size; + + if( _sequence_callback ) { + int status = (*_sequence_callback)(*seq0, + _chan0, + _nchan, + _nsrc, + time_tag, + hdr, + hdr_size); + if( status != 0 ) { + // TODO: What to do here? Needed? + throw std::runtime_error("BAD HEADER CALLBACK STATUS"); + } + } else { + // Simple default for easy testing + *time_tag = *seq0; + *hdr = NULL; + *hdr_size = 0; + } + + _chan_log.update() << "chan0 : " << _chan0 << "\n" + << "nchan : " << _nchan << "\n" + << "payload_size : " << _payload_size << "\n"; + } +public: + inline BFpacketcapture_simple_impl(PacketCaptureThread* capture, + BFring ring, + int nsrc, + int src0, + int buffer_ntime, + int slot_ntime, + BFpacketcapture_callback sequence_callback) + : BFpacketcapture_impl(capture, nullptr, nullptr, ring, nsrc, buffer_ntime, slot_ntime), + _type_log((std::string(capture->get_name())+"/type").c_str()), + _chan_log((std::string(capture->get_name())+"/chans").c_str()), + _sequence_callback(sequence_callback->get_simple()) { + _decoder = new SIMPLEDecoder(nsrc, src0); + _processor = new SIMPLEProcessor(); + _type_log.update("type : %s\n", "simple"); + } +}; class BFpacketcapture_chips_impl : public BFpacketcapture_impl { ProcLog _type_log; ProcLog _chan_log; @@ -1235,7 +1314,13 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, BFiomethod backend) { BF_ASSERT(obj, BF_STATUS_INVALID_POINTER); - if( std::string(format).substr(0, 5) == std::string("chips") ) { + if( std::string(format).substr(0, 6) == std::string("simple") ) { + if( backend == BF_IO_DISK ) { + // Need to know how much to read at a time + int nchan = 1; + max_payload_size = sizeof(simple_hdr_type) + (4*nchan); + } + } else if( std::string(format).substr(0, 5) == std::string("chips") ) { if( backend == BF_IO_DISK ) { // Need to know how much to read at a time int nchan = std::atoi((std::string(format).substr(6, std::string(format).length())).c_str()); diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 7884f5bbd..d3c0228fa 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -446,6 +446,18 @@ class BFpacketwriter_generic_impl : public BFpacketwriter_impl { } }; +class BFpacketwriter_simple_impl : public BFpacketwriter_impl { + ProcLog _type_log; +public: + inline BFpacketwriter_simple_impl(PacketWriterThread* writer, + int nsamples) + : BFpacketwriter_impl(writer, nullptr, nsamples, BF_DTYPE_I2), + _type_log((std::string(writer->get_name())+"/type").c_str()) { + _filler = new SIMPLEHeaderFiller(); + _type_log.update("type : %s\n", "simple"); + } +}; + class BFpacketwriter_chips_impl : public BFpacketwriter_impl { ProcLog _type_log; public: @@ -558,6 +570,8 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, int nsamples = 0; if(std::string(format).substr(0, 8) == std::string("generic_") ) { nsamples = std::atoi((std::string(format).substr(8, std::string(format).length())).c_str()); + } else if( std::string(format).substr(0, 7) == std::string("simple_") ) { + nsamples = 4092; } else if( std::string(format).substr(0, 6) == std::string("chips_") ) { int nchan = std::atoi((std::string(format).substr(6, std::string(format).length())).c_str()); nsamples = 32*nchan; From 166c5664d03b5fe99eec27419851a3db762da2fe Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Wed, 24 Jan 2024 16:54:50 -0700 Subject: [PATCH 0977/1155] progress --- python/bifrost/packet_capture.py | 4 ++++ src/formats/simple.hpp | 16 ++++++++-------- src/packet_capture.cpp | 21 +++++++++++++++++++-- src/packet_capture.hpp | 29 +++++++++++------------------ 4 files changed, 42 insertions(+), 28 deletions(-) diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index 760debd98..aae652231 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -38,6 +38,10 @@ class PacketCaptureCallback(BifrostObject): def __init__(self): BifrostObject.__init__( self, _bf.bfPacketCaptureCallbackCreate, _bf.bfPacketCaptureCallbackDestroy) + def set_simple(self, fnc): + self._ref_cache['simple'] = _bf.BFpacketcapture_simple_sequence_callback(fnc) + _check(_bf.bfPacketCaptureCallbackSetSIMPLE( + self.obj, self._ref_cache['simple'])) def set_chips(self, fnc): self._ref_cache['chips'] = _bf.BFpacketcapture_chips_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetCHIPS( diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index 3e10b59a5..4060efb05 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -36,7 +36,7 @@ struct __attribute__((packed)) simple_hdr_type { class SIMPLEDecoder : virtual public PacketDecoder { inline bool valid_packet(const PacketDesc* pkt) const { - return (pkt->seq >= 0 ) + return (pkt->seq >= 0 ); } public: SIMPLEDecoder(int nsrc, int src0) : PacketDecoder(nsrc, src0) {} @@ -49,7 +49,7 @@ class SIMPLEDecoder : virtual public PacketDecoder { const simple_hdr_type* pkt_hdr = (simple_hdr_type*)pkt_ptr; const uint8_t* pkt_pld = pkt_ptr + sizeof(simple_hdr_type); int pld_size = pkt_size - sizeof(simple_hdr_type); - pkt->seq = be32toh(pkt_hdr->timetag); + pkt->seq = be32toh(pkt_hdr->seq); pkt->nsrc = 1; pkt->src = 0; pkt->payload_size = pld_size; @@ -93,7 +93,7 @@ class SIMPLEProcessor : virtual public PacketProcessor { //cout << pkt->src << ", " << pkt->nsrc << endl; //cout << pkt->nchan << endl; for( ; channchan; ++chan ) { -#if defined BF_AVX_ENABLED && BF_AVX_ENABLED +/*#if defined BF_AVX_ENABLED && BF_AVX_ENABLED _mm256_store_si256(reinterpret_cast<__m256i*>(&out[pkt->src + pkt->nsrc*chan]), _mm256_loadu_si256(reinterpret_cast(&in[chan]))); #else @@ -104,12 +104,12 @@ class SIMPLEProcessor : virtual public PacketProcessor { _mm_store_si128(reinterpret_cast<__m128i*>(ddst), _mm_loadu_si128(reinterpret_cast(dsrc))); _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), - _mm_loadu_si128(reinterpret_cast(dsrc+1))); -#else + _mm_loadu_si128(reinterpret_cast(dsrc+1)));*/ +//#else ::memcpy(&out[pkt->src + pkt->nsrc*chan], &in[chan], sizeof(otype)); -#endif -#endif +//#endif +//#endif } } @@ -149,7 +149,7 @@ class SIMPLEHeaderFiller : virtual public PacketHeaderFiller { inline void operator()(const PacketDesc* hdr_base, BFoffset framecount, char* hdr) { - chips_hdr_type* header = reinterpret_cast(hdr); + simple_hdr_type* header = reinterpret_cast(hdr); memset(header, 0, sizeof(simple_hdr_type)); header->seq = htobe32(hdr_base->seq); diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index bbe8526a1..92094342e 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -28,7 +28,7 @@ #include "packet_capture.hpp" -#define BF_JAYCE_DEBUG 0 +#define BF_JAYCE_DEBUG 1 #if BF_JAYCE_DEBUG #define BF_PRINTD(stmt) \ @@ -98,16 +98,22 @@ int PacketCaptureThread::run(uint64_t seq_beg, BF_PRINTD("CONTINUE HERE"); continue; } - BF_PRINTD("FINALLY"); + BF_PRINTD("FINALLY1"); ++_stats.nvalid; + BF_PRINTD("FINALLY2"); _stats.nvalid_bytes += _pkt.payload_size; + BF_PRINTD("FINALLY3"); ++_src_stats[_pkt.src].nvalid; + BF_PRINTD("FINALLY4"); _src_stats[_pkt.src].nvalid_bytes += _pkt.payload_size; + BF_PRINTD("FINALLY5"); // HACK TODO: src_ngood_bytes should be accumulated locally and // then atomically updated, like ngood_bytes. The // current way is not thread-safe. + BF_PRINTD("INPUTS" << " " << &_pkt << " " << seq_beg << " " << nseq_per_obuf << " " << nbuf <<" " << obufs<< " " << local_ngood_bytes << " " << src_ngood_bytes); (*process)(&_pkt, seq_beg, nseq_per_obuf, nbuf, obufs, local_ngood_bytes, /*local_*/src_ngood_bytes); + BF_PRINTD("FINALLY6"); } if( nbuf > 0 ) { atomic_add_and_fetch(ngood_bytes[0], local_ngood_bytes[0]); } if( nbuf > 1 ) { atomic_add_and_fetch(ngood_bytes[1], local_ngood_bytes[1]); } @@ -125,6 +131,13 @@ BFstatus bfPacketCaptureCallbackDestroy(BFpacketcapture_callback obj) { return BF_STATUS_SUCCESS; } +BFstatus bfPacketCaptureCallbackSetSIMPLE(BFpacketcapture_callback obj, + BFpacketcapture_simple_sequence_callback callback) { + BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); + obj->set_simple(callback); + return BF_STATUS_SUCCESS; +} + BFstatus bfPacketCaptureCallbackSetCHIPS(BFpacketcapture_callback obj, BFpacketcapture_chips_sequence_callback callback) { BF_ASSERT(obj, BF_STATUS_INVALID_HANDLE); @@ -184,19 +197,23 @@ BFstatus bfPacketCaptureCallbackSetDRX8(BFpacketcapture_callback obj, BFpacketcapture_status BFpacketcapture_impl::recv() { _t0 = std::chrono::high_resolution_clock::now(); + BF_PRINTD("impl, start clock"); uint8_t* buf_ptrs[2]; // Minor HACK to access the buffers in a 2-element queue buf_ptrs[0] = _bufs.size() > 0 ? (uint8_t*)_bufs.front()->data() : NULL; buf_ptrs[1] = _bufs.size() > 1 ? (uint8_t*)_bufs.back()->data() : NULL; + BF_PRINTD("buff ptrs"); size_t* ngood_bytes_ptrs[2]; ngood_bytes_ptrs[0] = _buf_ngood_bytes.size() > 0 ? &_buf_ngood_bytes.front() : NULL; ngood_bytes_ptrs[1] = _buf_ngood_bytes.size() > 1 ? &_buf_ngood_bytes.back() : NULL; + BF_PRINTD("ngoodbytes"); size_t* src_ngood_bytes_ptrs[2]; src_ngood_bytes_ptrs[0] = _buf_src_ngood_bytes.size() > 0 ? &_buf_src_ngood_bytes.front()[0] : NULL; src_ngood_bytes_ptrs[1] = _buf_src_ngood_bytes.size() > 1 ? &_buf_src_ngood_bytes.back()[0] : NULL; + BF_PRINTD("srcngoodbytes"); int state = _capture->run(_seq, _nseq_per_buf, _bufs.size(), diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 10e3483a3..2953b8b23 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -342,7 +342,8 @@ class PacketCaptureThread : public BoundThread { size_t* src_ngood_bytes[], PDC* decode, PPC* process); - inline const char* get_name() { return _method->get_name(); } + inline const char* get_name() { + return _method->get_name(); } inline const size_t get_max_size() { return _method->get_max_size(); } inline const BFiomethod get_io_method() { return _method->get_io_method(); } inline const int get_core() { return _core; } @@ -391,7 +392,7 @@ class BFpacketcapture_callback_impl { } inline BFpacketcapture_simple_sequence_callback get_simple() { return _simple_callback; - + } inline void set_chips(BFpacketcapture_chips_sequence_callback callback) { _chips_callback = callback; } @@ -612,22 +613,12 @@ class BFpacketcapture_simple_impl : public BFpacketcapture_impl { this->on_sequence_changed(pkt, seq0, time_tag, hdr, hdr_size); } void on_sequence_active(const PacketDesc* pkt) { - if( pkt ) { - //cout << "Latest nchan, chan0 = " << pkt->nchan << ", " << pkt->chan0 << endl; - } - else { - //cout << "No latest packet" << endl; - } } inline bool has_sequence_changed(const PacketDesc* pkt) { - return (pkt->chan0 != _chan0) \ - || (pkt->nchan != _nchan); + return 1; } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); - _chan0 = pkt->chan0; - _nchan = pkt->nchan; - _payload_size = pkt->payload_size; if( _sequence_callback ) { int status = (*_sequence_callback)(*seq0, @@ -648,9 +639,6 @@ class BFpacketcapture_simple_impl : public BFpacketcapture_impl { *hdr_size = 0; } - _chan_log.update() << "chan0 : " << _chan0 << "\n" - << "nchan : " << _nchan << "\n" - << "payload_size : " << _payload_size << "\n"; } public: inline BFpacketcapture_simple_impl(PacketCaptureThread* capture, @@ -1318,7 +1306,7 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, if( backend == BF_IO_DISK ) { // Need to know how much to read at a time int nchan = 1; - max_payload_size = sizeof(simple_hdr_type) + (4*nchan); + max_payload_size = 8192; } } else if( std::string(format).substr(0, 5) == std::string("chips") ) { if( backend == BF_IO_DISK ) { @@ -1374,8 +1362,13 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, return BF_STATUS_UNSUPPORTED; } PacketCaptureThread* capture = new PacketCaptureThread(method, nsrc, core); + if (std::string(format).substr(0, 6) == std::string("simple") ) { + BF_TRY_RETURN_ELSE(*obj = new BFpacketcapture_simple_impl(capture, ring, nsrc, src0, + buffer_ntime, slot_ntime, + sequence_callback), + *obj = 0); - if( std::string(format).substr(0, 5) == std::string("chips") ) { + } else if( std::string(format).substr(0, 5) == std::string("chips") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketcapture_chips_impl(capture, ring, nsrc, src0, buffer_ntime, slot_ntime, sequence_callback), From 5d0450178de39772c6195965475f985fa1f6e310 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Fri, 26 Jan 2024 11:03:07 -0700 Subject: [PATCH 0978/1155] simple packet working --- src/packet_capture.cpp | 2 +- src/packet_writer.hpp | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index 92094342e..3e00f2053 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -28,7 +28,7 @@ #include "packet_capture.hpp" -#define BF_JAYCE_DEBUG 1 +#define BF_JAYCE_DEBUG 0 #if BF_JAYCE_DEBUG #define BF_PRINTD(stmt) \ diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index d3c0228fa..d41b6a354 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -451,7 +451,7 @@ class BFpacketwriter_simple_impl : public BFpacketwriter_impl { public: inline BFpacketwriter_simple_impl(PacketWriterThread* writer, int nsamples) - : BFpacketwriter_impl(writer, nullptr, nsamples, BF_DTYPE_I2), + : BFpacketwriter_impl(writer, nullptr, nsamples, BF_DTYPE_I16), _type_log((std::string(writer->get_name())+"/type").c_str()) { _filler = new SIMPLEHeaderFiller(); _type_log.update("type : %s\n", "simple"); @@ -570,8 +570,8 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, int nsamples = 0; if(std::string(format).substr(0, 8) == std::string("generic_") ) { nsamples = std::atoi((std::string(format).substr(8, std::string(format).length())).c_str()); - } else if( std::string(format).substr(0, 7) == std::string("simple_") ) { - nsamples = 4092; + } else if( std::string(format).substr(0, 6) == std::string("simple") ) { + nsamples = 4094; } else if( std::string(format).substr(0, 6) == std::string("chips_") ) { int nchan = std::atoi((std::string(format).substr(6, std::string(format).length())).c_str()); nsamples = 32*nchan; @@ -613,6 +613,9 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, if( std::string(format).substr(0, 8) == std::string("generic_") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_generic_impl(writer, nsamples), *obj = 0); + } else if( std::string(format).substr(0, 6) == std::string("simple") ) { + BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_simple_impl(writer, nsamples), + *obj = 0); } else if( std::string(format).substr(0, 6) == std::string("chips_") ) { BF_TRY_RETURN_ELSE(*obj = new BFpacketwriter_chips_impl(writer, nsamples), *obj = 0); From d043ac5b95fb6a9f49d0bbf39f11942089a6dcdb Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Fri, 26 Jan 2024 11:25:35 -0700 Subject: [PATCH 0979/1155] re-enable optimization --- src/formats/simple.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index 4060efb05..bd5ad891c 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -93,7 +93,7 @@ class SIMPLEProcessor : virtual public PacketProcessor { //cout << pkt->src << ", " << pkt->nsrc << endl; //cout << pkt->nchan << endl; for( ; channchan; ++chan ) { -/*#if defined BF_AVX_ENABLED && BF_AVX_ENABLED +#if defined BF_AVX_ENABLED && BF_AVX_ENABLED _mm256_store_si256(reinterpret_cast<__m256i*>(&out[pkt->src + pkt->nsrc*chan]), _mm256_loadu_si256(reinterpret_cast(&in[chan]))); #else @@ -104,7 +104,7 @@ class SIMPLEProcessor : virtual public PacketProcessor { _mm_store_si128(reinterpret_cast<__m128i*>(ddst), _mm_loadu_si128(reinterpret_cast(dsrc))); _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), - _mm_loadu_si128(reinterpret_cast(dsrc+1)));*/ + _mm_loadu_si128(reinterpret_cast(dsrc+1))); //#else ::memcpy(&out[pkt->src + pkt->nsrc*chan], &in[chan], sizeof(otype)); From 978e4d2136a9709d8a61f267b32cd34d640ae95a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 Jan 2024 15:00:41 -0700 Subject: [PATCH 0980/1155] Missed a couple. --- src/formats/simple.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index bd5ad891c..23a0edfd6 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -105,11 +105,11 @@ class SIMPLEProcessor : virtual public PacketProcessor { _mm_loadu_si128(reinterpret_cast(dsrc))); _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), _mm_loadu_si128(reinterpret_cast(dsrc+1))); -//#else +#else ::memcpy(&out[pkt->src + pkt->nsrc*chan], &in[chan], sizeof(otype)); -//#endif -//#endif +#endif +#endif } } From 066f35664a518b1a1bb9e3930fa4351e0e88c752 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 Jan 2024 16:36:39 -0700 Subject: [PATCH 0981/1155] Also update the packet size so we know what to expect in the future. --- src/packet_capture.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 2953b8b23..2624debf3 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -619,7 +619,8 @@ class BFpacketcapture_simple_impl : public BFpacketcapture_impl { } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); - + _payload_size = pkt->payload_size; + if( _sequence_callback ) { int status = (*_sequence_callback)(*seq0, _chan0, From a1cf369770571c61268f56b7edc1184008ecd811 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 26 Jan 2024 16:37:25 -0700 Subject: [PATCH 0982/1155] There is so little to the header that we cannot tell if the observing setup has changed or not. --- src/packet_capture.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 2624debf3..b0811c2d8 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -615,7 +615,7 @@ class BFpacketcapture_simple_impl : public BFpacketcapture_impl { void on_sequence_active(const PacketDesc* pkt) { } inline bool has_sequence_changed(const PacketDesc* pkt) { - return 1; + return 0; } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); From c63f37ea1f3c0264cee7e41e807725864a385f07 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 8 Feb 2024 12:55:54 -0700 Subject: [PATCH 0983/1155] Fixed not copying all the data to ring buffer --- src/formats/simple.hpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index 23a0edfd6..c46fb2f6d 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -93,7 +93,7 @@ class SIMPLEProcessor : virtual public PacketProcessor { //cout << pkt->src << ", " << pkt->nsrc << endl; //cout << pkt->nchan << endl; for( ; channchan; ++chan ) { -#if defined BF_AVX_ENABLED && BF_AVX_ENABLED +/* #if defined BF_AVX_ENABLED && BF_AVX_ENABLED _mm256_store_si256(reinterpret_cast<__m256i*>(&out[pkt->src + pkt->nsrc*chan]), _mm256_loadu_si256(reinterpret_cast(&in[chan]))); #else @@ -105,11 +105,11 @@ class SIMPLEProcessor : virtual public PacketProcessor { _mm_loadu_si128(reinterpret_cast(dsrc))); _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), _mm_loadu_si128(reinterpret_cast(dsrc+1))); -#else +#else*/ ::memcpy(&out[pkt->src + pkt->nsrc*chan], - &in[chan], sizeof(otype)); -#endif -#endif + &in[chan], 256*sizeof(otype)); +// #endif +// #endif } } @@ -122,7 +122,7 @@ class SIMPLEProcessor : virtual public PacketProcessor { otype* __restrict__ aligned_data = (otype*)data; for( int t=0; t(&aligned_data[src + nsrc*(c + nchan*t)]), _mm256_setzero_si256()); #else @@ -133,11 +133,11 @@ class SIMPLEProcessor : virtual public PacketProcessor { _mm_setzero_si128()); _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), _mm_setzero_si128()); -#else +#else*/ ::memset(&aligned_data[src + nsrc*(c + nchan*t)], 0, sizeof(otype)); -#endif -#endif +// #endif +// #endif } } } From e89a650974b3e49b8617367593998a99e83acd66 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 8 Feb 2024 13:34:31 -0700 Subject: [PATCH 0984/1155] simplify --- src/formats/simple.hpp | 52 ++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index c46fb2f6d..11e764091 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -90,24 +90,25 @@ class SIMPLEProcessor : virtual public PacketProcessor { otype* __restrict__ out = (otype* )&obufs[obuf_idx][obuf_offset]; int chan = 0; + int nelem = 256; //cout << pkt->src << ", " << pkt->nsrc << endl; //cout << pkt->nchan << endl; - for( ; channchan; ++chan ) { + for( ; chan(&out[pkt->src + pkt->nsrc*chan]), _mm256_loadu_si256(reinterpret_cast(&in[chan]))); -#else -#if defined BF_SSE_ENABLED && BF_SSE_ENABLED - const unaligned128_type* dsrc = (const unaligned128_type*) &in[chan]; - aligned128_type* ddst = (aligned128_type*) &out[pkt->src + pkt->nsrc*chan]; - - _mm_store_si128(reinterpret_cast<__m128i*>(ddst), - _mm_loadu_si128(reinterpret_cast(dsrc))); - _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), - _mm_loadu_si128(reinterpret_cast(dsrc+1))); #else*/ - ::memcpy(&out[pkt->src + pkt->nsrc*chan], - &in[chan], 256*sizeof(otype)); +// #if defined BF_SSE_ENABLED && BF_SSE_ENABLED +// const unaligned128_type* dsrc = (const unaligned128_type*) &in[chan]; +// aligned128_type* ddst = (aligned128_type*) &out[chan]; +// +// _mm_store_si128(reinterpret_cast<__m128i*>(ddst), +// _mm_loadu_si128(reinterpret_cast(dsrc))); // Problem HERE? +// _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), +// _mm_loadu_si128(reinterpret_cast(dsrc+1))); +// #else + ::memcpy(&out[chan], + &in[chan], sizeof(otype)); // #endif // #endif } @@ -116,28 +117,29 @@ class SIMPLEProcessor : virtual public PacketProcessor { inline void blank_out_source(uint8_t* data, int src, int nsrc, - int nchan, + int nchan, int nseq) { typedef aligned256_type otype; + int nelem = 256; otype* __restrict__ aligned_data = (otype*)data; for( int t=0; t(&aligned_data[src + nsrc*(c + nchan*t)]), + _mm256_store_si256(reinterpret_cast<__m256i*>(&aligned_data[src + nsrc*(c + nelem*t)]), _mm256_setzero_si256()); -#else -#if defined BF_SSE_ENABLED && BF_SSE_ENABLED - aligned128_type* ddst = (aligned128_type*) &aligned_data[src + nsrc*(c + nchan*t)]; - - _mm_store_si128(reinterpret_cast<__m128i*>(ddst), - _mm_setzero_si128()); - _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), - _mm_setzero_si128()); #else*/ - ::memset(&aligned_data[src + nsrc*(c + nchan*t)], +// #if defined BF_SSE_ENABLED && BF_SSE_ENABLED +// aligned128_type* ddst = (aligned128_type*) &aligned_data[src + nsrc*(c + nelem*t)]; +// +// _mm_store_si128(reinterpret_cast<__m128i*>(ddst), +// _mm_setzero_si128()); +// _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), +// _mm_setzero_si128()); +// #else + ::memset(&aligned_data[src + nsrc*(c + nelem*t)], 0, sizeof(otype)); // #endif -// #endif +//#endif } } } From c7478b14b60333a9177933ee40ebc8da543d1e42 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Fri, 16 Feb 2024 14:11:20 -0700 Subject: [PATCH 0985/1155] Update simple.hpp Remove optimizations, they don't work anyway --- src/formats/simple.hpp | 38 +++----------------------------------- 1 file changed, 3 insertions(+), 35 deletions(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index 11e764091..b663da222 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -91,27 +91,9 @@ class SIMPLEProcessor : virtual public PacketProcessor { int chan = 0; int nelem = 256; - //cout << pkt->src << ", " << pkt->nsrc << endl; - //cout << pkt->nchan << endl; - for( ; chan(&out[pkt->src + pkt->nsrc*chan]), - _mm256_loadu_si256(reinterpret_cast(&in[chan]))); -#else*/ -// #if defined BF_SSE_ENABLED && BF_SSE_ENABLED -// const unaligned128_type* dsrc = (const unaligned128_type*) &in[chan]; -// aligned128_type* ddst = (aligned128_type*) &out[chan]; -// -// _mm_store_si128(reinterpret_cast<__m128i*>(ddst), -// _mm_loadu_si128(reinterpret_cast(dsrc))); // Problem HERE? -// _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), -// _mm_loadu_si128(reinterpret_cast(dsrc+1))); -// #else - ::memcpy(&out[chan], - &in[chan], sizeof(otype)); -// #endif -// #endif - } + for( ; chan(&aligned_data[src + nsrc*(c + nelem*t)]), - _mm256_setzero_si256()); -#else*/ -// #if defined BF_SSE_ENABLED && BF_SSE_ENABLED -// aligned128_type* ddst = (aligned128_type*) &aligned_data[src + nsrc*(c + nelem*t)]; -// -// _mm_store_si128(reinterpret_cast<__m128i*>(ddst), -// _mm_setzero_si128()); -// _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), -// _mm_setzero_si128()); -// #else ::memset(&aligned_data[src + nsrc*(c + nelem*t)], 0, sizeof(otype)); -// #endif -//#endif } } } From 7dc1c5cd6919501b39757cc6db5d05d9049285b0 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 19 Feb 2024 11:41:07 -0500 Subject: [PATCH 0986/1155] Explicitly include cstdint for gcc13 (#227) https://gcc.gnu.org/gcc-13/porting_to.html --- src/trace.hpp | 1 + src/utils.hpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/trace.hpp b/src/trace.hpp index 13a127d0a..35aad52be 100644 --- a/src/trace.hpp +++ b/src/trace.hpp @@ -39,6 +39,7 @@ #include #include #include +#include #if BF_TRACE_ENABLED // Note: __PRETTY_FUNCTION__ is GCC-specific diff --git a/src/utils.hpp b/src/utils.hpp index db9b0d03b..32219dcd0 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -39,6 +39,7 @@ #include #include #include // For ::memcpy +#include #include #define BF_DTYPE_IS_COMPLEX(dtype) bool((dtype) & BF_DTYPE_COMPLEX_BIT) From 77ee338a97393c4a6e8669661dc5fdff300f7b1c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 14:47:43 -0700 Subject: [PATCH 0987/1155] Bad merge. --- configure | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/configure b/configure index 66d6c8164..fa9861d0b 100755 --- a/configure +++ b/configure @@ -21641,14 +21641,15 @@ cudaMalloc(0, 0); return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO" +if ac_fn_cxx_try_link "$LINENO" then : else $as_nop HAVE_CUDA=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext if test "$HAVE_CUDA" = "1"; then LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" @@ -21672,22 +21673,22 @@ _ACEOF if ac_fn_cxx_try_link "$LINENO" then : CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) - CUDA_MAJOR=$( echo "${CUDA_VERSION}" | cut -d. -f1 ) - if test "${CUDA_MAJOR}" -ge 10; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes - v$CUDA_VERSION" >&5 printf "%s\n" "yes - v$CUDA_VERSION" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - found v$CUDA_VERSION" >&5 -printf "%s\n" "no - found v$CUDA_VERSION" >&6; } - fi else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - build failure" >&5 -printf "%s\n" "no - build failure" >&6; } - HAVE_CUDA=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + HAVE_CUDA=0 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + HAVE_CUDA=0 + + fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" @@ -27576,3 +27577,4 @@ printf "%s\n" "$as_me: options:$OPTIONS" >&6;} echo "" echo "Bifrost is now ready to be compiled. Please run 'make'" echo "" + From 10f64379297e68346b14ca31621dd1870c999570 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 14:52:42 -0700 Subject: [PATCH 0988/1155] Getting closer with this update. --- config/cuda.m4 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 0744efec6..71c3214e0 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -251,10 +251,10 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" + NVCCLIBS_save="$NVCCLIBS" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="-lcuda -lcudart" + NVCCLIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ @@ -292,7 +292,7 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" + NVCCLIBS="$NVCCLIBS_save" else AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) fi From 03fa46aaf62320d7ae0bba8b6fc98edda9a6a1eb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 14:53:02 -0700 Subject: [PATCH 0989/1155] Update configure. --- configure | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configure b/configure index fa9861d0b..c7b07ae79 100755 --- a/configure +++ b/configure @@ -21930,10 +21930,10 @@ printf %s "checking for minimum shared memory per block... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" - LIBS_save="$LIBS" + NVCCLIBS_save="$NVCCLIBS" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="-lcuda -lcudart" + NVCCLIBS="-lcuda -lcudart" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : @@ -21997,7 +21997,7 @@ fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" - LIBS="$LIBS_save" + NVCCLIBS="$NVCCLIBS_save" else GPU_SHAREDMEM=$with_shared_mem From 08508b48c5f2331298e92716736d234f68799a7f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 15:25:48 -0700 Subject: [PATCH 0990/1155] Missed one. --- config/cuda.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 71c3214e0..055418ea1 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -47,7 +47,7 @@ AC_DEFUN([AX_CHECK_CUDA], ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart" + NVCCLIBS="$LIBS -lcuda -lcudart" ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' AC_LINK_IFELSE([ From 38264a894b81e56d7e6c7320b148f0d60fd0f91b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 15:26:10 -0700 Subject: [PATCH 0991/1155] Rebuild. --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index c7b07ae79..2fc51bfdd 100755 --- a/configure +++ b/configure @@ -21624,7 +21624,7 @@ printf %s "checking for a working CUDA 10+ installation... " >&6; } ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - LIBS="$LIBS -lcuda -lcudart" + NVCCLIBS="$LIBS -lcuda -lcudart" ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' cat confdefs.h - <<_ACEOF >conftest.$ac_ext From b6e6799f1910743ea0f05575d348c8d6fc491d87 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 15:56:07 -0700 Subject: [PATCH 0992/1155] I think this is the correct fix. --- python/typehinting.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/typehinting.py b/python/typehinting.py index ae06c0b05..b283ae95c 100644 --- a/python/typehinting.py +++ b/python/typehinting.py @@ -6,7 +6,8 @@ def build_typehinting(filename): 'space': {}, 'dtype': {}, 'capture': {}, - 'transmit': {}, + 'io': {}, + 'whence': {}, 'reduce': {}} with open(filename, 'r') as fh: From c9275ac759ab100179780c94bc0d2880e6b693f5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 16:00:36 -0700 Subject: [PATCH 0993/1155] Lower cased names for the 'io' enum as well. --- python/typehinting.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python/typehinting.py b/python/typehinting.py index b283ae95c..915515732 100644 --- a/python/typehinting.py +++ b/python/typehinting.py @@ -24,6 +24,9 @@ def build_typehinting(filename): if tag == 'space': name = name.replace('BF_SPACE_', '') enums[tag][name.lower()] = value + elif tag == 'io': + name = name.replace('BF_IO_', '') + enums[tag][name.lower()] = value elif tag == 'reduce': name = name.replace('BF_REDUCE_', '') name = name.replace('POWER_', 'pwr') From d1bb73a1a6bdea6268eb336133aff08f13dd3357 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 16:21:50 -0700 Subject: [PATCH 0994/1155] Type hints. --- python/bifrost/packet_capture.py | 58 ++++++++++++++++++++------------ python/bifrost/packet_writer.py | 35 ++++++++++++------- 2 files changed, 60 insertions(+), 33 deletions(-) diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index 760debd98..e3bc8dcf2 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -1,5 +1,5 @@ -# Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2019-2024, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -27,46 +27,54 @@ # **TODO: Write tests for this class -from bifrost.libbifrost import _bf, _check, _get, BifrostObject +from bifrost.libbifrost import _bf, _th, _check, _get, BifrostObject +from bifrost.udp_socket import UDPSocket +from bifrost.ring import Ring +from bifrost.ring2 import Ring as Ring2 import ctypes from functools import reduce +from io import IOBase +from typing import Optional, Union + +from bifrost import telemetry +telemetry.track_module() class PacketCaptureCallback(BifrostObject): _ref_cache = {} def __init__(self): BifrostObject.__init__( self, _bf.bfPacketCaptureCallbackCreate, _bf.bfPacketCaptureCallbackDestroy) - def set_chips(self, fnc): + def set_chips(self, fnc: _bf.BFpacketcapture_chips_sequence_callback): self._ref_cache['chips'] = _bf.BFpacketcapture_chips_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetCHIPS( self.obj, self._ref_cache['chips'])) - def set_ibeam(self, fnc): + def set_ibeam(self, fnc: _bf.BFpacketcapture_ibeam_sequence_callback): self._ref_cache['ibeam'] = _bf.BFpacketcapture_ibeam_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetIBeam( self.obj, self._ref_cache['ibeam'])) - def set_pbeam(self, fnc): + def set_pbeam(self, fnc: _bf.BFpacketcapture_pbeam_sequence_callback): self._ref_cache['pbeam'] = _bf.BFpacketcapture_pbeam_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetPBeam( self.obj, self._ref_cache['pbeam'])) - def set_cor(self, fnc): + def set_cor(self, fnc: _bf.BFpacketcapture_cor_sequence_callback): self._ref_cache['cor'] = _bf.BFpacketcapture_cor_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetCOR( self.obj, self._ref_cache['cor'])) - def set_vdif(self, fnc): + def set_vdif(self, fnc: _bf.BFpacketcapture_vdif_sequence_callback): self._ref_cache['vdif'] = _bf.BFpacketcapture_vdif_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetVDIF( self.obj, self._ref_cache['vdif'])) - def set_tbn(self, fnc): + def set_tbn(self, fnc: _bf.BFpacketcapture_tbn_sequence_callback): self._ref_cache['tbn'] = _bf.BFpacketcapture_tbn_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetTBN( self.obj, self._ref_cache['tbn'])) - def set_drx(self, fnc): + def set_drx(self, fnc: _bf.BFpacketcapture_drx_sequence_callback): self._ref_cache['drx'] = _bf.BFpacketcapture_drx_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetDRX( self.obj, self._ref_cache['drx'])) - def set_drx8(self, fnc): + def set_drx8(self, fnc: _bf.BFpacketcapture_drx8_sequence_callback): self._ref_cache['drx8'] = _bf.BFpacketcapture_drx8_sequence_callback(fnc) _check(_bf.bfPacketCaptureCallbackSetDRX8( self.obj, self._ref_cache['drx8'])) @@ -83,7 +91,7 @@ def __enter__(self): return self def __exit__(self, type, value, tb): self.end() - def recv(self): + def recv(self) -> _th.BFcapture_enum: status = _bf.BFpacketcapture_status() _check(_bf.bfPacketCaptureRecv(self.obj, status)) return status.value @@ -93,8 +101,10 @@ def end(self): _check(_bf.bfPacketCaptureEnd(self.obj)) class UDPCapture(_CaptureBase): - def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, - buffer_ntime, slot_ntime, sequence_callback, core=None): + def __init__(self, fmt: str, sock: UDPSocket, ring: Union[Ring,Ring2], + nsrc: int, src0: int, max_payload_size: int, buffer_ntime: int, + slot_ntime: int, sequence_callback: PacketCaptureCallback, + core: Optional[int]=None): try: fmt = fmt.encode() except AttributeError: @@ -110,8 +120,10 @@ def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, sequence_callback.obj, core) class UDPSniffer(_CaptureBase): - def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, - buffer_ntime, slot_ntime, sequence_callback, core=None): + def __init__(self, fmt: str, sock: UDPSocket, ring: Union[Ring,Ring2], + nsrc: int, src0: int, max_payload_size: int, buffer_ntime: int, + slot_ntime: int, sequence_callback: PacketCaptureCallback, + core: Optional[int]=None): try: fmt = fmt.encode() except AttributeError: @@ -127,8 +139,10 @@ def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, sequence_callback.obj, core) class UDPVerbsCapture(_CaptureBase): - def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, - buffer_ntime, slot_ntime, sequence_callback, core=None): + def __init__(self, fmt: str, sock: UDPSocket, ring: Union[Ring,Ring2], + nsrc: int, src0: int, max_payload_size: int, buffer_ntime: int, + slot_ntime: int, sequence_callback: PacketCaptureCallback, + core: Optional[int]=None): try: fmt = fmt.encode() except AttributeError: @@ -143,8 +157,10 @@ def __init__(self, fmt, sock, ring, nsrc, src0, max_payload_size, sequence_callback.obj, core) class DiskReader(_CaptureBase): - def __init__(self, fmt, fh, ring, nsrc, src0, - buffer_nframe, slot_nframe, sequence_callback, core=None): + def __init__(self, fmt: str, fh: IOBase, ring: Union[Ring,Ring2], + nsrc: int, src0: int, buffer_nframe: int, slot_nframe: int, + sequence_callback: PacketCaptureCallback, + core: Optional[int]=None): try: fmt = fmt.encode() except AttributeError: @@ -160,11 +176,11 @@ def __init__(self, fmt, fh, ring, nsrc, src0, sequence_callback.obj, core) # Make sure we start in the same place in the file self.seek(fh.tell(), _bf.BF_WHENCE_SET) - def seek(self, offset, whence=_bf.BF_WHENCE_CUR): + def seek(self, offset: int, whence: _th.BFwhence_enum=_bf.BF_WHENCE_CUR): position = ctypes.c_ulong(0) _check(_bf.bfPacketCaptureSeek(self.obj, offset, whence, position)) return position.value - def tell(self): + def tell(self) -> int: position = ctypes.c_ulong(0) _check(_bf.bfPacketCaptureTell(self.obj, position)) return position.value diff --git a/python/bifrost/packet_writer.py b/python/bifrost/packet_writer.py index 2ae2f7d95..77801b7d3 100644 --- a/python/bifrost/packet_writer.py +++ b/python/bifrost/packet_writer.py @@ -1,5 +1,5 @@ -# Copyright (c) 2019-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2019-2024, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -29,22 +29,31 @@ from bifrost.libbifrost import _bf, _check, _get, BifrostObject from bifrost.ndarray import asarray +from bifrost.ndarray import ndarray +from bifrost.udp_socket import UDPSocket + +from io import IOBase + +from typing import Optional + +from bifrost import telemetry +telemetry.track_module() class HeaderInfo(BifrostObject): def __init__(self): BifrostObject.__init__( self, _bf.bfHeaderInfoCreate, _bf.bfHeaderInfoDestroy) - def set_nsrc(self, nsrc): + def set_nsrc(self, nsrc: int): _check(_bf.bfHeaderInfoSetNSrc(self.obj, nsrc)) - def set_nchan(self, nchan): + def set_nchan(self, nchan: int): _check(_bf.bfHeaderInfoSetNChan(self.obj, nchan)) - def set_chan0(self, chan0): + def set_chan0(self, chan0: int): _check(_bf.bfHeaderInfoSetChan0(self.obj, chan0)) - def set_tuning(self, tuning): + def set_tuning(self, tuning: int): _check(_bf.bfHeaderInfoSetTuning(self.obj, tuning)) - def set_gain(self, gain): + def set_gain(self, gain: int): _check(_bf.bfHeaderInfoSetGain(self.obj, gain)) - def set_decimation(self, decimation): + def set_decimation(self, decimation: int): _check(_bf.bfHeaderInfoSetDecimation(self.obj, decimation)) class _WriterBase(BifrostObject): @@ -52,11 +61,13 @@ def __enter__(self): return self def __exit__(self, type, value, tb): pass - def set_rate_limit(self, rate_limit_pps): + def set_rate_limit(self, rate_limit_pps: int): _check(_bf.bfPacketWriterSetRateLimit(self.obj, rate_limit_pps)) def reset_counter(self): _check(_bf.bfPacketWriterResetCounter(self.obj)) - def send(self, headerinfo, seq, seq_increment, src, src_increment, idata): + def send(self, headerinfo: HeaderInfo, + seq: int, seq_increment: int, src: int, src_increment: int, + idata: ndarray): _check(_bf.bfPacketWriterSend(self.obj, headerinfo.obj, seq, @@ -66,7 +77,7 @@ def send(self, headerinfo, seq, seq_increment, src, src_increment, idata): asarray(idata).as_BFarray())) class UDPTransmit(_WriterBase): - def __init__(self, fmt, sock, core=None): + def __init__(self, fmt: str, sock: UDPSocket, core: Optional[int]=None): try: fmt = fmt.encode() except AttributeError: @@ -80,7 +91,7 @@ def __init__(self, fmt, sock, core=None): class UDPVerbsTransmit(_WriterBase): - def __init__(self, fmt, sock, core=None): + def __init__(self, fmt: str, sock: UDPSocket, core: Optional[int]=None): try: fmt = fmt.encode() except AttributeError: @@ -94,7 +105,7 @@ def __init__(self, fmt, sock, core=None): class DiskWriter(_WriterBase): - def __init__(self, fmt, fh, core=None): + def __init__(self, fmt: str, fh: IOBase, core: Optional[int]=None): try: fmt = fmt.encode() except AttributeError: From c383f320fc785681d25e6a71f7a31a23df6e1c71 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 16:32:59 -0700 Subject: [PATCH 0995/1155] Type hints and cleanups. --- python/bifrost/rdma.py | 47 +++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/python/bifrost/rdma.py b/python/bifrost/rdma.py index 44e47aafc..49108539e 100644 --- a/python/bifrost/rdma.py +++ b/python/bifrost/rdma.py @@ -1,6 +1,6 @@ -# Copyright (c) 2022, The Bifrost Authors. All rights reserved. -# Copyright (c) 2022, The University of New Mexico. All rights reserved. +# Copyright (c) 2022-2024, The Bifrost Authors. All rights reserved. +# Copyright (c) 2022-2024, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -26,40 +26,41 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Python2 compatibility -from __future__ import absolute_import - -from bifrost.libbifrost import _bf, _check, _get, BifrostObject +from bifrost.libbifrost import _bf, _th, _check, _get, BifrostObject from bifrost.ndarray import ndarray, asarray from bifrost.proclog import ProcLog import bifrost.affinity as cpu_affinity +from bifrost.udp_socket import UDPSocket +from bifrost.ring import Ring +from bifrost.ring2 import Ring as Ring2 import time import ctypes +from typing import Optional, Tuple, Union + +from bifrost import telemetry +telemetry.track_module() + class RdmaSender(BifrostObject): - def __init__(self, sock, message_size): + def __init__(self, sock: UDPSocket, message_size: int): BifrostObject.__init__( self, _bf.bfRdmaCreate, _bf.bfRdmaDestroy, sock.fileno(), message_size, 1) - def send_header(self, time_tag, header, offset_from_head): - try: - header = header.encode() - except AttributeError: - # Python2 catch - pass + def send_header(self, time_tag: int, header: str, offset_from_head: int): + header = header.encode() header_buf = ctypes.create_string_buffer(header) _check(_bf.bfRdmaSendHeader(self.obj, time_tag, len(header), ctypes.cast(header_buf, ctypes.c_void_p), offset_from_head)) - def send_span(self, span_data): + def send_span(self, span_data: ndarray): _check(_bf.bfRdmaSendSpan(self.obj, asarray(span_data).as_BFarray())) class RdmaReceiver(BifrostObject): - def __init__(self, sock, message_size, buffer_factor=5): + def __init__(self, sock: UDPSocket, message_size: int, buffer_factor: int=5): BifrostObject.__init__( self, _bf.bfRdmaCreate, _bf.bfRdmaDestroy, sock.fileno(), message_size, 0) @@ -75,7 +76,7 @@ def __init__(self, sock, message_size, buffer_factor=5): contents_buf = ctypes.create_string_buffer(self.message_size) self.contents_bufs.append(contents_buf) self.index = 0 - def receive(self): + def receive(self) -> Union[Tuple[int,int,str],ndarray]: contents_buf = self.contents_bufs[self.index] self.index += 1 if self.index == self.buffer_factor: @@ -96,7 +97,8 @@ def receive(self): return span_data class RingSender(object): - def __init__(self, iring, sock, gulp_size, guarantee=True, core=-1): + def __init__(self, iring: Union[Ring,Ring2], sock: UDPSocket, gulp_size: int, + guarantee: bool=True, core: Optional[int]=None): self.iring = iring self.sock = sock self.gulp_size = gulp_size @@ -111,6 +113,11 @@ def __init__(self, iring, sock, gulp_size, guarantee=True, core=-1): self.in_proclog.update( {'nring':1, 'ring0':self.iring.name}) def main(self): + if self.core is not None: + cpu_affinity.set_core(self.core) + self.bind_proclog.update({'ncore': 1, + 'core0': cpu_affinity.get_core(),}) + sender = RdmaSender(self.sock, self.gulp_size) for iseq in self.iring.read(guarantee=self.guarantee): @@ -138,7 +145,8 @@ def main(self): class RingReceiver(object): - def __init__(self, oring, sock, gulp_size, guarantee=True, core=-1): + def __init__(self, oring; Union[Ring,Ring2], sock: UDPSocket, gulp_size: int, + guarantee: bool=True, core: Optional[int]=None): self.oring = oring self.sock = sock self.gulp_size = gulp_size @@ -153,7 +161,8 @@ def __init__(self, oring, sock, gulp_size, guarantee=True, core=-1): self.out_proclog.update( {'nring':1, 'ring0':self.oring.name}) def main(self): - cpu_affinity.set_core(self.core) + if self.core is not None: + cpu_affinity.set_core(self.core) self.bind_proclog.update({'ncore': 1, 'core0': cpu_affinity.get_core(),}) From 7c07ef0f89bd1b81a688517c7ec963f32a64e9ec Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 16:40:27 -0700 Subject: [PATCH 0996/1155] Drop some more Py2 stuff. --- python/bifrost/packet_capture.py | 28 ++++------------------------ python/bifrost/packet_writer.py | 21 +++------------------ 2 files changed, 7 insertions(+), 42 deletions(-) diff --git a/python/bifrost/packet_capture.py b/python/bifrost/packet_capture.py index e3bc8dcf2..6d0ce6425 100644 --- a/python/bifrost/packet_capture.py +++ b/python/bifrost/packet_capture.py @@ -105,17 +105,12 @@ def __init__(self, fmt: str, sock: UDPSocket, ring: Union[Ring,Ring2], nsrc: int, src0: int, max_payload_size: int, buffer_ntime: int, slot_ntime: int, sequence_callback: PacketCaptureCallback, core: Optional[int]=None): - try: - fmt = fmt.encode() - except AttributeError: - # Python2 catch - pass nsrc = self._flatten_value(nsrc) if core is None: core = -1 BifrostObject.__init__( self, _bf.bfUdpCaptureCreate, _bf.bfPacketCaptureDestroy, - fmt, sock.fileno(), ring.obj, nsrc, src0, + fmt.encode(), sock.fileno(), ring.obj, nsrc, src0, max_payload_size, buffer_ntime, slot_ntime, sequence_callback.obj, core) @@ -124,17 +119,12 @@ def __init__(self, fmt: str, sock: UDPSocket, ring: Union[Ring,Ring2], nsrc: int, src0: int, max_payload_size: int, buffer_ntime: int, slot_ntime: int, sequence_callback: PacketCaptureCallback, core: Optional[int]=None): - try: - fmt = fmt.encode() - except AttributeError: - # Python2 catch - pass nsrc = self._flatten_value(nsrc) if core is None: core = -1 BifrostObject.__init__( self, _bf.bfUdpSnifferCreate, _bf.bfPacketCaptureDestroy, - fmt, sock.fileno(), ring.obj, nsrc, src0, + fmt.encode(), sock.fileno(), ring.obj, nsrc, src0, max_payload_size, buffer_ntime, slot_ntime, sequence_callback.obj, core) @@ -143,16 +133,11 @@ def __init__(self, fmt: str, sock: UDPSocket, ring: Union[Ring,Ring2], nsrc: int, src0: int, max_payload_size: int, buffer_ntime: int, slot_ntime: int, sequence_callback: PacketCaptureCallback, core: Optional[int]=None): - try: - fmt = fmt.encode() - except AttributeError: - # Python2 catch - pass if core is None: core = -1 BifrostObject.__init__( self, _bf.bfUdpVerbsCaptureCreate, _bf.bfPacketCaptureDestroy, - fmt, sock.fileno(), ring.obj, nsrc, src0, + fmt.encode(), sock.fileno(), ring.obj, nsrc, src0, max_payload_size, buffer_ntime, slot_ntime, sequence_callback.obj, core) @@ -161,17 +146,12 @@ def __init__(self, fmt: str, fh: IOBase, ring: Union[Ring,Ring2], nsrc: int, src0: int, buffer_nframe: int, slot_nframe: int, sequence_callback: PacketCaptureCallback, core: Optional[int]=None): - try: - fmt = fmt.encode() - except AttributeError: - # Python2 catch - pass nsrc = self._flatten_value(nsrc) if core is None: core = -1 BifrostObject.__init__( self, _bf.bfDiskReaderCreate, _bf.bfPacketCaptureDestroy, - fmt, fh.fileno(), ring.obj, nsrc, src0, + fmt.encode(), fh.fileno(), ring.obj, nsrc, src0, buffer_nframe, slot_nframe, sequence_callback.obj, core) # Make sure we start in the same place in the file diff --git a/python/bifrost/packet_writer.py b/python/bifrost/packet_writer.py index 77801b7d3..0fbeae05b 100644 --- a/python/bifrost/packet_writer.py +++ b/python/bifrost/packet_writer.py @@ -78,41 +78,26 @@ def send(self, headerinfo: HeaderInfo, class UDPTransmit(_WriterBase): def __init__(self, fmt: str, sock: UDPSocket, core: Optional[int]=None): - try: - fmt = fmt.encode() - except AttributeError: - # Python2 catch - pass if core is None: core = -1 BifrostObject.__init__( self, _bf.bfUdpTransmitCreate, _bf.bfPacketWriterDestroy, - fmt, sock.fileno(), core) + fmt.encode(), sock.fileno(), core) class UDPVerbsTransmit(_WriterBase): def __init__(self, fmt: str, sock: UDPSocket, core: Optional[int]=None): - try: - fmt = fmt.encode() - except AttributeError: - # Python2 catch - pass if core is None: core = -1 BifrostObject.__init__( self, _bf.bfUdpVerbsTransmitCreate, _bf.bfPacketWriterDestroy, - fmt, sock.fileno(), core) + fmt.encode(), sock.fileno(), core) class DiskWriter(_WriterBase): def __init__(self, fmt: str, fh: IOBase, core: Optional[int]=None): - try: - fmt = fmt.encode() - except AttributeError: - # Python2 catch - pass if core is None: core = -1 BifrostObject.__init__( self, _bf.bfDiskWriterCreate, _bf.bfPacketWriterDestroy, - fmt, fh.fileno(), core) + fmt.encode(), fh.fileno(), core) From f634bd1291f9b83e0222b384fd7160976030ab93 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 16:50:21 -0700 Subject: [PATCH 0997/1155] Remove for #222. --- python/bifrost/memory.py | 42 ---------------------------------------- 1 file changed, 42 deletions(-) diff --git a/python/bifrost/memory.py b/python/bifrost/memory.py index ad2a73928..e57d84710 100644 --- a/python/bifrost/memory.py +++ b/python/bifrost/memory.py @@ -59,45 +59,3 @@ def raw_get_space(ptr: int) -> _bf.BFspace: def alignment() -> int: ret, _ = _bf.bfGetAlignment() return ret - -# **TODO: Deprecate below here! - -def _get_space(arr: Any) -> _bf.BFspace: - try: - return raw_get_space(arr.ctypes.data) - except AttributeError: - return _bf.BF_SPACE_SYSTEM # TODO: Dangerous to assume? - -# Note: These functions operate on numpy or GPU arrays -def memcpy(dst: "bifrost.ndarray", src: "bifrost.ndarray") -> None: - assert(dst.flags['C_CONTIGUOUS']) - assert(src.shape == dst.shape) - dst_space = _get_space(dst) - src_space = _get_space(src) - count = dst.nbytes - _check(_bf.bfMemcpy(dst.ctypes.data, dst_space, - src.ctypes.data, src_space, - count)) - return dst -def memcpy2D(dst: "bifrost.ndarray", src: "bifrost.ndarray") -> None: - assert(len(dst.shape) == 2) - assert(src.shape == dst.shape) - dst_space = _get_space(dst) - src_space = _get_space(src) - height, width = dst.shape - width_bytes = width * dst.dtype.itemsize - _check(_bf.bfMemcpy2D(dst.ctypes.data, dst.strides[0], dst_space, - src.ctypes.data, src.strides[0], src_space, - width_bytes, height)) -def memset(dst: "bifrost.ndarray", val: int=0) -> None: - assert(dst.flags['C_CONTIGUOUS']) - space = _get_space(dst) - count = dst.nbytes - _check(_bf.bfMemset(dst.ctypes.data, space, val, count)) -def memset2D(dst: "bifrost.ndarray", val: int=0) -> None: - assert(len(dst.shape) == 2) - space = _get_space(dst) - height, width = dst.shape - width_bytes = width * dst.dtype.itemsize - _check(_bf.bfMemset2D(dst.ctypes.data, dst.strides[0], space, - val, width_bytes, height)) From a9640e19de54d81cba0c0f889d300b22b7469cea Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 16:54:02 -0700 Subject: [PATCH 0998/1155] Typo. --- python/bifrost/rdma.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/rdma.py b/python/bifrost/rdma.py index 49108539e..aabc99274 100644 --- a/python/bifrost/rdma.py +++ b/python/bifrost/rdma.py @@ -145,7 +145,7 @@ def main(self): class RingReceiver(object): - def __init__(self, oring; Union[Ring,Ring2], sock: UDPSocket, gulp_size: int, + def __init__(self, oring: Union[Ring,Ring2], sock: UDPSocket, gulp_size: int, guarantee: bool=True, core: Optional[int]=None): self.oring = oring self.sock = sock From 67f9b70969114cc0de5f310255131978866fb75a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 17:02:03 -0700 Subject: [PATCH 0999/1155] Updates to also test on Py3.12 and clear up some Node.js 16 warnings. --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 82c0cb501..c8b2b5eed 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,7 +3,7 @@ name: "Build and Test" "on": [push, pull_request] jobs: pre_build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: @@ -20,7 +20,7 @@ jobs: strategy: matrix: os: [self-hosted, ubuntu-latest, macos-latest] - python-version: ['3.8', '3.10'] + python-version: ['3.8', '3.10', '3.12'] include: - os: ubuntu-20.04 python-version: '3.6' @@ -53,7 +53,7 @@ jobs: gnu-sed \ hwloc \ pkg-config - - uses: actions/setup-python@v4.3.0 + - uses: actions/setup-python@v5.0.0 with: python-version: ${{ matrix.python-version }} - name: "Software Install - Python" From b6ae8c84c70ecfed013fc6ae21ecc75951c9b221 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 18:06:17 -0700 Subject: [PATCH 1000/1155] memory.memcpy -> ndarray.copy_array --- python/bifrost/block.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/python/bifrost/block.py b/python/bifrost/block.py index ce61b6935..1cae9e7d2 100644 --- a/python/bifrost/block.py +++ b/python/bifrost/block.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2024, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -39,10 +39,11 @@ except ImportError: from contextlib2 import ExitStack import numpy as np -from bifrost import affinity, memory +from bifrost import affinity from bifrost.ring import Ring from bifrost.sigproc import SigprocFile, unpack from bifrost.libbifrost import EndOfDataStop +from bifrost.ndarray import copy_array from bifrost import telemetry telemetry.track_module() @@ -588,7 +589,7 @@ def main(self, input_rings, output_rings): input_ring = input_rings[0] for output_ring in output_rings: for ispan, ospan in self.ring_transfer(input_ring, output_ring): - memory.memcpy2D(ospan.data, ispan.data) + copy_array(ospan.data, ispan.data) class SigprocReadBlock(SourceBlock): """This block reads in a sigproc filterbank (.fil) file into a ring buffer""" @@ -803,7 +804,7 @@ def main(self, input_rings, output_rings): self.out_gulp_size = self.bins * 4 out_span_generator = self.iterate_ring_write(output_rings[0]) out_span = next(out_span_generator) - memory.memcpy( + copy_array( out_span.data_view(dtype=np.float32), histogram) From 82939d3bcddd9b5b2e081b26201e463aabe5cf12 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 19:12:44 -0700 Subject: [PATCH 1001/1155] No imp module in Py3.12. --- test/test_scripts.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/test_scripts.py b/test/test_scripts.py index 03a061932..2240d3518 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -29,7 +29,6 @@ import unittest import os import re -import imp import sys import glob @@ -41,8 +40,6 @@ TEST_DIR = os.path.dirname(__file__) TOOLS_DIR = os.path.join(TEST_DIR, '..', 'tools') TESTBENCH_DIR = os.path.join(TEST_DIR, '..', 'testbench') -modInfoBuild = imp.find_module('bifrost', [os.path.join(TEST_DIR, '..', 'python')]) -BIFROST_DIR = os.path.abspath(modInfoBuild[1]) run_scripts_tests = False try: From 98ccc587aa190f390d0ebc8ad4e89b2c2eff62fe Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 20:16:54 -0700 Subject: [PATCH 1002/1155] Drop the GUPPI tests in testbench. --- .github/workflows/main.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2fa6c2f71..68d2ac479 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -110,8 +110,6 @@ jobs: coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fft.py coverage run --source=bifrost.ring,bifrost,bifrost.pipeline your_first_block.py python download_breakthrough_listen_data.py -y - coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_guppi.py - coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_guppi_reader.py coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fdmt.py ./testdata/pulsars/blc0_guppi_57407_61054_PSR_J1840%2B5640_0004.fil coverage xml - name: "Upload Coverage" From 012aa2fbebf1b31ee1f0dbe8b5c447e6283c0210 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 20:55:15 -0700 Subject: [PATCH 1003/1155] Drop the GUPPI tests in testbench. --- .github/workflows/main.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c8b2b5eed..00b8923ee 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -112,8 +112,6 @@ jobs: coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fft.py coverage run --source=bifrost.ring,bifrost,bifrost.pipeline your_first_block.py python download_breakthrough_listen_data.py -y - coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_guppi.py - coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_guppi_reader.py coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fdmt.py ./testdata/pulsars/blc0_guppi_57407_61054_PSR_J1840%2B5640_0004.fil coverage xml - name: "Upload Coverage" From 53f0f2d4baf1bc5cd09412b00b8999ed59500118 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 21:05:31 -0700 Subject: [PATCH 1004/1155] RegEx fix. --- test/test_scripts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_scripts.py b/test/test_scripts.py index 2240d3518..f679747e0 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -50,7 +50,7 @@ pass run_scripts_tests &= (sys.version_info[0] >= 3) -_LINT_RE = re.compile('(?P.*?)\:(?P\d+)\: \[(?P.*?)\] (?P.*)') +_LINT_RE = re.compile('(?P.*?)\:(?P[0-9]+)\: \[(?P.*?)\] (?P.*)') @unittest.skipUnless(run_scripts_tests, "requires the 'pylint' module") class ScriptTest(unittest.TestCase): From 962339f8c0359dd650aef90da7287328071a3ad4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 21:15:42 -0700 Subject: [PATCH 1005/1155] RegEx fix. --- tools/like_pmap.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/like_pmap.py b/tools/like_pmap.py index f5a2e2ee4..31b6a18f6 100755 --- a/tools/like_pmap.py +++ b/tools/like_pmap.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 -# Copyright (c) 2017-2023, The Bifrost Authors. All rights reserved. -# Copyright (c) 2017-2023, The University of New Mexico. All rights reserved. +# Copyright (c) 2017-2024, The Bifrost Authors. All rights reserved. +# Copyright (c) 2017-2024, The University of New Mexico. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -92,7 +92,7 @@ def main(args): raise RuntimeError("Cannot find NUMA memory info for PID: %i" % args.pid) # Parse out the anonymous entries in this file - _numaRE = re.compile('(?P[0-9a-f]+).*[(anon)|(mapped)]=(?P\d+).*(swapcache=(?P\d+))?.*N(?P\d+)=(?P\d+)') + _numaRE = re.compile('(?P[0-9a-f]+).*[(anon)|(mapped)]=(?P[0-9]+).*(swapcache=(?P[0-9]+))?.*N(?P[0-9]+)=(?P[0-9]+)') areas = {} files = {} for line in numaInfo.split('\n'): From 0c8f19be5df61810806e53aaff7acdfc64ad4f76 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 19 Feb 2024 23:33:53 -0700 Subject: [PATCH 1006/1155] Another regex fix. --- test/test_scripts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_scripts.py b/test/test_scripts.py index f679747e0..baef30311 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -50,7 +50,7 @@ pass run_scripts_tests &= (sys.version_info[0] >= 3) -_LINT_RE = re.compile('(?P.*?)\:(?P[0-9]+)\: \[(?P.*?)\] (?P.*)') +_LINT_RE = re.compile('(?P.*?):(?P[0-9]+): \[(?P.*?)\] (?P.*)') @unittest.skipUnless(run_scripts_tests, "requires the 'pylint' module") class ScriptTest(unittest.TestCase): From 898e4a821512c53947cc63a462a06948c77b12a6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 20 Feb 2024 07:59:31 -0700 Subject: [PATCH 1007/1155] Small update to test #228. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2fa6c2f71..975241238 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -51,7 +51,7 @@ jobs: gawk \ gnu-sed \ pkg-config - - uses: actions/setup-python@v4.3.0 + - uses: actions/setup-python@v5.0.0 with: python-version: ${{ matrix.python-version }} - name: "Software Install - Python" From de72fabd811df12c68ab338335db645f5870312b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 20 Feb 2024 09:10:28 -0700 Subject: [PATCH 1008/1155] Another small update to test #228. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 975241238..9386f2708 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -119,7 +119,7 @@ jobs: UNITTEST_OS: ${{ matrix.os }} UNITTEST_PY: ${{ matrix.python-version }} if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} - uses: codecov/codecov-action@v2 + uses: codecov/codecov-action@v4 with: files: ./test/coverage.xml, ./testbench/coverage.xml env_vars: UNITTEST_OS,UNITTEST_PY From 567297b05ec6ab2fcaa787c5f573aa47194dafd3 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 22 Feb 2024 12:53:54 -0700 Subject: [PATCH 1009/1155] not working yet --- test/test_disk_io.py | 108 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/test/test_disk_io.py b/test/test_disk_io.py index f58fe61dc..7dda130de 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -35,9 +35,55 @@ from bifrost.packet_capture import PacketCaptureCallback, DiskReader from bifrost.quantize import quantize from bifrost.pipeline import SourceBlock, SinkBlock +import datetime import numpy as np +start_pipeline = datetime.datetime.now() +class SIMPLEReader(object): + def __init__(self, sock, ring): + self.sock = sock + self.ring = ring + self.nsrc = 1 + def seq_callback(self, seq0, chan0, nchan, nsrc, + time_tag_ptr, hdr_ptr, hdr_size_ptr): + FS = 196.0e6 + CHAN_BW = 1e3 + # timestamp0 = (self.utc_start - ADP_EPOCH).total_seconds() + # time_tag0 = timestamp0 * int(FS) + time_tag = int((datetime.datetime.now() - start_pipeline).total_seconds()*1e6) + time_tag_ptr[0] = time_tag + cfreq = 55e6 + hdr = {'time_tag': time_tag, + 'seq0': seq0, + 'chan0': chan0, + 'nchan': nchan, + 'cfreq': cfreq, + 'bw': CHAN_BW, + 'nstand': 2, + #'stand0': src0*16, # TODO: Pass src0 to the callback too(?) + 'npol': 2, + 'complex': False, + 'nbit': 2} + hdr_str = json.dumps(hdr).encode() + # TODO: Can't pad with NULL because returned as C-string + #hdr_str = json.dumps(hdr).ljust(4096, '\0') + #hdr_str = json.dumps(hdr).ljust(4096, ' ') + self.header_buf = ctypes.create_string_buffer(hdr_str) + hdr_ptr[0] = ctypes.cast(self.header_buf, ctypes.c_void_p) + hdr_size_ptr[0] = len(hdr_str) + return 0 + def main(self): + seq_callback = PacketCaptureCallback() + seq_callback.set_simple(self.seq_callback) + with DiskReader("simple" , self.sock, self.ring, self.nsrc, 0, 128, 128, + sequence_callback=seq_callback) as capture: + while True: + status = capture.recv() + if status in (1,4,5,6): + break + del capture + class TBNReader(object): def __init__(self, sock, ring): self.sock = sock @@ -201,6 +247,68 @@ def _open(self, filename, mode): if filename not in self._cache: self._cache.append(filename) return fh + + def _get_simple_data(self): + desc = HeaderInfo() + data_q = bf.ndarray(np.ones((512,1,4094)), dtype='i16') + return desc, data_q + + def test_write_simple(self): + fh = self._open('test_simple.dat','wb') + oop = DiskWriter('simple', fh) + desc,data = self._get_simple_data() + oop.send(desc,0,512, 0, 1, data) + fh.close() + expectedsize = 512*8192 + self.assertEqual(os.path.getsize('test_simple.dat'), \ + expectedsize) + + def test_read_simple(self): + # Write + fh = self._open('test_simple.dat', 'wb') + oop = DiskWriter('simple', fh) + + # Get TBN data + desc, data = self._get_simple_data() + + # Go! + oop.send(desc,0,512, 0, 1, data) + fh.close() + + # Read + fh = self._open('test_simple.dat', 'rb') + ring = Ring(name="capture_simple") + iop = SIMPLEReader(fh, ring) + ## Data accumulation + final = [] + expectedsize = 8192*512 + aop = AccumulateOp(ring, final, expectedsize,dtype=np.short) + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get simple data + reader.join() + accumu.join() + + # Compare + ## Reorder to match what we sent out + for f in final: + print(f) + final = np.array(final, dtype=np.short) + final = bf.ndarray(shape=final.shape, dtype='i16', buffer=final.ctypes.data) + ## Reduce to match the capture block size + data = data[:final.shape[0],...] + for i in range(1, data.shape[0]): + np.testing.assert_equal(final[i,...], data[i,...]) + + # Clean up + del oop + fh.close() + def _get_tbn_data(self): # Setup the packet HeaderInfo From 9c4306f2040210460e10b0ae9e9b216d30b2fb73 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Fri, 23 Feb 2024 14:29:11 -0700 Subject: [PATCH 1010/1155] working disk io test for simple --- src/formats/simple.hpp | 2 -- test/test_disk_io.py | 41 +++++++++++++++++++---------------------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index b663da222..72058d8fb 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -84,8 +84,6 @@ class SIMPLEProcessor : virtual public PacketProcessor { obuf_offset *= BF_UNPACK_FACTOR; - // Note: Using these SSE types allows the compiler to use SSE instructions - // However, they require aligned memory (otherwise segfault) itype const* __restrict__ in = (itype const*)pkt->payload_ptr; otype* __restrict__ out = (otype* )&obufs[obuf_idx][obuf_offset]; diff --git a/test/test_disk_io.py b/test/test_disk_io.py index 7dda130de..6615d3c5f 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -76,7 +76,7 @@ def seq_callback(self, seq0, chan0, nchan, nsrc, def main(self): seq_callback = PacketCaptureCallback() seq_callback.set_simple(self.seq_callback) - with DiskReader("simple" , self.sock, self.ring, self.nsrc, 0, 128, 128, + with DiskReader("simple" , self.sock, self.ring, self.nsrc, 0, 512, 512, sequence_callback=seq_callback) as capture: while True: status = capture.recv() @@ -89,8 +89,6 @@ def __init__(self, sock, ring): self.sock = sock self.ring = ring def callback(self, seq0, time_tag, decim, chan0, nsrc, hdr_ptr, hdr_size_ptr): - #print "++++++++++++++++ seq0 =", seq0 - #print " time_tag =", time_tag hdr = {'time_tag': time_tag, 'seq0': seq0, 'chan0': chan0, @@ -100,7 +98,6 @@ def callback(self, seq0, time_tag, decim, chan0, nsrc, hdr_ptr, hdr_size_ptr): 'npol': 2, 'complex': True, 'nbit': 8} - #print "******** CFREQ:", hdr['cfreq'] try: hdr_str = json.dumps(hdr).encode() except AttributeError: @@ -131,8 +128,6 @@ def __init__(self, sock, ring, nsrc=4): self.ring = ring self.nsrc = nsrc def callback(self, seq0, time_tag, decim, chan0, chan1, nsrc, hdr_ptr, hdr_size_ptr): - #print "++++++++++++++++ seq0 =", seq0 - #print " time_tag =", time_tag hdr = {'time_tag': time_tag, 'seq0': seq0, 'chan0': chan0, @@ -144,7 +139,6 @@ def callback(self, seq0, time_tag, decim, chan0, chan1, nsrc, hdr_ptr, hdr_size_ 'npol': 2, 'complex': True, 'nbit': 4} - #print "******** CFREQ:", hdr['cfreq'] try: hdr_str = json.dumps(hdr).encode() except AttributeError: @@ -176,8 +170,6 @@ def __init__(self, sock, ring, nchan, nsrc=1): self.nchan = nchan self.nsrc = nsrc def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ptr): - #print "++++++++++++++++ seq0 =", seq0 - #print " time_tag =", time_tag hdr = {'time_tag': time_tag, 'seq0': seq0, 'chan0': chan0, @@ -188,7 +180,6 @@ def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ 'npol': 4, 'complex': False, 'nbit': 32} - #print("******** HDR:", hdr) try: hdr_str = json.dumps(hdr).encode() except AttributeError: @@ -228,7 +219,7 @@ def main(self): while not self.ring.writing_ended(): for ispan in iseq_spans: idata = ispan.data_view(self.dtype) - self.output.append(idata) + self.output.append(idata.copy()) class DiskIOTest(unittest.TestCase): @@ -250,14 +241,15 @@ def _open(self, filename, mode): def _get_simple_data(self): desc = HeaderInfo() - data_q = bf.ndarray(np.ones((512,1,4094)), dtype='i16') + testdata = self.s0[:2096128].real.astype(np.short) + data_q = bf.ndarray(testdata.reshape(512,1,4094), dtype='i16') return desc, data_q def test_write_simple(self): fh = self._open('test_simple.dat','wb') oop = DiskWriter('simple', fh) desc,data = self._get_simple_data() - oop.send(desc,0,512, 0, 1, data) + oop.send(desc,0,1, 0, 1, data) fh.close() expectedsize = 512*8192 self.assertEqual(os.path.getsize('test_simple.dat'), \ @@ -272,11 +264,13 @@ def test_read_simple(self): desc, data = self._get_simple_data() # Go! - oop.send(desc,0,512, 0, 1, data) + oop.send(desc,0,1, 0, 1, data) fh.close() # Read fh = self._open('test_simple.dat', 'rb') + from shutil import copyfile + copyfile("test_simple.dat","check_simple.dat") ring = Ring(name="capture_simple") iop = SIMPLEReader(fh, ring) ## Data accumulation @@ -296,15 +290,18 @@ def test_read_simple(self): # Compare ## Reorder to match what we sent out - for f in final: - print(f) final = np.array(final, dtype=np.short) - final = bf.ndarray(shape=final.shape, dtype='i16', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(1, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) - + + finalcopy = final.copy() + # The following statement starts with 32 bytes of garbage + finalcopy = bf.ndarray(shape=finalcopy.shape, dtype='i16', buffer=finalcopy.ctypes.data) + + # This statuement should be equivalent, but instead does not contain garbage + final = bf.ndarray(final, dtype='i16' ) + final = final.reshape(data.shape) + + np.testing.assert_equal(final,data) + # Clean up del oop fh.close() From 6570bab281de9c0b7fd7511514598d29dd26c55d Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Fri, 23 Feb 2024 14:57:25 -0700 Subject: [PATCH 1011/1155] working test_udp --- test/test_disk_io.py | 9 +--- test/test_udp_io.py | 114 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 8 deletions(-) diff --git a/test/test_disk_io.py b/test/test_disk_io.py index 6615d3c5f..fd1a803ec 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -269,13 +269,11 @@ def test_read_simple(self): # Read fh = self._open('test_simple.dat', 'rb') - from shutil import copyfile - copyfile("test_simple.dat","check_simple.dat") ring = Ring(name="capture_simple") iop = SIMPLEReader(fh, ring) ## Data accumulation final = [] - expectedsize = 8192*512 + expectedsize = 4096*512 aop = AccumulateOp(ring, final, expectedsize,dtype=np.short) # Start the reader and accumlator threads @@ -292,11 +290,6 @@ def test_read_simple(self): ## Reorder to match what we sent out final = np.array(final, dtype=np.short) - finalcopy = final.copy() - # The following statement starts with 32 bytes of garbage - finalcopy = bf.ndarray(shape=finalcopy.shape, dtype='i16', buffer=finalcopy.ctypes.data) - - # This statuement should be equivalent, but instead does not contain garbage final = bf.ndarray(final, dtype='i16' ) final = final.reshape(data.shape) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index b38e2038d..fe2d347d9 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -31,6 +31,7 @@ import ctypes import threading import bifrost as bf +import datetime from bifrost.ring import Ring from bifrost.address import Address from bifrost.udp_socket import UDPSocket @@ -39,7 +40,52 @@ from bifrost.quantize import quantize import numpy as np +start_pipeline = datetime.datetime.now() + +class SIMPLEReader(object): + def __init__(self, sock, ring): + self.sock = sock + self.ring = ring + self.nsrc = 1 + def seq_callback(self, seq0, chan0, nchan, nsrc, + time_tag_ptr, hdr_ptr, hdr_size_ptr): + FS = 196.0e6 + CHAN_BW = 1e3 + # timestamp0 = (self.utc_start - ADP_EPOCH).total_seconds() + # time_tag0 = timestamp0 * int(FS) + time_tag = int((datetime.datetime.now() - start_pipeline).total_seconds()*1e6) + time_tag_ptr[0] = time_tag + cfreq = 55e6 + hdr = {'time_tag': time_tag, + 'seq0': seq0, + 'chan0': chan0, + 'nchan': nchan, + 'cfreq': cfreq, + 'bw': CHAN_BW, + 'nstand': 2, + #'stand0': src0*16, # TODO: Pass src0 to the callback too(?) + 'npol': 2, + 'complex': False, + 'nbit': 2} + hdr_str = json.dumps(hdr).encode() + # TODO: Can't pad with NULL because returned as C-string + #hdr_str = json.dumps(hdr).ljust(4096, '\0') + #hdr_str = json.dumps(hdr).ljust(4096, ' ') + self.header_buf = ctypes.create_string_buffer(hdr_str) + hdr_ptr[0] = ctypes.cast(self.header_buf, ctypes.c_void_p) + hdr_size_ptr[0] = len(hdr_str) + return 0 + def main(self): + seq_callback = PacketCaptureCallback() + seq_callback.set_simple(self.seq_callback) + with UDPCapture("simple" , self.sock, self.ring, self.nsrc, 0, 9000,512, 512, + sequence_callback=seq_callback) as capture: + while True: + status = capture.recv() + if status in (1,4,5,6): + break + del capture class TBNReader(object): def __init__(self, sock, ring): self.sock = sock @@ -193,6 +239,74 @@ def setUp(self): w = 0.2 self.s0 = 5*np.cos(w * t, dtype='float32') \ + 3j*np.sin(w * t, dtype='float32') + + def _get_simple_data(self): + desc = HeaderInfo() + testdata = self.s0[:2096128].real.astype(np.short) + data_q = bf.ndarray(testdata.reshape(512,1,4094), dtype='i16') + return desc, data_q + + def test_write_simple(self): + addr = Address('127.0.0.1', 7147) + sock = UDPSocket() + sock.connect(addr) + # Get simple data + op = UDPTransmit('simple', sock) + + desc, data = self._get_simple_data() + # Go! + op.send(desc, 0, 1, 0, 1, data) + sock.close() + + def test_read_simple(self): + # Setup the ring + ring = Ring(name="capture_simple") + + # Setup the blocks + addr = Address('127.0.0.1', 7147) + ## Output via UDPTransmit + osock = UDPSocket() + osock.connect(addr) + oop = UDPTransmit('simple', osock) + ## Input via UDPCapture + isock = UDPSocket() + isock.bind(addr) + isock.timeout = 1.0 + iop = SIMPLEReader(isock, ring) + ## Data accumulation + final = [] + expectedsize = 4096*512 + aop = AccumulateOp(ring, final, expectedsize,dtype=np.short) + + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get simple data and send it off + desc, data = self._get_simple_data() + for p in range(data.shape[0]): + oop.send(desc, p*1, 1, 0, 1, data[p,...].reshape(1,1,4094)) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + ## Reorder to match what we sent out + final = np.array(final, dtype=np.short) + + + final = bf.ndarray(final, dtype='i16' ) + final = final.reshape(data.shape) + + np.testing.assert_equal(final,data) + + # Clean up + del oop + isock.close() + osock.close() def _get_tbn_data(self): # Setup the packet HeaderInfo From 9e5946ab93f3cbed2182e03dec0bb3dd77f77659 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 27 Feb 2024 10:58:27 -0700 Subject: [PATCH 1012/1155] remove debugging print statements --- src/packet_capture.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index 3e00f2053..b9178df84 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -98,22 +98,16 @@ int PacketCaptureThread::run(uint64_t seq_beg, BF_PRINTD("CONTINUE HERE"); continue; } - BF_PRINTD("FINALLY1"); + BF_PRINTD("FINALLY"); ++_stats.nvalid; - BF_PRINTD("FINALLY2"); _stats.nvalid_bytes += _pkt.payload_size; - BF_PRINTD("FINALLY3"); ++_src_stats[_pkt.src].nvalid; - BF_PRINTD("FINALLY4"); _src_stats[_pkt.src].nvalid_bytes += _pkt.payload_size; - BF_PRINTD("FINALLY5"); // HACK TODO: src_ngood_bytes should be accumulated locally and // then atomically updated, like ngood_bytes. The // current way is not thread-safe. - BF_PRINTD("INPUTS" << " " << &_pkt << " " << seq_beg << " " << nseq_per_obuf << " " << nbuf <<" " << obufs<< " " << local_ngood_bytes << " " << src_ngood_bytes); (*process)(&_pkt, seq_beg, nseq_per_obuf, nbuf, obufs, local_ngood_bytes, /*local_*/src_ngood_bytes); - BF_PRINTD("FINALLY6"); } if( nbuf > 0 ) { atomic_add_and_fetch(ngood_bytes[0], local_ngood_bytes[0]); } if( nbuf > 1 ) { atomic_add_and_fetch(ngood_bytes[1], local_ngood_bytes[1]); } From f5e371e69a6d2f47c649f66dcf194ff79b936ccb Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 27 Feb 2024 11:19:59 -0700 Subject: [PATCH 1013/1155] remove more debugging print statements --- src/formats/simple.hpp | 2 +- src/packet_capture.cpp | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index 72058d8fb..0c682c7ed 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -31,7 +31,7 @@ #include "base.hpp" struct __attribute__((packed)) simple_hdr_type { - uint32_t seq; + uint64_t seq; }; class SIMPLEDecoder : virtual public PacketDecoder { diff --git a/src/packet_capture.cpp b/src/packet_capture.cpp index b9178df84..ff1bc7ac1 100644 --- a/src/packet_capture.cpp +++ b/src/packet_capture.cpp @@ -191,23 +191,19 @@ BFstatus bfPacketCaptureCallbackSetDRX8(BFpacketcapture_callback obj, BFpacketcapture_status BFpacketcapture_impl::recv() { _t0 = std::chrono::high_resolution_clock::now(); - BF_PRINTD("impl, start clock"); uint8_t* buf_ptrs[2]; // Minor HACK to access the buffers in a 2-element queue buf_ptrs[0] = _bufs.size() > 0 ? (uint8_t*)_bufs.front()->data() : NULL; buf_ptrs[1] = _bufs.size() > 1 ? (uint8_t*)_bufs.back()->data() : NULL; - BF_PRINTD("buff ptrs"); size_t* ngood_bytes_ptrs[2]; ngood_bytes_ptrs[0] = _buf_ngood_bytes.size() > 0 ? &_buf_ngood_bytes.front() : NULL; ngood_bytes_ptrs[1] = _buf_ngood_bytes.size() > 1 ? &_buf_ngood_bytes.back() : NULL; - BF_PRINTD("ngoodbytes"); size_t* src_ngood_bytes_ptrs[2]; src_ngood_bytes_ptrs[0] = _buf_src_ngood_bytes.size() > 0 ? &_buf_src_ngood_bytes.front()[0] : NULL; src_ngood_bytes_ptrs[1] = _buf_src_ngood_bytes.size() > 1 ? &_buf_src_ngood_bytes.back()[0] : NULL; - BF_PRINTD("srcngoodbytes"); int state = _capture->run(_seq, _nseq_per_buf, _bufs.size(), From 2906a95a12d498a3ed5194c5325d00309fed9ad2 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 27 Feb 2024 11:21:42 -0700 Subject: [PATCH 1014/1155] undo line break --- src/packet_capture.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index b0811c2d8..3172c259f 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -342,8 +342,7 @@ class PacketCaptureThread : public BoundThread { size_t* src_ngood_bytes[], PDC* decode, PPC* process); - inline const char* get_name() { - return _method->get_name(); } + inline const char* get_name() { return _method->get_name(); } inline const size_t get_max_size() { return _method->get_max_size(); } inline const BFiomethod get_io_method() { return _method->get_io_method(); } inline const int get_core() { return _core; } From a7a523789a724529355c7a64073a2266b6877582 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 27 Feb 2024 11:28:58 -0700 Subject: [PATCH 1015/1155] correct packet format size for simple --- src/packet_capture.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 3172c259f..ce814249e 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -1306,7 +1306,7 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, if( backend == BF_IO_DISK ) { // Need to know how much to read at a time int nchan = 1; - max_payload_size = 8192; + max_payload_size = 8200; } } else if( std::string(format).substr(0, 5) == std::string("chips") ) { if( backend == BF_IO_DISK ) { From 00756b7281010e809d0d7a0d7420391fa7463efa Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 27 Feb 2024 11:45:25 -0700 Subject: [PATCH 1016/1155] Update packet_writer.hpp fix packet size --- src/packet_writer.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index d41b6a354..abcf24bfb 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -451,7 +451,7 @@ class BFpacketwriter_simple_impl : public BFpacketwriter_impl { public: inline BFpacketwriter_simple_impl(PacketWriterThread* writer, int nsamples) - : BFpacketwriter_impl(writer, nullptr, nsamples, BF_DTYPE_I16), + : BFpacketwriter_impl(writer, nullptr, nsamples, BF_DTYPE_CI16), _type_log((std::string(writer->get_name())+"/type").c_str()) { _filler = new SIMPLEHeaderFiller(); _type_log.update("type : %s\n", "simple"); @@ -571,7 +571,7 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, if(std::string(format).substr(0, 8) == std::string("generic_") ) { nsamples = std::atoi((std::string(format).substr(8, std::string(format).length())).c_str()); } else if( std::string(format).substr(0, 6) == std::string("simple") ) { - nsamples = 4094; + nsamples = 4096; } else if( std::string(format).substr(0, 6) == std::string("chips_") ) { int nchan = std::atoi((std::string(format).substr(6, std::string(format).length())).c_str()); nsamples = 32*nchan; From 801f6be6bd2dd91d7691d368313a019cf993eb06 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 27 Feb 2024 12:02:38 -0700 Subject: [PATCH 1017/1155] Update simple.hpp correct dtype size --- src/formats/simple.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index 0c682c7ed..32e12ebb1 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -88,7 +88,7 @@ class SIMPLEProcessor : virtual public PacketProcessor { otype* __restrict__ out = (otype* )&obufs[obuf_idx][obuf_offset]; int chan = 0; - int nelem = 256; + int nelem = 128; for( ; chan Date: Tue, 27 Feb 2024 12:03:43 -0700 Subject: [PATCH 1018/1155] Update packet_writer.hpp --- src/packet_writer.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index abcf24bfb..627d40454 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -571,7 +571,7 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, if(std::string(format).substr(0, 8) == std::string("generic_") ) { nsamples = std::atoi((std::string(format).substr(8, std::string(format).length())).c_str()); } else if( std::string(format).substr(0, 6) == std::string("simple") ) { - nsamples = 4096; + nsamples = 2048; } else if( std::string(format).substr(0, 6) == std::string("chips_") ) { int nchan = std::atoi((std::string(format).substr(6, std::string(format).length())).c_str()); nsamples = 32*nchan; From d7ebb9b5ffc72a819c5a4be2f666daad498790a1 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 27 Feb 2024 12:05:43 -0700 Subject: [PATCH 1019/1155] Update test_disk_io.py --- test/test_disk_io.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/test/test_disk_io.py b/test/test_disk_io.py index fd1a803ec..327d634f6 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -241,8 +241,13 @@ def _open(self, filename, mode): def _get_simple_data(self): desc = HeaderInfo() - testdata = self.s0[:2096128].real.astype(np.short) - data_q = bf.ndarray(testdata.reshape(512,1,4094), dtype='i16') + + # Reorder as packets, stands, time + data = self.s0.reshape(512,1,4096) + # Convert to ci16 for simple + data_q = bf.ndarray(shape=data.shape, dtype='ci16') + quantize(data, data_q, scale=10) + return desc, data_q def test_write_simple(self): @@ -251,7 +256,7 @@ def test_write_simple(self): desc,data = self._get_simple_data() oop.send(desc,0,1, 0, 1, data) fh.close() - expectedsize = 512*8192 + expectedsize = 512*8200 self.assertEqual(os.path.getsize('test_simple.dat'), \ expectedsize) @@ -260,7 +265,7 @@ def test_read_simple(self): fh = self._open('test_simple.dat', 'wb') oop = DiskWriter('simple', fh) - # Get TBN data + # Get data desc, data = self._get_simple_data() # Go! @@ -290,7 +295,7 @@ def test_read_simple(self): ## Reorder to match what we sent out final = np.array(final, dtype=np.short) - final = bf.ndarray(final, dtype='i16' ) + final = bf.ndarray(final, dtype='ci16' ) final = final.reshape(data.shape) np.testing.assert_equal(final,data) From 06ccc82a2bdbe8006b2f6f0f41381f5c7295aae0 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 27 Feb 2024 14:39:58 -0700 Subject: [PATCH 1020/1155] working on udp io test --- src/formats/simple.hpp | 2 +- test/test_disk_io.py | 44 ++++++++------ test/test_udp_io.py | 131 ++++++++++++++++++++++------------------- 3 files changed, 98 insertions(+), 79 deletions(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index 32e12ebb1..0c682c7ed 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -88,7 +88,7 @@ class SIMPLEProcessor : virtual public PacketProcessor { otype* __restrict__ out = (otype* )&obufs[obuf_idx][obuf_offset]; int chan = 0; - int nelem = 128; + int nelem = 256; for( ; chan Date: Tue, 27 Feb 2024 14:40:20 -0700 Subject: [PATCH 1021/1155] remove debug file copy --- test/test_disk_io.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/test_disk_io.py b/test/test_disk_io.py index c0dbea62a..0432c3c12 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -278,8 +278,6 @@ def test_read_simple(self): fh.close() # Read - import shutil - shutil.copy("test_simple.dat", "check_simple.dat") fh = self._open('test_simple.dat', 'rb') ring = Ring(name="capture_simple") From 66b0197cc65b1871dae063922406091442ef5f7b Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 27 Feb 2024 15:03:02 -0700 Subject: [PATCH 1022/1155] test udp io not working --- test/test_udp_io.py | 120 ++++++++++++++++++++++---------------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 5712ebab6..2f64e9fb7 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -252,71 +252,71 @@ def _get_simple_data(self): return desc, data_q - # def test_write_simple(self): - # addr = Address('127.0.0.1', 7147) - # sock = UDPSocket() - # sock.connect(addr) - # # Get simple data - # op = UDPTransmit('simple', sock) + def test_write_simple(self): + addr = Address('127.0.0.1', 7147) + sock = UDPSocket() + sock.connect(addr) + # Get simple data + op = UDPTransmit('simple', sock) - # desc, data = self._get_simple_data() - # # Go! - # op.send(desc, 0, 1, 0, 1, data) - # sock.close() + desc, data = self._get_simple_data() + # Go! + op.send(desc, 0, 1, 0, 1, data) + sock.close() - # def test_read_simple(self): - # # Setup the ring - # ring = Ring(name="capture_simple") - # - # # Setup the blocks - # addr = Address('127.0.0.1', 7147) - # ## Output via UDPTransmit - # osock = UDPSocket() - # osock.connect(addr) - # oop = UDPTransmit('simple', osock) - # ## Input via UDPCapture - # isock = UDPSocket() - # isock.bind(addr) - # isock.timeout = 1.0 - # iop = SIMPLEReader(isock, ring) - # ## Data accumulation - # final = [] - # expectedsize = 2048*1024*2 - # aop = AccumulateOp(ring, final, expectedsize,dtype=np.uint16) - # - # - # # Start the reader and accumlator threads - # reader = threading.Thread(target=iop.main) - # accumu = threading.Thread(target=aop.main) - # reader.start() - # accumu.start() - # - # # Get simple data and send it off - # desc, data = self._get_simple_data() - # for p in range(data.shape[0]): - # oop.send(desc, p*1, 1, 0, 1, data[p,...].reshape(1,1,2048)) - # time.sleep(0.001) - # reader.join() - # accumu.join() - # - # # Compare - # ## Reorder to match what we sent out - # final = np.array(final, dtype=np.uint16) + def test_read_simple(self): + # Setup the ring + ring = Ring(name="capture_simple") + + # Setup the blocks + addr = Address('127.0.0.1', 7147) + ## Output via UDPTransmit + osock = UDPSocket() + osock.connect(addr) + oop = UDPTransmit('simple', osock) + ## Input via UDPCapture + isock = UDPSocket() + isock.bind(addr) + isock.timeout = 1.0 + iop = SIMPLEReader(isock, ring) + ## Data accumulation + final = [] + expectedsize = 2048*1024*2 + aop = AccumulateOp(ring, final, expectedsize,dtype=np.uint16) + + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get simple data and send it off + desc, data = self._get_simple_data() + for p in range(data.shape[0]): + oop.send(desc, p*1, 1, 0, 1, data[p,...].reshape(1,1,2048)) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + ## Reorder to match what we sent out + final = np.array(final, dtype=np.uint16) - # final = final.reshape(-1,2048,1,2) - # final = final.transpose(0,2,1,3).copy() - # final = bf.ndarray(shape=(final.shape[0],1,2048), dtype='ci16', buffer=final.ctypes.data) + final = final.reshape(-1,2048,1,2) + final = final.transpose(0,2,1,3).copy() + final = bf.ndarray(shape=(final.shape[0],1,2048), dtype='ci16', buffer=final.ctypes.data) - # ## Reduce to match the capture block size - # data = data[:final.shape[0],...] - # for i in range(1, data.shape[0]): - # np.testing.assert_equal(final[i,...], data[i,...]) + ## Reduce to match the capture block size + data = data[:final.shape[0],...] + for i in range(1, data.shape[0]): + np.testing.assert_equal(final[i,...], data[i,...]) - # # Clean up - # del oop - # isock.close() - # osock.close() - # + # Clean up + del oop + isock.close() + osock.close() + def _get_tbn_data(self): # Setup the packet HeaderInfo desc = HeaderInfo() From 48299909040334fc568623236f81f36afa97476e Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Wed, 28 Feb 2024 11:18:10 -0700 Subject: [PATCH 1023/1155] retry --- test/test_udp_io.py | 598 +++++++++++++++++++++++--------------------- 1 file changed, 314 insertions(+), 284 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 2f64e9fb7..4ce8a0faf 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -32,6 +32,7 @@ import threading import bifrost as bf import datetime +from contextlib import closing from bifrost.ring import Ring from bifrost.address import Address from bifrost.udp_socket import UDPSocket @@ -230,7 +231,7 @@ def main(self): self.output.append(idata) -class UDPIOTest(unittest.TestCase): +class simpleUDPIOTest(unittest.TestCase): """Test simple IO for the UDP-based packet reader and writing""" def setUp(self): """Generate some dummy data to read""" @@ -239,7 +240,6 @@ def setUp(self): w = 0.2 self.s0 = 5*np.cos(w * t, dtype='float32') \ + 3j*np.sin(w * t, dtype='float32') - def _get_simple_data(self): desc = HeaderInfo() @@ -254,15 +254,14 @@ def _get_simple_data(self): def test_write_simple(self): addr = Address('127.0.0.1', 7147) - sock = UDPSocket() - sock.connect(addr) - # Get simple data - op = UDPTransmit('simple', sock) + with closing(UDPSocket()) as sock: + sock.connect(addr) + # Get simple data + op = UDPTransmit('simple', sock) - desc, data = self._get_simple_data() - # Go! - op.send(desc, 0, 1, 0, 1, data) - sock.close() + desc, data = self._get_simple_data() + # Go! + op.send(desc, 0, 1, 0, 1, data) def test_read_simple(self): # Setup the ring @@ -271,51 +270,58 @@ def test_read_simple(self): # Setup the blocks addr = Address('127.0.0.1', 7147) ## Output via UDPTransmit - osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('simple', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 1.0 - iop = SIMPLEReader(isock, ring) - ## Data accumulation - final = [] - expectedsize = 2048*1024*2 - aop = AccumulateOp(ring, final, expectedsize,dtype=np.uint16) - - - # Start the reader and accumlator threads - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get simple data and send it off - desc, data = self._get_simple_data() - for p in range(data.shape[0]): - oop.send(desc, p*1, 1, 0, 1, data[p,...].reshape(1,1,2048)) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint16) + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('simple', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 1.0 + iop = SIMPLEReader(isock, ring) + ## Data accumulation + final = [] + expectedsize = 2048*1024*2 + aop = AccumulateOp(ring, final, expectedsize,dtype=np.int16) + + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get simple data and send it off + desc, data = self._get_simple_data() + for p in range(data.shape[0]): + oop.send(desc, p*1, 1, 0, 1, data[p,...].reshape(1,1,2048)) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + ## Reorder to match what we sent out + final = np.array(final, dtype=np.uint16) - final = final.reshape(-1,2048,1,2) - final = final.transpose(0,2,1,3).copy() - final = bf.ndarray(shape=(final.shape[0],1,2048), dtype='ci16', buffer=final.ctypes.data) + final = final.reshape(-1,2048,1,2) + final = final.transpose(0,2,1,3).copy() + final = bf.ndarray(final, dtype='ci16') - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(1, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + ## Reduce to match the capture block size + data = data[:final.shape[0],...] + for i in range(1, data.shape[0]): + np.testing.assert_equal(final[i,...], data[i,...]) # Clean up del oop - isock.close() - osock.close() +class tbnUDPIOTest(unittest.TestCase): + """Test simple IO for the UDP-based packet reader and writing""" + def setUp(self): + """Generate some dummy data to read""" + # Generate test vector and save to file + t = np.arange(256*4096*2) + w = 0.2 + self.s0 = 5*np.cos(w * t, dtype='float32') \ + + 3j*np.sin(w * t, dtype='float32') def _get_tbn_data(self): # Setup the packet HeaderInfo @@ -329,22 +335,21 @@ def _get_tbn_data(self): # Convert to ci8 for TBN data_q = bf.ndarray(shape=data.shape, dtype='ci8') quantize(data, data_q, scale=10) - + # Update the number of data sources and return desc.set_nsrc(data_q.shape[1]) return desc, data_q def test_write_tbn(self): addr = Address('127.0.0.1', 7147) - sock = UDPSocket() - sock.connect(addr) - op = UDPTransmit('tbn', sock) - - # Get TBN data - desc, data = self._get_tbn_data() - - # Go! - op.send(desc, 0, 1960*512, 0, 1, data) - sock.close() + with closing(UDPSocket()) as sock: + sock.connect(addr) + op = UDPTransmit('tbn', sock) + + # Get TBN data + desc, data = self._get_tbn_data() + + # Go! + op.send(desc, 0, 1960*512, 0, 1, data) def test_read_tbn(self): # Setup the ring ring = Ring(name="capture_tbn") @@ -352,48 +357,59 @@ def test_read_tbn(self): # Setup the blocks addr = Address('127.0.0.1', 7147) ## Output via UDPTransmit - osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('tbn', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 1.0 - iop = TBNReader(isock, ring) - ## Data accumulation - final = [] - aop = AccumulateOp(ring, final, 49*32*512*2) - - # Start the reader and accumlator threads - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get TBN data and send it off - desc, data = self._get_tbn_data() - for p in range(data.shape[0]): - oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,512,32,2) - final = final.transpose(0,2,1,3).copy() - final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(2, data.shape[0]): - for j in range(data.shape[1]): - np.testing.assert_equal(final[i,j,...], data[i,j,...]) + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('tbn', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 1.0 + iop = TBNReader(isock, ring) + ## Data accumulation + final = [] + aop = AccumulateOp(ring, final, 49*32*512*2,dtype=np.byte) + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get TBN data and send it off + desc, data = self._get_tbn_data() + for p in range(data.shape[0]): + oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + ## Reorder to match what we sent out + final = np.array(final, dtype=np.uint8) + final = final.reshape(-1,512,32,2) + npfinal = final.transpose(0,2,1,3).copy() + final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8' ) + final['re'] = npfinal[:,:,:,0] + final['im'] = npfinal[:,:,:,1] + ## Reduce to match the capture block size + data = data[:final.shape[0],...] + for i in range(2, data.shape[0]): + for j in range(data.shape[1]): + np.testing.assert_equal(final[i,j,...], data[i,j,...]) # Clean up del oop - isock.close() - osock.close() + +class drxUDPIOTest(unittest.TestCase): + """Test simple IO for the UDP-based packet reader and writing""" + def setUp(self): + """Generate some dummy data to read""" + # Generate test vector and save to file + t = np.arange(256*4096*2) + w = 0.2 + self.s0 = 5*np.cos(w * t, dtype='float32') \ + + 3j*np.sin(w * t, dtype='float32') + def _get_drx_data(self): # Setup the packet HeaderInfo @@ -413,16 +429,15 @@ def _get_drx_data(self): return desc, data_q def test_write_drx(self): addr = Address('127.0.0.1', 7147) - sock = UDPSocket() - sock.connect(addr) - op = UDPTransmit('drx', sock) - - # Get TBN data - desc, data = self._get_drx_data() - - # Go! - op.send(desc, 0, 10*4096, (1<<3), 128, data) - sock.close() + with closing(UDPSocket()) as sock: + sock.connect(addr) + op = UDPTransmit('drx', sock) + + # Get TBN data + desc, data = self._get_drx_data() + + # Go! + op.send(desc, 0, 10*4096, (1<<3), 128, data) def test_read_drx(self): # Setup the ring ring = Ring(name="capture_drx") @@ -430,49 +445,47 @@ def test_read_drx(self): # Setup the blocks addr = Address('127.0.0.1', 7147) ## Output via UDPTransmit - osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('drx', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 1.0 - iop = DRXReader(isock, ring) - ## Data accumulation - final = [] - aop = AccumulateOp(ring, final, 49*4*4096*1) - - # Start the reader - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get DRX data and send it off - desc, data = self._get_drx_data() - for p in range(data.shape[0]): - oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],...].reshape(1,2,4096)) - oop.send(desc, p*10*4096, 10*4096, (2<<3), 128, data[p,[2,3],...].reshape(1,2,4096)) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,4096,4) - final = final.transpose(0,2,1).copy() - final = bf.ndarray(shape=(final.shape[0],4,4096), dtype='ci4', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(2, data.shape[0]): - for j in range(data.shape[1]): - np.testing.assert_equal(final[i,j,...], data[i,j,...]) + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('drx', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 1.0 + iop = DRXReader(isock, ring) + ## Data accumulation + final = [] + aop = AccumulateOp(ring, final, 49*4*4096*1) + + # Start the reader + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get DRX data and send it off + desc, data = self._get_drx_data() + for p in range(data.shape[0]): + oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],...].reshape(1,2,4096)) + oop.send(desc, p*10*4096, 10*4096, (2<<3), 128, data[p,[2,3],...].reshape(1,2,4096)) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + ## Reorder to match what we sent out + final = np.array(final, dtype=np.uint8) + final = final.reshape(-1,4096,4) + final = final.transpose(0,2,1).copy() + final = bf.ndarray(final, dtype='ci4') + ## Reduce to match the capture block size + data = data[:final.shape[0],...] + for i in range(2, data.shape[0]): + for j in range(data.shape[1]): + np.testing.assert_equal(final[i,j,...], data[i,j,...]) # Clean up del oop - isock.close() - osock.close() def test_write_drx_single(self): addr = Address('127.0.0.1', 7147) sock = UDPSocket() @@ -493,49 +506,58 @@ def test_read_drx_single(self): # Setup the blocks addr = Address('127.0.0.1', 7147) ## Output via UDPTransmit - osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('drx', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 1.0 - iop = DRXReader(isock, ring, nsrc=2) - ## Data accumulation - final = [] - aop = AccumulateOp(ring, final, 49*2*4096*1) - - # Start the reader - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get DRX data and send it off - desc, data = self._get_drx_data() - desc.set_nsrc(2) - for p in range(data.shape[0]): - oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],:].reshape(1,2,4096)) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,4096,2) - final = final.transpose(0,2,1).copy() - final = bf.ndarray(shape=(final.shape[0],2,4096), dtype='ci4', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(1, data.shape[0]): - for j in range(2): - np.testing.assert_equal(final[i,j,...], data[i,j,...]) + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('drx', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 1.0 + iop = DRXReader(isock, ring, nsrc=2) + ## Data accumulation + final = [] + aop = AccumulateOp(ring, final, 49*2*4096*1) + + # Start the reader + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get DRX data and send it off + desc, data = self._get_drx_data() + desc.set_nsrc(2) + for p in range(data.shape[0]): + oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],:].reshape(1,2,4096)) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + ## Reorder to match what we sent out + final = np.array(final, dtype=np.uint8) + final = final.reshape(-1,4096,2) + final = final.transpose(0,2,1).copy() + final = bf.ndarray(final, dtype='ci4') + ## Reduce to match the capture block size + data = data[:final.shape[0],...] + for i in range(1, data.shape[0]): + for j in range(2): + np.testing.assert_equal(final[i,j,...], data[i,j,...]) # Clean up del oop - isock.close() - osock.close() + +class pbeamUDPIOTest(unittest.TestCase): + """Test simple IO for the UDP-based packet reader and writing""" + def setUp(self): + """Generate some dummy data to read""" + # Generate test vector and save to file + t = np.arange(256*4096*2) + w = 0.2 + self.s0 = 5*np.cos(w * t, dtype='float32') \ + + 3j*np.sin(w * t, dtype='float32') + def _get_pbeam_data(self): # Setup the packet HeaderInfo @@ -555,16 +577,15 @@ def _get_pbeam_data(self): return desc, data def test_write_pbeam(self): addr = Address('127.0.0.1', 7147) - sock = UDPSocket() - sock.connect(addr) - op = UDPTransmit('pbeam1_128', sock) - - # Get PBeam data - desc, data = self._get_pbeam_data() - - # Go! - op.send(desc, 0, 24, 0, 1, data) - sock.close() + with closing(UDPSocket()) as sock: + sock.connect(addr) + op = UDPTransmit('pbeam1_128', sock) + + # Get PBeam data + desc, data = self._get_pbeam_data() + + # Go! + op.send(desc, 0, 24, 0, 1, data) def test_read_pbeam(self): # Setup the ring ring = Ring(name="capture_pbeam") @@ -573,58 +594,66 @@ def test_read_pbeam(self): addr = Address('127.0.0.1', 7147) ## Output via UDPTransmit osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('pbeam1_128', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 1.0 - iop = PBeamReader(isock, ring, nsrc=1) - ## Data accumulation - final = [] - aop = AccumulateOp(ring, final, 240*128*4, dtype=np.float32) - - # Start the reader and accumlator threads - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get PBeam data and send it off - desc, data = self._get_pbeam_data() - for p in range(data.shape[0]): - oop.send(desc, p*24, 24, 0, 1, data[p,...].reshape(1,1,128*4)) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.float32) - final = final.reshape(-1,128*4,1) - final = final.transpose(0,2,1).copy() - ## Reduce to match the capture block size - data = data[:(final.shape[0]//240-1)*240,...] - for i in range(2, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('pbeam1_128', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 1.0 + iop = PBeamReader(isock, ring, nsrc=1) + ## Data accumulation + final = [] + aop = AccumulateOp(ring, final, 240*128*4, dtype=np.float32) + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get PBeam data and send it off + desc, data = self._get_pbeam_data() + for p in range(data.shape[0]): + oop.send(desc, p*24, 24, 0, 1, data[p,...].reshape(1,1,128*4)) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + ## Reorder to match what we sent out + final = np.array(final, dtype=np.float32) + final = final.reshape(-1,128*4,1) + final = final.transpose(0,2,1).copy() + ## Reduce to match the capture block size + data = data[:(final.shape[0]//240-1)*240,...] + for i in range(2, data.shape[0]): + np.testing.assert_equal(final[i,...], data[i,...]) # Clean up del oop - isock.close() - osock.close() + +class multicastUDPIOTest(unittest.TestCase): + """Test simple IO for the UDP-based packet reader and writing""" + def setUp(self): + """Generate some dummy data to read""" + # Generate test vector and save to file + t = np.arange(256*4096*2) + w = 0.2 + self.s0 = 5*np.cos(w * t, dtype='float32') \ + + 3j*np.sin(w * t, dtype='float32') def test_write_multicast(self): addr = Address('224.0.0.251', 7147) - sock = UDPSocket() - sock.connect(addr) - op = UDPTransmit('tbn', sock) - - # Get TBN data - desc, data = self._get_tbn_data() - - # Go! - op.send(desc, 0, 1960*512, 0, 1, data) - sock.close() + with closing(UDPSocket()) as sock: + sock.connect(addr) + op = UDPTransmit('tbn', sock) + + # Get TBN data + desc, data = self._get_tbn_data() + + # Go! + op.send(desc, 0, 1960*512, 0, 1, data) def test_read_multicast(self): # Setup the ring ring = Ring(name="capture_multi") @@ -633,44 +662,45 @@ def test_read_multicast(self): addr = Address('224.0.0.251', 7147) ## Output via UDPTransmit osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('tbn', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 1.0 - iop = TBNReader(isock, ring) - # Data accumulation - final = [] - aop = AccumulateOp(ring, final, 49*32*512*2) - - # Start the reader and accumlator threads - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get TBN data and send it off - desc, data = self._get_tbn_data() - for p in range(data.shape[0]): - oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,512,32,2) - final = final.transpose(0,2,1,3).copy() - final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(2, data.shape[0]): - for j in range(data.shape[1]): - np.testing.assert_equal(final[i,j,...], data[i,j,...]) + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('tbn', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 1.0 + iop = TBNReader(isock, ring) + # Data accumulation + final = [] + aop = AccumulateOp(ring, final, 49*32*512*2,dtype=np.byte) + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get TBN data and send it off + desc, data = self._get_tbn_data() + for p in range(data.shape[0]): + oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + ## Reorder to match what we sent out + final = np.array(final, dtype=np.uint8) + final = final.reshape(-1,512,32,2) + npfinal = final.transpose(0,2,1,3).copy() + final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8' ) + final['re'] = npfinal[:,:,:,0] + final['im'] = npfinal[:,:,:,1] + ## Reduce to match the capture block size + data = data[:final.shape[0],...] + for i in range(2, data.shape[0]): + for j in range(data.shape[1]): + np.testing.assert_equal(final[i,j,...], data[i,j,...]) # Clean up del oop - isock.close() - osock.close() From 3fb41941210c5653eebb2e4eb5c61f175c449109 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Wed, 28 Feb 2024 11:24:16 -0700 Subject: [PATCH 1024/1155] fix --- test/test_udp_io.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 4ce8a0faf..2a07f6e18 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -388,7 +388,8 @@ def test_read_tbn(self): final = np.array(final, dtype=np.uint8) final = final.reshape(-1,512,32,2) npfinal = final.transpose(0,2,1,3).copy() - final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8' ) + print(npfinal.shape,data.shape) + final = bf.ndarray(shape=(npfinal.shape[0],32,512), dtype='ci8' ) final['re'] = npfinal[:,:,:,0] final['im'] = npfinal[:,:,:,1] ## Reduce to match the capture block size @@ -642,6 +643,22 @@ def setUp(self): w = 0.2 self.s0 = 5*np.cos(w * t, dtype='float32') \ + 3j*np.sin(w * t, dtype='float32') + def _get_tbn_data(self): + # Setup the packet HeaderInfo + desc = HeaderInfo() + desc.set_tuning(int(round(74e6 / 196e6 * 2**32))) + desc.set_gain(20) + + # Reorder as packets, stands, time + data = self.s0.reshape(512,32,-1) + data = data.transpose(2,1,0).copy() + # Convert to ci8 for TBN + data_q = bf.ndarray(shape=data.shape, dtype='ci8') + quantize(data, data_q, scale=10) + + # Update the number of data sources and return + desc.set_nsrc(data_q.shape[1]) + return desc, data_q def test_write_multicast(self): addr = Address('224.0.0.251', 7147) From f081fd15318d6358df95af0c963e27fdc5b8f139 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Wed, 28 Feb 2024 11:55:42 -0700 Subject: [PATCH 1025/1155] working version of packet tests --- test/test_udp_io.py | 69 +++++---------------------------------------- 1 file changed, 7 insertions(+), 62 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 2a07f6e18..26f26a7df 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -231,7 +231,7 @@ def main(self): self.output.append(idata) -class simpleUDPIOTest(unittest.TestCase): +class UDPIOTest(unittest.TestCase): """Test simple IO for the UDP-based packet reader and writing""" def setUp(self): """Generate some dummy data to read""" @@ -280,7 +280,7 @@ def test_read_simple(self): iop = SIMPLEReader(isock, ring) ## Data accumulation final = [] - expectedsize = 2048*1024*2 + expectedsize = 2048*1024 aop = AccumulateOp(ring, final, expectedsize,dtype=np.int16) @@ -303,8 +303,10 @@ def test_read_simple(self): final = np.array(final, dtype=np.uint16) final = final.reshape(-1,2048,1,2) - final = final.transpose(0,2,1,3).copy() - final = bf.ndarray(final, dtype='ci16') + npfinal = final.transpose(0,2,1,3).copy() + final = bf.ndarray(shape=(npfinal.shape[0],1,2048), dtype='ci8' ) + final['re'] = npfinal[:,:,:,0] + final['im'] = npfinal[:,:,:,1] ## Reduce to match the capture block size data = data[:final.shape[0],...] @@ -313,16 +315,7 @@ def test_read_simple(self): # Clean up del oop -class tbnUDPIOTest(unittest.TestCase): - """Test simple IO for the UDP-based packet reader and writing""" - def setUp(self): - """Generate some dummy data to read""" - # Generate test vector and save to file - t = np.arange(256*4096*2) - w = 0.2 - self.s0 = 5*np.cos(w * t, dtype='float32') \ - + 3j*np.sin(w * t, dtype='float32') - + def _get_tbn_data(self): # Setup the packet HeaderInfo desc = HeaderInfo() @@ -388,7 +381,6 @@ def test_read_tbn(self): final = np.array(final, dtype=np.uint8) final = final.reshape(-1,512,32,2) npfinal = final.transpose(0,2,1,3).copy() - print(npfinal.shape,data.shape) final = bf.ndarray(shape=(npfinal.shape[0],32,512), dtype='ci8' ) final['re'] = npfinal[:,:,:,0] final['im'] = npfinal[:,:,:,1] @@ -401,17 +393,6 @@ def test_read_tbn(self): # Clean up del oop -class drxUDPIOTest(unittest.TestCase): - """Test simple IO for the UDP-based packet reader and writing""" - def setUp(self): - """Generate some dummy data to read""" - # Generate test vector and save to file - t = np.arange(256*4096*2) - w = 0.2 - self.s0 = 5*np.cos(w * t, dtype='float32') \ - + 3j*np.sin(w * t, dtype='float32') - - def _get_drx_data(self): # Setup the packet HeaderInfo desc = HeaderInfo() @@ -549,16 +530,6 @@ def test_read_drx_single(self): # Clean up del oop -class pbeamUDPIOTest(unittest.TestCase): - """Test simple IO for the UDP-based packet reader and writing""" - def setUp(self): - """Generate some dummy data to read""" - # Generate test vector and save to file - t = np.arange(256*4096*2) - w = 0.2 - self.s0 = 5*np.cos(w * t, dtype='float32') \ - + 3j*np.sin(w * t, dtype='float32') - def _get_pbeam_data(self): # Setup the packet HeaderInfo @@ -634,32 +605,6 @@ def test_read_pbeam(self): # Clean up del oop -class multicastUDPIOTest(unittest.TestCase): - """Test simple IO for the UDP-based packet reader and writing""" - def setUp(self): - """Generate some dummy data to read""" - # Generate test vector and save to file - t = np.arange(256*4096*2) - w = 0.2 - self.s0 = 5*np.cos(w * t, dtype='float32') \ - + 3j*np.sin(w * t, dtype='float32') - def _get_tbn_data(self): - # Setup the packet HeaderInfo - desc = HeaderInfo() - desc.set_tuning(int(round(74e6 / 196e6 * 2**32))) - desc.set_gain(20) - - # Reorder as packets, stands, time - data = self.s0.reshape(512,32,-1) - data = data.transpose(2,1,0).copy() - # Convert to ci8 for TBN - data_q = bf.ndarray(shape=data.shape, dtype='ci8') - quantize(data, data_q, scale=10) - - # Update the number of data sources and return - desc.set_nsrc(data_q.shape[1]) - return desc, data_q - def test_write_multicast(self): addr = Address('224.0.0.251', 7147) with closing(UDPSocket()) as sock: From 8dce32d8ea004a6b5a0662eced4b3d3c5085eb24 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Wed, 6 Mar 2024 13:49:35 -0700 Subject: [PATCH 1026/1155] Need be64toh, not 32 --- src/formats/simple.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index 0c682c7ed..a1defc3a4 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -49,7 +49,7 @@ class SIMPLEDecoder : virtual public PacketDecoder { const simple_hdr_type* pkt_hdr = (simple_hdr_type*)pkt_ptr; const uint8_t* pkt_pld = pkt_ptr + sizeof(simple_hdr_type); int pld_size = pkt_size - sizeof(simple_hdr_type); - pkt->seq = be32toh(pkt_hdr->seq); + pkt->seq = be64toh(pkt_hdr->seq); pkt->nsrc = 1; pkt->src = 0; pkt->payload_size = pld_size; From e1d950b28d28dfbfb68ab766cd48351019362c5f Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Wed, 6 Mar 2024 14:02:06 -0700 Subject: [PATCH 1027/1155] and the header filler too --- src/formats/simple.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index a1defc3a4..0b7b4dc7f 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -120,6 +120,6 @@ class SIMPLEHeaderFiller : virtual public PacketHeaderFiller { simple_hdr_type* header = reinterpret_cast(hdr); memset(header, 0, sizeof(simple_hdr_type)); - header->seq = htobe32(hdr_base->seq); + header->seq = htobe64(hdr_base->seq); } }; From 30a03f935ceeec08a85dde46fb27cafb1365205d Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 7 Mar 2024 11:33:36 -0700 Subject: [PATCH 1028/1155] debugging --- src/ring_impl.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/ring_impl.cpp b/src/ring_impl.cpp index b1126142f..ef726be49 100644 --- a/src/ring_impl.cpp +++ b/src/ring_impl.cpp @@ -70,16 +70,23 @@ class RingReallocLock { inline RingReallocLock(unique_lock_type& lock, BFring_impl* ring) : _lock(lock), _ring(ring) { + std::cout<<"herei"<_nrealloc_pending; + std::cout<<"herej"<_realloc_condition.wait(_lock, [this]() { + std::cout<<"herek"<_nwrite_open == 0 && _ring->_nread_open == 0); }); } inline ~RingReallocLock() { + std::cout<<"herel"<_nrealloc_pending; + std::cout<<"herem"<_read_condition.notify_all(); + std::cout<<"heren"<_write_condition.notify_all(); + std::cout<<"hereo"< Date: Thu, 7 Mar 2024 12:35:42 -0700 Subject: [PATCH 1029/1155] remove debugging --- src/ring_impl.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/ring_impl.cpp b/src/ring_impl.cpp index ef726be49..cc452ac24 100644 --- a/src/ring_impl.cpp +++ b/src/ring_impl.cpp @@ -70,23 +70,16 @@ class RingReallocLock { inline RingReallocLock(unique_lock_type& lock, BFring_impl* ring) : _lock(lock), _ring(ring) { - std::cout<<"herei"<_nrealloc_pending; - std::cout<<"herej"<_realloc_condition.wait(_lock, [this]() { - std::cout<<"herek"<_nwrite_open == 0 && _ring->_nread_open == 0); }); } inline ~RingReallocLock() { - std::cout<<"herel"<_nrealloc_pending; - std::cout<<"herem"<_read_condition.notify_all(); - std::cout<<"heren"<_write_condition.notify_all(); - std::cout<<"hereo"< Date: Fri, 8 Mar 2024 13:54:27 -0700 Subject: [PATCH 1030/1155] remove debugging --- src/ring_impl.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/ring_impl.cpp b/src/ring_impl.cpp index ef726be49..cc452ac24 100644 --- a/src/ring_impl.cpp +++ b/src/ring_impl.cpp @@ -70,23 +70,16 @@ class RingReallocLock { inline RingReallocLock(unique_lock_type& lock, BFring_impl* ring) : _lock(lock), _ring(ring) { - std::cout<<"herei"<_nrealloc_pending; - std::cout<<"herej"<_realloc_condition.wait(_lock, [this]() { - std::cout<<"herek"<_nwrite_open == 0 && _ring->_nread_open == 0); }); } inline ~RingReallocLock() { - std::cout<<"herel"<_nrealloc_pending; - std::cout<<"herem"<_read_condition.notify_all(); - std::cout<<"heren"<_write_condition.notify_all(); - std::cout<<"hereo"< Date: Fri, 8 Mar 2024 17:34:11 -0700 Subject: [PATCH 1031/1155] Unlock memory before free. --- src/ib_verbs.hpp | 3 +++ src/ib_verbs_send.hpp | 3 +++ src/packet_writer.cpp | 1 + src/packet_writer.hpp | 2 ++ 4 files changed, 9 insertions(+) diff --git a/src/ib_verbs.hpp b/src/ib_verbs.hpp index 37b559068..187f7ce0a 100644 --- a/src/ib_verbs.hpp +++ b/src/ib_verbs.hpp @@ -295,6 +295,9 @@ class Verbs { } if( _verbs.mr_buf ) { + if( ::munlock(_verbs.mr_buf, _verbs.mr_size) ) { + failures += 1; + } if( ::munmap(_verbs.mr_buf, _verbs.mr_size) ) { failures += 1; } diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index f244c9f92..8ebe9fde0 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -410,6 +410,9 @@ class VerbsSend { } if( _verbs.mr_buf ) { + if( ::munlock(_verbs.mr_buf, _verbs.mr_size) ) { + failures += 1; + } if( ::munmap(_verbs.mr_buf, _verbs.mr_size) ) { failures += 1; } diff --git a/src/packet_writer.cpp b/src/packet_writer.cpp index e358478eb..71fd1a3c0 100644 --- a/src/packet_writer.cpp +++ b/src/packet_writer.cpp @@ -61,6 +61,7 @@ BFstatus BFpacketwriter_impl::send(BFheaderinfo info, if( hdr_size != _last_size || npackets != _last_count ) { if( _pkt_hdrs ) { + ::munlock(_pkt_hdrs, _last_count*_last_size*sizeof(char)); free(_pkt_hdrs); } diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 7884f5bbd..0aebaf081 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -172,9 +172,11 @@ class UDPPacketSender : public PacketWriterMethod { int flags=0) { if( npackets != _last_count ) { if( _mmsg ) { + ::munlock(_mmsg, sizeof(struct mmsghdr)*_last_count); free(_mmsg); } if( _iovs ) { + ::munlock(_iovs, sizeof(struct iovec)*2*_last_count); free(_iovs); } From 8d80917c5b806c2924506b23d02304a5a94bd0c0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Mar 2024 17:36:20 -0700 Subject: [PATCH 1032/1155] Missed a couple unlocks. Plus, just use _limiter for the rate limit. --- src/packet_writer.hpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 0aebaf081..547fbd5a5 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -239,11 +239,10 @@ class UDPVerbsSender : public PacketWriterMethod { int _last_count; mmsghdr* _mmsg; iovec* _iovs; - uint32_t _rate_holder; public: UDPVerbsSender(int fd, size_t max_burst_size=BF_VERBS_SEND_NPKTBURST) : PacketWriterMethod(fd, max_burst_size), _ibv(fd, JUMBO_FRAME_SIZE), _last_size(0), - _last_count(0), _mmsg(NULL), _iovs(NULL), _rate_holder(0) {} + _last_count(0), _mmsg(NULL), _iovs(NULL) {} ~UDPVerbsSender() { if( _mmsg ) { free(_mmsg); @@ -260,9 +259,11 @@ class UDPVerbsSender : public PacketWriterMethod { int flags=0) { if( npackets != _last_count ) { if( _mmsg ) { + ::munlock(_mmsg, sizeof(struct mmsghdr)*_last_count); free(_mmsg); } if( _iovs ) { + ::munlock(_iovs, sizeof(struct iovec)*3*_last_count); free(_iovs); } @@ -286,8 +287,8 @@ class UDPVerbsSender : public PacketWriterMethod { _ibv.get_ipv4_header(&(_udp_hdr.ipv4), _last_size); _ibv.get_udp_header(&(_udp_hdr.udp), _last_size); - if( _rate_holder > 0 ) { - _ibv.set_rate_limit(_rate_holder*_last_size, _last_size, _max_burst_size); + if( _limiter.get_rate() > 0 ) { + _ibv.set_rate_limit(_limiter.get_rate()*_last_size, _last_size, _max_burst_size); } } @@ -310,8 +311,6 @@ class UDPVerbsSender : public PacketWriterMethod { return nsent; } inline const char* get_name() { return "udp_verbs_transmit"; } - inline void set_rate(uint32_t rate_limit) { _rate_holder = rate_limit; } - inline uint32_t get_rate() { return _rate_holder; } }; #endif // BF_VERBS_ENABLED From d97c645001a034e74951f854cc885fd1636531d4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Mar 2024 17:38:02 -0700 Subject: [PATCH 1033/1155] Drop provide a default packet size. --- src/ib_verbs_send.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 8ebe9fde0..4ddbcdbce 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -723,7 +723,7 @@ class VerbsSend { destroy_buffers(); destroy_context(); } - inline void set_rate_limit(uint32_t rate_limit, size_t udp_length=1, size_t max_burst_size=BF_VERBS_SEND_NPKTBURST) { + inline void set_rate_limit(uint32_t rate_limit, size_t udp_length, size_t max_burst_size=BF_VERBS_SEND_NPKTBURST) { int i; // Converts to B/s to kb/s assuming a packet size From 012c9ee6acbceed28594c0e4bc8fca589bec27bb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Mar 2024 17:45:12 -0700 Subject: [PATCH 1034/1155] Check both the upper and lower ends of the packet pacing range. --- src/ib_verbs_send.hpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index 4ddbcdbce..c672f93ce 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -96,7 +96,7 @@ struct bf_ibv_send { int nqueued; uint8_t offload_csum; - uint32_t hardware_pacing; + uint32_t hardware_pacing[2]; }; struct __attribute__((packed)) bf_ethernet_hdr { @@ -337,12 +337,13 @@ class VerbsSend { #endif std::cout << "_verbs.offload_csum: " << (int) _verbs.offload_csum << std::endl; - _verbs.hardware_pacing = 0; + _verbs.hardware_pacing = {0}; #if defined BF_VERBS_SEND_PACING && BF_VERBS_SEND_PACING if( ibv_is_qpt_supported(ibv_dev_attr.packet_pacing_caps.supported_qpts, IBV_QPT_RAW_PACKET) ) { - _verbs.hardware_pacing = ibv_dev_attr.packet_pacing_caps.qp_rate_limit_max; + _verbs.hardware_pacing[0] = ibv_dev_attr.packet_pacing_caps.qp_rate_limit_min; + _verbs.hardware_pacing[1] = ibv_dev_attr.packet_pacing_caps.qp_rate_limit_max; } - std::cout << "_verbs.hardware_pacing: " << (int) _verbs.hardware_pacing << std::endl; + std::cout << "_verbs.hardware_pacing: " << (int) _verbs.hardware_pacing[0] << ", " << (int) _verbs.hardware_pacing[1] << std::endl; #endif break; } @@ -732,9 +733,9 @@ class VerbsSend { // Verify that this rate limit is valid if( rate_limit == 0 ) { - rate_limit = _verbs.hardware_pacing; + rate_limit = _verbs.hardware_pacing[1]; } - if( rate_limit > _verbs.hardware_pacing ) { + if( rate_limit < _verbs.hardware_pacing[0] || rate_limit > _verbs.hardware_pacing[1] ) { throw VerbsSend::Error("Failed to set rate limit, specified rate limit is out of range"); } From cfad6a1b90282938835c8d244ca25c58f616d69d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 8 Mar 2024 18:19:24 -0700 Subject: [PATCH 1035/1155] Change assignment. --- src/ib_verbs_send.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ib_verbs_send.hpp b/src/ib_verbs_send.hpp index c672f93ce..40d2e7093 100644 --- a/src/ib_verbs_send.hpp +++ b/src/ib_verbs_send.hpp @@ -337,7 +337,7 @@ class VerbsSend { #endif std::cout << "_verbs.offload_csum: " << (int) _verbs.offload_csum << std::endl; - _verbs.hardware_pacing = {0}; + _verbs.hardware_pacing[0] = _verbs.hardware_pacing[1] = 0; #if defined BF_VERBS_SEND_PACING && BF_VERBS_SEND_PACING if( ibv_is_qpt_supported(ibv_dev_attr.packet_pacing_caps.supported_qpts, IBV_QPT_RAW_PACKET) ) { _verbs.hardware_pacing[0] = ibv_dev_attr.packet_pacing_caps.qp_rate_limit_min; From 56b84d2ab61150caa1e5ff3f490182519134f7be Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Mar 2024 16:03:31 -0600 Subject: [PATCH 1036/1155] Update which version of ctypesgen to use. --- tutorial/00_getting_started.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb index 67642df8f..32f0e7cab 100644 --- a/tutorial/00_getting_started.ipynb +++ b/tutorial/00_getting_started.ipynb @@ -38,7 +38,7 @@ " try:\n", " import google.colab\n", " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", - " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", + " !pip install -q contextlib2 pint simplejson scipy ctypesgen==1.0.2\n", " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", " import bifrost\n", @@ -553,4 +553,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} From b706d5eb849744d7bec94e0855d5a8631871dcf5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Mar 2024 17:12:08 -0600 Subject: [PATCH 1037/1155] Bad merge. --- test/test_ndarray.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_ndarray.py b/test/test_ndarray.py index ed8ba351f..267ac7a68 100644 --- a/test/test_ndarray.py +++ b/test/test_ndarray.py @@ -204,4 +204,4 @@ def test_BFarray(self): a = bf.ndarray(np.arange(100), dtype='cf32') aa = a.as_BFarray() b = bf.ndarray(aa) - np.testing.assert_equal(a, b) + np.testing.assert_equal(a, b) From e443012a7f8ced5762c6efe173d37add28788666 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Mar 2024 17:16:58 -0600 Subject: [PATCH 1038/1155] Make a copy of the ring's data (#231). --- test/test_disk_io.py | 2 +- test/test_udp_io.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_disk_io.py b/test/test_disk_io.py index f58fe61dc..283e3b4d4 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -182,7 +182,7 @@ def main(self): while not self.ring.writing_ended(): for ispan in iseq_spans: idata = ispan.data_view(self.dtype) - self.output.append(idata) + self.output.append(idata.copy()) class DiskIOTest(unittest.TestCase): diff --git a/test/test_udp_io.py b/test/test_udp_io.py index b38e2038d..60ec8c8b6 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -181,7 +181,7 @@ def main(self): while not self.ring.writing_ended(): for ispan in iseq_spans: idata = ispan.data_view(self.dtype) - self.output.append(idata) + self.output.append(idata.copy()) class UDPIOTest(unittest.TestCase): From 351000a610e80b66b7b4d7395282e8d446e8feab Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 15 Mar 2024 18:31:15 -0600 Subject: [PATCH 1039/1155] Refactor into a TestCase per packet format. --- test/test_disk_io.py | 265 ++++++++++++++++---------------- test/test_udp_io.py | 359 ++++++++++++++++++++++--------------------- 2 files changed, 315 insertions(+), 309 deletions(-) diff --git a/test/test_disk_io.py b/test/test_disk_io.py index 283e3b4d4..ca8fbdf05 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2019-2024, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -37,6 +37,43 @@ from bifrost.pipeline import SourceBlock, SinkBlock import numpy as np +class AccumulateOp(object): + def __init__(self, ring, output, size, dtype=np.uint8): + self.ring = ring + self.output = output + self.size = size*(dtype().nbytes) + self.dtype = dtype + + self.ring.resize(self.size*10) + + def main(self): + for iseq in self.ring.read(guarantee=True): + iseq_spans = iseq.read(self.size) + while not self.ring.writing_ended(): + for ispan in iseq_spans: + idata = ispan.data_view(self.dtype) + self.output.append(idata.copy()) + +class BaseDiskIOTest(object): + class BaseDiskIOTestCase(unittest.TestCase): + def setUp(self): + """Generate some dummy data to read""" + # Generate test vector and save to file + t = np.arange(256*4096*2) + w = 0.2 + self.s0 = 5*np.cos(w * t, dtype='float32') \ + + 3j*np.sin(w * t, dtype='float32') + # Filename cache so we can cleanup later + self._cache = [] + def _open(self, filename, mode): + fh = open(filename, mode) + if filename not in self._cache: + self._cache.append(filename) + return fh + def tearDown(self): + for filename in self._cache: + os.unlink(filename) + class TBNReader(object): def __init__(self, sock, ring): @@ -77,131 +114,9 @@ def main(self): if status in (1,4,5,6): break del capture - - -class DRXReader(object): - def __init__(self, sock, ring, nsrc=4): - self.sock = sock - self.ring = ring - self.nsrc = nsrc - def callback(self, seq0, time_tag, decim, chan0, chan1, nsrc, hdr_ptr, hdr_size_ptr): - #print "++++++++++++++++ seq0 =", seq0 - #print " time_tag =", time_tag - hdr = {'time_tag': time_tag, - 'seq0': seq0, - 'chan0': chan0, - 'chan1': chan1, - 'cfreq0': 196e6 * chan0/2.**32, - 'cfreq1': 196e6 * chan1/2.**32, - 'bw': 196e6/decim, - 'nstand': nsrc/2, - 'npol': 2, - 'complex': True, - 'nbit': 4} - #print "******** CFREQ:", hdr['cfreq'] - try: - hdr_str = json.dumps(hdr).encode() - except AttributeError: - # Python2 catch - pass - # TODO: Can't pad with NULL because returned as C-string - #hdr_str = json.dumps(hdr).ljust(4096, '\0') - #hdr_str = json.dumps(hdr).ljust(4096, ' ') - header_buf = ctypes.create_string_buffer(hdr_str) - hdr_ptr[0] = ctypes.cast(header_buf, ctypes.c_void_p) - hdr_size_ptr[0] = len(hdr_str) - return 0 - def main(self): - seq_callback = PacketCaptureCallback() - seq_callback.set_drx(self.callback) - with DiskReader("drx", self.sock, self.ring, self.nsrc, 0, 49, 49, - sequence_callback=seq_callback) as capture: - while True: - status = capture.recv() - if status in (1,4,5,6): - break - del capture - - -class PBeamReader(object): - def __init__(self, sock, ring, nchan, nsrc=1): - self.sock = sock - self.ring = ring - self.nchan = nchan - self.nsrc = nsrc - def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ptr): - #print "++++++++++++++++ seq0 =", seq0 - #print " time_tag =", time_tag - hdr = {'time_tag': time_tag, - 'seq0': seq0, - 'chan0': chan0, - 'cfreq0': chan0*(196e6/8192), - 'bw': nchan*(196e6/8192), - 'navg': navg, - 'nbeam': nbeam, - 'npol': 4, - 'complex': False, - 'nbit': 32} - #print("******** HDR:", hdr) - try: - hdr_str = json.dumps(hdr).encode() - except AttributeError: - # Python2 catch - pass - # TODO: Can't pad with NULL because returned as C-string - #hdr_str = json.dumps(hdr).ljust(4096, '\0') - #hdr_str = json.dumps(hdr).ljust(4096, ' ') - header_buf = ctypes.create_string_buffer(hdr_str) - hdr_ptr[0] = ctypes.cast(header_buf, ctypes.c_void_p) - hdr_size_ptr[0] = len(hdr_str) - return 0 - def main(self): - seq_callback = PacketCaptureCallback() - seq_callback.set_pbeam(self.callback) - with DiskReader("pbeam_%i" % self.nchan, self.sock, self.ring, self.nsrc, 1, 240, 240, - sequence_callback=seq_callback) as capture: - while True: - status = capture.recv() - if status in (1,4,5,6): - break - del capture - - -class AccumulateOp(object): - def __init__(self, ring, output, size, dtype=np.uint8): - self.ring = ring - self.output = output - self.size = size*(dtype().nbytes) - self.dtype = dtype - - self.ring.resize(self.size*10) - - def main(self): - for iseq in self.ring.read(guarantee=True): - iseq_spans = iseq.read(self.size) - while not self.ring.writing_ended(): - for ispan in iseq_spans: - idata = ispan.data_view(self.dtype) - self.output.append(idata.copy()) - - -class DiskIOTest(unittest.TestCase): - """Test simple IO for the disk-based packet reader and writing""" - def setUp(self): - """Generate some dummy data to read""" - # Generate test vector and save to file - t = np.arange(256*4096*2) - w = 0.2 - self.s0 = 5*np.cos(w * t, dtype='float32') \ - + 3j*np.sin(w * t, dtype='float32') - # Filename cache so we can cleanup later - self._cache = [] - def _open(self, filename, mode): - fh = open(filename, mode) - if filename not in self._cache: - self._cache.append(filename) - return fh +class TBNDiskIOTest(BaseDiskIOTest.BaseDiskIOTestCase): + """Test simple IO for the disk-based TBN packet reader and writing""" def _get_tbn_data(self): # Setup the packet HeaderInfo desc = HeaderInfo() @@ -275,7 +190,53 @@ def test_read_tbn(self): # Clean up del oop fh.close() - + + +class DRXReader(object): + def __init__(self, sock, ring, nsrc=4): + self.sock = sock + self.ring = ring + self.nsrc = nsrc + def callback(self, seq0, time_tag, decim, chan0, chan1, nsrc, hdr_ptr, hdr_size_ptr): + #print "++++++++++++++++ seq0 =", seq0 + #print " time_tag =", time_tag + hdr = {'time_tag': time_tag, + 'seq0': seq0, + 'chan0': chan0, + 'chan1': chan1, + 'cfreq0': 196e6 * chan0/2.**32, + 'cfreq1': 196e6 * chan1/2.**32, + 'bw': 196e6/decim, + 'nstand': nsrc/2, + 'npol': 2, + 'complex': True, + 'nbit': 4} + #print "******** CFREQ:", hdr['cfreq'] + try: + hdr_str = json.dumps(hdr).encode() + except AttributeError: + # Python2 catch + pass + # TODO: Can't pad with NULL because returned as C-string + #hdr_str = json.dumps(hdr).ljust(4096, '\0') + #hdr_str = json.dumps(hdr).ljust(4096, ' ') + header_buf = ctypes.create_string_buffer(hdr_str) + hdr_ptr[0] = ctypes.cast(header_buf, ctypes.c_void_p) + hdr_size_ptr[0] = len(hdr_str) + return 0 + def main(self): + seq_callback = PacketCaptureCallback() + seq_callback.set_drx(self.callback) + with DiskReader("drx", self.sock, self.ring, self.nsrc, 0, 49, 49, + sequence_callback=seq_callback) as capture: + while True: + status = capture.recv() + if status in (1,4,5,6): + break + del capture + +class DRXDiskIOTest(BaseDiskIOTest.BaseDiskIOTestCase): + """Test simple IO for the disk-based DRX packet reader and writing""" def _get_drx_data(self): # Setup the packet HeaderInfo desc = HeaderInfo() @@ -407,7 +368,53 @@ def test_read_drx_single(self): # Clean up del oop fh.close() - + + +class PBeamReader(object): + def __init__(self, sock, ring, nchan, nsrc=1): + self.sock = sock + self.ring = ring + self.nchan = nchan + self.nsrc = nsrc + def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ptr): + #print "++++++++++++++++ seq0 =", seq0 + #print " time_tag =", time_tag + hdr = {'time_tag': time_tag, + 'seq0': seq0, + 'chan0': chan0, + 'cfreq0': chan0*(196e6/8192), + 'bw': nchan*(196e6/8192), + 'navg': navg, + 'nbeam': nbeam, + 'npol': 4, + 'complex': False, + 'nbit': 32} + #print("******** HDR:", hdr) + try: + hdr_str = json.dumps(hdr).encode() + except AttributeError: + # Python2 catch + pass + # TODO: Can't pad with NULL because returned as C-string + #hdr_str = json.dumps(hdr).ljust(4096, '\0') + #hdr_str = json.dumps(hdr).ljust(4096, ' ') + header_buf = ctypes.create_string_buffer(hdr_str) + hdr_ptr[0] = ctypes.cast(header_buf, ctypes.c_void_p) + hdr_size_ptr[0] = len(hdr_str) + return 0 + def main(self): + seq_callback = PacketCaptureCallback() + seq_callback.set_pbeam(self.callback) + with DiskReader("pbeam_%i" % self.nchan, self.sock, self.ring, self.nsrc, 1, 240, 240, + sequence_callback=seq_callback) as capture: + while True: + status = capture.recv() + if status in (1,4,5,6): + break + del capture + +class PBeamDiskIOTest(BaseDiskIOTest.BaseDiskIOTestCase): + """Test simple IO for the disk-based PBeam packet reader and writing""" def _get_pbeam_data(self): # Setup the packet HeaderInfo desc = HeaderInfo() @@ -480,7 +487,3 @@ def test_read_pbeam(self): # Clean up del oop fh.close() - - def tearDown(self): - for filename in self._cache: - os.unlink(filename) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 60ec8c8b6..e9698850e 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2022, The Bifrost Authors. All rights reserved. +# Copyright (c) 2019-2024, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -39,6 +39,31 @@ from bifrost.quantize import quantize import numpy as np +class AccumulateOp(object): + def __init__(self, ring, output, size, dtype=np.uint8): + self.ring = ring + self.output = output + self.size = size*(dtype().nbytes) + self.dtype = dtype + + def main(self): + for iseq in self.ring.read(guarantee=True): + iseq_spans = iseq.read(self.size) + while not self.ring.writing_ended(): + for ispan in iseq_spans: + idata = ispan.data_view(self.dtype) + self.output.append(idata.copy()) + +class BaseUDPIOTest(object): + class BaseUDPIOTestCase(unittest.TestCase): + def setUp(self): + """Generate some dummy data to read""" + # Generate test vector and save to file + t = np.arange(256*4096*2) + w = 0.2 + self.s0 = 5*np.cos(w * t, dtype='float32') \ + + 3j*np.sin(w * t, dtype='float32') + class TBNReader(object): def __init__(self, sock, ring): @@ -80,120 +105,8 @@ def main(self): break del capture - -class DRXReader(object): - def __init__(self, sock, ring, nsrc=4): - self.sock = sock - self.ring = ring - self.nsrc = nsrc - def callback(self, seq0, time_tag, decim, chan0, chan1, nsrc, hdr_ptr, hdr_size_ptr): - #print "++++++++++++++++ seq0 =", seq0 - #print " time_tag =", time_tag - hdr = {'time_tag': time_tag, - 'seq0': seq0, - 'chan0': chan0, - 'chan1': chan1, - 'cfreq0': 196e6 * chan0/2.**32, - 'cfreq1': 196e6 * chan1/2.**32, - 'bw': 196e6/decim, - 'nstand': nsrc/2, - 'npol': 2, - 'complex': True, - 'nbit': 4} - #print "******** CFREQ:", hdr['cfreq'] - try: - hdr_str = json.dumps(hdr).encode() - except AttributeError: - # Python2 catch - pass - # TODO: Can't pad with NULL because returned as C-string - #hdr_str = json.dumps(hdr).ljust(4096, '\0') - #hdr_str = json.dumps(hdr).ljust(4096, ' ') - header_buf = ctypes.create_string_buffer(hdr_str) - hdr_ptr[0] = ctypes.cast(header_buf, ctypes.c_void_p) - hdr_size_ptr[0] = len(hdr_str) - return 0 - def main(self): - seq_callback = PacketCaptureCallback() - seq_callback.set_drx(self.callback) - with UDPCapture("drx", self.sock, self.ring, self.nsrc, 0, 9000, 49, 49, - sequence_callback=seq_callback) as capture: - while True: - status = capture.recv() - if status in (1,4,5,6): - break - del capture - - -class PBeamReader(object): - def __init__(self, sock, ring, nsrc=1): - self.sock = sock - self.ring = ring - self.nsrc = nsrc - def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ptr): - #print "++++++++++++++++ seq0 =", seq0 - #print " time_tag =", time_tag - hdr = {'time_tag': time_tag, - 'seq0': seq0, - 'chan0': chan0, - 'cfreq0': chan0*(196e6/8192), - 'bw': nchan*(196e6/8192), - 'navg': navg, - 'nbeam': nbeam, - 'npol': 4, - 'complex': False, - 'nbit': 32} - #print("******** HDR:", hdr) - try: - hdr_str = json.dumps(hdr).encode() - except AttributeError: - # Python2 catch - pass - # TODO: Can't pad with NULL because returned as C-string - #hdr_str = json.dumps(hdr).ljust(4096, '\0') - #hdr_str = json.dumps(hdr).ljust(4096, ' ') - header_buf = ctypes.create_string_buffer(hdr_str) - hdr_ptr[0] = ctypes.cast(header_buf, ctypes.c_void_p) - hdr_size_ptr[0] = len(hdr_str) - return 0 - def main(self): - seq_callback = PacketCaptureCallback() - seq_callback.set_pbeam(self.callback) - with UDPCapture("pbeam", self.sock, self.ring, self.nsrc, 1, 9000, 240, 240, - sequence_callback=seq_callback) as capture: - while True: - status = capture.recv() - if status in (1,4,5,6): - break - del capture - - -class AccumulateOp(object): - def __init__(self, ring, output, size, dtype=np.uint8): - self.ring = ring - self.output = output - self.size = size*(dtype().nbytes) - self.dtype = dtype - - def main(self): - for iseq in self.ring.read(guarantee=True): - iseq_spans = iseq.read(self.size) - while not self.ring.writing_ended(): - for ispan in iseq_spans: - idata = ispan.data_view(self.dtype) - self.output.append(idata.copy()) - - -class UDPIOTest(unittest.TestCase): - """Test simple IO for the UDP-based packet reader and writing""" - def setUp(self): - """Generate some dummy data to read""" - # Generate test vector and save to file - t = np.arange(256*4096*2) - w = 0.2 - self.s0 = 5*np.cos(w * t, dtype='float32') \ - + 3j*np.sin(w * t, dtype='float32') - +class TBNUDPIOTest(BaseUDPIOTest.BaseUDPIOTestCase): + """Test simple IO for the UDP-based TBN packet reader and writing""" def _get_tbn_data(self): # Setup the packet HeaderInfo desc = HeaderInfo() @@ -271,7 +184,114 @@ def test_read_tbn(self): del oop isock.close() osock.close() + def test_write_multicast(self): + addr = Address('224.0.0.251', 7147) + sock = UDPSocket() + sock.connect(addr) + op = UDPTransmit('tbn', sock) + # Get TBN data + desc, data = self._get_tbn_data() + + # Go! + op.send(desc, 0, 1960*512, 0, 1, data) + sock.close() + def test_read_multicast(self): + # Setup the ring + ring = Ring(name="capture_multi") + + # Setup the blocks + addr = Address('224.0.0.251', 7147) + ## Output via UDPTransmit + osock = UDPSocket() + osock.connect(addr) + oop = UDPTransmit('tbn', osock) + ## Input via UDPCapture + isock = UDPSocket() + isock.bind(addr) + isock.timeout = 1.0 + iop = TBNReader(isock, ring) + # Data accumulation + final = [] + aop = AccumulateOp(ring, final, 49*32*512*2) + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get TBN data and send it off + desc, data = self._get_tbn_data() + for p in range(data.shape[0]): + oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + ## Reorder to match what we sent out + final = np.array(final, dtype=np.uint8) + final = final.reshape(-1,512,32,2) + final = final.transpose(0,2,1,3).copy() + final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8', buffer=final.ctypes.data) + ## Reduce to match the capture block size + data = data[:final.shape[0],...] + for i in range(2, data.shape[0]): + for j in range(data.shape[1]): + np.testing.assert_equal(final[i,j,...], data[i,j,...]) + + # Clean up + del oop + isock.close() + osock.close() + + +class DRXReader(object): + def __init__(self, sock, ring, nsrc=4): + self.sock = sock + self.ring = ring + self.nsrc = nsrc + def callback(self, seq0, time_tag, decim, chan0, chan1, nsrc, hdr_ptr, hdr_size_ptr): + #print "++++++++++++++++ seq0 =", seq0 + #print " time_tag =", time_tag + hdr = {'time_tag': time_tag, + 'seq0': seq0, + 'chan0': chan0, + 'chan1': chan1, + 'cfreq0': 196e6 * chan0/2.**32, + 'cfreq1': 196e6 * chan1/2.**32, + 'bw': 196e6/decim, + 'nstand': nsrc/2, + 'npol': 2, + 'complex': True, + 'nbit': 4} + #print "******** CFREQ:", hdr['cfreq'] + try: + hdr_str = json.dumps(hdr).encode() + except AttributeError: + # Python2 catch + pass + # TODO: Can't pad with NULL because returned as C-string + #hdr_str = json.dumps(hdr).ljust(4096, '\0') + #hdr_str = json.dumps(hdr).ljust(4096, ' ') + header_buf = ctypes.create_string_buffer(hdr_str) + hdr_ptr[0] = ctypes.cast(header_buf, ctypes.c_void_p) + hdr_size_ptr[0] = len(hdr_str) + return 0 + def main(self): + seq_callback = PacketCaptureCallback() + seq_callback.set_drx(self.callback) + with UDPCapture("drx", self.sock, self.ring, self.nsrc, 0, 9000, 49, 49, + sequence_callback=seq_callback) as capture: + while True: + status = capture.recv() + if status in (1,4,5,6): + break + del capture + +class DRXUDPIOTest(BaseUDPIOTest.BaseUDPIOTestCase): + """Test simple IO for the UDP-based DRX packet reader and writing""" def _get_drx_data(self): # Setup the packet HeaderInfo desc = HeaderInfo() @@ -413,7 +433,52 @@ def test_read_drx_single(self): del oop isock.close() osock.close() - + + +class PBeamReader(object): + def __init__(self, sock, ring, nsrc=1): + self.sock = sock + self.ring = ring + self.nsrc = nsrc + def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ptr): + #print "++++++++++++++++ seq0 =", seq0 + #print " time_tag =", time_tag + hdr = {'time_tag': time_tag, + 'seq0': seq0, + 'chan0': chan0, + 'cfreq0': chan0*(196e6/8192), + 'bw': nchan*(196e6/8192), + 'navg': navg, + 'nbeam': nbeam, + 'npol': 4, + 'complex': False, + 'nbit': 32} + #print("******** HDR:", hdr) + try: + hdr_str = json.dumps(hdr).encode() + except AttributeError: + # Python2 catch + pass + # TODO: Can't pad with NULL because returned as C-string + #hdr_str = json.dumps(hdr).ljust(4096, '\0') + #hdr_str = json.dumps(hdr).ljust(4096, ' ') + header_buf = ctypes.create_string_buffer(hdr_str) + hdr_ptr[0] = ctypes.cast(header_buf, ctypes.c_void_p) + hdr_size_ptr[0] = len(hdr_str) + return 0 + def main(self): + seq_callback = PacketCaptureCallback() + seq_callback.set_pbeam(self.callback) + with UDPCapture("pbeam", self.sock, self.ring, self.nsrc, 1, 9000, 240, 240, + sequence_callback=seq_callback) as capture: + while True: + status = capture.recv() + if status in (1,4,5,6): + break + del capture + +class PBeamUDPIOTest(BaseUDPIOTest.BaseUDPIOTestCase): + """Test simple IO for the UDP-based PBeam packet reader and writing""" def _get_pbeam_data(self): # Setup the packet HeaderInfo desc = HeaderInfo() @@ -489,65 +554,3 @@ def test_read_pbeam(self): del oop isock.close() osock.close() - - def test_write_multicast(self): - addr = Address('224.0.0.251', 7147) - sock = UDPSocket() - sock.connect(addr) - op = UDPTransmit('tbn', sock) - - # Get TBN data - desc, data = self._get_tbn_data() - - # Go! - op.send(desc, 0, 1960*512, 0, 1, data) - sock.close() - def test_read_multicast(self): - # Setup the ring - ring = Ring(name="capture_multi") - - # Setup the blocks - addr = Address('224.0.0.251', 7147) - ## Output via UDPTransmit - osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('tbn', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 1.0 - iop = TBNReader(isock, ring) - # Data accumulation - final = [] - aop = AccumulateOp(ring, final, 49*32*512*2) - - # Start the reader and accumlator threads - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get TBN data and send it off - desc, data = self._get_tbn_data() - for p in range(data.shape[0]): - oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,512,32,2) - final = final.transpose(0,2,1,3).copy() - final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(2, data.shape[0]): - for j in range(data.shape[1]): - np.testing.assert_equal(final[i,j,...], data[i,j,...]) - - # Clean up - del oop - isock.close() - osock.close() From edfaca016e859112439330adf120a34b38b7d6e6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sat, 16 Mar 2024 18:10:40 -0600 Subject: [PATCH 1040/1155] Naming cleanup. --- test/test_disk_io.py | 16 ++++++++-------- test/test_udp_io.py | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/test/test_disk_io.py b/test/test_disk_io.py index ca8fbdf05..94183e5b0 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -133,7 +133,7 @@ def _get_tbn_data(self): # Update the number of data sources and return desc.set_nsrc(data_q.shape[1]) return desc, data_q - def test_write_tbn(self): + def test_write(self): fh = self._open('test_tbn.dat', 'wb') oop = DiskWriter('tbn', fh) @@ -146,7 +146,7 @@ def test_write_tbn(self): self.assertEqual(os.path.getsize('test_tbn.dat'), \ 1048*data.shape[0]*data.shape[1]) - def test_read_tbn(self): + def test_read(self): # Write fh = self._open('test_tbn.dat', 'wb') oop = DiskWriter('tbn', fh) @@ -253,7 +253,7 @@ def _get_drx_data(self): # Update the number of data sources and return desc.set_nsrc(data_q.shape[1]) return desc, data_q - def test_write_drx(self): + def test_write(self): fh = self._open('test_drx.dat', 'wb') oop = DiskWriter('drx', fh) @@ -266,7 +266,7 @@ def test_write_drx(self): self.assertEqual(os.path.getsize('test_drx.dat'), \ 4128*data.shape[0]*data.shape[1]) - def test_read_drx(self): + def test_read(self): # Write fh = self._open('test_drx.dat', 'wb') oop = DiskWriter('drx', fh) @@ -310,7 +310,7 @@ def test_read_drx(self): # Clean up del oop fh.close() - def test_write_drx_single(self): + def test_write_single(self): fh = self._open('test_drx_single.dat', 'wb') oop = DiskWriter('drx', fh) @@ -324,7 +324,7 @@ def test_write_drx_single(self): self.assertEqual(os.path.getsize('test_drx_single.dat'), \ 4128*data.shape[0]*data.shape[1]/2) - def test_read_drx_single(self): + def test_read_single(self): # Write fh = self._open('test_drx_single.dat', 'wb') oop = DiskWriter('drx', fh) @@ -431,7 +431,7 @@ def _get_pbeam_data(self): # Update the number of data sources and return desc.set_nsrc(data.shape[1]) return desc, data - def test_write_pbeam(self): + def test_write(self): fh = self._open('test_pbeam.dat', 'wb') oop = DiskWriter('pbeam1_128', fh) @@ -444,7 +444,7 @@ def test_write_pbeam(self): self.assertEqual(os.path.getsize('test_pbeam.dat'), \ (18+128*4*4)*data.shape[0]*data.shape[1]) - def test_read_pbeam(self): + def test_read(self): # Write fh = self._open('test_pbeam.dat', 'wb') oop = DiskWriter('pbeam1_128', fh) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index e9698850e..899886b65 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -123,7 +123,7 @@ def _get_tbn_data(self): # Update the number of data sources and return desc.set_nsrc(data_q.shape[1]) return desc, data_q - def test_write_tbn(self): + def test_write(self): addr = Address('127.0.0.1', 7147) sock = UDPSocket() sock.connect(addr) @@ -135,7 +135,7 @@ def test_write_tbn(self): # Go! op.send(desc, 0, 1960*512, 0, 1, data) sock.close() - def test_read_tbn(self): + def test_read(self): # Setup the ring ring = Ring(name="capture_tbn") @@ -308,7 +308,7 @@ def _get_drx_data(self): # Update the number of data sources and return desc.set_nsrc(data_q.shape[1]) return desc, data_q - def test_write_drx(self): + def test_write(self): addr = Address('127.0.0.1', 7147) sock = UDPSocket() sock.connect(addr) @@ -320,7 +320,7 @@ def test_write_drx(self): # Go! op.send(desc, 0, 10*4096, (1<<3), 128, data) sock.close() - def test_read_drx(self): + def test_read(self): # Setup the ring ring = Ring(name="capture_drx") @@ -370,7 +370,7 @@ def test_read_drx(self): del oop isock.close() osock.close() - def test_write_drx_single(self): + def test_write_single(self): addr = Address('127.0.0.1', 7147) sock = UDPSocket() sock.connect(addr) @@ -383,7 +383,7 @@ def test_write_drx_single(self): # Go! op.send(desc, 0, 10*4096, (1<<3), 128, data[:,[0,1],:].copy()) sock.close() - def test_read_drx_single(self): + def test_read_single(self): # Setup the ring ring = Ring(name="capture_drx_single") @@ -495,7 +495,7 @@ def _get_pbeam_data(self): # Update the number of data sources and return desc.set_nsrc(data.shape[1]) return desc, data - def test_write_pbeam(self): + def test_write(self): addr = Address('127.0.0.1', 7147) sock = UDPSocket() sock.connect(addr) @@ -507,7 +507,7 @@ def test_write_pbeam(self): # Go! op.send(desc, 0, 24, 0, 1, data) sock.close() - def test_read_pbeam(self): + def test_read(self): # Setup the ring ring = Ring(name="capture_pbeam") From 0e6d1d82eb0fe57f25c143782bbafaed6fd572ea Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sun, 17 Mar 2024 08:11:59 -0600 Subject: [PATCH 1041/1155] Even more cleanups to make the test suite more useful as an example. --- test/test_disk_io.py | 192 +++++++++++++++++----------------- test/test_udp_io.py | 238 ++++++++++++++++++++++--------------------- 2 files changed, 221 insertions(+), 209 deletions(-) diff --git a/test/test_disk_io.py b/test/test_disk_io.py index 94183e5b0..4ee9b6508 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -38,21 +38,23 @@ import numpy as np class AccumulateOp(object): - def __init__(self, ring, output, size, dtype=np.uint8): + def __init__(self, ring, output_timetags, output_data, size, dtype=np.uint8): self.ring = ring - self.output = output + self.output_timetags = output_timetags + self.output_data = output_data self.size = size*(dtype().nbytes) self.dtype = dtype - self.ring.resize(self.size*10) - def main(self): for iseq in self.ring.read(guarantee=True): + self.output_timetags.append(iseq.time_tag) + self.output_data.append([]) + iseq_spans = iseq.read(self.size) while not self.ring.writing_ended(): for ispan in iseq_spans: idata = ispan.data_view(self.dtype) - self.output.append(idata.copy()) + self.output_data[-1].append(idata.copy()) class BaseDiskIOTest(object): class BaseDiskIOTestCase(unittest.TestCase): @@ -76,9 +78,10 @@ def tearDown(self): class TBNReader(object): - def __init__(self, sock, ring): + def __init__(self, sock, ring, nsrc=32): self.sock = sock self.ring = ring + self.nsrc = nsrc def callback(self, seq0, time_tag, decim, chan0, nsrc, hdr_ptr, hdr_size_ptr): #print "++++++++++++++++ seq0 =", seq0 #print " time_tag =", time_tag @@ -107,7 +110,7 @@ def callback(self, seq0, time_tag, decim, chan0, nsrc, hdr_ptr, hdr_size_ptr): def main(self): seq_callback = PacketCaptureCallback() seq_callback.set_tbn(self.callback) - with DiskReader("tbn", self.sock, self.ring, 32, 0, 49, 196, + with DiskReader("tbn", self.sock, self.ring, self.nsrc, 0, 16, 128, sequence_callback=seq_callback) as capture: while True: status = capture.recv() @@ -117,11 +120,11 @@ def main(self): class TBNDiskIOTest(BaseDiskIOTest.BaseDiskIOTestCase): """Test simple IO for the disk-based TBN packet reader and writing""" - def _get_tbn_data(self): + def _get_data(self): # Setup the packet HeaderInfo - desc = HeaderInfo() - desc.set_tuning(int(round(74e6 / 196e6 * 2**32))) - desc.set_gain(20) + hdr_desc = HeaderInfo() + hdr_desc.set_tuning(int(round(74e6 / 196e6 * 2**32))) + hdr_desc.set_gain(20) # Reorder as packets, stands, time data = self.s0.reshape(512,32,-1) @@ -131,17 +134,17 @@ def _get_tbn_data(self): quantize(data, data_q, scale=10) # Update the number of data sources and return - desc.set_nsrc(data_q.shape[1]) - return desc, data_q + hdr_desc.set_nsrc(data_q.shape[1]) + return 1, hdr_desc, data_q def test_write(self): fh = self._open('test_tbn.dat', 'wb') oop = DiskWriter('tbn', fh) # Get TBN data - desc, data = self._get_tbn_data() + timetag0, hdr_desc, data = self._get_data() # Go! - oop.send(desc, 0, 1960*512, 0, 1, data) + oop.send(hdr_desc, timetag0, 1960*512, 0, 1, data) fh.close() self.assertEqual(os.path.getsize('test_tbn.dat'), \ @@ -152,19 +155,20 @@ def test_read(self): oop = DiskWriter('tbn', fh) # Get TBN data - desc, data = self._get_tbn_data() + timetag0, hdr_desc, data = self._get_data() # Go! - oop.send(desc, 0, 1960*512, 0, 1, data) + oop.send(hdr_desc, timetag0, 1960*512, 0, 1, data) fh.close() # Read fh = self._open('test_tbn.dat', 'rb') ring = Ring(name="capture_tbn") - iop = TBNReader(fh, ring) + iop = TBNReader(fh, ring, nsrc=32) ## Data accumulation + times = [] final = [] - aop = AccumulateOp(ring, final, 49*32*512*2) + aop = AccumulateOp(ring, times, final, 32*512*2) # Start the reader and accumlator threads reader = threading.Thread(target=iop.main) @@ -177,15 +181,16 @@ def test_read(self): accumu.join() # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,512,32,2) - final = final.transpose(0,2,1,3).copy() - final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(1, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + for seq_timetag,seq_data in zip(times, final): + ## Loop over sequences + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,512,32,2) + seq_data = seq_data.transpose(0,2,1,3).copy() + ## Drop the last axis (complexity) since we are going to ci8 + seq_data = bf.ndarray(shape=seq_data.shape[:-1], dtype='ci8', buffer=seq_data.ctypes.data) + + ## Ignore the first set of packets + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) # Clean up del oop @@ -227,7 +232,7 @@ def callback(self, seq0, time_tag, decim, chan0, chan1, nsrc, hdr_ptr, hdr_size_ def main(self): seq_callback = PacketCaptureCallback() seq_callback.set_drx(self.callback) - with DiskReader("drx", self.sock, self.ring, self.nsrc, 0, 49, 49, + with DiskReader("drx", self.sock, self.ring, self.nsrc, 0, 16, 128, sequence_callback=seq_callback) as capture: while True: status = capture.recv() @@ -237,11 +242,11 @@ def main(self): class DRXDiskIOTest(BaseDiskIOTest.BaseDiskIOTestCase): """Test simple IO for the disk-based DRX packet reader and writing""" - def _get_drx_data(self): + def _get_data(self): # Setup the packet HeaderInfo - desc = HeaderInfo() - desc.set_decimation(10) - desc.set_tuning(int(round(74e6 / 196e6 * 2**32))) + hdr_desc = HeaderInfo() + hdr_desc.set_decimation(10) + hdr_desc.set_tuning(int(round(74e6 / 196e6 * 2**32))) # Reorder as packets, beams, time data = self.s0.reshape(4096,4,-1) @@ -251,17 +256,17 @@ def _get_drx_data(self): quantize(data, data_q) # Update the number of data sources and return - desc.set_nsrc(data_q.shape[1]) - return desc, data_q + hdr_desc.set_nsrc(data_q.shape[1]) + return 1, hdr_desc, data_q def test_write(self): fh = self._open('test_drx.dat', 'wb') oop = DiskWriter('drx', fh) # Get DRX data - desc, data = self._get_drx_data() + timetag0, hdr_desc, data = self._get_data() # Go! - oop.send(desc, 0, 10*4096, (1<<3), 128, data) + oop.send(hdr_desc, timetag0, 10*4096, (1<<3), 128, data) fh.close() self.assertEqual(os.path.getsize('test_drx.dat'), \ @@ -272,19 +277,20 @@ def test_read(self): oop = DiskWriter('drx', fh) # Get DRX data and write it out - desc, data = self._get_drx_data() + timetag0, hdr_desc, data = self._get_data() for p in range(data.shape[0]): - oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],...].reshape(1,2,4096)) - oop.send(desc, p*10*4096, 10*4096, (2<<3), 128, data[p,[2,3],...].reshape(1,2,4096)) + oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],...].reshape(1,2,4096)) + oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (2<<3), 128, data[p,[2,3],...].reshape(1,2,4096)) fh.close() # Read fh = self._open('test_drx.dat', 'rb') ring = Ring(name="capture_drx") - iop = DRXReader(fh, ring) + iop = DRXReader(fh, ring, nsrc=4) ## Data accumulation + times = [] final = [] - aop = AccumulateOp(ring, final, 49*4*4096*1) + aop = AccumulateOp(ring, times, final, 4*4096*1) # Start the reader reader = threading.Thread(target=iop.main) @@ -297,15 +303,14 @@ def test_read(self): accumu.join() # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,4096,4) - final = final.transpose(0,2,1).copy() - final = bf.ndarray(shape=(final.shape[0],4,4096), dtype='ci4', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(1, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + for seq_timetag,seq_data in zip(times, final): + ## Reorder to match what we sent out + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,4096,4) + seq_data = seq_data.transpose(0,2,1).copy() + seq_data = bf.ndarray(shape=seq_data.shape, dtype='ci4', buffer=seq_data.ctypes.data) + + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) # Clean up del oop @@ -315,24 +320,26 @@ def test_write_single(self): oop = DiskWriter('drx', fh) # Get DRX data - desc, data = self._get_drx_data() - desc.set_nsrc(2) + timetag0, hdr_desc, data = self._get_data() + hdr_desc.set_nsrc(2) + data = data[:,[0,1],:].copy() # Go! - oop.send(desc, 0, 10*4096, (1<<3), 128, data[:,[0,1],:].copy()) + oop.send(hdr_desc, timetag0, 10*4096, (1<<3), 128, data) fh.close() self.assertEqual(os.path.getsize('test_drx_single.dat'), \ - 4128*data.shape[0]*data.shape[1]/2) + 4128*data.shape[0]*data.shape[1]) def test_read_single(self): # Write fh = self._open('test_drx_single.dat', 'wb') oop = DiskWriter('drx', fh) # Get DRX data and write it out - desc, data = self._get_drx_data() - desc.set_nsrc(2) - oop.send(desc, 0, 10*4096, (1<<3), 128, data[:,[0,1],:].copy()) + timetag0, hdr_desc, data = self._get_data() + hdr_desc.set_nsrc(2) + data = data[:,[0,1],:].copy() + oop.send(hdr_desc, timetag0, 10*4096, (1<<3), 128, data) fh.close() # Read @@ -340,8 +347,9 @@ def test_read_single(self): ring = Ring(name="capture_drx_single") iop = DRXReader(fh, ring, nsrc=2) ## Data accumulation + times = [] final = [] - aop = AccumulateOp(ring, final, 49*2*4096*1) + aop = AccumulateOp(ring, times, final, 2*4096*1) # Start the reader reader = threading.Thread(target=iop.main) @@ -354,16 +362,14 @@ def test_read_single(self): accumu.join() # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,4096,2) - final = final.transpose(0,2,1).copy() - final = bf.ndarray(shape=(final.shape[0],2,4096), dtype='ci4', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - data = data[:,[0,1],:] - for i in range(1, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + for seq_timetag,seq_data in zip(times, final): + ## Reorder to match what we sent out + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,4096,2) + seq_data = seq_data.transpose(0,2,1).copy() + seq_data = bf.ndarray(shape=seq_data.shape, dtype='ci4', buffer=seq_data.ctypes.data) + + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) # Clean up del oop @@ -405,7 +411,7 @@ def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ def main(self): seq_callback = PacketCaptureCallback() seq_callback.set_pbeam(self.callback) - with DiskReader("pbeam_%i" % self.nchan, self.sock, self.ring, self.nsrc, 1, 240, 240, + with DiskReader("pbeam_%i" % self.nchan, self.sock, self.ring, self.nsrc, 1, 16, 128, sequence_callback=seq_callback) as capture: while True: status = capture.recv() @@ -415,31 +421,31 @@ def main(self): class PBeamDiskIOTest(BaseDiskIOTest.BaseDiskIOTestCase): """Test simple IO for the disk-based PBeam packet reader and writing""" - def _get_pbeam_data(self): + def _get_data(self): # Setup the packet HeaderInfo - desc = HeaderInfo() - desc.set_tuning(2) - desc.set_chan0(1034) - desc.set_nchan(128) - desc.set_decimation(24) + hdr_desc = HeaderInfo() + hdr_desc.set_tuning(2) + hdr_desc.set_chan0(1034) + hdr_desc.set_nchan(128) + hdr_desc.set_decimation(24) # Reorder as packets, beam, chan/pol data = self.s0.reshape(128*4,1,-1) data = data.transpose(2,1,0) - data = data.real.copy() + data = data.real[:1024,...].copy() # Update the number of data sources and return - desc.set_nsrc(data.shape[1]) - return desc, data + hdr_desc.set_nsrc(data.shape[1]) + return 1, hdr_desc, data def test_write(self): fh = self._open('test_pbeam.dat', 'wb') oop = DiskWriter('pbeam1_128', fh) # Get PBeam data - desc, data = self._get_pbeam_data() + timetag0, hdr_desc, data = self._get_data() # Go! - oop.send(desc, 0, 24, 0, 2, data) + oop.send(hdr_desc, timetag0, 24, 0, 1, data) fh.close() self.assertEqual(os.path.getsize('test_pbeam.dat'), \ @@ -450,10 +456,10 @@ def test_read(self): oop = DiskWriter('pbeam1_128', fh) # Get PBeam data - desc, data = self._get_pbeam_data() + timetag0, hdr_desc, data = self._get_data() # Go! - oop.send(desc, 1, 24, 0, 1, data) + oop.send(hdr_desc, timetag0, 24, 0, 1, data) fh.close() # Read @@ -461,8 +467,9 @@ def test_read(self): ring = Ring(name="capture_pbeam") iop = PBeamReader(fh, ring, 128, nsrc=1) ## Data accumulation + times = [] final = [] - aop = AccumulateOp(ring, final, 240*128*4, dtype=np.float32) + aop = AccumulateOp(ring, times, final, 1*128*4, dtype=np.float32) # Start the reader and accumlator threads reader = threading.Thread(target=iop.main) @@ -470,19 +477,18 @@ def test_read(self): reader.start() accumu.start() - # Get TBN data + # Get PBeam data reader.join() accumu.join() # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.float32) - final = final.reshape(-1,128*4,1) - final = final.transpose(0,2,1).copy() - ## Reduce to match the capture block size - data = data[:(final.shape[0]//240-1)*240,...] - for i in range(1, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + for seq_timetag,seq_data in zip(times, final): + ## Reorder to match what we sent out + seq_data = np.array(seq_data, dtype=np.float32) + seq_data = seq_data.reshape(-1,128*4,1) + seq_data = seq_data.transpose(0,2,1).copy() + + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) # Clean up del oop diff --git a/test/test_udp_io.py b/test/test_udp_io.py index 899886b65..a42bc0cef 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -40,19 +40,23 @@ import numpy as np class AccumulateOp(object): - def __init__(self, ring, output, size, dtype=np.uint8): + def __init__(self, ring, output_timetags, output_data, size, dtype=np.uint8): self.ring = ring - self.output = output + self.output_timetags = output_timetags + self.output_data = output_data self.size = size*(dtype().nbytes) self.dtype = dtype def main(self): for iseq in self.ring.read(guarantee=True): + self.output_timetags.append(iseq.time_tag) + self.output_data.append([]) + iseq_spans = iseq.read(self.size) while not self.ring.writing_ended(): for ispan in iseq_spans: idata = ispan.data_view(self.dtype) - self.output.append(idata.copy()) + self.output_data[-1].append(idata.copy()) class BaseUDPIOTest(object): class BaseUDPIOTestCase(unittest.TestCase): @@ -66,9 +70,10 @@ def setUp(self): class TBNReader(object): - def __init__(self, sock, ring): + def __init__(self, sock, ring, nsrc=32): self.sock = sock self.ring = ring + self.nsrc = nsrc def callback(self, seq0, time_tag, decim, chan0, nsrc, hdr_ptr, hdr_size_ptr): #print "++++++++++++++++ seq0 =", seq0 #print " time_tag =", time_tag @@ -97,7 +102,7 @@ def callback(self, seq0, time_tag, decim, chan0, nsrc, hdr_ptr, hdr_size_ptr): def main(self): seq_callback = PacketCaptureCallback() seq_callback.set_tbn(self.callback) - with UDPCapture("tbn", self.sock, self.ring, 32, 0, 9000, 49, 196, + with UDPCapture("tbn", self.sock, self.ring, self.nsrc, 0, 9000, 16, 128, sequence_callback=seq_callback) as capture: while True: status = capture.recv() @@ -107,11 +112,11 @@ def main(self): class TBNUDPIOTest(BaseUDPIOTest.BaseUDPIOTestCase): """Test simple IO for the UDP-based TBN packet reader and writing""" - def _get_tbn_data(self): + def _get_data(self): # Setup the packet HeaderInfo - desc = HeaderInfo() - desc.set_tuning(int(round(74e6 / 196e6 * 2**32))) - desc.set_gain(20) + hdr_desc = HeaderInfo() + hdr_desc.set_tuning(int(round(74e6 / 196e6 * 2**32))) + hdr_desc.set_gain(20) # Reorder as packets, stands, time data = self.s0.reshape(512,32,-1) @@ -121,8 +126,8 @@ def _get_tbn_data(self): quantize(data, data_q, scale=10) # Update the number of data sources and return - desc.set_nsrc(data_q.shape[1]) - return desc, data_q + hdr_desc.set_nsrc(data_q.shape[1]) + return 1, hdr_desc, data_q def test_write(self): addr = Address('127.0.0.1', 7147) sock = UDPSocket() @@ -130,10 +135,10 @@ def test_write(self): op = UDPTransmit('tbn', sock) # Get TBN data - desc, data = self._get_tbn_data() + timetag0, hdr_desc, data = self._get_data() # Go! - op.send(desc, 0, 1960*512, 0, 1, data) + op.send(hdr_desc, timetag0, 1960*512, 0, 1, data) sock.close() def test_read(self): # Setup the ring @@ -148,11 +153,12 @@ def test_read(self): ## Input via UDPCapture isock = UDPSocket() isock.bind(addr) - isock.timeout = 1.0 - iop = TBNReader(isock, ring) + isock.timeout = 0.1 + iop = TBNReader(isock, ring, nsrc=32) ## Data accumulation + times = [] final = [] - aop = AccumulateOp(ring, final, 49*32*512*2) + aop = AccumulateOp(ring, times, final, 32*512*2) # Start the reader and accumlator threads reader = threading.Thread(target=iop.main) @@ -161,25 +167,25 @@ def test_read(self): accumu.start() # Get TBN data and send it off - desc, data = self._get_tbn_data() + timetag0, hdr_desc, data = self._get_data() for p in range(data.shape[0]): - oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) + oop.send(hdr_desc, timetag0+p*1960*512, 1960*512, 0, 1, data[[p],...]) time.sleep(0.001) reader.join() accumu.join() # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,512,32,2) - final = final.transpose(0,2,1,3).copy() - final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(2, data.shape[0]): - for j in range(data.shape[1]): - np.testing.assert_equal(final[i,j,...], data[i,j,...]) - + for seq_timetag,seq_data in zip(times, final): + ## Loop over sequences + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,512,32,2) + seq_data = seq_data.transpose(0,2,1,3).copy() + ## Drop the last axis (complexity) since we are going to ci8 + seq_data = bf.ndarray(shape=seq_data.shape[:-1], dtype='ci8', buffer=seq_data.ctypes.data) + + ## Ignore the first set of packets + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) + # Clean up del oop isock.close() @@ -191,10 +197,10 @@ def test_write_multicast(self): op = UDPTransmit('tbn', sock) # Get TBN data - desc, data = self._get_tbn_data() + timetag0, hdr_desc, data = self._get_data() # Go! - op.send(desc, 0, 1960*512, 0, 1, data) + op.send(hdr_desc, timetag0, 1960*512, 0, 1, data) sock.close() def test_read_multicast(self): # Setup the ring @@ -209,11 +215,12 @@ def test_read_multicast(self): ## Input via UDPCapture isock = UDPSocket() isock.bind(addr) - isock.timeout = 1.0 - iop = TBNReader(isock, ring) + isock.timeout = 0.1 + iop = TBNReader(isock, ring, nsrc=32) # Data accumulation + times = [] final = [] - aop = AccumulateOp(ring, final, 49*32*512*2) + aop = AccumulateOp(ring, times, final, 32*512*2) # Start the reader and accumlator threads reader = threading.Thread(target=iop.main) @@ -222,25 +229,25 @@ def test_read_multicast(self): accumu.start() # Get TBN data and send it off - desc, data = self._get_tbn_data() + timetag0, hdr_desc, data = self._get_data() for p in range(data.shape[0]): - oop.send(desc, p*1960*512, 1960*512, 0, 1, data[p,...].reshape(1,32,512)) + oop.send(hdr_desc, timetag0+p*1960*512, 1960*512, 0, 1, data[[p],...]) time.sleep(0.001) reader.join() accumu.join() # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,512,32,2) - final = final.transpose(0,2,1,3).copy() - final = bf.ndarray(shape=(final.shape[0],32,512), dtype='ci8', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(2, data.shape[0]): - for j in range(data.shape[1]): - np.testing.assert_equal(final[i,j,...], data[i,j,...]) - + for seq_timetag,seq_data in zip(times, final): + ## Loop over sequences + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,512,32,2) + seq_data = seq_data.transpose(0,2,1,3).copy() + ## Drop the last axis (complexity) since we are going to ci8 + seq_data = bf.ndarray(shape=seq_data.shape[:-1], dtype='ci8', buffer=seq_data.ctypes.data) + + ## Ignore the first set of packets + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) + # Clean up del oop isock.close() @@ -282,7 +289,7 @@ def callback(self, seq0, time_tag, decim, chan0, chan1, nsrc, hdr_ptr, hdr_size_ def main(self): seq_callback = PacketCaptureCallback() seq_callback.set_drx(self.callback) - with UDPCapture("drx", self.sock, self.ring, self.nsrc, 0, 9000, 49, 49, + with UDPCapture("drx", self.sock, self.ring, self.nsrc, 0, 9000, 16, 128, sequence_callback=seq_callback) as capture: while True: status = capture.recv() @@ -292,11 +299,11 @@ def main(self): class DRXUDPIOTest(BaseUDPIOTest.BaseUDPIOTestCase): """Test simple IO for the UDP-based DRX packet reader and writing""" - def _get_drx_data(self): + def _get_data(self): # Setup the packet HeaderInfo - desc = HeaderInfo() - desc.set_decimation(10) - desc.set_tuning(int(round(74e6 / 196e6 * 2**32))) + hdr_desc = HeaderInfo() + hdr_desc.set_decimation(10) + hdr_desc.set_tuning(int(round(74e6 / 196e6 * 2**32))) # Reorder as packets, beams, time data = self.s0.reshape(4096,4,-1) @@ -306,8 +313,8 @@ def _get_drx_data(self): quantize(data, data_q) # Update the number of data sources and return - desc.set_nsrc(data_q.shape[1]) - return desc, data_q + hdr_desc.set_nsrc(data_q.shape[1]) + return 1, hdr_desc, data_q def test_write(self): addr = Address('127.0.0.1', 7147) sock = UDPSocket() @@ -315,10 +322,10 @@ def test_write(self): op = UDPTransmit('drx', sock) # Get TBN data - desc, data = self._get_drx_data() + timetag0, hdr_desc, data = self._get_data() # Go! - op.send(desc, 0, 10*4096, (1<<3), 128, data) + op.send(hdr_desc, timetag0, 10*4096, (1<<3), 128, data) sock.close() def test_read(self): # Setup the ring @@ -333,11 +340,12 @@ def test_read(self): ## Input via UDPCapture isock = UDPSocket() isock.bind(addr) - isock.timeout = 1.0 - iop = DRXReader(isock, ring) + isock.timeout = 0.1 + iop = DRXReader(isock, ring, nsrc=4) ## Data accumulation + times = [] final = [] - aop = AccumulateOp(ring, final, 49*4*4096*1) + aop = AccumulateOp(ring, times, final, 4*4096*1) # Start the reader reader = threading.Thread(target=iop.main) @@ -346,26 +354,24 @@ def test_read(self): accumu.start() # Get DRX data and send it off - desc, data = self._get_drx_data() + timetag0, hdr_desc, data = self._get_data() for p in range(data.shape[0]): - oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],...].reshape(1,2,4096)) - oop.send(desc, p*10*4096, 10*4096, (2<<3), 128, data[p,[2,3],...].reshape(1,2,4096)) + oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],...].reshape(1,2,4096)) + oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (2<<3), 128, data[p,[2,3],...].reshape(1,2,4096)) time.sleep(0.001) reader.join() accumu.join() # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,4096,4) - final = final.transpose(0,2,1).copy() - final = bf.ndarray(shape=(final.shape[0],4,4096), dtype='ci4', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(2, data.shape[0]): - for j in range(data.shape[1]): - np.testing.assert_equal(final[i,j,...], data[i,j,...]) - + for seq_timetag,seq_data in zip(times, final): + ## Reorder to match what we sent out + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,4096,4) + seq_data = seq_data.transpose(0,2,1).copy() + seq_data = bf.ndarray(shape=seq_data.shape, dtype='ci4', buffer=seq_data.ctypes.data) + + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) + # Clean up del oop isock.close() @@ -377,11 +383,12 @@ def test_write_single(self): op = UDPTransmit('drx', sock) # Get DRX data - desc, data = self._get_drx_data() - desc.set_nsrc(2) + timetag0, hdr_desc, data = self._get_data() + hdr_desc.set_nsrc(2) + data = data[:,[0,1],:].copy() # Go! - op.send(desc, 0, 10*4096, (1<<3), 128, data[:,[0,1],:].copy()) + op.send(hdr_desc, timetag0, 10*4096, (1<<3), 128, data) sock.close() def test_read_single(self): # Setup the ring @@ -396,11 +403,12 @@ def test_read_single(self): ## Input via UDPCapture isock = UDPSocket() isock.bind(addr) - isock.timeout = 1.0 + isock.timeout = 0.1 iop = DRXReader(isock, ring, nsrc=2) ## Data accumulation + times = [] final = [] - aop = AccumulateOp(ring, final, 49*2*4096*1) + aop = AccumulateOp(ring, times, final, 2*4096*1) # Start the reader reader = threading.Thread(target=iop.main) @@ -409,26 +417,24 @@ def test_read_single(self): accumu.start() # Get DRX data and send it off - desc, data = self._get_drx_data() - desc.set_nsrc(2) + timetag0, hdr_desc, data = self._get_data() + data = data[:,[0,1],:].copy() for p in range(data.shape[0]): - oop.send(desc, p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],:].reshape(1,2,4096)) + oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (1<<3), 128, data[[p],...]) time.sleep(0.001) reader.join() accumu.join() # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.uint8) - final = final.reshape(-1,4096,2) - final = final.transpose(0,2,1).copy() - final = bf.ndarray(shape=(final.shape[0],2,4096), dtype='ci4', buffer=final.ctypes.data) - ## Reduce to match the capture block size - data = data[:final.shape[0],...] - for i in range(1, data.shape[0]): - for j in range(2): - np.testing.assert_equal(final[i,j,...], data[i,j,...]) - + for seq_timetag,seq_data in zip(times, final): + ## Reorder to match what we sent out + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,4096,2) + seq_data = seq_data.transpose(0,2,1).copy() + seq_data = bf.ndarray(shape=seq_data.shape, dtype='ci4', buffer=seq_data.ctypes.data) + + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) + # Clean up del oop isock.close() @@ -469,7 +475,7 @@ def callback(self, seq0, time_tag, navg, chan0, nchan, nbeam, hdr_ptr, hdr_size_ def main(self): seq_callback = PacketCaptureCallback() seq_callback.set_pbeam(self.callback) - with UDPCapture("pbeam", self.sock, self.ring, self.nsrc, 1, 9000, 240, 240, + with UDPCapture("pbeam", self.sock, self.ring, self.nsrc, 1, 9000, 16, 128, sequence_callback=seq_callback) as capture: while True: status = capture.recv() @@ -479,22 +485,22 @@ def main(self): class PBeamUDPIOTest(BaseUDPIOTest.BaseUDPIOTestCase): """Test simple IO for the UDP-based PBeam packet reader and writing""" - def _get_pbeam_data(self): + def _get_data(self): # Setup the packet HeaderInfo - desc = HeaderInfo() - desc.set_tuning(1) - desc.set_chan0(345) - desc.set_nchan(128) - desc.set_decimation(24) + hdr_desc = HeaderInfo() + hdr_desc.set_tuning(1) + hdr_desc.set_chan0(345) + hdr_desc.set_nchan(128) + hdr_desc.set_decimation(24) # Reorder as packets, beam, chan/pol data = self.s0.reshape(128*4,1,-1) data = data.transpose(2,1,0) - data = data.real.copy() + data = data.real[:1024,...].copy() # Update the number of data sources and return - desc.set_nsrc(data.shape[1]) - return desc, data + hdr_desc.set_nsrc(data.shape[1]) + return 1, hdr_desc, data def test_write(self): addr = Address('127.0.0.1', 7147) sock = UDPSocket() @@ -502,10 +508,10 @@ def test_write(self): op = UDPTransmit('pbeam1_128', sock) # Get PBeam data - desc, data = self._get_pbeam_data() + timetag0, hdr_desc, data = self._get_data() # Go! - op.send(desc, 0, 24, 0, 1, data) + op.send(hdr_desc, timetag0, 24, 0, 1, data) sock.close() def test_read(self): # Setup the ring @@ -520,11 +526,12 @@ def test_read(self): ## Input via UDPCapture isock = UDPSocket() isock.bind(addr) - isock.timeout = 1.0 + isock.timeout = 0.1 iop = PBeamReader(isock, ring, nsrc=1) ## Data accumulation + times = [] final = [] - aop = AccumulateOp(ring, final, 240*128*4, dtype=np.float32) + aop = AccumulateOp(ring, times, final, 1*128*4, dtype=np.float32) # Start the reader and accumlator threads reader = threading.Thread(target=iop.main) @@ -533,22 +540,21 @@ def test_read(self): accumu.start() # Get PBeam data and send it off - desc, data = self._get_pbeam_data() + timetag0, hdr_desc, data = self._get_data() for p in range(data.shape[0]): - oop.send(desc, p*24, 24, 0, 1, data[p,...].reshape(1,1,128*4)) + oop.send(hdr_desc, timetag0+p*24, 24, 0, 1, data[[p],...]) time.sleep(0.001) reader.join() accumu.join() # Compare - ## Reorder to match what we sent out - final = np.array(final, dtype=np.float32) - final = final.reshape(-1,128*4,1) - final = final.transpose(0,2,1).copy() - ## Reduce to match the capture block size - data = data[:(final.shape[0]//240-1)*240,...] - for i in range(2, data.shape[0]): - np.testing.assert_equal(final[i,...], data[i,...]) + for seq_timetag,seq_data in zip(times, final): + ## Reorder to match what we sent out + seq_data = np.array(seq_data, dtype=np.float32) + seq_data = seq_data.reshape(-1,128*4,1) + seq_data = seq_data.transpose(0,2,1).copy() + + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) # Clean up del oop From 03d507319c0e5fda36853da245b1c10f6fb0a93a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sun, 17 Mar 2024 08:34:58 -0600 Subject: [PATCH 1042/1155] More with closing(). --- test/test_udp_io.py | 509 +++++++++++++++++++++----------------------- 1 file changed, 247 insertions(+), 262 deletions(-) diff --git a/test/test_udp_io.py b/test/test_udp_io.py index e025a19ee..ee2b736a2 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -132,16 +132,15 @@ def _get_data(self): return 1, hdr_desc, data_q def test_write(self): addr = Address('127.0.0.1', 7147) - sock = UDPSocket() - sock.connect(addr) - op = UDPTransmit('tbn', sock) - - # Get TBN data - timetag0, hdr_desc, data = self._get_data() - - # Go! - op.send(hdr_desc, timetag0, 1960*512, 0, 1, data) - sock.close() + with closing(UDPSocket()) as sock: + sock.connect(addr) + op = UDPTransmit('tbn', sock) + + # Get TBN data + timetag0, hdr_desc, data = self._get_data() + + # Go! + op.send(hdr_desc, timetag0, 1960*512, 0, 1, data) def test_read(self): # Setup the ring ring = Ring(name="capture_tbn") @@ -149,61 +148,58 @@ def test_read(self): # Setup the blocks addr = Address('127.0.0.1', 7147) ## Output via UDPTransmit - osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('tbn', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 0.1 - iop = TBNReader(isock, ring, nsrc=32) - ## Data accumulation - times = [] - final = [] - aop = AccumulateOp(ring, times, final, 32*512*2) - - # Start the reader and accumlator threads - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get TBN data and send it off - timetag0, hdr_desc, data = self._get_data() - for p in range(data.shape[0]): - oop.send(hdr_desc, timetag0+p*1960*512, 1960*512, 0, 1, data[[p],...]) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - for seq_timetag,seq_data in zip(times, final): - ## Loop over sequences - seq_data = np.array(seq_data, dtype=np.uint8) - seq_data = seq_data.reshape(-1,512,32,2) - seq_data = seq_data.transpose(0,2,1,3).copy() - ## Drop the last axis (complexity) since we are going to ci8 - seq_data = bf.ndarray(shape=seq_data.shape[:-1], dtype='ci8', buffer=seq_data.ctypes.data) - - ## Ignore the first set of packets - np.testing.assert_equal(seq_data[1:,...], data[1:,...]) - - # Clean up - del oop - isock.close() - osock.close() + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('tbn', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 0.1 + iop = TBNReader(isock, ring, nsrc=32) + ## Data accumulation + times = [] + final = [] + aop = AccumulateOp(ring, times, final, 32*512*2) + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get TBN data and send it off + timetag0, hdr_desc, data = self._get_data() + for p in range(data.shape[0]): + oop.send(hdr_desc, timetag0+p*1960*512, 1960*512, 0, 1, data[[p],...]) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + for seq_timetag,seq_data in zip(times, final): + ## Loop over sequences + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,512,32,2) + seq_data = seq_data.transpose(0,2,1,3).copy() + ## Drop the last axis (complexity) since we are going to ci8 + seq_data = bf.ndarray(shape=seq_data.shape[:-1], dtype='ci8', buffer=seq_data.ctypes.data) + + ## Ignore the first set of packets + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) + + # Clean up + del oop def test_write_multicast(self): addr = Address('224.0.0.251', 7147) - sock = UDPSocket() - sock.connect(addr) - op = UDPTransmit('tbn', sock) - - # Get TBN data - timetag0, hdr_desc, data = self._get_data() - - # Go! - op.send(hdr_desc, timetag0, 1960*512, 0, 1, data) - sock.close() + with closing(UDPSocket()) as sock: + sock.connect(addr) + op = UDPTransmit('tbn', sock) + + # Get TBN data + timetag0, hdr_desc, data = self._get_data() + + # Go! + op.send(hdr_desc, timetag0, 1960*512, 0, 1, data) def test_read_multicast(self): # Setup the ring ring = Ring(name="capture_multi") @@ -211,49 +207,47 @@ def test_read_multicast(self): # Setup the blocks addr = Address('224.0.0.251', 7147) ## Output via UDPTransmit - osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('tbn', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 0.1 - iop = TBNReader(isock, ring, nsrc=32) - # Data accumulation - times = [] - final = [] - aop = AccumulateOp(ring, times, final, 32*512*2) - - # Start the reader and accumlator threads - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get TBN data and send it off - timetag0, hdr_desc, data = self._get_data() - for p in range(data.shape[0]): - oop.send(hdr_desc, timetag0+p*1960*512, 1960*512, 0, 1, data[[p],...]) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - for seq_timetag,seq_data in zip(times, final): - ## Loop over sequences - seq_data = np.array(seq_data, dtype=np.uint8) - seq_data = seq_data.reshape(-1,512,32,2) - seq_data = seq_data.transpose(0,2,1,3).copy() - ## Drop the last axis (complexity) since we are going to ci8 - seq_data = bf.ndarray(shape=seq_data.shape[:-1], dtype='ci8', buffer=seq_data.ctypes.data) - - ## Ignore the first set of packets - np.testing.assert_equal(seq_data[1:,...], data[1:,...]) - - # Clean up - del oop - isock.close() - osock.close() + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('tbn', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 0.1 + iop = TBNReader(isock, ring, nsrc=32) + # Data accumulation + times = [] + final = [] + aop = AccumulateOp(ring, times, final, 32*512*2) + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get TBN data and send it off + timetag0, hdr_desc, data = self._get_data() + for p in range(data.shape[0]): + oop.send(hdr_desc, timetag0+p*1960*512, 1960*512, 0, 1, data[[p],...]) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + for seq_timetag,seq_data in zip(times, final): + ## Loop over sequences + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,512,32,2) + seq_data = seq_data.transpose(0,2,1,3).copy() + ## Drop the last axis (complexity) since we are going to ci8 + seq_data = bf.ndarray(shape=seq_data.shape[:-1], dtype='ci8', buffer=seq_data.ctypes.data) + + ## Ignore the first set of packets + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) + + # Clean up + del oop class DRXReader(object): @@ -319,16 +313,15 @@ def _get_data(self): return 1, hdr_desc, data_q def test_write(self): addr = Address('127.0.0.1', 7147) - sock = UDPSocket() - sock.connect(addr) - op = UDPTransmit('drx', sock) - - # Get TBN data - timetag0, hdr_desc, data = self._get_data() - - # Go! - op.send(hdr_desc, timetag0, 10*4096, (1<<3), 128, data) - sock.close() + with closing(UDPSocket()) as sock: + sock.connect(addr) + op = UDPTransmit('drx', sock) + + # Get TBN data + timetag0, hdr_desc, data = self._get_data() + + # Go! + op.send(hdr_desc, timetag0, 10*4096, (1<<3), 128, data) def test_read(self): # Setup the ring ring = Ring(name="capture_drx") @@ -336,62 +329,59 @@ def test_read(self): # Setup the blocks addr = Address('127.0.0.1', 7147) ## Output via UDPTransmit - osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('drx', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 0.1 - iop = DRXReader(isock, ring, nsrc=4) - ## Data accumulation - times = [] - final = [] - aop = AccumulateOp(ring, times, final, 4*4096*1) - - # Start the reader - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get DRX data and send it off - timetag0, hdr_desc, data = self._get_data() - for p in range(data.shape[0]): - oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],...].reshape(1,2,4096)) - oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (2<<3), 128, data[p,[2,3],...].reshape(1,2,4096)) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - for seq_timetag,seq_data in zip(times, final): - ## Reorder to match what we sent out - seq_data = np.array(seq_data, dtype=np.uint8) - seq_data = seq_data.reshape(-1,4096,4) - seq_data = seq_data.transpose(0,2,1).copy() - seq_data = bf.ndarray(shape=seq_data.shape, dtype='ci4', buffer=seq_data.ctypes.data) - - np.testing.assert_equal(seq_data[1:,...], data[1:,...]) - - # Clean up - del oop - isock.close() - osock.close() + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('drx', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 0.1 + iop = DRXReader(isock, ring, nsrc=4) + ## Data accumulation + times = [] + final = [] + aop = AccumulateOp(ring, times, final, 4*4096*1) + + # Start the reader + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get DRX data and send it off + timetag0, hdr_desc, data = self._get_data() + for p in range(data.shape[0]): + oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (1<<3), 128, data[p,[0,1],...].reshape(1,2,4096)) + oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (2<<3), 128, data[p,[2,3],...].reshape(1,2,4096)) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + for seq_timetag,seq_data in zip(times, final): + ## Reorder to match what we sent out + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,4096,4) + seq_data = seq_data.transpose(0,2,1).copy() + seq_data = bf.ndarray(shape=seq_data.shape, dtype='ci4', buffer=seq_data.ctypes.data) + + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) + + # Clean up + del oop def test_write_single(self): addr = Address('127.0.0.1', 7147) - sock = UDPSocket() - sock.connect(addr) - op = UDPTransmit('drx', sock) - - # Get DRX data - timetag0, hdr_desc, data = self._get_data() - hdr_desc.set_nsrc(2) - data = data[:,[0,1],:].copy() - - # Go! - op.send(hdr_desc, timetag0, 10*4096, (1<<3), 128, data) - sock.close() + with closing(UDPSocket()) as sock: + sock.connect(addr) + op = UDPTransmit('drx', sock) + + # Get DRX data + timetag0, hdr_desc, data = self._get_data() + hdr_desc.set_nsrc(2) + data = data[:,[0,1],:].copy() + + # Go! + op.send(hdr_desc, timetag0, 10*4096, (1<<3), 128, data) def test_read_single(self): # Setup the ring ring = Ring(name="capture_drx_single") @@ -399,48 +389,46 @@ def test_read_single(self): # Setup the blocks addr = Address('127.0.0.1', 7147) ## Output via UDPTransmit - osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('drx', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 0.1 - iop = DRXReader(isock, ring, nsrc=2) - ## Data accumulation - times = [] - final = [] - aop = AccumulateOp(ring, times, final, 2*4096*1) - - # Start the reader - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get DRX data and send it off - timetag0, hdr_desc, data = self._get_data() - data = data[:,[0,1],:].copy() - for p in range(data.shape[0]): - oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (1<<3), 128, data[[p],...]) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - for seq_timetag,seq_data in zip(times, final): - ## Reorder to match what we sent out - seq_data = np.array(seq_data, dtype=np.uint8) - seq_data = seq_data.reshape(-1,4096,2) - seq_data = seq_data.transpose(0,2,1).copy() - seq_data = bf.ndarray(shape=seq_data.shape, dtype='ci4', buffer=seq_data.ctypes.data) - - np.testing.assert_equal(seq_data[1:,...], data[1:,...]) - - # Clean up - del oop - isock.close() - osock.close() + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('drx', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 0.1 + iop = DRXReader(isock, ring, nsrc=2) + ## Data accumulation + times = [] + final = [] + aop = AccumulateOp(ring, times, final, 2*4096*1) + + # Start the reader + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get DRX data and send it off + timetag0, hdr_desc, data = self._get_data() + data = data[:,[0,1],:].copy() + for p in range(data.shape[0]): + oop.send(hdr_desc, timetag0+p*10*4096, 10*4096, (1<<3), 128, data[[p],...]) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + for seq_timetag,seq_data in zip(times, final): + ## Reorder to match what we sent out + seq_data = np.array(seq_data, dtype=np.uint8) + seq_data = seq_data.reshape(-1,4096,2) + seq_data = seq_data.transpose(0,2,1).copy() + seq_data = bf.ndarray(shape=seq_data.shape, dtype='ci4', buffer=seq_data.ctypes.data) + + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) + + # Clean up + del oop class PBeamReader(object): @@ -505,16 +493,15 @@ def _get_data(self): return 1, hdr_desc, data def test_write(self): addr = Address('127.0.0.1', 7147) - sock = UDPSocket() - sock.connect(addr) - op = UDPTransmit('pbeam1_128', sock) - - # Get PBeam data - timetag0, hdr_desc, data = self._get_data() - - # Go! - op.send(hdr_desc, timetag0, 24, 0, 1, data) - sock.close() + with closing(UDPSocket()) as sock: + sock.connect(addr) + op = UDPTransmit('pbeam1_128', sock) + + # Get PBeam data + timetag0, hdr_desc, data = self._get_data() + + # Go! + op.send(hdr_desc, timetag0, 24, 0, 1, data) def test_read(self): # Setup the ring ring = Ring(name="capture_pbeam") @@ -522,46 +509,44 @@ def test_read(self): # Setup the blocks addr = Address('127.0.0.1', 7147) ## Output via UDPTransmit - osock = UDPSocket() - osock.connect(addr) - oop = UDPTransmit('pbeam1_128', osock) - ## Input via UDPCapture - isock = UDPSocket() - isock.bind(addr) - isock.timeout = 0.1 - iop = PBeamReader(isock, ring, nsrc=1) - ## Data accumulation - times = [] - final = [] - aop = AccumulateOp(ring, times, final, 1*128*4, dtype=np.float32) - - # Start the reader and accumlator threads - reader = threading.Thread(target=iop.main) - accumu = threading.Thread(target=aop.main) - reader.start() - accumu.start() - - # Get PBeam data and send it off - timetag0, hdr_desc, data = self._get_data() - for p in range(data.shape[0]): - oop.send(hdr_desc, timetag0+p*24, 24, 0, 1, data[[p],...]) - time.sleep(0.001) - reader.join() - accumu.join() - - # Compare - for seq_timetag,seq_data in zip(times, final): - ## Reorder to match what we sent out - seq_data = np.array(seq_data, dtype=np.float32) - seq_data = seq_data.reshape(-1,128*4,1) - seq_data = seq_data.transpose(0,2,1).copy() - - np.testing.assert_equal(seq_data[1:,...], data[1:,...]) - - # Clean up - del oop - isock.close() - osock.close() + with closing(UDPSocket()) as osock: + osock.connect(addr) + oop = UDPTransmit('pbeam1_128', osock) + ## Input via UDPCapture + with closing(UDPSocket()) as isock: + isock.bind(addr) + isock.timeout = 0.1 + iop = PBeamReader(isock, ring, nsrc=1) + ## Data accumulation + times = [] + final = [] + aop = AccumulateOp(ring, times, final, 1*128*4, dtype=np.float32) + + # Start the reader and accumlator threads + reader = threading.Thread(target=iop.main) + accumu = threading.Thread(target=aop.main) + reader.start() + accumu.start() + + # Get PBeam data and send it off + timetag0, hdr_desc, data = self._get_data() + for p in range(data.shape[0]): + oop.send(hdr_desc, timetag0+p*24, 24, 0, 1, data[[p],...]) + time.sleep(0.001) + reader.join() + accumu.join() + + # Compare + for seq_timetag,seq_data in zip(times, final): + ## Reorder to match what we sent out + seq_data = np.array(seq_data, dtype=np.float32) + seq_data = seq_data.reshape(-1,128*4,1) + seq_data = seq_data.transpose(0,2,1).copy() + + np.testing.assert_equal(seq_data[1:,...], data[1:,...]) + + # Clean up + del oop start_pipeline = datetime.datetime.now() From 53cd5048c9388550c50e6597d8ae4660b629b019 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sun, 17 Mar 2024 08:37:35 -0600 Subject: [PATCH 1043/1155] Formatting. --- src/formats/simple.hpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/formats/simple.hpp b/src/formats/simple.hpp index 0b7b4dc7f..98f4f244d 100644 --- a/src/formats/simple.hpp +++ b/src/formats/simple.hpp @@ -49,13 +49,13 @@ class SIMPLEDecoder : virtual public PacketDecoder { const simple_hdr_type* pkt_hdr = (simple_hdr_type*)pkt_ptr; const uint8_t* pkt_pld = pkt_ptr + sizeof(simple_hdr_type); int pld_size = pkt_size - sizeof(simple_hdr_type); - pkt->seq = be64toh(pkt_hdr->seq); - pkt->nsrc = 1; - pkt->src = 0; + pkt->seq = be64toh(pkt_hdr->seq); + pkt->nsrc = 1; + pkt->src = 0; pkt->payload_size = pld_size; pkt->payload_ptr = pkt_pld; - pkt->nchan = 1; - pkt->chan0 = 0; + pkt->nchan = 1; + pkt->chan0 = 0; return this->valid_packet(pkt); } }; @@ -88,10 +88,10 @@ class SIMPLEProcessor : virtual public PacketProcessor { otype* __restrict__ out = (otype* )&obufs[obuf_idx][obuf_offset]; int chan = 0; - int nelem = 256; + int nelem = 256; for( ; chan Date: Sun, 17 Mar 2024 08:56:38 -0600 Subject: [PATCH 1044/1155] Formatting. --- src/packet_capture.hpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index ce814249e..25ba75fc1 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -642,12 +642,12 @@ class BFpacketcapture_simple_impl : public BFpacketcapture_impl { } public: inline BFpacketcapture_simple_impl(PacketCaptureThread* capture, - BFring ring, - int nsrc, - int src0, - int buffer_ntime, - int slot_ntime, - BFpacketcapture_callback sequence_callback) + BFring ring, + int nsrc, + int src0, + int buffer_ntime, + int slot_ntime, + BFpacketcapture_callback sequence_callback) : BFpacketcapture_impl(capture, nullptr, nullptr, ring, nsrc, buffer_ntime, slot_ntime), _type_log((std::string(capture->get_name())+"/type").c_str()), _chan_log((std::string(capture->get_name())+"/chans").c_str()), @@ -685,9 +685,9 @@ class BFpacketcapture_chips_impl : public BFpacketcapture_impl { } void on_sequence_changed(const PacketDesc* pkt, BFoffset* seq0, BFoffset* time_tag, const void** hdr, size_t* hdr_size) { *seq0 = _seq;// + _nseq_per_buf*_bufs.size(); - _chan0 = pkt->chan0; - _nchan = pkt->nchan; - _payload_size = pkt->payload_size; + _chan0 = pkt->chan0; + _nchan = pkt->nchan; + _payload_size = pkt->payload_size; if( _sequence_callback ) { int status = (*_sequence_callback)(*seq0, From 96bc19a74e8d2762ccec38c166e420b83f93be3b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Sun, 17 Mar 2024 08:59:43 -0600 Subject: [PATCH 1045/1155] The SIMPLE tests seem sensitive to what timetag0 is. --- test/test_disk_io.py | 4 ++-- test/test_udp_io.py | 15 +++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/test/test_disk_io.py b/test/test_disk_io.py index 10c0c2c07..2c1ca6aed 100644 --- a/test/test_disk_io.py +++ b/test/test_disk_io.py @@ -531,7 +531,7 @@ def seq_callback(self, seq0, chan0, nchan, nsrc, def main(self): seq_callback = PacketCaptureCallback() seq_callback.set_simple(self.seq_callback) - with DiskReader("simple" , self.sock, self.ring, self.nsrc, 0, 256, 1024, + with DiskReader("simple" , self.sock, self.ring, self.nsrc, 0, 16, 128, sequence_callback=seq_callback) as capture: while True: status = capture.recv() @@ -551,7 +551,7 @@ def _get_simple_data(self): data_q = bf.ndarray(shape=data.shape, dtype='ci16') quantize(data, data_q, scale=10) - return 1, hdr_desc, data_q + return 128, hdr_desc, data_q def test_write_simple(self): fh = self._open('test_simple.dat','wb') diff --git a/test/test_udp_io.py b/test/test_udp_io.py index ee2b736a2..0e0897377 100644 --- a/test/test_udp_io.py +++ b/test/test_udp_io.py @@ -587,7 +587,7 @@ def seq_callback(self, seq0, chan0, nchan, nsrc, def main(self): seq_callback = PacketCaptureCallback() seq_callback.set_simple(self.seq_callback) - with UDPCapture("simple" , self.sock, self.ring, self.nsrc, 0, 9000,512, 512, + with UDPCapture("simple" , self.sock, self.ring, self.nsrc, 0, 9000, 16, 128, sequence_callback=seq_callback) as capture: while True: status = capture.recv() @@ -598,7 +598,7 @@ def main(self): class SimpleUDPIOTest(BaseUDPIOTest.BaseUDPIOTestCase): """Test simple IO for the UDP-based Simple packet reader and writing""" - def _get_simple_data(self): + def _get_data(self): hdr_desc = HeaderInfo() # Reorder as packets, stands, time @@ -608,20 +608,20 @@ def _get_simple_data(self): data_q = bf.ndarray(shape=data.shape, dtype='ci16') quantize(data, data_q, scale=10) - return 1, hdr_desc, data_q + return 128, hdr_desc, data_q - def test_write_simple(self): + def test_write(self): addr = Address('127.0.0.1', 7147) with closing(UDPSocket()) as sock: sock.connect(addr) # Get simple data op = UDPTransmit('simple', sock) - timetag0, hdr_desc, data = self._get_simple_data() + timetag0, hdr_desc, data = self._get_data() # Go! op.send(hdr_desc, timetag0, 1, 0, 1, data) - def test_read_simple(self): + def test_read(self): # Setup the ring ring = Ring(name="capture_simple") @@ -650,7 +650,7 @@ def test_read_simple(self): accumu.start() # Get simple data and send it off - timetag0, hdr_desc, data = self._get_simple_data() + timetag0, hdr_desc, data = self._get_data() for p in range(data.shape[0]): oop.send(hdr_desc, timetag0+p*1, 1, 0, 1, data[[p],...]) time.sleep(0.001) @@ -659,7 +659,6 @@ def test_read_simple(self): # Compare for seq_timetag,seq_data in zip(times, final): - print(seq_timetag) seq_data = np.array(seq_data, dtype=np.uint16) seq_data = seq_data.reshape(-1,2048,1,2) seq_data = seq_data.transpose(0,2,1,3).copy() From 02434e29d35272aa4170818b0137448f3d4c0f10 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Mar 2024 11:24:13 -0600 Subject: [PATCH 1046/1155] Better comments plus formatting fixes. --- python/bifrost/ndarray.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index b376affd3..47f31acd7 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2023, The Bifrost Authors. All rights reserved. +# Copyright (c) 2016-2024, The Bifrost Authors. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -353,11 +353,11 @@ def view(self, dtype=None, type_=None): v._update_BFarray() return v def astype(self, dtype): - dtype_bf = DataType(dtype) - dtype_np = dtype_bf.as_numpy_dtype() - if space_accessible(self.bf.space, ['system']): + dtype_bf = DataType(dtype) + if space_accessible(self.bf.space, ['system']): ## For arrays that can be accessed from the system space, use ## numpy.ndarray.copy() to do the heavy lifting + dtype_np = dtype_bf.as_numpy_dtype() if self.bf.space == 'cuda_managed': ## TODO: Decide where/when these need to be called device.stream_synchronize() @@ -369,18 +369,25 @@ def astype(self, dtype): else: a = super(ndarray, self).astype(dtype_np) a.bf.dtype = dtype_bf - else: + else: + ## For arrays that can be access from CUDA, use bifrost.map + ## to do the heavy lifting + ## TODO: Would it be better to use quantize/unpack instead of map? a = ndarray(shape=self.shape, dtype=dtype_bf, space=self.bf.space) if dtype_bf.is_complex: if self.bf.dtype.is_complex: + ## complex in -> complex out func_string = b'a.real = b.real; a.imag = b.imag' else: + ## real in -> complex out func_string = b'a.real = b; a.imag = 0' else: if self.bf.dtype.is_complex: + ## complex in -> real out (plus the standard "drop imag part" warning) np.ComplexWarning() func_string = b'a = b.real' else: + ## real in -> real out func_string = b'a = b' _check(_bf.bfMap(0, _array(None, dtype=ctypes.c_long), _array(None), 2, _array([a.as_BFarray(), self.as_BFarray()]), _array(['a', 'b']), From 04777547ff23f2eeb7b83ceaad40385018c985b2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Mar 2024 11:32:04 -0600 Subject: [PATCH 1047/1155] Indentation. --- python/bifrost/ndarray.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 47f31acd7..1b43d5ac3 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -392,7 +392,7 @@ def astype(self, dtype): _check(_bf.bfMap(0, _array(None, dtype=ctypes.c_long), _array(None), 2, _array([a.as_BFarray(), self.as_BFarray()]), _array(['a', 'b']), None, func_string, None, _array(None), _array(None))) - return a + return a def _system_accessible_copy(self): if space_accessible(self.bf.space, ['system']): return self From e32a32b1ed8b01c440c67f35a2a7fb35ac17b2b6 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Mar 2024 15:13:50 -0600 Subject: [PATCH 1048/1155] Nice. --- configure.ac | 9 --------- 1 file changed, 9 deletions(-) diff --git a/configure.ac b/configure.ac index 6344dc53c..2033cc92f 100644 --- a/configure.ac +++ b/configure.ac @@ -139,14 +139,6 @@ AS_IF([test x$enable_verbs != xno], [AC_SUBST([HAVE_VERBS], [1]) LIBS="$LIBS -libverbs"])]) -<<<<<<< HEAD -AC_ARG_WITH([verbs_npktbuf], - [AS_HELP_STRING([--with-verbs-npktbuf=N], - [default Infiniband verbs buffer size in packets (default=8192)])], - [], - [with_verbs_npktbuf=8192]) -AC_SUBST([VERBS_NPKTBUF], [$with_verbs_npktbuf]) -======= AC_ARG_WITH([rx-buffer-size], [AS_HELP_STRING([--with-rx-buffer-size=N], [default Infiniband verbs receive buffer size in packets (default=8192)])], @@ -188,7 +180,6 @@ AC_SUBST([VERBS_NPKTBUF], [$with_verbs_npktbuf]) [AC_SUBST([VERBS_SEND_PACING], [0]) AC_MSG_RESULT([no])]) ]) ->>>>>>> upstream/ibverb-support # # RDMA From f9ae42b48d0fe6a5c69b46cb3e3372ceb928d398 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 19 Mar 2024 15:50:13 -0600 Subject: [PATCH 1049/1155] Add back in GUPPI tests. --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1d5c494c7..9386f2708 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -110,6 +110,8 @@ jobs: coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fft.py coverage run --source=bifrost.ring,bifrost,bifrost.pipeline your_first_block.py python download_breakthrough_listen_data.py -y + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_guppi.py + coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_guppi_reader.py coverage run --source=bifrost.ring,bifrost,bifrost.pipeline test_fdmt.py ./testdata/pulsars/blc0_guppi_57407_61054_PSR_J1840%2B5640_0004.fil coverage xml - name: "Upload Coverage" From 587044a37652b0822a6cbe149c4944824c4d4fd1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 22 Mar 2024 09:39:32 -0600 Subject: [PATCH 1050/1155] Don't shrink writer buffers. --- src/packet_writer.cpp | 2 +- src/packet_writer.hpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/packet_writer.cpp b/src/packet_writer.cpp index 71fd1a3c0..6acf4fbce 100644 --- a/src/packet_writer.cpp +++ b/src/packet_writer.cpp @@ -59,7 +59,7 @@ BFstatus BFpacketwriter_impl::send(BFheaderinfo info, int data_size = (BF_DTYPE_NBIT(in->dtype)/8) * _nsamples; int npackets = in->shape[0]*in->shape[1]; - if( hdr_size != _last_size || npackets != _last_count ) { + if( hdr_size != _last_size || npackets > _last_count ) { if( _pkt_hdrs ) { ::munlock(_pkt_hdrs, _last_count*_last_size*sizeof(char)); free(_pkt_hdrs); diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index fe3f92c20..901db04c3 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -170,7 +170,7 @@ class UDPPacketSender : public PacketWriterMethod { int data_size, int npackets, int flags=0) { - if( npackets != _last_count ) { + if( npackets > _last_count ) { if( _mmsg ) { ::munlock(_mmsg, sizeof(struct mmsghdr)*_last_count); free(_mmsg); @@ -257,7 +257,7 @@ class UDPVerbsSender : public PacketWriterMethod { int data_size, int npackets, int flags=0) { - if( npackets != _last_count ) { + if( npackets > _last_count ) { if( _mmsg ) { ::munlock(_mmsg, sizeof(struct mmsghdr)*_last_count); free(_mmsg); From 8c356c5242aca8a3e816c54c98cf8687a3024f95 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 18 Apr 2024 10:37:35 -0400 Subject: [PATCH 1051/1155] Some tiny fixes for type annotations --- python/bifrost/blocks/quantize.py | 2 +- python/bifrost/sigproc.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index f82e825e1..aef80540c 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -46,7 +46,7 @@ def __init__(self, iring: Ring, dtype: Union[str,np.dtype], scale: float=1., self.scale = scale def define_valid_input_spaces(self) -> Tuple[str]: """Return set of valid spaces (or 'any') for each input""" - return ('any') + return ('any',) def on_sequence(self, iseq: ReadSequence) -> Dict[str,Any]: ihdr = iseq.header ohdr = deepcopy(ihdr) diff --git a/python/bifrost/sigproc.py b/python/bifrost/sigproc.py index 1df1c783e..a708abaff 100644 --- a/python/bifrost/sigproc.py +++ b/python/bifrost/sigproc.py @@ -259,7 +259,7 @@ def pack(data: np.ndarray, nbit: int) -> np.ndarray: outdata += data[index::8 // nbit] // (2**nbit)**index return outdata -def _write_data(data: np.ndarray, nbit: int, file_object: IO[bytes]) -> np.ndarray: +def _write_data(data: np.ndarray, nbit: int, file_object: IO[bytes]): """Writes given data to an open file, also packing if needed""" file_object.seek(0, 2) if nbit < 8: From 8c5d258c77636d4784bf8b639bedc481490975f3 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 18 Apr 2024 14:12:54 -0400 Subject: [PATCH 1052/1155] More changes to satisfy type checker --- python/bifrost/sigproc2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index a30357600..69c30f656 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -306,7 +306,7 @@ def open(self, filename: str) -> "SigprocFile": #self.frame_shape = (self.frame_shape[0], # self.frame_shape[1]//pack_factor) ##self.frame_shape[-1] //= pack_factor - self.dtype = None + raise IOError("Currently unsupported: nbits < 8") self.frame_size = self.frame_shape[0] * self.frame_shape[1] #self.frame_nbyte = self.frame_size*self.dtype().itemsize self.buf = np.empty(4096, np.uint8) @@ -362,7 +362,7 @@ def read(self, nframe_or_start: int, end: Optional[int]=None) -> np.ndarray: requested_nbyte = nframe * self.frame_nbyte * self.nbit // 8 if self.buf.nbytes != requested_nbyte: self.buf.resize(requested_nbyte) - nbyte = self.f.readinto(self.buf) + nbyte = self.f.readinto(self.buf.data) if nbyte * 8 % self.frame_nbit != 0: raise IOError("File read returned incomplete frame (truncated file?)") if nbyte < self.buf.nbytes: From dcbd02bf8d7915341548a9efd5aa98660bae9c31 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 18 Apr 2024 14:27:17 -0400 Subject: [PATCH 1053/1155] Better fix for dtype annotation in sigproc2. I guess that "broken" else branch was being used. Can claim then that dtype is optional and keep None there. --- python/bifrost/sigproc2.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/python/bifrost/sigproc2.py b/python/bifrost/sigproc2.py index 69c30f656..9bbf6c4e1 100644 --- a/python/bifrost/sigproc2.py +++ b/python/bifrost/sigproc2.py @@ -283,10 +283,11 @@ def open(self, filename: str) -> "SigprocFile": self.signed = bool(self.header['signed']) if self.nbit >= 8: if self.signed: - self.dtype = { 8: np.int8, - 16: np.int16, - 32: np.float32, - 64: np.float64}[self.nbit] + self.dtype : Optional[type] = { + 8: np.int8, + 16: np.int16, + 32: np.float32, + 64: np.float64}[self.nbit] else: self.dtype = { 8: np.uint8, 16: np.uint16, @@ -306,7 +307,7 @@ def open(self, filename: str) -> "SigprocFile": #self.frame_shape = (self.frame_shape[0], # self.frame_shape[1]//pack_factor) ##self.frame_shape[-1] //= pack_factor - raise IOError("Currently unsupported: nbits < 8") + self.dtype = None self.frame_size = self.frame_shape[0] * self.frame_shape[1] #self.frame_nbyte = self.frame_size*self.dtype().itemsize self.buf = np.empty(4096, np.uint8) From 076d9fb93cd37430e76a5e62bcb892d2bd9e2171 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Thu, 18 Apr 2024 16:58:44 -0400 Subject: [PATCH 1054/1155] Slight cleanup of type annotations on these 3 blocks --- Makefile.in | 13 +++++++++++++ python/bifrost/blocks/detect.py | 5 +++-- python/bifrost/blocks/quantize.py | 8 ++++---- python/bifrost/blocks/unpack.py | 8 ++++---- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/Makefile.in b/Makefile.in index 852b2f951..dce84e94f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -18,6 +18,19 @@ libbifrost: $(MAKE) -C $(SRC_DIR) all .PHONY: libbifrost +check: +ifeq ($(HAVE_PYTHON),1) + MYPYPATH=$(BIFROST_PYTHON_DIR) mypy --follow-imports=silent \ + python/bifrost/blocks/detect.py \ + python/bifrost/blocks/quantize.py \ + python/bifrost/blocks/unpack.py \ + python/bifrost/sigproc.py \ + python/bifrost/sigproc2.py \ + test/test_sigproc.py \ + testbench/test_fft_detect.py +endif +.PHONY: check + test: #$(MAKE) -C $(SRC_DIR) test ifeq ($(HAVE_PYTHON),1) diff --git a/python/bifrost/blocks/detect.py b/python/bifrost/blocks/detect.py index d25d6482a..106a1b829 100644 --- a/python/bifrost/blocks/detect.py +++ b/python/bifrost/blocks/detect.py @@ -30,12 +30,13 @@ from bifrost.DataType import DataType from copy import deepcopy +from typing import Optional from bifrost import telemetry telemetry.track_module() class DetectBlock(TransformBlock): - def __init__(self, iring, mode, axis=None, + def __init__(self, iring, mode: str, axis: Optional[int|str] = None, *args, **kwargs): super(DetectBlock, self).__init__(iring, *args, **kwargs) self.specified_axis = axis @@ -136,7 +137,7 @@ def on_data(self, ispan, ospan): bf_map(func, shape=shape, axis_names=inds, data={'a': ispan.data, 'b': ospan.data}) -def detect(iring, mode, axis=None, *args, **kwargs): +def detect(iring, mode: str, axis: Optional[int|str] = None, *args, **kwargs): """Apply square-law detection to create polarization products. Args: iring (Ring or Block): Input data source. diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index aef80540c..4cc25df78 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -33,18 +33,18 @@ from copy import deepcopy import numpy as np -from typing import Any, Dict, Tuple, Union +from typing import Any, Dict from bifrost import telemetry telemetry.track_module() class QuantizeBlock(TransformBlock): - def __init__(self, iring: Ring, dtype: Union[str,np.dtype], scale: float=1., + def __init__(self, iring: Ring, dtype: str|np.dtype, scale: float=1., *args, **kwargs): super(QuantizeBlock, self).__init__(iring, *args, **kwargs) self.dtype = dtype self.scale = scale - def define_valid_input_spaces(self) -> Tuple[str]: + def define_valid_input_spaces(self) -> tuple[str]: """Return set of valid spaces (or 'any') for each input""" return ('any',) def on_sequence(self, iseq: ReadSequence) -> Dict[str,Any]: @@ -65,7 +65,7 @@ def on_data(self, ispan: ReadSpan, ospan: WriteSpan) -> None: odata = ospan.data bf_quantize(idata, odata, self.scale) -def quantize(iring: Ring, dtype: Union[str,np.dtype], scale: float=1., *args, **kwargs) -> QuantizeBlock: +def quantize(iring: Ring, dtype: str|np.dtype, scale: float=1., *args, **kwargs) -> QuantizeBlock: """Apply a requantization of bit depth for the data. Args: diff --git a/python/bifrost/blocks/unpack.py b/python/bifrost/blocks/unpack.py index 6bbf7b243..72b58c8e8 100644 --- a/python/bifrost/blocks/unpack.py +++ b/python/bifrost/blocks/unpack.py @@ -33,18 +33,18 @@ from copy import deepcopy import numpy as np -from typing import Any, Dict, Tuple, Union +from typing import Any, Dict from bifrost import telemetry telemetry.track_module() class UnpackBlock(TransformBlock): - def __init__(self, iring: Ring, dtype: Union[str,np.dtype], align_msb: bool=False, + def __init__(self, iring: Ring, dtype: str|np.dtype, align_msb: bool=False, *args, **kwargs): super(UnpackBlock, self).__init__(iring, *args, **kwargs) self.dtype = dtype self.align_msb = align_msb - def define_valid_input_spaces(self) -> Tuple[str]: + def define_valid_input_spaces(self) -> tuple[str]: """Return set of valid spaces (or 'any') for each input""" return ('any',) def on_sequence(self, iseq: ReadSequence) -> Dict[str,Any]: @@ -65,7 +65,7 @@ def on_data(self, ispan: ReadSpan, ospan: WriteSpan) -> None: odata = ospan.data bf_unpack(idata, odata, self.align_msb) -def unpack(iring: Ring, dtype: Union[str,np.dtype], *args, **kwargs) -> UnpackBlock: +def unpack(iring: Ring, dtype: str|np.dtype, *args, **kwargs) -> UnpackBlock: """Unpack data to a larger data type. Args: From 607b20b734b451ab0423301efabb91d21145202a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 18 Apr 2024 15:54:12 -0600 Subject: [PATCH 1055/1155] Cleanups plus a switch to non-temporal stores for the SSE/AVX branches. --- src/formats/chips.hpp | 28 ++++++++++++++++------------ src/formats/ibeam.hpp | 27 +++++++++++++++++++++------ src/formats/pbeam.hpp | 15 +++++++++++++++ 3 files changed, 52 insertions(+), 18 deletions(-) diff --git a/src/formats/chips.hpp b/src/formats/chips.hpp index e293667fa..83d91391a 100644 --- a/src/formats/chips.hpp +++ b/src/formats/chips.hpp @@ -109,17 +109,20 @@ class CHIPSProcessor : virtual public PacketProcessor { //cout << pkt->nchan << endl; for( ; channchan; ++chan ) { #if defined BF_AVX_ENABLED && BF_AVX_ENABLED - _mm256_store_si256(reinterpret_cast<__m256i*>(&out[pkt->src + pkt->nsrc*chan]), - _mm256_loadu_si256(reinterpret_cast(&in[chan]))); + const unaligned256_type* dsrc = (const unaligned256_type*) &in[chan]; + aligned256_type* ddst = (aligned256_type*) &out[pkt->src + pkt->nsrc*chan]; + + __m256 mtemp = _mm256_loadu_si256(dsrc); + _mm256_stream_si256(reinterpret_cast<__m256i*>(ddst), mtemp); #else #if defined BF_SSE_ENABLED && BF_SSE_ENABLED const unaligned128_type* dsrc = (const unaligned128_type*) &in[chan]; aligned128_type* ddst = (aligned128_type*) &out[pkt->src + pkt->nsrc*chan]; - _mm_store_si128(reinterpret_cast<__m128i*>(ddst), - _mm_loadu_si128(reinterpret_cast(dsrc))); - _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), - _mm_loadu_si128(reinterpret_cast(dsrc+1))); + __m128i mtemp = _mm_loadu_si128(reinterpret_cast(dsrc)); + _mm_stream_si128(reinterpret_cast<__m128i*>(ddst), mtemp); + mtemp = _mm_loadu_si128(reinterpret_cast(dsrc+1)); + _mm_stream_si128(reinterpret_cast<__m128i*>(ddst+1), mtemp); #else ::memcpy(&out[pkt->src + pkt->nsrc*chan], &in[chan], sizeof(otype)); @@ -138,16 +141,17 @@ class CHIPSProcessor : virtual public PacketProcessor { for( int t=0; t(&aligned_data[src + nsrc*(c + nchan*t)]), - _mm256_setzero_si256()); + aligned256_type* ddst = (aligned156_type*) &aligned_data[src + nsrc*(c + nchan*t)]; + + _m256i mtemp = _mm256_setzero_si256() + _mm256_stream_si256(reinterpret_cast<__m256i*>(ddst), mtemp); #else #if defined BF_SSE_ENABLED && BF_SSE_ENABLED aligned128_type* ddst = (aligned128_type*) &aligned_data[src + nsrc*(c + nchan*t)]; - _mm_store_si128(reinterpret_cast<__m128i*>(ddst), - _mm_setzero_si128()); - _mm_store_si128(reinterpret_cast<__m128i*>(ddst+1), - _mm_setzero_si128()); + _m128i mtemp = _mm_setzero_si128(); + _mm_stream_si128(reinterpret_cast<__m128i*>(ddst), mtemp); + _mm_stream_si128(reinterpret_cast<__m128i*>(ddst+1), mtemp); #else ::memset(&aligned_data[src + nsrc*(c + nchan*t)], 0, sizeof(otype)); diff --git a/src/formats/ibeam.hpp b/src/formats/ibeam.hpp index df81a9244..18a76f16d 100644 --- a/src/formats/ibeam.hpp +++ b/src/formats/ibeam.hpp @@ -112,9 +112,17 @@ class IBeamProcessor : virtual public PacketProcessor { int chan, beam; for(chan=0; channchan; ++chan ) { for(beam=0; beam<_nbeam; ++beam) { +#if defined BF_SSE_ENABLED && BF_SSE_ENABLED + const unaligned128_type* dsrc = (const unaligned128_type*) &in[chan*_nbeam + beam]; + aligned128_type* ddst = (aligned128_type*) &out[pkt->src*pkt->nchan*_beam + chan*_nbeam + beam]; + + __m128i mtemp = _mm_loadu_si128(reinterpret_cast(dsrc)); + _mm_stream_si128(reinterpret_cast<__m128i*>(ddst), mtemp); +#else ::memcpy(&out[pkt->src*pkt->nchan*_nbeam + chan*_nbeam + beam], &in[chan*_nbeam + beam], sizeof(otype)); //out[pkt->src*pkt->nchan*_nbeam + chan*_nbeam + beam] = in[chan*_nbeam + beam]; +#endif } } } @@ -127,12 +135,19 @@ class IBeamProcessor : virtual public PacketProcessor { typedef aligned128_type otype; otype* __restrict__ aligned_data = (otype*)data; for( int t=0; t(ddst), mtemp); +#else + ::memset(&aligned_data[t*nsrc*nchan*_nbeam + src*nchan*_nbeam + c*_nbeam + b], + 0, sizeof(otype)); +#endif + } + } } } }; diff --git a/src/formats/pbeam.hpp b/src/formats/pbeam.hpp index a7dc966a7..fcfd91683 100644 --- a/src/formats/pbeam.hpp +++ b/src/formats/pbeam.hpp @@ -112,7 +112,15 @@ class PBeamProcessor : virtual public PacketProcessor { int chan; for(chan=0; chan(dsrc)); + _mm_stream_si128(reinterpret_cast<__m128i*>(ddst), mtemp); +#else ::memcpy(&out[beam_server*nchan + chan], &in[chan], sizeof(otype)); +#endif } } @@ -124,8 +132,15 @@ class PBeamProcessor : virtual public PacketProcessor { typedef aligned128_type otype; otype* __restrict__ aligned_data = (otype*)data; for( int t=0; t(ddst), mtemp); +#else ::memset(&aligned_data[t*nsrc*nchan + src*nchan], 0, nchan*sizeof(otype)); +#endif } } }; From ce766683c95bebfd24f2511d37701cb5f8971fc8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 18 Apr 2024 16:09:46 -0600 Subject: [PATCH 1056/1155] Copy real and complex at the same time. --- src/formats/tbn.hpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/formats/tbn.hpp b/src/formats/tbn.hpp index 4679eb123..e760db8d1 100644 --- a/src/formats/tbn.hpp +++ b/src/formats/tbn.hpp @@ -129,13 +129,12 @@ class TBNProcessor : virtual public PacketProcessor { // Note: Using these SSE types allows the compiler to use SSE instructions // However, they require aligned memory (otherwise segfault) - uint8_t const* __restrict__ in = (uint8_t const*)pkt->payload_ptr; - uint8_t* __restrict__ out = (uint8_t* )&obufs[obuf_idx][obuf_offset]; + uint16_t const* __restrict__ in = (uint16_t const*)pkt->payload_ptr; + uint16_t* __restrict__ out = (uint16_t* )&obufs[obuf_idx][obuf_offset]; int samp = 0; for( ; samp<512; ++samp ) { // HACK TESTING - out[samp*pkt->nsrc*2 + pkt->src*2 + 0] = in[2*samp+0]; - out[samp*pkt->nsrc*2 + pkt->src*2 + 1] = in[2*samp+1]; + out[samp*pkt->nsrc + pkt->src] = in[samp]; } } @@ -144,11 +143,10 @@ class TBNProcessor : virtual public PacketProcessor { int nsrc, int nchan, int nseq) { - uint8_t* __restrict__ aligned_data = (uint8_t*)data; + uint8_t* __restrict__ aligned_data = (uint16_t*)data; for( int t=0; t Date: Thu, 18 Apr 2024 16:26:48 -0600 Subject: [PATCH 1057/1155] Fixes. --- src/formats/chips.hpp | 4 ++-- src/formats/ibeam.hpp | 2 +- src/formats/tbn.hpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/formats/chips.hpp b/src/formats/chips.hpp index 83d91391a..0d1e704cc 100644 --- a/src/formats/chips.hpp +++ b/src/formats/chips.hpp @@ -143,13 +143,13 @@ class CHIPSProcessor : virtual public PacketProcessor { #if defined BF_AVX_ENABLED && BF_AVX_ENABLED aligned256_type* ddst = (aligned156_type*) &aligned_data[src + nsrc*(c + nchan*t)]; - _m256i mtemp = _mm256_setzero_si256() + __m256i mtemp = _mm256_setzero_si256() _mm256_stream_si256(reinterpret_cast<__m256i*>(ddst), mtemp); #else #if defined BF_SSE_ENABLED && BF_SSE_ENABLED aligned128_type* ddst = (aligned128_type*) &aligned_data[src + nsrc*(c + nchan*t)]; - _m128i mtemp = _mm_setzero_si128(); + __m128i mtemp = _mm_setzero_si128(); _mm_stream_si128(reinterpret_cast<__m128i*>(ddst), mtemp); _mm_stream_si128(reinterpret_cast<__m128i*>(ddst+1), mtemp); #else diff --git a/src/formats/ibeam.hpp b/src/formats/ibeam.hpp index 18a76f16d..02c5fd9cb 100644 --- a/src/formats/ibeam.hpp +++ b/src/formats/ibeam.hpp @@ -114,7 +114,7 @@ class IBeamProcessor : virtual public PacketProcessor { for(beam=0; beam<_nbeam; ++beam) { #if defined BF_SSE_ENABLED && BF_SSE_ENABLED const unaligned128_type* dsrc = (const unaligned128_type*) &in[chan*_nbeam + beam]; - aligned128_type* ddst = (aligned128_type*) &out[pkt->src*pkt->nchan*_beam + chan*_nbeam + beam]; + aligned128_type* ddst = (aligned128_type*) &out[pkt->src*pkt->nchan*_nbeam + chan*_nbeam + beam]; __m128i mtemp = _mm_loadu_si128(reinterpret_cast(dsrc)); _mm_stream_si128(reinterpret_cast<__m128i*>(ddst), mtemp); diff --git a/src/formats/tbn.hpp b/src/formats/tbn.hpp index e760db8d1..2a805c41f 100644 --- a/src/formats/tbn.hpp +++ b/src/formats/tbn.hpp @@ -143,7 +143,7 @@ class TBNProcessor : virtual public PacketProcessor { int nsrc, int nchan, int nseq) { - uint8_t* __restrict__ aligned_data = (uint16_t*)data; + uint16_t* __restrict__ aligned_data = (uint16_t*)data; for( int t=0; t Date: Thu, 18 Apr 2024 16:28:39 -0600 Subject: [PATCH 1058/1155] Another one. --- src/formats/chips.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/chips.hpp b/src/formats/chips.hpp index 0d1e704cc..fd9a371bb 100644 --- a/src/formats/chips.hpp +++ b/src/formats/chips.hpp @@ -112,7 +112,7 @@ class CHIPSProcessor : virtual public PacketProcessor { const unaligned256_type* dsrc = (const unaligned256_type*) &in[chan]; aligned256_type* ddst = (aligned256_type*) &out[pkt->src + pkt->nsrc*chan]; - __m256 mtemp = _mm256_loadu_si256(dsrc); + __m256 mtemp = _mm256_loadu_si256(reinterpret_cast(dsrc)); _mm256_stream_si256(reinterpret_cast<__m256i*>(ddst), mtemp); #else #if defined BF_SSE_ENABLED && BF_SSE_ENABLED From a360f0b92aa975479d6ed7d39f981b3a4c21c1e1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 Apr 2024 09:32:51 -0600 Subject: [PATCH 1059/1155] Formatting. --- src/formats/snap2.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/formats/snap2.hpp b/src/formats/snap2.hpp index 2b9a85322..a1150727a 100644 --- a/src/formats/snap2.hpp +++ b/src/formats/snap2.hpp @@ -92,7 +92,7 @@ class SNAP2Decoder : virtual public PacketDecoder { int npol_blocks = (be16toh(pkt_hdr->npol_tot) / be16toh(pkt_hdr->npol)); int nchan_blocks = (be16toh(pkt_hdr->nchan_tot) / be16toh(pkt_hdr->nchan)); - pkt->tuning = be32toh(pkt_hdr->chan0); // Abuse this so we can use chan0 to reference channel within pipeline + pkt->tuning = be32toh(pkt_hdr->chan0); // Abuse this so we can use chan0 to reference channel within pipeline pkt->nsrc = npol_blocks * nchan_blocks;// _nsrc; pkt->nchan = be16toh(pkt_hdr->nchan); pkt->chan0 = be32toh(pkt_hdr->chan_block_id) * be16toh(pkt_hdr->nchan); From 1c074b7550a1bca8d8edd19d5d7243b1b067ff11 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Fri, 19 Apr 2024 13:11:16 -0600 Subject: [PATCH 1060/1155] Type fixes, got prematurely excited about 3.10 notation --- .mypy.ini | 4 ++++ python/bifrost/blocks/detect.py | 6 +++--- python/bifrost/blocks/quantize.py | 8 ++++---- python/bifrost/blocks/unpack.py | 8 ++++---- 4 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 .mypy.ini diff --git a/.mypy.ini b/.mypy.ini new file mode 100644 index 000000000..34d271542 --- /dev/null +++ b/.mypy.ini @@ -0,0 +1,4 @@ +[mypy] + +[mypy-scipy.fftpack.*] +ignore_missing_imports = True diff --git a/python/bifrost/blocks/detect.py b/python/bifrost/blocks/detect.py index 106a1b829..bf3cbb125 100644 --- a/python/bifrost/blocks/detect.py +++ b/python/bifrost/blocks/detect.py @@ -30,13 +30,13 @@ from bifrost.DataType import DataType from copy import deepcopy -from typing import Optional +from typing import Optional, Union from bifrost import telemetry telemetry.track_module() class DetectBlock(TransformBlock): - def __init__(self, iring, mode: str, axis: Optional[int|str] = None, + def __init__(self, iring, mode: str, axis: Optional[Union[int,str]] = None, *args, **kwargs): super(DetectBlock, self).__init__(iring, *args, **kwargs) self.specified_axis = axis @@ -137,7 +137,7 @@ def on_data(self, ispan, ospan): bf_map(func, shape=shape, axis_names=inds, data={'a': ispan.data, 'b': ospan.data}) -def detect(iring, mode: str, axis: Optional[int|str] = None, *args, **kwargs): +def detect(iring, mode: str, axis: Optional[Union[int,str]] = None, *args, **kwargs): """Apply square-law detection to create polarization products. Args: iring (Ring or Block): Input data source. diff --git a/python/bifrost/blocks/quantize.py b/python/bifrost/blocks/quantize.py index 4cc25df78..ffc25b188 100644 --- a/python/bifrost/blocks/quantize.py +++ b/python/bifrost/blocks/quantize.py @@ -33,18 +33,18 @@ from copy import deepcopy import numpy as np -from typing import Any, Dict +from typing import Any, Dict, Union, Tuple from bifrost import telemetry telemetry.track_module() class QuantizeBlock(TransformBlock): - def __init__(self, iring: Ring, dtype: str|np.dtype, scale: float=1., + def __init__(self, iring: Ring, dtype: Union[str,np.dtype], scale: float=1., *args, **kwargs): super(QuantizeBlock, self).__init__(iring, *args, **kwargs) self.dtype = dtype self.scale = scale - def define_valid_input_spaces(self) -> tuple[str]: + def define_valid_input_spaces(self) -> Tuple[str]: """Return set of valid spaces (or 'any') for each input""" return ('any',) def on_sequence(self, iseq: ReadSequence) -> Dict[str,Any]: @@ -65,7 +65,7 @@ def on_data(self, ispan: ReadSpan, ospan: WriteSpan) -> None: odata = ospan.data bf_quantize(idata, odata, self.scale) -def quantize(iring: Ring, dtype: str|np.dtype, scale: float=1., *args, **kwargs) -> QuantizeBlock: +def quantize(iring: Ring, dtype: Union[str,np.dtype], scale: float=1., *args, **kwargs) -> QuantizeBlock: """Apply a requantization of bit depth for the data. Args: diff --git a/python/bifrost/blocks/unpack.py b/python/bifrost/blocks/unpack.py index 72b58c8e8..2e3032cfb 100644 --- a/python/bifrost/blocks/unpack.py +++ b/python/bifrost/blocks/unpack.py @@ -33,18 +33,18 @@ from copy import deepcopy import numpy as np -from typing import Any, Dict +from typing import Any, Dict, Union, Tuple from bifrost import telemetry telemetry.track_module() class UnpackBlock(TransformBlock): - def __init__(self, iring: Ring, dtype: str|np.dtype, align_msb: bool=False, + def __init__(self, iring: Ring, dtype: Union[str,np.dtype], align_msb: bool=False, *args, **kwargs): super(UnpackBlock, self).__init__(iring, *args, **kwargs) self.dtype = dtype self.align_msb = align_msb - def define_valid_input_spaces(self) -> tuple[str]: + def define_valid_input_spaces(self) -> Tuple[str]: """Return set of valid spaces (or 'any') for each input""" return ('any',) def on_sequence(self, iseq: ReadSequence) -> Dict[str,Any]: @@ -65,7 +65,7 @@ def on_data(self, ispan: ReadSpan, ospan: WriteSpan) -> None: odata = ospan.data bf_unpack(idata, odata, self.align_msb) -def unpack(iring: Ring, dtype: str|np.dtype, *args, **kwargs) -> UnpackBlock: +def unpack(iring: Ring, dtype: Union[str,np.dtype], *args, **kwargs) -> UnpackBlock: """Unpack data to a larger data type. Args: From 64c6f73d8b324129933296730a1bc9e9cf12610c Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sat, 20 Apr 2024 19:55:25 -0600 Subject: [PATCH 1061/1155] Lockfile will warn periodically if waiting more than 5s Fixes #232 --- src/fileutils.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index dfc203210..59479c9ac 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -28,6 +28,7 @@ #include "fileutils.hpp" #include +#include #if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM #include @@ -193,6 +194,9 @@ std::string get_dirname(std::string filename) { potentially write the PID into the lock file to help with tracking whether the process died. */ LockFile::LockFile(std::string lockfile) : _lockfile(lockfile) { + time_t start = time(NULL), elapsed = 0; + int busycount = 0; + int busyinterval = 1 << 17; while( true ) { _fd = open(_lockfile.c_str(), O_CREAT, 600); flock(_fd, LOCK_EX); @@ -202,9 +206,22 @@ LockFile::LockFile(std::string lockfile) : _lockfile(lockfile) { // Compare inodes if( fd_stat.st_ino == lockfile_stat.st_ino ) { // Got the lock + if(elapsed > 0) { + std::cerr << "NOTE: acquired " << lockfile + << std::endl; + } break; } + busycount++; close(_fd); + if(busycount % busyinterval == 0) { + elapsed = time(NULL) - start; + if(elapsed >= 5) { + std::cerr << "NOTE: waiting " << elapsed + << "s for " << lockfile << std::endl; + busyinterval = busycount; + } + } } } @@ -212,3 +229,25 @@ LockFile::~LockFile() { unlink(_lockfile.c_str()); flock(_fd, LOCK_UN); } + + +#ifdef FILEUTILS_LOCKFILE_TEST +// This is a little test program for LockFile, to simulate +// a leftover lock file. It should look something like this: + +// Initiating lock... +// NOTE: waiting 5s for ./myfile.lock +// NOTE: waiting 9s for ./myfile.lock +// NOTE: waiting 17s for ./myfile.lock +// NOTE: waiting 34s for ./myfile.lock +// [Delete the file from another terminal] +// NOTE: acquired ./myfile.lock +// Lock acquired... exiting +int main() { + int fd = open("./myfile.lock", O_CREAT, 600); + std::cerr << "Initiating lock..." << std::endl; + LockFile("./myfile.lock"); + std::cerr << "Lock acquired... exiting" << std::endl; + return 0; +} +#endif From 3c6c91258af6c3fa0259fcc7c997eca9e11ad658 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 25 Apr 2024 13:54:47 -0400 Subject: [PATCH 1062/1155] clarify the README for the docs --- docs/Makefile | 2 +- docs/README.rst | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/Makefile b/docs/Makefile index f7d093d3f..c51d3a6a5 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -29,6 +29,6 @@ generate_python_reference: .PHONY: generate_python_reference generate_cpp_reference: - breathe-apidoc -o source -p bifrost --force ./doxygen/xml/ + breathe-apidoc -o source -p bifrost --force ./doxygen/xml/ rm -rf source/file .PHONY: generate_cpp_reference diff --git a/docs/README.rst b/docs/README.rst index f757e304f..4eec12cb8 100644 --- a/docs/README.rst +++ b/docs/README.rst @@ -10,3 +10,10 @@ Inside the `docs` folder, execute `./docker_build_docs.sh`, which will create a container called `bifrost_docs`, then run it, and have it complete the docs-building process for you, outputting the entire html documentation inside `docs/html`. + +If you are not using Docker, ensure that you have "sphinx" and +"doxygen" installed. In the parent directory run "doxygen Doxyfile." +Return to the docs directory, where you can run, for example, +"make singlehtml" where "singlehtml" can be replaced +by the format you wish the docs to be in. + From 774cb481f10d690782dd4b93517b3168c2025fd1 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 25 Apr 2024 14:16:23 -0400 Subject: [PATCH 1063/1155] include docs on writing packet formats --- docs/source/Cpp-Development.rst | 52 +++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/docs/source/Cpp-Development.rst b/docs/source/Cpp-Development.rst index 21f6a59bd..a0f8147f9 100644 --- a/docs/source/Cpp-Development.rst +++ b/docs/source/Cpp-Development.rst @@ -81,3 +81,55 @@ Create a Ring Buffer and Load Data bfRingSpanRelease(my_read_span); bfRingSequenceClose(my_read_sequence); bfRingDestroy(my_ring); //delete the ring from memory + +Adding New Packet Formats +------------------------ + +A wide variety of packet formats are already included in bifrost. +For simplicity, it is likely preferable to make use of these pre-existing +formats. In the case that this becomes infeasible, here are some of what +is necessary in order to add a new format to bifrost. + +Files to edit: + +1. python/bifrost/packet_capture.py + + * Add set_mypacket to the PacketCaptureCallback class. It will likely look very similar to the set_chips method. + +2. src/bifrost/packet_capture.h + + * This is for ctypesgen. Add a typedef for the sequence callback. This typedef corresponds to the sequence callback used in the packet reader, see the sections on test_udp_io.py and test_disk_io.py for examples of writing the packet reader. + * Also declare the capture callback. + +3. src/formats/format.hpp + + * Add a one-line #include "mypacket.hpp" + +4. src/formats/mypacket.hpp + + * This is the only file that will need to be fully written from scratch. The easiest way to proceed is to copy the most similar existing packet format and modify it accordingly. One will need to make sure that the header is defined properly and that the correct information is going into it, and one will need to make sure that the memcpy operation is properly filling the packet with data. + +5. src/packet_capture.cpp + + * Need to add a call to the packet capture callback. + +6. src/packet_capture.hpp + + * This is where you will spend most of your time. Add your packet capture sequence callback to the BFpacketcapture_callback_impl initialization list. Immediately after the initialization list, add the set_mypacket and get_mypacket methods. + * Add a new class: "BFpacketcapture_mypacket_impl." In the case of simpler packet formats, this may be very close to the already written "BFpacketcapture_chips_impl." It's probably best to start by copying the format that is closest to the format you are writing and modify it. + * In "BFpacketcapture_create," add the format to the first long if-else if statement. This section tells the disk writer the size of the packet to expect. Then add your packet to the second if-else if statement. + +7. src/packet_writer.hpp + + * After the BFpacketwriter_generic_impl, add a class "BFpacketwriter_mypacket_impl. Take care to choose the correct BF\_DTYPE\_???. + * In BFpacketwriter_create, add your packet to the first if-else if statement. Note that nsamples needs to correspond to the number elements in the data portion of the packet. Then add your packet to the third if-else if statement along all the other formats. + +8. test/test_disk_io.py + + * Add a reader for your packet format. This reader will be what is used in the actual code as well. It contains the sequence callback that we declared in the src/bifrost/packet_capture.h file. Note that the header in this sequence callback is the ring header not the packet header. + * You will also need to add a _get_mypacket_data, test_write_mypacket, and test_read_mypacket. + +9. test/test_udp_io.py + + * The udp version of test_disk_io. Once you have written the disk io test, this test is fairly simple to implement, provided you wrote it correctly. + From 7e97eba7569d65a99eec65d6b471c3f339fc34b3 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 3 May 2024 09:00:18 -0600 Subject: [PATCH 1064/1155] Cleanup whitespace --- docs/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Makefile b/docs/Makefile index c51d3a6a5..f7d093d3f 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -29,6 +29,6 @@ generate_python_reference: .PHONY: generate_python_reference generate_cpp_reference: - breathe-apidoc -o source -p bifrost --force ./doxygen/xml/ + breathe-apidoc -o source -p bifrost --force ./doxygen/xml/ rm -rf source/file .PHONY: generate_cpp_reference From 6445e696eaa885be9a7874de615e6535bd633e6f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 3 May 2024 09:22:42 -0600 Subject: [PATCH 1065/1155] Formatting. --- docs/source/Cpp-Development.rst | 85 +++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 31 deletions(-) diff --git a/docs/source/Cpp-Development.rst b/docs/source/Cpp-Development.rst index a0f8147f9..061c87ed5 100644 --- a/docs/source/Cpp-Development.rst +++ b/docs/source/Cpp-Development.rst @@ -85,51 +85,74 @@ Create a Ring Buffer and Load Data Adding New Packet Formats ------------------------ -A wide variety of packet formats are already included in bifrost. +A wide variety of packet formats are already included in Bifrost. For simplicity, it is likely preferable to make use of these pre-existing formats. In the case that this becomes infeasible, here are some of what -is necessary in order to add a new format to bifrost. +is necessary in order to add a new format to Bifrost. Files to edit: -1. python/bifrost/packet_capture.py +1. ``python/bifrost/packet_capture.py`` - * Add set_mypacket to the PacketCaptureCallback class. It will likely look very similar to the set_chips method. + * Add ``set_mypacket`` to the ``PacketCaptureCallback`` class. It will likely look + very similar to the ``set_chips`` method. -2. src/bifrost/packet_capture.h +2. ``src/bifrost/packet_capture.h`` - * This is for ctypesgen. Add a typedef for the sequence callback. This typedef corresponds to the sequence callback used in the packet reader, see the sections on test_udp_io.py and test_disk_io.py for examples of writing the packet reader. + * This is for ctypesgen. Add a typedef for the sequence callback. This typedef + corresponds to the sequence callback used in the packet reader, see the sections + on ``test_udp_io.py`` and ``test_disk_io.py`` for examples of writing the packet reader. * Also declare the capture callback. -3. src/formats/format.hpp +3. ``src/formats/format.hpp`` - * Add a one-line #include "mypacket.hpp" + * Add a one-line ``#include "mypacket.hpp"`` -4. src/formats/mypacket.hpp +4. `src/formats/mypacket.hpp` - * This is the only file that will need to be fully written from scratch. The easiest way to proceed is to copy the most similar existing packet format and modify it accordingly. One will need to make sure that the header is defined properly and that the correct information is going into it, and one will need to make sure that the memcpy operation is properly filling the packet with data. + * This is the only file that will need to be fully written from scratch. The + easiest way to proceed is to copy the most similar existing packet format and + modify it accordingly. One will need to make sure that the header is defined + properly and that the correct information is going into it, and one will need + to make sure that the `memcpy` operation is properly filling the packet with + data. -5. src/packet_capture.cpp +5. ``src/packet_capture.cpp`` * Need to add a call to the packet capture callback. -6. src/packet_capture.hpp - - * This is where you will spend most of your time. Add your packet capture sequence callback to the BFpacketcapture_callback_impl initialization list. Immediately after the initialization list, add the set_mypacket and get_mypacket methods. - * Add a new class: "BFpacketcapture_mypacket_impl." In the case of simpler packet formats, this may be very close to the already written "BFpacketcapture_chips_impl." It's probably best to start by copying the format that is closest to the format you are writing and modify it. - * In "BFpacketcapture_create," add the format to the first long if-else if statement. This section tells the disk writer the size of the packet to expect. Then add your packet to the second if-else if statement. - -7. src/packet_writer.hpp - - * After the BFpacketwriter_generic_impl, add a class "BFpacketwriter_mypacket_impl. Take care to choose the correct BF\_DTYPE\_???. - * In BFpacketwriter_create, add your packet to the first if-else if statement. Note that nsamples needs to correspond to the number elements in the data portion of the packet. Then add your packet to the third if-else if statement along all the other formats. - -8. test/test_disk_io.py - - * Add a reader for your packet format. This reader will be what is used in the actual code as well. It contains the sequence callback that we declared in the src/bifrost/packet_capture.h file. Note that the header in this sequence callback is the ring header not the packet header. - * You will also need to add a _get_mypacket_data, test_write_mypacket, and test_read_mypacket. - -9. test/test_udp_io.py - - * The udp version of test_disk_io. Once you have written the disk io test, this test is fairly simple to implement, provided you wrote it correctly. - +6. ``src/packet_capture.hpp`` + + * This is where you will spend most of your time. Add your packet capture sequence + callback to the ``BFpacketcapture_callback_impl`` initialization list. Immediately + after the initialization list, add the ``set_mypacket`` and ``get_mypacket`` methods. + * Add a new class: ``BFpacketcapture_mypacket_impl``. In the case of simpler packet + formats, this may be very close to the already written ``BFpacketcapture_chips_impl``. + It's probably best to start by copying the format that is closest to the format + you are writing and modify it. + * In ``BFpacketcapture_create``, add the format to the first long if-else if statement. + This section tells the disk writer the size of the packet to expect. Then add your + packet to the second if-else if statement. + +7. ``src/packet_writer.hpp`` + + * After the ``BFpacketwriter_generic_impl``, add a class ``BFpacketwriter_mypacket_impl``. + Take care to choose the correct BF\_DTYPE\_???. + * In ``BFpacketwriter_create``, add your packet to the first if-else if statement. + Note that nsamples needs to correspond to the number elements in the data portion + of the packet. Then add your packet to the third if-else if statement along all + the other formats. + +8. ``test/test_disk_io.py`` + + * Add a reader for your packet format. This reader will be what is used in the actual + code as well. It contains the sequence callback that we declared in the ``src/bifrost/packet_capture.h`` + file. Note that the header in this sequence callback is the ring header not the + packet header. + * You will also need to add a ``_get_mypacket_data``, ``test_write_mypacket``, + and ``test_read_mypacket``. + +9. ``test/test_udp_io.py`` + + * The UDP version of ``test_disk_io``. Once you have written the disk I/O test, this + test is fairly simple to implement, provided you wrote it correctly. From 3a2c4aa5e148e011fce65eef776fd13c7ddfe45e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 3 May 2024 09:25:14 -0600 Subject: [PATCH 1066/1155] Also need breathe. --- docs/README.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/README.rst b/docs/README.rst index 4eec12cb8..f56d4f41c 100644 --- a/docs/README.rst +++ b/docs/README.rst @@ -11,9 +11,8 @@ which will create a container called `bifrost_docs`, then run it, and have it complete the docs-building process for you, outputting the entire html documentation inside `docs/html`. -If you are not using Docker, ensure that you have "sphinx" and -"doxygen" installed. In the parent directory run "doxygen Doxyfile." +If you are not using Docker, ensure that you have "sphinx", "breathe", +and "doxygen" installed. In the parent directory run "doxygen Doxyfile." Return to the docs directory, where you can run, for example, "make singlehtml" where "singlehtml" can be replaced by the format you wish the docs to be in. - From 6eae8128ad1f10bbe218d35b83e5b602a9d63a44 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Sun, 19 May 2024 08:59:36 -0400 Subject: [PATCH 1067/1155] In Github CI script, update setup-python Probably makes no difference on Python 3.6 failing on MacOS. (Most likely the fix is just to drop 3.6.) --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9386f2708..670b421af 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -51,7 +51,7 @@ jobs: gawk \ gnu-sed \ pkg-config - - uses: actions/setup-python@v5.0.0 + - uses: actions/setup-python@v5.1.0 with: python-version: ${{ matrix.python-version }} - name: "Software Install - Python" From e3b6daef5e7137d50a89a269cc565d1ee9cbad7a Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 29 May 2024 11:10:31 -0400 Subject: [PATCH 1068/1155] Don't test with Python 3.6 on MacOS Python 3.6 is no longer supported on macos-latest build image, and 3.6 is EOL anyway. (So prefer to ditch 3.6 rather than pin macos to an earlier image.) --- .github/workflows/main.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 670b421af..fb5b08ac3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,8 +24,6 @@ jobs: include: - os: ubuntu-20.04 python-version: '3.6' - - os: macos-latest - python-version: '3.6' fail-fast: false steps: - name: "Software Install - Ubuntu" From 9706acd0b8b277b1ab4c6a45a672504084656cf1 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 29 May 2024 14:20:52 -0400 Subject: [PATCH 1069/1155] Fix DeprecationWarning: invalid escape sequence \d --- test/test_scripts.py | 2 +- test/test_tutorial.py | 1 - tools/like_pmap.py | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/test/test_scripts.py b/test/test_scripts.py index 03a061932..b1b5acaf8 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -53,7 +53,7 @@ pass run_scripts_tests &= (sys.version_info[0] >= 3) -_LINT_RE = re.compile('(?P.*?)\:(?P\d+)\: \[(?P.*?)\] (?P.*)') +_LINT_RE = re.compile(r'(?P.*?)\:(?P\d+)\: \[(?P.*?)\] (?P.*)') @unittest.skipUnless(run_scripts_tests, "requires the 'pylint' module") class ScriptTest(unittest.TestCase): diff --git a/test/test_tutorial.py b/test/test_tutorial.py index 767b2b7d2..e75c06c3b 100644 --- a/test/test_tutorial.py +++ b/test/test_tutorial.py @@ -32,7 +32,6 @@ import unittest import glob import sys -import re import os from tempfile import mkdtemp from shutil import rmtree diff --git a/tools/like_pmap.py b/tools/like_pmap.py index f5a2e2ee4..a35251f43 100755 --- a/tools/like_pmap.py +++ b/tools/like_pmap.py @@ -92,7 +92,7 @@ def main(args): raise RuntimeError("Cannot find NUMA memory info for PID: %i" % args.pid) # Parse out the anonymous entries in this file - _numaRE = re.compile('(?P[0-9a-f]+).*[(anon)|(mapped)]=(?P\d+).*(swapcache=(?P\d+))?.*N(?P\d+)=(?P\d+)') + _numaRE = re.compile(r'(?P[0-9a-f]+).*[(anon)|(mapped)]=(?P\d+).*(swapcache=(?P\d+))?.*N(?P\d+)=(?P\d+)') areas = {} files = {} for line in numaInfo.split('\n'): From 0ae61e7e5d01f820ed4b4ff9b3473e0bb88a979f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 29 May 2024 15:16:34 -0600 Subject: [PATCH 1070/1155] Added better documentation build environment detection. --- configure.ac | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 062f52bca..e0304bffb 100644 --- a/configure.ac +++ b/configure.ac @@ -244,7 +244,18 @@ AS_IF([test x$enable_python != xno], [AC_MSG_RESULT([no]) AC_MSG_WARN([python module will not be built])], [AC_MSG_RESULT([yes]) - AC_SUBST(HAVE_PYTHON, 1)])])]) + AC_SUBST(HAVE_PYTHON, 1)]) + AC_MSG_CHECKING([whether $PYTHON as sphinx]) + AS_IF([! ${PYTHON} -c "import sphinx" 2>/dev/null], + [AC_MSG_RESULT([no])], + [AC_MSG_RESULT([yes]) + AC_SUBST(HAVE_PYTHON_SPHINX, 1)]) + AC_MSG_CHECKING([whether $PYTHON as breathe]) + AS_IF([! ${PYTHON} -c "import breathe" 2>/dev/null], + [AC_MSG_RESULT([no]) + AC_MSG_WARN([python documentation cannot not be built])], + [AC_MSG_RESULT([yes]) + AC_SUBST(HAVE_PYTHON_BREATHE, 1)])])]) AC_ARG_WITH([pybuild_flags], [AS_HELP_STRING([--with-pybuild-flags], [build flags for python (default='')])], @@ -271,6 +282,7 @@ AS_IF([test x${DOCKER} != xno], # Documentation # +DX_INIT_DOXYGEN([bifrost]) DX_DOT_FEATURE(OFF) DX_HTML_FEATURE(ON) DX_CHM_FEATURE(OFF) @@ -280,9 +292,16 @@ DX_RTF_FEATURE(OFF) DX_XML_FEATURE(OFF) DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) -DX_INIT_DOXYGEN([bifrost]) -# +AS_IF([test x${DX_DOXYGEN} == x], + [AC_MSG_WARN([missing doxygen, documentation cannot be built])], + [AS_IF([test x${PYTHON} != xno], + [AS_IF([test x${HAVE_PYTHON_SPHINX} != x1], + [AC_MSG_WARN([missing the sphinx module, python documentation cannot not be built])], + [AS_IF([test x${HAVE_PYTHON_BREATHE} != x1], + [AC_MSG_WARN([missing the breathe module, python documentation cannot not be built])])])])]) + + # Version splitting # From b2d56a67ce7fb018f2d6529245de9a616b69b4ca Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 29 May 2024 15:21:29 -0600 Subject: [PATCH 1071/1155] Consolidate docs toggling flags into two. --- configure.ac | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index e0304bffb..80f214f4a 100644 --- a/configure.ac +++ b/configure.ac @@ -293,13 +293,17 @@ DX_XML_FEATURE(OFF) DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) +AC_SUBST(HAVE_CXX_DOCS, 0) +AC_SUBST(HAVE_PYTHON_DOCS, 0) AS_IF([test x${DX_DOXYGEN} == x], [AC_MSG_WARN([missing doxygen, documentation cannot be built])], - [AS_IF([test x${PYTHON} != xno], + [AC_SUBST(HAVE_CXX_DOCS, 1) + AS_IF([test x${PYTHON} != xno], [AS_IF([test x${HAVE_PYTHON_SPHINX} != x1], [AC_MSG_WARN([missing the sphinx module, python documentation cannot not be built])], [AS_IF([test x${HAVE_PYTHON_BREATHE} != x1], - [AC_MSG_WARN([missing the breathe module, python documentation cannot not be built])])])])]) + [AC_MSG_WARN([missing the breathe module, python documentation cannot not be built])], + [AC_SUBST(HAVE_PYTHON_DOCS, 1)])])])]) # Version splitting From 6efaa739604f9b22c69eb626b7c814addb1b0699 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 29 May 2024 15:28:48 -0600 Subject: [PATCH 1072/1155] Tie in the doc build flags with the top level Makefile. --- Makefile.in | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 852b2f951..3ba8ac79b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -7,8 +7,12 @@ DAT_DIR = share SRC_DIR = src HAVE_PYTHON = @HAVE_PYTHON@ + HAVE_DOCKER = @HAVE_DOCKER@ +CAN_BUILD_CXX_DOCS = @HAVE_CXX_DOCS@ +CAN_BUILD_PYTHON_DOCS = @HAVE_PYTHON_DOCS@ + BIFROST_PYTHON_DIR = python all: libbifrost python @@ -63,8 +67,13 @@ ifeq ($(HAVE_PYTHON),1) endif .PHONY: uninstall -doc: $(INC_DIR)/bifrost/*.h Doxyfile +doc: $(INC_DIR)/bifrost/*.h Doxyfile docs/source/*.rst docs/source/*.py +ifeq ($(CAN_BUILD_CXX_DOCS),1) @DX_DOXYGEN@ Doxyfile +endif +ifeq ($(CAN_BUILD_PYTHON_DOCS),1) + $(MAKE) -C docs singlehtml +endif .PHONY: doc python: libbifrost From 2a1f8fe35008c5ad9ef615637f5a7ab112551edf Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 29 May 2024 15:30:34 -0600 Subject: [PATCH 1073/1155] Rebuild configure. --- configure | 84 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 72 insertions(+), 12 deletions(-) diff --git a/configure b/configure index b94108dcb..8fe7920a1 100755 --- a/configure +++ b/configure @@ -663,6 +663,8 @@ MAP_KERNEL_STDCXX PACKAGE_VERSION_MICRO PACKAGE_VERSION_MINOR PACKAGE_VERSION_MAJOR +HAVE_PYTHON_DOCS +HAVE_CXX_DOCS DX_RULES PAPER_SIZE DOXYGEN_PAPER_SIZE @@ -706,6 +708,8 @@ HAVE_DOCKER DOCKER PYINSTALLFLAGS PYBUILDFLAGS +HAVE_PYTHON_BREATHE +HAVE_PYTHON_SPHINX PYTHON3 PYTHON HAVE_PYTHON @@ -1535,7 +1539,7 @@ Optional Features: --disable-python disable building the Python bindings (default=no) --disable-doxygen-doc don't generate any doxygen documentation --enable-doxygen-dot generate graphics for doxygen documentation - --disable-doxygen-man don't generate doxygen manual pages + --enable-doxygen-man generate doxygen manual pages --enable-doxygen-rtf generate doxygen RTF documentation --enable-doxygen-xml generate doxygen XML documentation --enable-doxygen-chm generate doxygen compressed HTML help documentation @@ -22340,6 +22344,32 @@ else $as_nop printf "%s\n" "yes" >&6; } HAVE_PYTHON=1 +fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as sphinx" >&5 +printf %s "checking whether $PYTHON as sphinx... " >&6; } + if ! ${PYTHON} -c "import sphinx" 2>/dev/null +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_PYTHON_SPHINX=1 + +fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as breathe" >&5 +printf %s "checking whether $PYTHON as breathe... " >&6; } + if ! ${PYTHON} -c "import breathe" 2>/dev/null +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python documentation cannot not be built" >&5 +printf "%s\n" "$as_me: WARNING: python documentation cannot not be built" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_PYTHON_BREATHE=1 + fi fi fi @@ -22526,15 +22556,6 @@ fi - - - - - - - - - # Files: DX_PROJECT=bifrost @@ -23033,7 +23054,7 @@ esac else $as_nop -DX_FLAG_man=1 +DX_FLAG_man=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 @@ -24623,7 +24644,46 @@ DX_RULES="${DX_SNIPPET_doc}" #echo DX_ENV=$DX_ENV -# + + + + + + + + + +HAVE_CXX_DOCS=0 + +HAVE_PYTHON_DOCS=0 + +if test x${DX_DOXYGEN} == x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing doxygen, documentation cannot be built" >&5 +printf "%s\n" "$as_me: WARNING: missing doxygen, documentation cannot be built" >&2;} +else $as_nop + HAVE_CXX_DOCS=1 + + if test x${PYTHON} != xno +then : + if test x${HAVE_PYTHON_SPHINX} != x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the sphinx module, python documentation cannot not be built" >&5 +printf "%s\n" "$as_me: WARNING: missing the sphinx module, python documentation cannot not be built" >&2;} +else $as_nop + if test x${HAVE_PYTHON_BREATHE} != x1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the breathe module, python documentation cannot not be built" >&5 +printf "%s\n" "$as_me: WARNING: missing the breathe module, python documentation cannot not be built" >&2;} +else $as_nop + HAVE_PYTHON_DOCS=1 + +fi +fi +fi +fi + + # Version splitting # From 7b52298b54e7e854de35e9a3673291674f9ca4b5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 29 May 2024 15:45:27 -0600 Subject: [PATCH 1074/1155] Switch to detecting the scripts that are used to build the python docs. --- configure.ac | 24 +++++++++--------------- docs/{Makefile => Makefile.in} | 0 2 files changed, 9 insertions(+), 15 deletions(-) rename docs/{Makefile => Makefile.in} (100%) diff --git a/configure.ac b/configure.ac index 80f214f4a..59c52ef71 100644 --- a/configure.ac +++ b/configure.ac @@ -244,18 +244,7 @@ AS_IF([test x$enable_python != xno], [AC_MSG_RESULT([no]) AC_MSG_WARN([python module will not be built])], [AC_MSG_RESULT([yes]) - AC_SUBST(HAVE_PYTHON, 1)]) - AC_MSG_CHECKING([whether $PYTHON as sphinx]) - AS_IF([! ${PYTHON} -c "import sphinx" 2>/dev/null], - [AC_MSG_RESULT([no])], - [AC_MSG_RESULT([yes]) - AC_SUBST(HAVE_PYTHON_SPHINX, 1)]) - AC_MSG_CHECKING([whether $PYTHON as breathe]) - AS_IF([! ${PYTHON} -c "import breathe" 2>/dev/null], - [AC_MSG_RESULT([no]) - AC_MSG_WARN([python documentation cannot not be built])], - [AC_MSG_RESULT([yes]) - AC_SUBST(HAVE_PYTHON_BREATHE, 1)])])]) + AC_SUBST(HAVE_PYTHON, 1)])])]) AC_ARG_WITH([pybuild_flags], [AS_HELP_STRING([--with-pybuild-flags], [build flags for python (default='')])], @@ -293,15 +282,20 @@ DX_XML_FEATURE(OFF) DX_PDF_FEATURE(ON) DX_PS_FEATURE(ON) +AS_IF([test x${HAVE_PYTHON} == x1], + [AX_WITH_PROG(PYTHON_SPHINXB, sphinx-build) + AX_WITH_PROG(PYTHON_SPHINXA, sphinx-apidoc) + AX_WITH_PROG(PYTHON_BREATHE, breathe-apidoc)]) + AC_SUBST(HAVE_CXX_DOCS, 0) AC_SUBST(HAVE_PYTHON_DOCS, 0) AS_IF([test x${DX_DOXYGEN} == x], [AC_MSG_WARN([missing doxygen, documentation cannot be built])], [AC_SUBST(HAVE_CXX_DOCS, 1) AS_IF([test x${PYTHON} != xno], - [AS_IF([test x${HAVE_PYTHON_SPHINX} != x1], + [AS_IF([test x${PYTHON_SPHINXB} = x], [AC_MSG_WARN([missing the sphinx module, python documentation cannot not be built])], - [AS_IF([test x${HAVE_PYTHON_BREATHE} != x1], + [AS_IF([test x${PYTHON_BREATHE} = x], [AC_MSG_WARN([missing the breathe module, python documentation cannot not be built])], [AC_SUBST(HAVE_PYTHON_DOCS, 1)])])])]) @@ -370,7 +364,7 @@ AS_IF([test x$STDCXX_IS_SET != x1], CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h]) +AC_CONFIG_FILES([config.mk Makefile src/Makefile python/Makefile docs/Makefile share/bifrost.pc src/bifrost/config.h]) AC_OUTPUT diff --git a/docs/Makefile b/docs/Makefile.in similarity index 100% rename from docs/Makefile rename to docs/Makefile.in From 712d3afa0e005bcfeea61d9201986fa8f952f57d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 29 May 2024 15:45:50 -0600 Subject: [PATCH 1075/1155] We should make sure this is consistent with the rest of the build. --- docs/Makefile.in | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/Makefile.in b/docs/Makefile.in index f7d093d3f..8d4d63995 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -3,7 +3,7 @@ # You can set these variables from the command line. SPHINXOPTS = -SPHINXBUILD = sphinx-build +SPHINXBUILD = @PYTHON_SPHINXB@ SPHINXPROJ = bifrost SOURCEDIR = source BUILDDIR = build @@ -20,15 +20,15 @@ help: @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) generate_python_reference: - sphinx-apidoc -o source -d 5 --force ../python/bifrost/ + @PYTHON_SPHINXA@ -o source -d 5 --force ../python/bifrost/ rm source/modules.rst - sed -i '1s/.*/Python Reference/' source/bifrost.rst - sed -i '2s/.*/================/' source/bifrost.rst - sed -i '1s/.*/Block Library Reference/' source/bifrost.blocks.rst - sed -i '2s/.*/=======================/' source/bifrost.blocks.rst + @SED@ -i '1s/.*/Python Reference/' source/bifrost.rst + @SED@ -i '2s/.*/================/' source/bifrost.rst + @SED@ -i '1s/.*/Block Library Reference/' source/bifrost.blocks.rst + @SED@ -i '2s/.*/=======================/' source/bifrost.blocks.rst .PHONY: generate_python_reference generate_cpp_reference: - breathe-apidoc -o source -p bifrost --force ./doxygen/xml/ + @PYTHON_BREATHE@ -o source -p bifrost --force ./doxygen/xml/ rm -rf source/file .PHONY: generate_cpp_reference From c064bf20a33b4898ccda636f01aa6c5a09985bcf Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 29 May 2024 15:47:30 -0600 Subject: [PATCH 1076/1155] Rebuild configure. --- configure | 497 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 465 insertions(+), 32 deletions(-) diff --git a/configure b/configure index 8fe7920a1..56939a021 100755 --- a/configure +++ b/configure @@ -665,6 +665,9 @@ PACKAGE_VERSION_MINOR PACKAGE_VERSION_MAJOR HAVE_PYTHON_DOCS HAVE_CXX_DOCS +PYTHON_BREATHE +PYTHON_SPHINXA +PYTHON_SPHINXB DX_RULES PAPER_SIZE DOXYGEN_PAPER_SIZE @@ -708,8 +711,6 @@ HAVE_DOCKER DOCKER PYINSTALLFLAGS PYBUILDFLAGS -HAVE_PYTHON_BREATHE -HAVE_PYTHON_SPHINX PYTHON3 PYTHON HAVE_PYTHON @@ -882,6 +883,9 @@ enable_doxygen_chi enable_doxygen_html enable_doxygen_ps enable_doxygen_pdf +with_sphinx_build +with_sphinx_apidoc +with_breathe_apidoc ' ac_precious_vars='build_alias host_alias @@ -899,7 +903,10 @@ CXXCPP CTAGS PYTHON DOCKER -DOXYGEN_PAPER_SIZE' +DOXYGEN_PAPER_SIZE +PYTHON_SPHINXB +PYTHON_SPHINXA +PYTHON_BREATHE' # Initialize some variables set by options. @@ -1576,6 +1583,12 @@ Optional Packages: --with-pybuild-flags build flags for python (default='') --with-pyinstall-flags install flags for python (default='') --with-docker=[PATH] absolute path to docker executable + --with-sphinx-build=[PATH] + absolute path to sphinx-build executable + --with-sphinx-apidoc=[PATH] + absolute path to sphinx-apidoc executable + --with-breathe-apidoc=[PATH] + absolute path to breathe-apidoc executable Some influential environment variables: CC C compiler command @@ -1595,6 +1608,12 @@ Some influential environment variables: DOCKER Absolute path to docker executable DOXYGEN_PAPER_SIZE a4wide (default), a4, letter, legal or executive + PYTHON_SPHINXB + Absolute path to sphinx-build executable + PYTHON_SPHINXA + Absolute path to sphinx-apidoc executable + PYTHON_BREATHE + Absolute path to breathe-apidoc executable Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -22344,32 +22363,6 @@ else $as_nop printf "%s\n" "yes" >&6; } HAVE_PYTHON=1 -fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as sphinx" >&5 -printf %s "checking whether $PYTHON as sphinx... " >&6; } - if ! ${PYTHON} -c "import sphinx" 2>/dev/null -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - HAVE_PYTHON_SPHINX=1 - -fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON as breathe" >&5 -printf %s "checking whether $PYTHON as breathe... " >&6; } - if ! ${PYTHON} -c "import breathe" 2>/dev/null -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python documentation cannot not be built" >&5 -printf "%s\n" "$as_me: WARNING: python documentation cannot not be built" >&2;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - HAVE_PYTHON_BREATHE=1 - fi fi fi @@ -24653,6 +24646,445 @@ DX_RULES="${DX_SNIPPET_doc}" +if test x${HAVE_PYTHON} == x1 +then : + + + + + + + + + + + if test -z "$PYTHON_SPHINXB" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sphinx-build executable path has been provided" >&5 +printf %s "checking whether sphinx-build executable path has been provided... " >&6; } + +# Check whether --with-sphinx-build was given. +if test ${with_sphinx_build+y} +then : + withval=$with_sphinx_build; + if test "$withval" != yes && test "$withval" != no +then : + + PYTHON_SPHINXB="$withval" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SPHINXB" >&5 +printf "%s\n" "$PYTHON_SPHINXB" >&6; } + +else $as_nop + + PYTHON_SPHINXB="" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : + + # Extract the first word of "sphinx-build", so it can be a program name with args. +set dummy sphinx-build; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON_SPHINXB+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PYTHON_SPHINXB in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON_SPHINXB="$PYTHON_SPHINXB" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON_SPHINXB="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON_SPHINXB=$ac_cv_path_PYTHON_SPHINXB +if test -n "$PYTHON_SPHINXB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SPHINXB" >&5 +printf "%s\n" "$PYTHON_SPHINXB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + +fi + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + # Extract the first word of "sphinx-build", so it can be a program name with args. +set dummy sphinx-build; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON_SPHINXB+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PYTHON_SPHINXB in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON_SPHINXB="$PYTHON_SPHINXB" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON_SPHINXB="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON_SPHINXB=$ac_cv_path_PYTHON_SPHINXB +if test -n "$PYTHON_SPHINXB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SPHINXB" >&5 +printf "%s\n" "$PYTHON_SPHINXB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + + +fi + + + + + + + + + + + + + + + + + if test -z "$PYTHON_SPHINXA" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sphinx-apidoc executable path has been provided" >&5 +printf %s "checking whether sphinx-apidoc executable path has been provided... " >&6; } + +# Check whether --with-sphinx-apidoc was given. +if test ${with_sphinx_apidoc+y} +then : + withval=$with_sphinx_apidoc; + if test "$withval" != yes && test "$withval" != no +then : + + PYTHON_SPHINXA="$withval" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SPHINXA" >&5 +printf "%s\n" "$PYTHON_SPHINXA" >&6; } + +else $as_nop + + PYTHON_SPHINXA="" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : + + # Extract the first word of "sphinx-apidoc", so it can be a program name with args. +set dummy sphinx-apidoc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON_SPHINXA+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PYTHON_SPHINXA in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON_SPHINXA="$PYTHON_SPHINXA" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON_SPHINXA="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON_SPHINXA=$ac_cv_path_PYTHON_SPHINXA +if test -n "$PYTHON_SPHINXA"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SPHINXA" >&5 +printf "%s\n" "$PYTHON_SPHINXA" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + +fi + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + # Extract the first word of "sphinx-apidoc", so it can be a program name with args. +set dummy sphinx-apidoc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON_SPHINXA+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PYTHON_SPHINXA in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON_SPHINXA="$PYTHON_SPHINXA" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON_SPHINXA="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON_SPHINXA=$ac_cv_path_PYTHON_SPHINXA +if test -n "$PYTHON_SPHINXA"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SPHINXA" >&5 +printf "%s\n" "$PYTHON_SPHINXA" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + + +fi + + + + + + + + + + + + + + + + + if test -z "$PYTHON_BREATHE" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether breathe-apidoc executable path has been provided" >&5 +printf %s "checking whether breathe-apidoc executable path has been provided... " >&6; } + +# Check whether --with-breathe-apidoc was given. +if test ${with_breathe_apidoc+y} +then : + withval=$with_breathe_apidoc; + if test "$withval" != yes && test "$withval" != no +then : + + PYTHON_BREATHE="$withval" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_BREATHE" >&5 +printf "%s\n" "$PYTHON_BREATHE" >&6; } + +else $as_nop + + PYTHON_BREATHE="" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + if test "$withval" != no +then : + + # Extract the first word of "breathe-apidoc", so it can be a program name with args. +set dummy breathe-apidoc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON_BREATHE+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PYTHON_BREATHE in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON_BREATHE="$PYTHON_BREATHE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON_BREATHE="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON_BREATHE=$ac_cv_path_PYTHON_BREATHE +if test -n "$PYTHON_BREATHE"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_BREATHE" >&5 +printf "%s\n" "$PYTHON_BREATHE" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + +fi + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + # Extract the first word of "breathe-apidoc", so it can be a program name with args. +set dummy breathe-apidoc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PYTHON_BREATHE+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PYTHON_BREATHE in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON_BREATHE="$PYTHON_BREATHE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON_BREATHE="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON_BREATHE=$ac_cv_path_PYTHON_BREATHE +if test -n "$PYTHON_BREATHE"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_BREATHE" >&5 +printf "%s\n" "$PYTHON_BREATHE" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + +fi + + +fi + + + + + + +fi + HAVE_CXX_DOCS=0 HAVE_PYTHON_DOCS=0 @@ -24666,12 +25098,12 @@ else $as_nop if test x${PYTHON} != xno then : - if test x${HAVE_PYTHON_SPHINX} != x1 + if test x${PYTHON_SPHINXB} = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the sphinx module, python documentation cannot not be built" >&5 printf "%s\n" "$as_me: WARNING: missing the sphinx module, python documentation cannot not be built" >&2;} else $as_nop - if test x${HAVE_PYTHON_BREATHE} != x1 + if test x${PYTHON_BREATHE} = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the breathe module, python documentation cannot not be built" >&5 printf "%s\n" "$as_me: WARNING: missing the breathe module, python documentation cannot not be built" >&2;} @@ -24801,7 +25233,7 @@ fi CXXFLAGS="$CXXFLAGS $lt_prog_compiler_pic_CXX" NVCCFLAGS="$NVCCFLAGS -Xcompiler \"$lt_prog_compiler_pic_CXX\"" -ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile share/bifrost.pc src/bifrost/config.h" +ac_config_files="$ac_config_files config.mk Makefile src/Makefile python/Makefile docs/Makefile share/bifrost.pc src/bifrost/config.h" cat >confcache <<\_ACEOF @@ -25901,6 +26333,7 @@ do "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; + "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "share/bifrost.pc") CONFIG_FILES="$CONFIG_FILES share/bifrost.pc" ;; "src/bifrost/config.h") CONFIG_FILES="$CONFIG_FILES src/bifrost/config.h" ;; From 27f28348a2424433b112fada78744c1815b4a716 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 29 May 2024 15:50:18 -0600 Subject: [PATCH 1077/1155] More verbose about sphinix components. --- configure.ac | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 59c52ef71..48577c723 100644 --- a/configure.ac +++ b/configure.ac @@ -294,10 +294,12 @@ AS_IF([test x${DX_DOXYGEN} == x], [AC_SUBST(HAVE_CXX_DOCS, 1) AS_IF([test x${PYTHON} != xno], [AS_IF([test x${PYTHON_SPHINXB} = x], - [AC_MSG_WARN([missing the sphinx module, python documentation cannot not be built])], - [AS_IF([test x${PYTHON_BREATHE} = x], - [AC_MSG_WARN([missing the breathe module, python documentation cannot not be built])], - [AC_SUBST(HAVE_PYTHON_DOCS, 1)])])])]) + [AC_MSG_WARN([missing the sphinx-build, python documentation cannot not be built])], + [AS_IF([test x${PYTHON_SPHINXA} = x], + [AC_MSG_WARN([missing the sphinx-apidoc, python documentation cannot not be built])], + [AS_IF([test x${PYTHON_BREATHE} = x], + [AC_MSG_WARN([missing the breathe-apidoc, python documentation cannot not be built])], + [AC_SUBST(HAVE_PYTHON_DOCS, 1)])])])])]) # Version splitting From 9aab2f2f400a3882f7e2acbd36b5e565585aaeae Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 29 May 2024 15:50:35 -0600 Subject: [PATCH 1078/1155] Rebuild configure. --- configure | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 56939a021..158cca187 100755 --- a/configure +++ b/configure @@ -25100,13 +25100,18 @@ else $as_nop then : if test x${PYTHON_SPHINXB} = x then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the sphinx module, python documentation cannot not be built" >&5 -printf "%s\n" "$as_me: WARNING: missing the sphinx module, python documentation cannot not be built" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the sphinx-build, python documentation cannot not be built" >&5 +printf "%s\n" "$as_me: WARNING: missing the sphinx-build, python documentation cannot not be built" >&2;} +else $as_nop + if test x${PYTHON_SPHINXA} = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the sphinx-apidoc, python documentation cannot not be built" >&5 +printf "%s\n" "$as_me: WARNING: missing the sphinx-apidoc, python documentation cannot not be built" >&2;} else $as_nop if test x${PYTHON_BREATHE} = x then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the breathe module, python documentation cannot not be built" >&5 -printf "%s\n" "$as_me: WARNING: missing the breathe module, python documentation cannot not be built" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the breathe-apidoc, python documentation cannot not be built" >&5 +printf "%s\n" "$as_me: WARNING: missing the breathe-apidoc, python documentation cannot not be built" >&2;} else $as_nop HAVE_PYTHON_DOCS=1 @@ -25114,6 +25119,7 @@ fi fi fi fi +fi # Version splitting From c57de2264a21f5353bdf84187da20e63602c2cc2 Mon Sep 17 00:00:00 2001 From: sarah chastain Date: Mon, 3 Jun 2024 10:41:27 -0600 Subject: [PATCH 1079/1155] added one import statement --- tools/like_top.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/like_top.py b/tools/like_top.py index 8f9e8d4f2..e3e612e8f 100755 --- a/tools/like_top.py +++ b/tools/like_top.py @@ -28,6 +28,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import os +import sys import glob import time import curses From dce4eb1c5fb49d39abb5529847004002f7837d2f Mon Sep 17 00:00:00 2001 From: sarah chastain Date: Mon, 3 Jun 2024 11:01:46 -0600 Subject: [PATCH 1080/1155] Revert "Merge branch 'master' of github.com:ledatelescope/bifrost" This reverts commit 09b9b3fcfc5adb1968c881d0e92d86c00fa018c6, reversing changes made to c57de2264a21f5353bdf84187da20e63602c2cc2. --- .github/workflows/main.yml | 4 +++- test/test_scripts.py | 2 +- test/test_tutorial.py | 1 + tools/like_pmap.py | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fb5b08ac3..9386f2708 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,6 +24,8 @@ jobs: include: - os: ubuntu-20.04 python-version: '3.6' + - os: macos-latest + python-version: '3.6' fail-fast: false steps: - name: "Software Install - Ubuntu" @@ -49,7 +51,7 @@ jobs: gawk \ gnu-sed \ pkg-config - - uses: actions/setup-python@v5.1.0 + - uses: actions/setup-python@v5.0.0 with: python-version: ${{ matrix.python-version }} - name: "Software Install - Python" diff --git a/test/test_scripts.py b/test/test_scripts.py index b1b5acaf8..03a061932 100644 --- a/test/test_scripts.py +++ b/test/test_scripts.py @@ -53,7 +53,7 @@ pass run_scripts_tests &= (sys.version_info[0] >= 3) -_LINT_RE = re.compile(r'(?P.*?)\:(?P\d+)\: \[(?P.*?)\] (?P.*)') +_LINT_RE = re.compile('(?P.*?)\:(?P\d+)\: \[(?P.*?)\] (?P.*)') @unittest.skipUnless(run_scripts_tests, "requires the 'pylint' module") class ScriptTest(unittest.TestCase): diff --git a/test/test_tutorial.py b/test/test_tutorial.py index e75c06c3b..767b2b7d2 100644 --- a/test/test_tutorial.py +++ b/test/test_tutorial.py @@ -32,6 +32,7 @@ import unittest import glob import sys +import re import os from tempfile import mkdtemp from shutil import rmtree diff --git a/tools/like_pmap.py b/tools/like_pmap.py index a35251f43..f5a2e2ee4 100755 --- a/tools/like_pmap.py +++ b/tools/like_pmap.py @@ -92,7 +92,7 @@ def main(args): raise RuntimeError("Cannot find NUMA memory info for PID: %i" % args.pid) # Parse out the anonymous entries in this file - _numaRE = re.compile(r'(?P[0-9a-f]+).*[(anon)|(mapped)]=(?P\d+).*(swapcache=(?P\d+))?.*N(?P\d+)=(?P\d+)') + _numaRE = re.compile('(?P[0-9a-f]+).*[(anon)|(mapped)]=(?P\d+).*(swapcache=(?P\d+))?.*N(?P\d+)=(?P\d+)') areas = {} files = {} for line in numaInfo.split('\n'): From f779c504804f9e8092b7b165b8d786de75b17799 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 2 Jul 2024 09:12:59 -0600 Subject: [PATCH 1081/1155] Include the Python version with the telemetry. --- python/bifrost/telemetry/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python/bifrost/telemetry/__init__.py b/python/bifrost/telemetry/__init__.py index fd6e8ac26..a3d1951ae 100644 --- a/python/bifrost/telemetry/__init__.py +++ b/python/bifrost/telemetry/__init__.py @@ -27,6 +27,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import os +import sys import time import uuid import atexit @@ -92,6 +93,7 @@ def __init__(self, key, version=bifrost.version.__version__): # Setup self.key = key self.version = version + self.py_version = "%i.%i" % (sys.version_info.major, sys.version_info.minor) # Session reference self._session_start = time.time() @@ -147,6 +149,7 @@ def send(self, final=False): payload = urlencode({'timestamp' : int(tNow), 'key' : self.key, 'version' : self.version, + 'py_version' : self.py_version, 'session_time': "%.6f" % ((tNow-self._session_start) if final else 0.0,), 'payload' : payload}) uh = urlopen('https://fornax.phys.unm.edu/telemetry/bifrost.php', payload.encode(), From ec07ffa08a35765b53346c74f470fede8e27a656 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 15 Jul 2024 12:53:50 -0400 Subject: [PATCH 1082/1155] Write PID to Lockfile --- src/fileutils.cpp | 107 ++++++++++++++++++++++++++++------------------ src/fileutils.hpp | 1 + 2 files changed, 67 insertions(+), 41 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 59479c9ac..0793827b9 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -29,6 +29,7 @@ #include "fileutils.hpp" #include #include +#include // strerror #if defined(HAVE_CXX_FILESYSTEM) && HAVE_CXX_FILESYSTEM #include @@ -188,52 +189,74 @@ std::string get_dirname(std::string filename) { #endif } -/* NOTE: In case of abnormal exit (such as segmentation fault or other signal), - the lock file will not be removed, and the next attempt to lock might busy- - wait until the file is manually deleted. If this is a common issue, we could - potentially write the PID into the lock file to help with tracking whether - the process died. */ LockFile::LockFile(std::string lockfile) : _lockfile(lockfile) { - time_t start = time(NULL), elapsed = 0; - int busycount = 0; - int busyinterval = 1 << 17; - while( true ) { - _fd = open(_lockfile.c_str(), O_CREAT, 600); - flock(_fd, LOCK_EX); - struct stat fd_stat, lockfile_stat; - fstat(_fd, &fd_stat); - stat(_lockfile.c_str(), &lockfile_stat); - // Compare inodes - if( fd_stat.st_ino == lockfile_stat.st_ino ) { - // Got the lock - if(elapsed > 0) { - std::cerr << "NOTE: acquired " << lockfile - << std::endl; - } - break; - } - busycount++; - close(_fd); - if(busycount % busyinterval == 0) { - elapsed = time(NULL) - start; - if(elapsed >= 5) { - std::cerr << "NOTE: waiting " << elapsed - << "s for " << lockfile << std::endl; - busyinterval = busycount; - } - } - } + time_t start = time(NULL), elapsed = 0; + long busycount = 0; + long busyinterval = 1 << 17; + pid_t pid = getpid(); + while( true ) { + _fd = open(_lockfile.c_str(), O_CREAT|O_RDWR, S_IRUSR|S_IWUSR); + if( _fd == -1 ) { + if(busycount == 0) { + std::cerr << "ERROR: could not create " << lockfile << ": " + << strerror(errno) << std::endl; + } + } + else { + if( flock(_fd, LOCK_EX | LOCK_NB) == 0 ) { + struct stat fd_stat, lockfile_stat; + fstat(_fd, &fd_stat); + stat(_lockfile.c_str(), &lockfile_stat); + if( fd_stat.st_ino == lockfile_stat.st_ino ) { + // We acquired the lock. Announce it only if we announced waiting. + if(elapsed > 0) { + std::cerr << "NOTE: acquired " << lockfile << std::endl; + } + // Exit the busy loop + break; + } + // Locking succeeded, but inodes were different so try again. + flock(_fd, LOCK_UN); + } + close(_fd); + } + busycount++; + if(busycount % busyinterval == 0) { + elapsed = time(NULL) - start; + if(elapsed >= 5) { + std::cerr << "NOTE: waiting " << elapsed + << "s for " << lockfile << std::endl; + busyinterval = busycount; + } + } + } + // We have the lock, so try writing PID. + if(ftruncate(_fd, 0) == -1) { + std::cerr << "WARNING: could not truncate " << lockfile << ": " + << strerror(errno) << std::endl; + } + else { + std::ostringstream ss; + ss << pid << '\n'; + std::string buf = ss.str(); + if(write(_fd, buf.c_str(), buf.size()) != (ssize_t)buf.size()) { + std::cerr << "WARNING: could not write to " << lockfile << ": " + << strerror(errno) << std::endl; + } + } } LockFile::~LockFile() { - unlink(_lockfile.c_str()); - flock(_fd, LOCK_UN); + unlink(_lockfile.c_str()); + flock(_fd, LOCK_UN); + close(_fd); } #ifdef FILEUTILS_LOCKFILE_TEST -// This is a little test program for LockFile, to simulate -// a leftover lock file. It should look something like this: +// This is a little test program for LockFile. Run it in two terminals +// to simulate race conditions, or kill one to leave a a leftover lock file. +// Output should look something like this: // Initiating lock... // NOTE: waiting 5s for ./myfile.lock @@ -243,11 +266,13 @@ LockFile::~LockFile() { // [Delete the file from another terminal] // NOTE: acquired ./myfile.lock // Lock acquired... exiting + int main() { - int fd = open("./myfile.lock", O_CREAT, 600); std::cerr << "Initiating lock..." << std::endl; - LockFile("./myfile.lock"); - std::cerr << "Lock acquired... exiting" << std::endl; + LockFile lock("./myfile.lock"); + std::cerr << "Lock acquired, 'working' for 15s..." << std::endl; + sleep(15); + std::cerr << "Work finished, releasing lock..." << std::endl; return 0; } #endif diff --git a/src/fileutils.hpp b/src/fileutils.hpp index 7664a1cfb..0017c3966 100644 --- a/src/fileutils.hpp +++ b/src/fileutils.hpp @@ -36,6 +36,7 @@ #include // For getpid #include // For getpwuid #include +#include #if defined(__APPLE__) && __APPLE__ #include From 75edbcfed4de480c6fab348707356162456cddfc Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 16 Jul 2024 11:51:40 -0600 Subject: [PATCH 1083/1155] Update README.md clarify ctags install --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6bee4c149..6961bdcab 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,8 @@ go to the following [link](https://colab.research.google.com/github/ledatelescop ### C Dependencies +If using Ubuntu or another Debian-based linux distribution: + $ sudo apt-get install exuberant-ctags ### Python Dependencies From df2201124f38f562a95b62439b09496ad5ff1d48 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 16 Jul 2024 11:53:51 -0600 Subject: [PATCH 1084/1155] Update README.md Further clarification on ctags install --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6961bdcab..16d688790 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,8 @@ If using Ubuntu or another Debian-based linux distribution: $ sudo apt-get install exuberant-ctags +Otherwise check https://ctags.sourceforge.net/ for install instructions. + ### Python Dependencies * numpy From 1376fbbd750b2dcfa63a9c89b19469f15247d5d3 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Tue, 16 Jul 2024 12:01:43 -0600 Subject: [PATCH 1085/1155] Update README.md Clarifications to docs instructions --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 16d688790..558d14eaa 100644 --- a/README.md +++ b/README.md @@ -175,8 +175,17 @@ your machine. ### Building the Docs from Scratch -Install sphinx and breathe using pip, and also install Doxygen. +Install breathe using pip: + $ python -m pip install breathe sphinx + +Also install Doxygen using your package manager. +In Ubuntu, for example: + + $ sudo apt install Doxygen + +Otherwise check https://www.doxygen.nl/ for Doxygen install instructions. + Doxygen documentation can be generated by running: $ make doc From 23530b8b648fe3cdeb59f62f04ef17abf8af33d8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 16 Jul 2024 12:13:08 -0600 Subject: [PATCH 1086/1155] Adjust commands to match. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 558d14eaa..955757048 100644 --- a/README.md +++ b/README.md @@ -177,12 +177,12 @@ your machine. Install breathe using pip: - $ python -m pip install breathe sphinx + $ sudo pip install breathe sphinx Also install Doxygen using your package manager. In Ubuntu, for example: - $ sudo apt install Doxygen + $ sudo apt-get install doxygen Otherwise check https://www.doxygen.nl/ for Doxygen install instructions. From 89c6d74b964b1072001769f6281f65ed3120cd3a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 16 Jul 2024 12:16:19 -0600 Subject: [PATCH 1087/1155] See if numpy<2 helps. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9386f2708..64ae9a060 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -57,7 +57,7 @@ jobs: - name: "Software Install - Python" run: python -m pip install \ setuptools \ - numpy \ + "numpy<2" \ matplotlib \ contextlib2 \ simplejson \ From b0a73e8914f0f7800e1108411f0cc6582a4cd969 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 16 Jul 2024 14:37:22 -0600 Subject: [PATCH 1088/1155] These need memory binding as well. --- src/packet_capture.hpp | 35 ++++++++++++++++++----------------- src/packet_writer.hpp | 27 ++++++++++++++------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index d077485c4..077cb8a2c 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -147,15 +147,16 @@ class AlignedBuffer { inline T const& operator[](size_t i) const { return _buf[i]; } }; -class PacketCaptureMethod { +class PacketCaptureMethod: public BoundThread { protected: int _fd; size_t _pkt_size_max; - AlignedBuffer _buf; + AlignedBuffer _buf; BFiomethod _io_method; + int _core; public: - PacketCaptureMethod(int fd, size_t pkt_size_max=9000, BFiomethod io_method=BF_IO_GENERIC) - : _fd(fd), _pkt_size_max(pkt_size_max), _buf(pkt_size_max), _io_method(io_method) {} + PacketCaptureMethod(int fd, size_t pkt_size_max=9000, BFiomethod io_method=BF_IO_GENERIC, int core=-1) + : BoundThread(core), _fd(fd), _pkt_size_max(pkt_size_max), _buf(pkt_size_max), _io_method(io_method), _core(core) {} virtual int recv_packet(uint8_t** pkt_ptr, int flags=0) { return 0; } @@ -168,8 +169,8 @@ class PacketCaptureMethod { class DiskPacketReader : public PacketCaptureMethod { public: - DiskPacketReader(int fd, size_t pkt_size_max=9000) - : PacketCaptureMethod(fd, pkt_size_max, BF_IO_DISK) {} + DiskPacketReader(int fd, size_t pkt_size_max=9000, int core=-1) + : PacketCaptureMethod(fd, pkt_size_max, BF_IO_DISK, core) {} int recv_packet(uint8_t** pkt_ptr, int flags=0) { *pkt_ptr = &_buf[0]; return ::read(_fd, &_buf[0], _buf.size()); @@ -234,8 +235,8 @@ class UDPPacketReceiver : public PacketCaptureMethod { VMAReceiver _vma; #endif public: - UDPPacketReceiver(int fd, size_t pkt_size_max=JUMBO_FRAME_SIZE) - : PacketCaptureMethod(fd, pkt_size_max, BF_IO_UDP) + UDPPacketReceiver(int fd, size_t pkt_size_max=JUMBO_FRAME_SIZE, int core=-1) + : PacketCaptureMethod(fd, pkt_size_max, BF_IO_UDP, core) #if BF_VMA_ENABLED , _vma(fd) #endif @@ -262,8 +263,8 @@ class UDPPacketSniffer : public PacketCaptureMethod { VMAReceiver _vma; #endif public: - UDPPacketSniffer(int fd, size_t pkt_size_max=JUMBO_FRAME_SIZE) - : PacketCaptureMethod(fd, pkt_size_max, BF_IO_SNIFFER) + UDPPacketSniffer(int fd, size_t pkt_size_max=JUMBO_FRAME_SIZE, int core=-1) + : PacketCaptureMethod(fd, pkt_size_max, BF_IO_SNIFFER, core) #if BF_VMA_ENABLED , _vma(fd) #endif @@ -292,8 +293,8 @@ class UDPPacketSniffer : public PacketCaptureMethod { class UDPVerbsReceiver : public PacketCaptureMethod { Verbs _ibv; public: - UDPVerbsReceiver(int fd, size_t pkt_size_max=JUMBO_FRAME_SIZE) - : PacketCaptureMethod(fd, pkt_size_max, BF_IO_VERBS), _ibv(fd, pkt_size_max) {} + UDPVerbsReceiver(int fd, size_t pkt_size_max=JUMBO_FRAME_SIZE, int core=-1) + : PacketCaptureMethod(fd, pkt_size_max, BF_IO_VERBS, core), _ibv(fd, pkt_size_max) {} inline int recv_packet(uint8_t** pkt_ptr, int flags=0) { *pkt_ptr = 0; return _ibv.recv_packet(pkt_ptr, flags); @@ -328,7 +329,7 @@ class PacketCaptureThread : public BoundThread { CAPTURE_NO_DATA = 1 << 3, CAPTURE_ERROR = 1 << 4 }; - PacketCaptureThread(PacketCaptureMethod* method, int nsrc, int core=0) + PacketCaptureThread(PacketCaptureMethod* method, int nsrc, int core=-1) : BoundThread(core), _method(method), _src_stats(nsrc), _have_pkt(false), _core(core) { this->reset_stats(); @@ -1446,14 +1447,14 @@ BFstatus BFpacketcapture_create(BFpacketcapture* obj, PacketCaptureMethod* method; if( backend == BF_IO_DISK ) { - method = new DiskPacketReader(fd, max_payload_size); + method = new DiskPacketReader(fd, max_payload_size, core); } else if( backend == BF_IO_UDP ) { - method = new UDPPacketReceiver(fd, max_payload_size); + method = new UDPPacketReceiver(fd, max_payload_size, core); } else if( backend == BF_IO_SNIFFER ) { - method = new UDPPacketSniffer(fd, max_payload_size); + method = new UDPPacketSniffer(fd, max_payload_size, core); #if defined BF_VERBS_ENABLED && BF_VERBS_ENABLED } else if( backend == BF_IO_VERBS ) { - method = new UDPVerbsReceiver(fd, max_payload_size); + method = new UDPVerbsReceiver(fd, max_payload_size, core); #endif } else { return BF_STATUS_UNSUPPORTED; diff --git a/src/packet_writer.hpp b/src/packet_writer.hpp index 03bd6d704..e5cd41c92 100644 --- a/src/packet_writer.hpp +++ b/src/packet_writer.hpp @@ -92,14 +92,15 @@ class RateLimiter { } }; -class PacketWriterMethod { +class PacketWriterMethod: public BoundThread { protected: int _fd; size_t _max_burst_size; RateLimiter _limiter; + int _core; public: - PacketWriterMethod(int fd, size_t max_burst_size=BF_SEND_NPKTBURST) - : _fd(fd), _max_burst_size(max_burst_size), _limiter(0) {} + PacketWriterMethod(int fd, size_t max_burst_size=BF_SEND_NPKTBURST, int core=-1) + : BoundThread(core), _fd(fd), _max_burst_size(max_burst_size), _limiter(0), _core(core) {} virtual ssize_t send_packets(char* hdrs, int hdr_size, char* data, @@ -116,8 +117,8 @@ class PacketWriterMethod { class DiskPacketWriter : public PacketWriterMethod { public: - DiskPacketWriter(int fd, size_t max_burst_size=BF_SEND_NPKTBURST) - : PacketWriterMethod(fd, max_burst_size) {} + DiskPacketWriter(int fd, size_t max_burst_size=BF_SEND_NPKTBURST, int core=-1) + : PacketWriterMethod(fd, max_burst_size, core) {} ssize_t send_packets(char* hdrs, int hdr_size, char* data, @@ -154,8 +155,8 @@ class UDPPacketSender : public PacketWriterMethod { mmsghdr* _mmsg; iovec* _iovs; public: - UDPPacketSender(int fd, size_t max_burst_size=BF_SEND_NPKTBURST) - : PacketWriterMethod(fd, max_burst_size), _last_count(0), _mmsg(NULL), _iovs(NULL) {} + UDPPacketSender(int fd, size_t max_burst_size=BF_SEND_NPKTBURST, int core=-1) + : PacketWriterMethod(fd, max_burst_size, core), _last_count(0), _mmsg(NULL), _iovs(NULL) {} ~UDPPacketSender() { if( _mmsg ) { free(_mmsg); @@ -240,8 +241,8 @@ class UDPVerbsSender : public PacketWriterMethod { mmsghdr* _mmsg; iovec* _iovs; public: - UDPVerbsSender(int fd, size_t max_burst_size=BF_VERBS_SEND_NPKTBURST) - : PacketWriterMethod(fd, max_burst_size), _ibv(fd, JUMBO_FRAME_SIZE), _last_size(0), + UDPVerbsSender(int fd, size_t max_burst_size=BF_VERBS_SEND_NPKTBURST, int core=-1) + : PacketWriterMethod(fd, max_burst_size, core), _ibv(fd, JUMBO_FRAME_SIZE), _last_size(0), _last_count(0), _mmsg(NULL), _iovs(NULL) {} ~UDPVerbsSender() { if( _mmsg ) { @@ -330,7 +331,7 @@ class PacketWriterThread : public BoundThread { int _core; public: - PacketWriterThread(PacketWriterMethod* method, int core=0) + PacketWriterThread(PacketWriterMethod* method, int core=-1) : BoundThread(core), _method(method), _core(core) { this->reset_stats(); } @@ -614,12 +615,12 @@ BFstatus BFpacketwriter_create(BFpacketwriter* obj, PacketWriterMethod* method; if( backend == BF_IO_DISK ) { - method = new DiskPacketWriter(fd); + method = new DiskPacketWriter(fd, core=core); } else if( backend == BF_IO_UDP ) { - method = new UDPPacketSender(fd); + method = new UDPPacketSender(fd, core=core); #if defined BF_VERBS_ENABLED && BF_VERBS_ENABLED } else if( backend == BF_IO_VERBS ) { - method = new UDPVerbsSender(fd); + method = new UDPVerbsSender(fd, core=core); #endif } else { return BF_STATUS_UNSUPPORTED; From 8243297c5a465e31caa84043103e6b7cd7d06205 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 17 Jul 2024 09:35:44 -0600 Subject: [PATCH 1089/1155] Drop calls to cudaDeviceSetSharedMemConfig() since this doesn't do anything outside of compute capability 3.x. --- src/transpose.cu | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/transpose.cu b/src/transpose.cu index 1a6078b97..a20a6903c 100644 --- a/src/transpose.cu +++ b/src/transpose.cu @@ -146,15 +146,6 @@ BFstatus transpose(int ndim, sizes[0]*out_strides[0] < (long)std::numeric_limits::max()); #if BF_CUDA_ENABLED - if( ELEMENT_SIZE == 6 || - ELEMENT_SIZE == 8 || - ELEMENT_SIZE == 16 ) { - // TODO: Doing this here might be a bad idea - cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte); - } - else { - cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeFourByte); - } if( can_use_int ) { kernel::transpose Date: Wed, 17 Jul 2024 09:40:18 -0600 Subject: [PATCH 1090/1155] We still support CUDA down to 10 so maybe wrap this code if we have the right compute capability to use it. --- src/transpose.cu | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/transpose.cu b/src/transpose.cu index a20a6903c..75747b1d9 100644 --- a/src/transpose.cu +++ b/src/transpose.cu @@ -146,6 +146,17 @@ BFstatus transpose(int ndim, sizes[0]*out_strides[0] < (long)std::numeric_limits::max()); #if BF_CUDA_ENABLED +#if BF_GPU_MIN_ARCH < 40 + if( ELEMENT_SIZE == 6 || + ELEMENT_SIZE == 8 || + ELEMENT_SIZE == 16 ) { + // TODO: Doing this here might be a bad idea + cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte); + } + else { + cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeFourByte); + } +#endif if( can_use_int ) { kernel::transpose Date: Wed, 17 Jul 2024 11:06:10 -0600 Subject: [PATCH 1091/1155] Force all CUDA-related configure checks to be run with .cu extensions to get around a recent change to how nvcc runs. --- config/cuda.m4 | 12 ++++++++++++ configure | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/config/cuda.m4 b/config/cuda.m4 index 987e69803..28a2410a0 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -39,10 +39,12 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" LIBS_save="$LIBS" + ac_ext_save="$ac_ext" ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="$LIBS -lcuda -lcudart" + ac_ext="cu" ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' AC_LINK_IFELSE([ @@ -63,6 +65,7 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" LIBS="$LIBS_save" + ac_ext="$ac_ext_save" fi if test "$HAVE_CUDA" = "1"; then @@ -151,9 +154,11 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" LIBS_save="$LIBS" + ac_ext_save="$ac_ext" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" + ax_ext="cu" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ @@ -205,6 +210,7 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" LIBS="$LIBS_save" + ac_ext="$ac_ext_save" else AC_SUBST([GPU_ARCHS], [$with_gpu_archs]) fi @@ -235,9 +241,11 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" LIBS_save="$LIBS" + ac_ext_save="$ac_ext" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" + ac_ext="cu" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ @@ -276,6 +284,7 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" LIBS="$LIBS_save" + ac_ext="$ac_ext_save" else AC_SUBST([GPU_SHAREDMEM], [$with_shared_mem]) fi @@ -294,9 +303,11 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" LIBS_save="$LIBS" + ac_ext_save="$ac_ext" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" + ac_ext="cu" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ @@ -312,5 +323,6 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" LIBS="$LIBS_save" + ac_ext="$ac_ext_save" fi ]) diff --git a/configure b/configure index b94108dcb..743cdcfd7 100755 --- a/configure +++ b/configure @@ -21429,16 +21429,19 @@ fi fi if test "$HAVE_CUDA" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA 10+ installation" >&5 printf %s "checking for a working CUDA 10+ installation... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" LIBS_save="$LIBS" + ac_ext_save="$ac_ext" ac_compile='$NVCC -c $NVCCFLAGS conftest.$ac_ext >&5' LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="$LIBS -lcuda -lcudart" + ac_ext="cu" ac_link='$NVCC -o conftest$ac_exeext $NVCCFLAGS $LDFLAGS $LIBS conftest.$ac_ext >&5' cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21478,6 +21481,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" LIBS="$LIBS_save" + ac_ext="$ac_ext_save" fi if test "$HAVE_CUDA" = "1"; then @@ -21595,9 +21599,11 @@ printf %s "checking which CUDA architectures to target... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" LIBS_save="$LIBS" + ac_ext_save="$ac_ext" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" + ax_ext="cu" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : @@ -21676,6 +21682,7 @@ fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" LIBS="$LIBS_save" + ac_ext="$ac_ext_save" else GPU_ARCHS=$with_gpu_archs @@ -21716,9 +21723,11 @@ printf %s "checking for minimum shared memory per block... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" LIBS_save="$LIBS" + ac_ext_save="$ac_ext" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" + ac_ext="cu" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : @@ -21783,6 +21792,7 @@ fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" LIBS="$LIBS_save" + ac_ext="$ac_ext_save" else GPU_SHAREDMEM=$with_shared_mem @@ -21808,9 +21818,11 @@ printf %s "checking for thrust pinned allocated support... " >&6; } CXXFLAGS_save="$CXXFLAGS" LDFLAGS_save="$LDFLAGS" LIBS_save="$LIBS" + ac_ext_save="$ac_ext" LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" LIBS="-lcuda -lcudart" + ac_ext="cu" ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : @@ -21854,6 +21866,7 @@ fi CXXFLAGS="$CXXFLAGS_save" LDFLAGS="$LDFLAGS_save" LIBS="$LIBS_save" + ac_ext="$ac_ext_save" fi From d8288d2f8ae1bb2271d7eb8260ca288d03bdcdeb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 17 Jul 2024 11:17:14 -0600 Subject: [PATCH 1092/1155] Fix the GPU shared memory check. --- config/cuda.m4 | 2 +- configure | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 28a2410a0..8e399c1f5 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -235,7 +235,7 @@ AC_DEFUN([AX_CHECK_CUDA], [default GPU shared memory per block in bytes (default=detect)])], [], [with_shared_mem='auto']) - if test "$with_gpu_archs" = "auto"; then + if test "$with_shared_mem" = "auto"; then AC_MSG_CHECKING([for minimum shared memory per block]) CXXFLAGS_save="$CXXFLAGS" diff --git a/configure b/configure index 743cdcfd7..f8cd229a5 100755 --- a/configure +++ b/configure @@ -21429,7 +21429,6 @@ fi fi if test "$HAVE_CUDA" = "1"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working CUDA 10+ installation" >&5 printf %s "checking for a working CUDA 10+ installation... " >&6; } @@ -21716,7 +21715,7 @@ else $as_nop with_shared_mem='auto' fi - if test "$with_gpu_archs" = "auto"; then + if test "$with_shared_mem" = "auto"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for minimum shared memory per block" >&5 printf %s "checking for minimum shared memory per block... " >&6; } From 450cbd1e0bc5f52292953f8e3380f05d78d59395 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 17 Jul 2024 11:32:18 -0600 Subject: [PATCH 1093/1155] Give up on numpy2 for now. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9386f2708..64ae9a060 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -57,7 +57,7 @@ jobs: - name: "Software Install - Python" run: python -m pip install \ setuptools \ - numpy \ + "numpy<2" \ matplotlib \ contextlib2 \ simplejson \ From d6d829599c338c264fc79efe991ebd0d979213ba Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 17 Jul 2024 11:39:25 -0600 Subject: [PATCH 1094/1155] We need a thrust::raw_pointer_cast() here as well. --- src/fft.cu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fft.cu b/src/fft.cu index b10f229de..fa2a5429e 100644 --- a/src/fft.cu +++ b/src/fft.cu @@ -275,7 +275,7 @@ BFstatus BFfft_impl::execute_impl(BFarray const* in, // We could potentially use a CUDA event as a lighter-weight // solution. cudaStreamSynchronize(g_cuda_stream); - CallbackData* h_callback_data = &_hv_callback_data[0]; + CallbackData* h_callback_data = thrust::raw_pointer_cast(&_hv_callback_data[0]); // WAR for CUFFT insisting that pointer be aligned to sizeof(cufftComplex) int alignment = (_nbit == 32 ? sizeof(cufftComplex) : From d4e952ee61e79c80face2dfc47692c2f871cba11 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 18 Jul 2024 14:08:01 -0600 Subject: [PATCH 1095/1155] include CUDA version info in docs --- README.md | 6 +++++ docs/source/Getting-started-guide.rst | 33 +++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 955757048..1b62c5154 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,12 @@ print "All done" **For a quick demo which you can run in-browser without installation, go to the following [link](https://colab.research.google.com/github/ledatelescope/bifrost/blob/master/BifrostDemo.ipynb).** +### CUDA + +CUDA is available at [link](https://developer.nvidia.com/cuda-downloads). You can check +[link](http://ledatelescope.github.io/bifrost/Getting-started-guide.html) to see +which versions of the CUDA toolkit have been confirmed to work with Bifrost. + ### C Dependencies If using Ubuntu or another Debian-based linux distribution: diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index 7fb0fd7ad..efdfc6965 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -58,8 +58,37 @@ try out a CPU-only version of Bifrost. Then, once you have that first experience, you can come back here for a speedup. If you are ready to work with a GPU, you will want to get the newest -`CUDA toolkit `__. Follow -the operating system-specific instructions to install. +`CUDA toolkit `__. Follow +the operating system-specific instructions to install. Note +the table below indicating what CUDA versions have been tested with +Bifrost and confirmed to be working. + +.. csv-table:: + :header: "OS","Linux Kernel","Driver Verson","GPU","Toolkit","Status" + :widths: 15,18,12,18,12,35 + + "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.0.3","Working" + "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.1.1","Working" + "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.2.2","Likely working" + "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.3.1","Working" + "Ubuntu 20.04","5.4.0-186-generic","470.239.06","Quadro K2200","11.4.4","Likely Working" + "Ubuntu 20.04","5.4.0-186-generic","470.239.06","Quadro K2200","11.5.2","CUDA_ERROR_UNSUPPORTED_PTX_VERSION" + "Ubuntu 20.04","5.4.0-186-generic","495.29.05","Quadro K2200","11.5.2","Likely Working" + "Ubuntu 18.04","4.15.0-88-generic","510.85.02","A4000","11.6.124","Working" + "Ubuntu 18.04","4.15.0-88-generic","510.85.02","RTX 2080Ti","11.6.124","Working" + "Ubuntu 20.04","4.4.0-174-generic","525.147.05","Titan RTX","11.6.55","Working" + "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","11.8.0","Won't Install CUDA" + "Ubuntu 20.04","5.4.0-186-generic","520.61.05","Quadro K2200","11.8.0","Likely Working" + "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","12.0.0","Likely Working" + "Ubuntu 20.04","5.4.0-147-generic","525.125.06","A5000","12.0.140","Working" + "Ubuntu 20.04","5.4.0-144-generic","525.125.06","A5000","12.0.140","Working" + "Ubuntu 20.04","5.4.0-144-generic","525.147.05","A4000","12.0.140","Working" + "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","12.1.0","CUDA_ERROR_UNSUPPORTED_PTX_VERSION" + "Debian 12","6.1.0-21-amd64","530.30.02","Quadro K2200","12.1.1","Likely Working" + "Debian 12","6.1.0-21-amd64","535.104.05","Quadro K2200","12.2.2","FFT bug: zeroed out data" + "Debian 12","6.1.0-21-amd64","545.23.08","Quadro K2200","12.3.2","Likely Working" + "Debian 12","6.1.0-21-amd64","550.54.15","Quadro K2200","12.4.1","Likely Working" + "Ubuntu 22.04","5.15.0-106-generic","555.42.06","GTX 980","12.5","Working" Other Dependencies ^^^^^^^^^^^^^^^^^^ From a6b5a4517a8b4f77ffe184c4ca2c6186dba66457 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 18 Jul 2024 14:09:48 -0600 Subject: [PATCH 1096/1155] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1b62c5154..5092fd461 100644 --- a/README.md +++ b/README.md @@ -97,9 +97,9 @@ go to the following [link](https://colab.research.google.com/github/ledatelescop ### CUDA -CUDA is available at [link](https://developer.nvidia.com/cuda-downloads). You can check -[link](http://ledatelescope.github.io/bifrost/Getting-started-guide.html) to see -which versions of the CUDA toolkit have been confirmed to work with Bifrost. +CUDA is available at https://developer.nvidia.com/cuda-downloads. You can check the +[Getting Started section](http://ledatelescope.github.io/bifrost/Getting-started-guide.html) +of the docs to see which versions of the CUDA toolkit have been confirmed to work with Bifrost. ### C Dependencies From 3d0a8c147f728fc263a3f032fd33725303e786ae Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Thu, 18 Jul 2024 14:10:25 -0600 Subject: [PATCH 1097/1155] Update README.md wording --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5092fd461..feda6c0d3 100644 --- a/README.md +++ b/README.md @@ -98,8 +98,8 @@ go to the following [link](https://colab.research.google.com/github/ledatelescop ### CUDA CUDA is available at https://developer.nvidia.com/cuda-downloads. You can check the -[Getting Started section](http://ledatelescope.github.io/bifrost/Getting-started-guide.html) -of the docs to see which versions of the CUDA toolkit have been confirmed to work with Bifrost. +["Getting Started guide"](http://ledatelescope.github.io/bifrost/Getting-started-guide.html) +in the docs to see which versions of the CUDA toolkit have been confirmed to work with Bifrost. ### C Dependencies From 6fd47cdd48ee29a9cdfcf3384ed62418d464a01f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 Jul 2024 07:29:08 -0600 Subject: [PATCH 1098/1155] Add an __init__.py file. --- test/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 test/__init__.py diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/test/__init__.py @@ -0,0 +1 @@ + From da5566d53bbeca9f9637eac3e63a1b59c2f56ee5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 19 Jul 2024 07:33:58 -0600 Subject: [PATCH 1099/1155] Use the correct version of Python. --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index dce84e94f..5468d1a4a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -34,7 +34,7 @@ endif test: #$(MAKE) -C $(SRC_DIR) test ifeq ($(HAVE_PYTHON),1) - cd test && ./download_test_data.sh ; python -m unittest discover + cd test && ./download_test_data.sh ; @PYTHON@ -m unittest discover endif .PHONY: test clean: From 61fbe382ad5fe54672a9a7da724098217fdc596f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 22 Jul 2024 11:18:18 -0600 Subject: [PATCH 1100/1155] Upgrade 11.2.2 to 'working'. --- docs/source/Getting-started-guide.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index efdfc6965..54d7e0d51 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -69,7 +69,7 @@ Bifrost and confirmed to be working. "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.0.3","Working" "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.1.1","Working" - "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.2.2","Likely working" + "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.2.2","Working" "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.3.1","Working" "Ubuntu 20.04","5.4.0-186-generic","470.239.06","Quadro K2200","11.4.4","Likely Working" "Ubuntu 20.04","5.4.0-186-generic","470.239.06","Quadro K2200","11.5.2","CUDA_ERROR_UNSUPPORTED_PTX_VERSION" From a28591576a8cff61fa4cb13f071ae82547817b96 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 22 Jul 2024 11:19:17 -0600 Subject: [PATCH 1101/1155] Typo. --- docs/source/Getting-started-guide.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index 54d7e0d51..b3e0d0508 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -64,7 +64,7 @@ the table below indicating what CUDA versions have been tested with Bifrost and confirmed to be working. .. csv-table:: - :header: "OS","Linux Kernel","Driver Verson","GPU","Toolkit","Status" + :header: "OS","Linux Kernel","Driver Version","GPU","Toolkit","Status" :widths: 15,18,12,18,12,35 "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.0.3","Working" From bb055d27f1efa83e5e6943685388621eea0ff2eb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 22 Jul 2024 11:27:33 -0600 Subject: [PATCH 1102/1155] Wording. --- docs/source/Getting-started-guide.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index b3e0d0508..31a979598 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -77,7 +77,7 @@ Bifrost and confirmed to be working. "Ubuntu 18.04","4.15.0-88-generic","510.85.02","A4000","11.6.124","Working" "Ubuntu 18.04","4.15.0-88-generic","510.85.02","RTX 2080Ti","11.6.124","Working" "Ubuntu 20.04","4.4.0-174-generic","525.147.05","Titan RTX","11.6.55","Working" - "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","11.8.0","Won't Install CUDA" + "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","11.8.0","CUDA Install Failed" "Ubuntu 20.04","5.4.0-186-generic","520.61.05","Quadro K2200","11.8.0","Likely Working" "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","12.0.0","Likely Working" "Ubuntu 20.04","5.4.0-147-generic","525.125.06","A5000","12.0.140","Working" From 9baceaaf594fff1f2cf7d286c636d94a0f27f8a0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 22 Jul 2024 11:36:05 -0600 Subject: [PATCH 1103/1155] likely working -> working; Issue warning about CUDA 11.8. --- docs/source/Getting-started-guide.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index 31a979598..63575bcc2 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -71,23 +71,23 @@ Bifrost and confirmed to be working. "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.1.1","Working" "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.2.2","Working" "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.3.1","Working" - "Ubuntu 20.04","5.4.0-186-generic","470.239.06","Quadro K2200","11.4.4","Likely Working" + "Ubuntu 20.04","5.4.0-186-generic","470.239.06","Quadro K2200","11.4.4","Working" "Ubuntu 20.04","5.4.0-186-generic","470.239.06","Quadro K2200","11.5.2","CUDA_ERROR_UNSUPPORTED_PTX_VERSION" - "Ubuntu 20.04","5.4.0-186-generic","495.29.05","Quadro K2200","11.5.2","Likely Working" + "Ubuntu 20.04","5.4.0-186-generic","495.29.05","Quadro K2200","11.5.2","Working" "Ubuntu 18.04","4.15.0-88-generic","510.85.02","A4000","11.6.124","Working" "Ubuntu 18.04","4.15.0-88-generic","510.85.02","RTX 2080Ti","11.6.124","Working" "Ubuntu 20.04","4.4.0-174-generic","525.147.05","Titan RTX","11.6.55","Working" "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","11.8.0","CUDA Install Failed" - "Ubuntu 20.04","5.4.0-186-generic","520.61.05","Quadro K2200","11.8.0","Likely Working" - "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","12.0.0","Likely Working" + "Ubuntu 20.04","5.4.0-186-generic","520.61.05","Quadro K2200","11.8.0","Known FIR and FFT Problems" + "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","12.0.0","Working" "Ubuntu 20.04","5.4.0-147-generic","525.125.06","A5000","12.0.140","Working" "Ubuntu 20.04","5.4.0-144-generic","525.125.06","A5000","12.0.140","Working" "Ubuntu 20.04","5.4.0-144-generic","525.147.05","A4000","12.0.140","Working" "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","12.1.0","CUDA_ERROR_UNSUPPORTED_PTX_VERSION" - "Debian 12","6.1.0-21-amd64","530.30.02","Quadro K2200","12.1.1","Likely Working" + "Debian 12","6.1.0-21-amd64","530.30.02","Quadro K2200","12.1.1","Working" "Debian 12","6.1.0-21-amd64","535.104.05","Quadro K2200","12.2.2","FFT bug: zeroed out data" - "Debian 12","6.1.0-21-amd64","545.23.08","Quadro K2200","12.3.2","Likely Working" - "Debian 12","6.1.0-21-amd64","550.54.15","Quadro K2200","12.4.1","Likely Working" + "Debian 12","6.1.0-21-amd64","545.23.08","Quadro K2200","12.3.2","Working" + "Debian 12","6.1.0-21-amd64","550.54.15","Quadro K2200","12.4.1","Working" "Ubuntu 22.04","5.15.0-106-generic","555.42.06","GTX 980","12.5","Working" Other Dependencies From ac9b7ab31ba02333bf87d23cd5390fc8c0b28267 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 22 Jul 2024 14:38:18 -0600 Subject: [PATCH 1104/1155] Remove entries that are install/version mis-match problems. --- docs/source/Getting-started-guide.rst | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index 63575bcc2..4f24cba3b 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -72,18 +72,15 @@ Bifrost and confirmed to be working. "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.2.2","Working" "Ubuntu 20.04","5.4.0-177-generic","520.61.05","RTX 2080Ti","11.3.1","Working" "Ubuntu 20.04","5.4.0-186-generic","470.239.06","Quadro K2200","11.4.4","Working" - "Ubuntu 20.04","5.4.0-186-generic","470.239.06","Quadro K2200","11.5.2","CUDA_ERROR_UNSUPPORTED_PTX_VERSION" "Ubuntu 20.04","5.4.0-186-generic","495.29.05","Quadro K2200","11.5.2","Working" "Ubuntu 18.04","4.15.0-88-generic","510.85.02","A4000","11.6.124","Working" "Ubuntu 18.04","4.15.0-88-generic","510.85.02","RTX 2080Ti","11.6.124","Working" "Ubuntu 20.04","4.4.0-174-generic","525.147.05","Titan RTX","11.6.55","Working" - "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","11.8.0","CUDA Install Failed" "Ubuntu 20.04","5.4.0-186-generic","520.61.05","Quadro K2200","11.8.0","Known FIR and FFT Problems" "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","12.0.0","Working" "Ubuntu 20.04","5.4.0-147-generic","525.125.06","A5000","12.0.140","Working" "Ubuntu 20.04","5.4.0-144-generic","525.125.06","A5000","12.0.140","Working" "Ubuntu 20.04","5.4.0-144-generic","525.147.05","A4000","12.0.140","Working" - "Debian 12","6.1.0-21-amd64","525.147.05 ","Quadro K2200","12.1.0","CUDA_ERROR_UNSUPPORTED_PTX_VERSION" "Debian 12","6.1.0-21-amd64","530.30.02","Quadro K2200","12.1.1","Working" "Debian 12","6.1.0-21-amd64","535.104.05","Quadro K2200","12.2.2","FFT bug: zeroed out data" "Debian 12","6.1.0-21-amd64","545.23.08","Quadro K2200","12.3.2","Working" From 70eb3395b8c7f1c8787e1867e49ba32b14b35b38 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 24 Jul 2024 10:00:51 -0600 Subject: [PATCH 1105/1155] More wording. --- docs/source/Getting-started-guide.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index 4f24cba3b..a12cd80bb 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -59,9 +59,12 @@ experience, you can come back here for a speedup. If you are ready to work with a GPU, you will want to get the newest `CUDA toolkit `__. Follow -the operating system-specific instructions to install. Note -the table below indicating what CUDA versions have been tested with -Bifrost and confirmed to be working. +the operating system-specific instructions to install. Be sure to install a +kernel driver that works with the version of toolkit that you are using since +version mismatches can lead to runtime errors. + +The table below indicates which CUDA toolkit and kernel driver versions Bifrost +has been tested against. .. csv-table:: :header: "OS","Linux Kernel","Driver Version","GPU","Toolkit","Status" From 3adca06ce33b6ed46d9dba3dbd9f676e9f87da40 Mon Sep 17 00:00:00 2001 From: Sarah Chastain Date: Mon, 19 Aug 2024 10:15:05 -0600 Subject: [PATCH 1106/1155] Update Getting-started-guide.rst Update python requirements --- docs/source/Getting-started-guide.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index a12cd80bb..c8189cf31 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -21,7 +21,7 @@ but higher ones should also work. Python dependencies ~~~~~~~~~~~~~~~~~~~ -*Bifrost is compatible with both in Python 2.7. and Python 3.x.* +*Bifrost is compatible with Python >3.6.* `pip `__ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 72540ee9ff6cb4767f2d3bb45512fdddd54a093f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 5 Sep 2024 15:41:12 -0600 Subject: [PATCH 1107/1155] Work around for #247. --- src/trace.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/trace.hpp b/src/trace.hpp index 35aad52be..608150ba4 100644 --- a/src/trace.hpp +++ b/src/trace.hpp @@ -32,8 +32,12 @@ #include "cuda.hpp" #if BF_CUDA_ENABLED +#if __has_include( ) +#include +#else #include #endif +#endif #include #include From 5b7476166c6d2ddeff4bc40ee4939c7f52a9300a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 5 Sep 2024 19:44:03 -0600 Subject: [PATCH 1108/1155] ibverb-support has been merged. --- tutorial/06_data_capture.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index bbea52062..aed4e7ab7 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -32,7 +32,7 @@ " raise exn\n", " !sudo apt-get -qq install exuberant-ctags libopenblas-dev librdmacm-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", - " ![ -d ~/bifrost/.git ] || git clone --branch ibverb-support https://github.com/ledatelescope/bifrost ~/bifrost\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure --disable-hwloc && make -j all && sudo make install)\n", " import bifrost" ], @@ -308,4 +308,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} From 5c980d12ecb156960c3a69b1402d08323c878190 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 5 Sep 2024 19:45:11 -0600 Subject: [PATCH 1109/1155] ibverb-support has been merged. --- tutorial/06_data_capture.ipynb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index aed4e7ab7..1ae2bd774 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -12,8 +12,7 @@ "\"Open\n", "\n", "Next we will look at how to use Bifrost to work with packetized data, either from the network or from packets recorded to a file. This is done through the `bifrost.packet_capture` module.\n", - "\n", - "**NOTE:** This section of the tutorial previews a new packet capture interface that is currently under development in the `ibverb-support` branch." + "\n" ] }, { From 9f1b5b8e74d1280383ea29ecc9609b59637d257e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 5 Sep 2024 19:51:00 -0600 Subject: [PATCH 1110/1155] So much has happened since this was last updated. --- CHANGELOG | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 32072a898..d1697a09e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,11 @@ +0.11.0 + * Dropped support for Python2 + * Merged the ibverb-support branch that brings in a new, more flexible packet capture interface + * Improved documentation about packet capture + * Improved documentation about CUDA support + * Improved documentation build process + * Various fixes for CUDA 12.x releases + 0.10.1 * Cleaned up the Makefile outputs * Added a disk cache for bifrost.map calls From 84cc3f9fa579d3a31a3ffae0be327460d045fcb2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 5 Sep 2024 19:52:48 -0600 Subject: [PATCH 1111/1155] Even more stuff. --- CHANGELOG | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index d1697a09e..e43b47114 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,9 @@ * Improved documentation about CUDA support * Improved documentation build process * Various fixes for CUDA 12.x releases + * Added support for gcc 13 + * Changed the file locking so that the user is warned if a block is waiting to acquire the lock + * Various deprecation cleanups 0.10.1 * Cleaned up the Makefile outputs From 9e6bd6c838d6c4242dae0c1d6a141f123e93bac8 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Nov 2024 10:54:49 -0700 Subject: [PATCH 1112/1155] Try universal ctags. --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index daa3bdde8..f68ddd751 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,7 +36,7 @@ jobs: build-essential \ ca-certificates \ curl \ - exuberant-ctags \ + universal-ctags \ gfortran \ git \ libhwloc-dev \ @@ -48,11 +48,11 @@ jobs: run: | brew install \ curl \ - ctags-exuberant \ gawk \ gnu-sed \ hwloc \ - pkg-config + pkg-config \ + universal-ctags - uses: actions/setup-python@v5.0.0 with: python-version: ${{ matrix.python-version }} From 103d24fa40371a9b77a41bc8b54c86523ec2d4bc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Nov 2024 12:50:51 -0700 Subject: [PATCH 1113/1155] Update the ctags check. --- configure | 4 ++-- configure.ac | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 8582912a7..9eca8cdaf 100755 --- a/configure +++ b/configure @@ -17662,12 +17662,12 @@ then : as_fn_error $? "Required program ctags was not found" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -printf %s "checking whether ${CTAGS} is exuberant... " >&6; } +printf %s "checking whether ${CTAGS} is sufficiently exuberant... " >&6; } if ! ${CTAGS} --version | grep -q Exuberant then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - as_fn_error $? "exuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 + as_fn_error $? "exuberant/universal ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } diff --git a/configure.ac b/configure.ac index 618faebbd..3bf763135 100644 --- a/configure.ac +++ b/configure.ac @@ -26,10 +26,10 @@ AX_WITH_PROG(CTAGS, ctags) AS_IF([test x${CTAGS} = x], [AC_MSG_ERROR([Required program ctags was not found])], []) -AC_MSG_CHECKING([whether ${CTAGS} is exuberant]) +AC_MSG_CHECKING([whether ${CTAGS} is sufficiently exuberant]) AS_IF([! ${CTAGS} --version | grep -q Exuberant], [AC_MSG_RESULT([no]) - AC_MSG_ERROR([exuberant ctags is required, but ${CTAGS} is a different version])], + AC_MSG_ERROR([exuberant/universal ctags is required, but ${CTAGS} is a different version])], [AC_MSG_RESULT([yes])]) AC_SUBST(SO_EXT, $shrext_cmds) From a4f63cfea2b2e4bf639f434b36a7ea425d003f52 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Nov 2024 12:52:51 -0700 Subject: [PATCH 1114/1155] README.md update for universal-ctags/Redhat. --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index feda6c0d3..1bc7d2b81 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,11 @@ in the docs to see which versions of the CUDA toolkit have been confirmed to wor If using Ubuntu or another Debian-based linux distribution: - $ sudo apt-get install exuberant-ctags + $ sudo apt-get install universal-ctags + +If using Redhat or another Redhat-based linux distribution: + + $ sudo dnf install ctags Otherwise check https://ctags.sourceforge.net/ for install instructions. From 71e8fe092cea83d2d00b9e4254e627b1e4d4b5a0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Nov 2024 12:55:13 -0700 Subject: [PATCH 1115/1155] universal-ctags here as well (does that actually work?) --- tutorial/00_getting_started.ipynb | 2 +- tutorial/01_useful_functions.ipynb | 4 ++-- tutorial/02_building_complexity.ipynb | 4 ++-- tutorial/03_putting_it_together.ipynb | 4 ++-- tutorial/04_pipelines.ipynb | 4 ++-- tutorial/05_block_logging.ipynb | 4 ++-- tutorial/06_data_capture.ipynb | 2 +- tutorial/07_high_level_api.ipynb | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb index 32f0e7cab..29498c214 100644 --- a/tutorial/00_getting_started.ipynb +++ b/tutorial/00_getting_started.ipynb @@ -37,7 +37,7 @@ "except ModuleNotFoundError:\n", " try:\n", " import google.colab\n", - " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy ctypesgen==1.0.2\n", " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", diff --git a/tutorial/01_useful_functions.ipynb b/tutorial/01_useful_functions.ipynb index bb17f7573..c6b4eed8e 100644 --- a/tutorial/01_useful_functions.ipynb +++ b/tutorial/01_useful_functions.ipynb @@ -39,7 +39,7 @@ "except ModuleNotFoundError:\n", " try:\n", " import google.colab\n", - " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", @@ -526,4 +526,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/tutorial/02_building_complexity.ipynb b/tutorial/02_building_complexity.ipynb index c0f3ecd0b..89b5fb440 100644 --- a/tutorial/02_building_complexity.ipynb +++ b/tutorial/02_building_complexity.ipynb @@ -27,7 +27,7 @@ "except ModuleNotFoundError:\n", " try:\n", " import google.colab\n", - " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", @@ -454,4 +454,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/tutorial/03_putting_it_together.ipynb b/tutorial/03_putting_it_together.ipynb index cb51882ec..158656f7e 100644 --- a/tutorial/03_putting_it_together.ipynb +++ b/tutorial/03_putting_it_together.ipynb @@ -26,7 +26,7 @@ "except ModuleNotFoundError:\n", " try:\n", " import google.colab\n", - " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", @@ -316,4 +316,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/tutorial/04_pipelines.ipynb b/tutorial/04_pipelines.ipynb index 918432ba2..575992594 100644 --- a/tutorial/04_pipelines.ipynb +++ b/tutorial/04_pipelines.ipynb @@ -28,7 +28,7 @@ " import google.colab\n", " except ModuleNotFoundError:\n", " raise exn\n", - " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure --disable-cuda && make -j all && sudo make install)\n", @@ -457,4 +457,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/tutorial/05_block_logging.ipynb b/tutorial/05_block_logging.ipynb index 180548924..6bb0a2884 100644 --- a/tutorial/05_block_logging.ipynb +++ b/tutorial/05_block_logging.ipynb @@ -28,7 +28,7 @@ " import google.colab\n", " except ModuleNotFoundError:\n", " raise exn\n", - " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure --disable-cuda && make -j all && sudo make install)\n", @@ -276,4 +276,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index 1ae2bd774..51adb1dbe 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -29,7 +29,7 @@ " import google.colab\n", " except ModuleNotFoundError:\n", " raise exn\n", - " !sudo apt-get -qq install exuberant-ctags libopenblas-dev librdmacm-dev software-properties-common build-essential\n", + " !sudo apt-get -qq install universal-ctags libopenblas-dev librdmacm-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure --disable-hwloc && make -j all && sudo make install)\n", diff --git a/tutorial/07_high_level_api.ipynb b/tutorial/07_high_level_api.ipynb index 2b383af55..343b43622 100644 --- a/tutorial/07_high_level_api.ipynb +++ b/tutorial/07_high_level_api.ipynb @@ -51,7 +51,7 @@ " import google.colab\n", " except ModuleNotFoundError:\n", " raise exn\n", - " !sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential\n", + " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure --disable-cuda && make -j all && sudo make install)\n", @@ -456,4 +456,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} From e2c136035edd649eea40afc2638ba62c12a3a8e7 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 11 Nov 2024 12:57:40 -0700 Subject: [PATCH 1116/1155] Missed updating these two files. --- BifrostDemo.ipynb | 2 +- docs/source/Getting-started-guide.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BifrostDemo.ipynb b/BifrostDemo.ipynb index 8ef5c0cc8..ad8bf6395 100644 --- a/BifrostDemo.ipynb +++ b/BifrostDemo.ipynb @@ -43,7 +43,7 @@ "# @title Install C++ deps\n", "%%shell\n", "\n", - "sudo apt-get -qq install exuberant-ctags libopenblas-dev software-properties-common build-essential" + "sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential" ] }, { diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index c8189cf31..7b55d2795 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -93,11 +93,11 @@ has been tested against. Other Dependencies ^^^^^^^^^^^^^^^^^^ -- exuberant-ctags +- universal-ctags - Basic build tools (make, gcc, etc.) On Ubuntu, the following command should grab everything you need: - ``sudo apt-get install build-essential software-properties-common exuberant-ctags`` + ``sudo apt-get install build-essential software-properties-common universal-ctags`` Bifrost install ~~~~~~~~~~~~~~~ From 828da73fd909e26858bcf1bc4b4eae0df2dea22d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 9 Dec 2024 07:50:46 -0700 Subject: [PATCH 1117/1155] Try a little harder for #249. --- docs/.readthedocs.yaml | 26 ++++++++++++++++++++++++++ docs/.rtd_environment.yaml | 15 +++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 docs/.readthedocs.yaml create mode 100644 docs/.rtd_environment.yaml diff --git a/docs/.readthedocs.yaml b/docs/.readthedocs.yaml new file mode 100644 index 000000000..2a8791321 --- /dev/null +++ b/docs/.readthedocs.yaml @@ -0,0 +1,26 @@ +version: 2 + +build: + os: ubuntu-22.04 + apt_packages: + - autoconf + - exuberant-ctags + - gawk + - gfortran + - grep + - g++ + - libtool + - make + tools: + python: "mambaforge-22.9" + +conda: + environment: docs/.rtd_environment.yaml + +python: + install: + - method: pip + path: . + +sphinx: + configuration: docs/source/conf.py diff --git a/docs/.rtd_environment.yaml b/docs/.rtd_environment.yaml new file mode 100644 index 000000000..d2dbd2189 --- /dev/null +++ b/docs/.rtd_environment.yaml @@ -0,0 +1,15 @@ +name: ledatelescope_bifrost_doc_env + +channels: + - conda-forge + +dependencies: + - numpy + - python + - scipy + - sphinx + - pip + - simplejson + - ctypesgen + - pip: + - pint From 1af88a3a7cc12a8bec14fb71fd2c9edb1f4bd6cb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 9 Dec 2024 07:56:11 -0700 Subject: [PATCH 1118/1155] Let's include the helper this time (#249). --- docs/.readthedocs.yaml | 5 ++++- docs/.rtd_helper.sh | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100755 docs/.rtd_helper.sh diff --git a/docs/.readthedocs.yaml b/docs/.readthedocs.yaml index 2a8791321..c5f5ccec5 100644 --- a/docs/.readthedocs.yaml +++ b/docs/.readthedocs.yaml @@ -13,6 +13,9 @@ build: - make tools: python: "mambaforge-22.9" + jobs: + post_create_environment: + - bash ./docs/.rtd_helper.sh conda: environment: docs/.rtd_environment.yaml @@ -20,7 +23,7 @@ conda: python: install: - method: pip - path: . + path: python sphinx: configuration: docs/source/conf.py diff --git a/docs/.rtd_helper.sh b/docs/.rtd_helper.sh new file mode 100755 index 000000000..175f0ccc3 --- /dev/null +++ b/docs/.rtd_helper.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +ROOT_PATH=`dirname $0` +cd ${ROOT_PATH}/../bifrost +INSTALL_PREFIX=`python -c "import os,sys; print(os.path.dirname(os.path.dirname(sys.executable)))"` +./configure --prefix=${INSTALL_PREFIX} +make -j all +make install From 91bdcf16ca373b89915b861704c0b4cb39615a45 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 9 Dec 2024 08:00:55 -0700 Subject: [PATCH 1119/1155] Add in doxygen and setuptools. Get the helper to build the docs. --- docs/.readthedocs.yaml | 1 + docs/.rtd_environment.yaml | 1 + docs/.rtd_helper.sh | 1 + 3 files changed, 3 insertions(+) diff --git a/docs/.readthedocs.yaml b/docs/.readthedocs.yaml index c5f5ccec5..e0d4ba2b1 100644 --- a/docs/.readthedocs.yaml +++ b/docs/.readthedocs.yaml @@ -4,6 +4,7 @@ build: os: ubuntu-22.04 apt_packages: - autoconf + - doxygen - exuberant-ctags - gawk - gfortran diff --git a/docs/.rtd_environment.yaml b/docs/.rtd_environment.yaml index d2dbd2189..77fd4dc6c 100644 --- a/docs/.rtd_environment.yaml +++ b/docs/.rtd_environment.yaml @@ -11,5 +11,6 @@ dependencies: - pip - simplejson - ctypesgen + - setuptools - pip: - pint diff --git a/docs/.rtd_helper.sh b/docs/.rtd_helper.sh index 175f0ccc3..0136f13d2 100755 --- a/docs/.rtd_helper.sh +++ b/docs/.rtd_helper.sh @@ -6,3 +6,4 @@ INSTALL_PREFIX=`python -c "import os,sys; print(os.path.dirname(os.path.dirname( ./configure --prefix=${INSTALL_PREFIX} make -j all make install +make docs From cc48079f4603e523d3d31a93be59fda25ac19e76 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 9 Dec 2024 08:06:42 -0700 Subject: [PATCH 1120/1155] Add in breathe (#249). --- docs/.rtd_environment.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/.rtd_environment.yaml b/docs/.rtd_environment.yaml index 77fd4dc6c..1881298ce 100644 --- a/docs/.rtd_environment.yaml +++ b/docs/.rtd_environment.yaml @@ -12,5 +12,6 @@ dependencies: - simplejson - ctypesgen - setuptools + - breathe - pip: - pint From 1edb4e5647f0d68d6f8ad386b528fc369d7a54a4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 9 Dec 2024 08:11:03 -0700 Subject: [PATCH 1121/1155] Move around the dependencies (#249). --- docs/.rtd_environment.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/.rtd_environment.yaml b/docs/.rtd_environment.yaml index 1881298ce..6295482c7 100644 --- a/docs/.rtd_environment.yaml +++ b/docs/.rtd_environment.yaml @@ -7,11 +7,11 @@ dependencies: - numpy - python - scipy - - sphinx - pip - simplejson - ctypesgen - setuptools - - breathe - pip: - pint + - breathe + - sphinx From 9da2041b1d4bb8b9861177d28a7a911778913c0d Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 9 Dec 2024 11:05:19 -0700 Subject: [PATCH 1122/1155] Make this universal as well. --- docs/.readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/.readthedocs.yaml b/docs/.readthedocs.yaml index e0d4ba2b1..0589b182d 100644 --- a/docs/.readthedocs.yaml +++ b/docs/.readthedocs.yaml @@ -5,7 +5,7 @@ build: apt_packages: - autoconf - doxygen - - exuberant-ctags + - universal-ctags - gawk - gfortran - grep From eefc974d0af324ff49d06569a91441d7225a070a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 11 Feb 2025 10:37:20 -0700 Subject: [PATCH 1123/1155] Drop Ubuntu 20.04/Python 3.6 from testing on GHA. --- .github/workflows/main.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0e7b9c0ee..d3d773f24 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,15 +21,10 @@ jobs: matrix: os: [self-hosted, ubuntu-latest, macos-latest] python-version: ['3.8', '3.10', '3.12'] - include: - - os: ubuntu-20.04 - python-version: '3.6' - - os: macos-latest - python-version: '3.6' fail-fast: false steps: - name: "Software Install - Ubuntu" - if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} + if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'self-hosted' }} run: | sudo apt-get update && \ sudo apt-get install -y \ @@ -88,7 +83,7 @@ jobs: nbformat \ nbconvert - name: "Software Install - PSRDADA" - if: ${{ matrix.os == 'ubuntu-20.04' || matrix.os == 'self-hosted' }} + if: ${{ matrix.os == 'self-hosted' }} run: | git clone git://git.code.sf.net/p/psrdada/code psrdada cd psrdada From 54cedf9ffe1831dc6eb6d08de9d7e4aa1e6874e9 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 18 Feb 2025 15:49:11 -0700 Subject: [PATCH 1124/1155] Work on getting codecov running agin. --- .github/workflows/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d3d773f24..66412f7d7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -127,8 +127,9 @@ jobs: UNITTEST_OS: ${{ matrix.os }} UNITTEST_PY: ${{ matrix.python-version }} if: ${{ matrix.os == 'self-hosted' && matrix.python-version == '3.8' }} - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 with: + token: ${{ secrets.CODECOV_TOKEN }} files: ./test/coverage.xml, ./testbench/coverage.xml env_vars: UNITTEST_OS,UNITTEST_PY fail_ci_if_error: false From 49005202eaf9650c97eec985307ea613f7be785c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 18 Feb 2025 16:01:15 -0700 Subject: [PATCH 1125/1155] Update to readthedocs.org. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index feda6c0d3..accad2e76 100644 --- a/README.md +++ b/README.md @@ -167,7 +167,7 @@ To run all CPU and GPU tests: ## Documentation -### [Online Bifrost Documentation](http://ledatelescope.github.io/bifrost/) +### [Online Bifrost Documentation](https://bifrost-htc.readthedocs.org) ### Building the Docs with Docker From 9550779a6139d4094b083ef6e7b32580cbe16cac Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 18 Feb 2025 16:58:21 -0700 Subject: [PATCH 1126/1155] Codecov badge update. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index accad2e76..0ca4d2a80 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ | **`CPU/GPU Build`** | **`Coverage`** | |-----------------|----------------| -|[![GHA](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml/badge.svg)](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml) | [![Coverage Status](https://codecov.io/gh/ledatelescope/bifrost/branch/master/graph/badge.svg?token=f3ge1zWe5P)](https://codecov.io/gh/ledatelescope/bifrost) | +|[![GHA](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml/badge.svg)](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml) | [![Codecov Status](https://codecov.io/gh/lwa-project/bifrost/graph/badge.svg?token=ShP5svhXk0)](https://codecov.io/gh/lwa-project/bifrost) | A stream processing framework for high-throughput applications. From c48289202db25501e6bec4e55c0812827b73ce4c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 18 Feb 2025 16:59:51 -0700 Subject: [PATCH 1127/1155] More updates for the move to lwa-project. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0ca4d2a80..34baaf3a7 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ | **`CPU/GPU Build`** | **`Coverage`** | |-----------------|----------------| -|[![GHA](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml/badge.svg)](https://github.com/ledatelescope/bifrost/actions/workflows/main.yml) | [![Codecov Status](https://codecov.io/gh/lwa-project/bifrost/graph/badge.svg?token=ShP5svhXk0)](https://codecov.io/gh/lwa-project/bifrost) | +|[![GHA](https://github.com/lwa-project/bifrost/actions/workflows/main.yml/badge.svg)](https://github.com/lwa-project/bifrost/actions/workflows/main.yml) | [![Codecov Status](https://codecov.io/gh/lwa-project/bifrost/graph/badge.svg?token=ShP5svhXk0)](https://codecov.io/gh/lwa-project/bifrost) | A stream processing framework for high-throughput applications. ### [![Paper](https://img.shields.io/badge/arXiv-1708.00720-blue.svg)](https://arxiv.org/abs/1708.00720) -### [Bifrost Documentation](http://ledatelescope.github.io/bifrost/) +### [Bifrost Documentation](https://bifrost-htc.readthedocs.org) See also the [Bifrost tutorial notebooks](tutorial/), which can be run on Google Colab or any Jupyter environment where Bifrost is installed From 4777af4adf9260b5a6a39e89fa276b5560b06b6c Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 26 Feb 2025 07:46:48 -0700 Subject: [PATCH 1128/1155] Updated the rest of the links (except for the Docker stuff). --- BifrostDemo.ipynb | 2 +- README.md | 4 ++-- configure | 10 +++++----- configure.ac | 2 +- docs/source/Getting-started-guide.rst | 2 +- docs/source/conf.py | 2 +- docs/source/your-first-blocks.rst | 2 +- python/setup.py | 2 +- test/benchmarks/setup.py | 2 +- tools/github_stats.py | 6 +++--- tutorial/.github/workflows/main.yml | 2 +- tutorial/00_getting_started.ipynb | 6 +++--- tutorial/01_useful_functions.ipynb | 4 ++-- tutorial/02_building_complexity.ipynb | 4 ++-- tutorial/03_putting_it_together.ipynb | 4 ++-- tutorial/04_pipelines.ipynb | 4 ++-- tutorial/05_block_logging.ipynb | 4 ++-- tutorial/06_data_capture.ipynb | 4 ++-- tutorial/07_high_level_api.ipynb | 4 ++-- tutorial/08_extending_bifrost.ipynb | 2 +- tutorial/README.md | 6 +++--- tutorial/docker/Dockerfile | 6 +++--- 22 files changed, 42 insertions(+), 42 deletions(-) diff --git a/BifrostDemo.ipynb b/BifrostDemo.ipynb index ad8bf6395..b8fd64842 100644 --- a/BifrostDemo.ipynb +++ b/BifrostDemo.ipynb @@ -97,7 +97,7 @@ "if [ -d \"${HOME}/bifrost_repo\" ]; then\n", " echo \"Already cloned.\"\n", "else\n", - " git clone https://github.com/ledatelescope/bifrost bifrost_repo\n", + " git clone https://github.com/lwa-project/bifrost bifrost_repo\n", "fi\n", "cd \"${HOME}/bifrost_repo\"\n", "git pull --all\n", diff --git a/README.md b/README.md index 7e53ea26e..899af5e64 100644 --- a/README.md +++ b/README.md @@ -93,12 +93,12 @@ print "All done" ## Installation **For a quick demo which you can run in-browser without installation, -go to the following [link](https://colab.research.google.com/github/ledatelescope/bifrost/blob/master/BifrostDemo.ipynb).** +go to the following [link](https://colab.research.google.com/github/lwa-project/bifrost/blob/master/BifrostDemo.ipynb).** ### CUDA CUDA is available at https://developer.nvidia.com/cuda-downloads. You can check the -["Getting Started guide"](http://ledatelescope.github.io/bifrost/Getting-started-guide.html) +["Getting Started guide"](https://bifrost-htc.readthedocs.io/en/latest/Getting-started-guide.html) in the docs to see which versions of the CUDA toolkit have been confirmed to work with Bifrost. ### C Dependencies diff --git a/configure b/configure index 9eca8cdaf..f84b0d5dd 100755 --- a/configure +++ b/configure @@ -621,7 +621,7 @@ PACKAGE_TARNAME='bifrost' PACKAGE_VERSION='0.10.0' PACKAGE_STRING='bifrost 0.10.0' PACKAGE_BUGREPORT='' -PACKAGE_URL='https://github.com/ledatelescope/bifrost/' +PACKAGE_URL='https://github.com/lwa-project/bifrost/' ac_unique_file="src/cuda.cpp" # Factoring default headers for most tests. @@ -1645,7 +1645,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. -bifrost home page: . +bifrost home page: . _ACEOF ac_status=$? fi @@ -17662,12 +17662,12 @@ then : as_fn_error $? "Required program ctags was not found" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -printf %s "checking whether ${CTAGS} is sufficiently exuberant... " >&6; } +printf %s "checking whether ${CTAGS} is exuberant... " >&6; } if ! ${CTAGS} --version | grep -q Exuberant then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - as_fn_error $? "exuberant/universal ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 + as_fn_error $? "exuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } @@ -26280,7 +26280,7 @@ Configuration commands: $config_commands Report bugs to the package provider. -bifrost home page: ." +bifrost home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` diff --git a/configure.ac b/configure.ac index 3bf763135..156dd86a0 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([bifrost], [0.10.0], [], [], [https://github.com/ledatelescope/bifrost/]) +AC_INIT([bifrost], [0.10.0], [], [], [https://github.com/lwa-project/bifrost/]) AC_LANG(C++) AC_CONFIG_SRCDIR([src/cuda.cpp]) diff --git a/docs/source/Getting-started-guide.rst b/docs/source/Getting-started-guide.rst index 7b55d2795..b8a78dbeb 100644 --- a/docs/source/Getting-started-guide.rst +++ b/docs/source/Getting-started-guide.rst @@ -105,7 +105,7 @@ Bifrost install Now you are ready to install Bifrost. Clone the GitHub master branch with -``git clone https://github.com/ledatelescope/bifrost``. +``git clone https://github.com/lwa-project/bifrost``. You will want to run `configure` to tailor Bifrost to you system. At the end of `configure` you will get a summary of how Bifrost will be built: diff --git a/docs/source/conf.py b/docs/source/conf.py index acbd56e50..e77df1a66 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -52,7 +52,7 @@ # General information about the project. project = u'bifrost' -copyright = u'2017, ledatelescope' +copyright = u'2025, ledatelescope' author = u'ledatelescope' # The version info for the project you're documenting, acts as replacement for diff --git a/docs/source/your-first-blocks.rst b/docs/source/your-first-blocks.rst index ace25c0e7..192f29dd5 100644 --- a/docs/source/your-first-blocks.rst +++ b/docs/source/your-first-blocks.rst @@ -102,7 +102,7 @@ the start allows useful metadata to propagate through the full pipeline, simplifying future blocks. Here is the source code for the -`binary\_io `__ +`binary\_io `__ block to read from data saved using the useful ``numpy.tofile()``: .. code:: python diff --git a/python/setup.py b/python/setup.py index d7546bf85..165e28759 100755 --- a/python/setup.py +++ b/python/setup.py @@ -60,7 +60,7 @@ description='Pipeline processing framework', author='Ben Barsdell', author_email='benbarsdell@gmail.com', - url='https://github.com/ledatelescope/bifrost', + url='https://github.com/lwa-project/bifrost', packages=find_packages(), scripts=scripts, python_requires='>=3.6', diff --git a/test/benchmarks/setup.py b/test/benchmarks/setup.py index b8d0a7fde..6e16b08c4 100644 --- a/test/benchmarks/setup.py +++ b/test/benchmarks/setup.py @@ -7,7 +7,7 @@ setup(name='bifrost_benchmarks', version='0.0', description='Shared benchmarking utility', - url='github.com/ledatelescope/bifrost', + url='github.com/lwa-project/bifrost', packages=['bifrost_benchmarks'], license='BSD-3-Clause', package_dir={'bifrost_benchmarks':'bifrost_benchmarks'}, diff --git a/tools/github_stats.py b/tools/github_stats.py index 2d2f4138f..3f5709dfc 100644 --- a/tools/github_stats.py +++ b/tools/github_stats.py @@ -2,7 +2,7 @@ # usage: [-h] --token-file PATH [--repo OWNER/REPO] [--output PATH] # Reads github user token from token-file path and appends one line of JSON to -# output path. Default repo is ledatelescope/bifrost. Default output is +# output path. Default repo is lwa-project/bifrost. Default output is # stdout. Accumulated log file is JSON-lines format # and can be queried using `jq`. Meant to be run daily. @@ -60,8 +60,8 @@ def main(token_file, repo, output): "--repo", "-r", metavar="OWNER/REPO", - default="ledatelescope/bifrost", - help="Grab statistics from this repo [ledatelescope/bifrost]", + default="lwa-project/bifrost", + help="Grab statistics from this repo [lwa-project/bifrost]", ) parser.add_argument( diff --git a/tutorial/.github/workflows/main.yml b/tutorial/.github/workflows/main.yml index b9ae1a808..93d09fdfe 100644 --- a/tutorial/.github/workflows/main.yml +++ b/tutorial/.github/workflows/main.yml @@ -47,7 +47,7 @@ jobs: nbconvert - name: "Software Install - Bifrost" run: | - git clone https://github.com/ledatelescope/bifrost + git clone https://github.com/lwa-project/bifrost cd bifrost ./configure make -j all diff --git a/tutorial/00_getting_started.ipynb b/tutorial/00_getting_started.ipynb index 29498c214..b75207c9c 100644 --- a/tutorial/00_getting_started.ipynb +++ b/tutorial/00_getting_started.ipynb @@ -9,9 +9,9 @@ "source": [ "# Getting started with Bifrost\n", "\n", - "These tutorials require an installation of Bifrost and a machine with a GPU. The simplest way to start is using Google Colab. There are tips for other ways to run them in [the README](https://github.com/ledatelescope/bifrost/blob/master/tutorial/README.md).\n", + "These tutorials require an installation of Bifrost and a machine with a GPU. The simplest way to start is using Google Colab. There are tips for other ways to run them in [the README](https://github.com/lwa-project/bifrost/blob/master/tutorial/README.md).\n", "\n", - "\"Open\n", + "\"Open\n", "\n", "Once Bifrost is installed you can load the Python API with\n", "```python\n", @@ -39,7 +39,7 @@ " import google.colab\n", " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy ctypesgen==1.0.2\n", - " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/lwa-project/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", " import bifrost\n", " except ModuleNotFoundError:\n", diff --git a/tutorial/01_useful_functions.ipynb b/tutorial/01_useful_functions.ipynb index c6b4eed8e..dff7d3989 100644 --- a/tutorial/01_useful_functions.ipynb +++ b/tutorial/01_useful_functions.ipynb @@ -9,7 +9,7 @@ "source": [ "# Useful Functions in Bifrost\n", "\n", - "\"Open\n", + "\"Open\n", "\n", "With the basics of how to get data onto and off of the GPU, we can now start to look at useful functions in Bifrost. Bifrost provides many functions that run on GPUs and interact via `bifrost.ndarray`s:\n", "\n", @@ -41,7 +41,7 @@ " import google.colab\n", " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", - " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/lwa-project/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", " import bifrost\n", " except ModuleNotFoundError:\n", diff --git a/tutorial/02_building_complexity.ipynb b/tutorial/02_building_complexity.ipynb index 89b5fb440..784d123ed 100644 --- a/tutorial/02_building_complexity.ipynb +++ b/tutorial/02_building_complexity.ipynb @@ -9,7 +9,7 @@ "source": [ "# Building Complexity\n", "\n", - "\"Open\n", + "\"Open\n", "\n", "The previous notebooks have shown how to work with data in Bifrost and highlighted several of its features. We are now going to use that to build a more complete example of how data reduction can be done with Bifrost.\n", "\n" @@ -29,7 +29,7 @@ " import google.colab\n", " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", - " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/lwa-project/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", " import bifrost\n", " except ModuleNotFoundError:\n", diff --git a/tutorial/03_putting_it_together.ipynb b/tutorial/03_putting_it_together.ipynb index 158656f7e..347049ed0 100644 --- a/tutorial/03_putting_it_together.ipynb +++ b/tutorial/03_putting_it_together.ipynb @@ -11,7 +11,7 @@ "\n", "In the previous section we introduced blocks, the fundamental building blocks of a pipeline in Bifrost. Now we will demonstrate how blocks are connected together and some of the considerations.\n", "\n", - "\"Open" + "\"Open" ] }, { @@ -28,7 +28,7 @@ " import google.colab\n", " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", - " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/lwa-project/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure && make -j all && sudo make install)\n", " import bifrost\n", " except ModuleNotFoundError:\n", diff --git a/tutorial/04_pipelines.ipynb b/tutorial/04_pipelines.ipynb index 575992594..5ce63a5f6 100644 --- a/tutorial/04_pipelines.ipynb +++ b/tutorial/04_pipelines.ipynb @@ -9,7 +9,7 @@ "source": [ "# Building Pipelines\n", "\n", - "\"Open\n", + "\"Open\n", "\n", "We now have all of the pieces needed to build a complete pipeline in the Bifrost framework. Although it is hard to run a full multi-threaded Bifrost pipeline inside a Jupyter notebook we will look at a few examples." ] @@ -30,7 +30,7 @@ " raise exn\n", " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", - " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/lwa-project/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure --disable-cuda && make -j all && sudo make install)\n", " import bifrost" ], diff --git a/tutorial/05_block_logging.ipynb b/tutorial/05_block_logging.ipynb index 6bb0a2884..2d153e45c 100644 --- a/tutorial/05_block_logging.ipynb +++ b/tutorial/05_block_logging.ipynb @@ -9,7 +9,7 @@ "source": [ "# Block Logging\n", "\n", - "\"Open\n", + "\"Open\n", "\n", "In the previous section we looked at how to put blocks and rings together to build a simple pipeline. In this section we will look at the tools Bifrost provides to analyze pipeline performance and how to integrate those into blocks.\n" ] @@ -30,7 +30,7 @@ " raise exn\n", " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", - " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/lwa-project/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure --disable-cuda && make -j all && sudo make install)\n", " import bifrost" ], diff --git a/tutorial/06_data_capture.ipynb b/tutorial/06_data_capture.ipynb index 51adb1dbe..3326c2774 100644 --- a/tutorial/06_data_capture.ipynb +++ b/tutorial/06_data_capture.ipynb @@ -9,7 +9,7 @@ "source": [ "# Data Capture\n", "\n", - "\"Open\n", + "\"Open\n", "\n", "Next we will look at how to use Bifrost to work with packetized data, either from the network or from packets recorded to a file. This is done through the `bifrost.packet_capture` module.\n", "\n" @@ -31,7 +31,7 @@ " raise exn\n", " !sudo apt-get -qq install universal-ctags libopenblas-dev librdmacm-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", - " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/lwa-project/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure --disable-hwloc && make -j all && sudo make install)\n", " import bifrost" ], diff --git a/tutorial/07_high_level_api.ipynb b/tutorial/07_high_level_api.ipynb index 343b43622..519cd7756 100644 --- a/tutorial/07_high_level_api.ipynb +++ b/tutorial/07_high_level_api.ipynb @@ -9,7 +9,7 @@ "source": [ "# High Level Python API\n", "\n", - "\"Open\n", + "\"Open\n", "\n", "Up until now we have been using the low level Python API that Bifrost has to show the inner workings of the framework and how to build a pipeline. However, Bifrost also has a high level Python API that makes building blocks and pipelines easier with less code. In this section we will look at this interface.\n", "\n", @@ -53,7 +53,7 @@ " raise exn\n", " !sudo apt-get -qq install universal-ctags libopenblas-dev software-properties-common build-essential\n", " !pip install -q contextlib2 pint simplejson scipy git+https://github.com/ctypesgen/ctypesgen.git\n", - " ![ -d ~/bifrost/.git ] || git clone https://github.com/ledatelescope/bifrost ~/bifrost\n", + " ![ -d ~/bifrost/.git ] || git clone https://github.com/lwa-project/bifrost ~/bifrost\n", " !(cd ~/bifrost && ./configure --disable-cuda && make -j all && sudo make install)\n", " import bifrost" ], diff --git a/tutorial/08_extending_bifrost.ipynb b/tutorial/08_extending_bifrost.ipynb index 9490079f1..8501b34f0 100644 --- a/tutorial/08_extending_bifrost.ipynb +++ b/tutorial/08_extending_bifrost.ipynb @@ -20,7 +20,7 @@ " 4. Build the necessary low level Python API wrappers needed in `python/bifrost/`.\n", " 5. Optionally, build the necessary high level Python API wrapper needed in `python/bifrost/blocks/`.\n", " \n", - "We are also working on a plugin system for Bifrost that should make this process easier by eliminating steps 3 and 4. To get a preview of this system see: https://github.com/ledatelescope/bifrost/tree/plugin-wrapper/plugins" + "We are also working on a plugin system for Bifrost that should make this process easier by eliminating steps 3 and 4. To get a preview of this system see: https://github.com/lwa-project/bifrost/tree/plugin-wrapper/plugins" ] }, { diff --git a/tutorial/README.md b/tutorial/README.md index 829f1fa7c..498a932be 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -1,9 +1,9 @@ # The Bifrost Tutorial -A collection of examples that show how to use various features in the [Bifrost framework](https://github.com/ledatelescope/bifrost/). Before beginning this tutorial it would be a good idea to familiarize yourself with the framework and its concepts: +A collection of examples that show how to use various features in the [Bifrost framework](https://github.com/lwa-project/bifrost/). Before beginning this tutorial it would be a good idea to familiarize yourself with the framework and its concepts: * Bifrost is described in [Cranmer et al.](https://arxiv.org/abs/1708.00720) - * Documentation for the Python APIs can be found [here](http://ledatelescope.github.io/bifrost/) + * Documentation for the Python APIs can be found [here](http://lwa-project.github.io/bifrost/) * There is an [overview talk of Bifrost](https://www.youtube.com/watch?v=DXH89rOVVzg) from the 2019 CASPER workshop. * There is a [walk through of this tutorial](https://youtu.be/ktk2dkUssAA?t=20170) from the 2021 CASPER workshop. @@ -15,7 +15,7 @@ This is the simplest way to try the tutorial, without needing to install or conf Visit each `.ipynb` file in this directory on GitHub, where you can read the text, code, and see static output. To allow interaction, use the “Open in Colab” button at the top. Then use control-enter to run each selected code block; the first one should install Bifrost on your runtime instance. (It can take a short while, but a green arrow should march through the steps. If you switch away, just remember to return before the instance times out!) -Please [report any issues](https://github.com/ledatelescope/bifrost/issues) with opening, installing, or running the tutorial notebooks on Colab. +Please [report any issues](https://github.com/lwa-project/bifrost/issues) with opening, installing, or running the tutorial notebooks on Colab. ## Docker Image diff --git a/tutorial/docker/Dockerfile b/tutorial/docker/Dockerfile index e5f876ecc..5b5bd5753 100644 --- a/tutorial/docker/Dockerfile +++ b/tutorial/docker/Dockerfile @@ -12,9 +12,9 @@ ARG VCS_REF LABEL org.label-schema.build-date=$BUILD_DATE \ org.label-schema.name="Bifrost - Jupyter image" \ org.label-schema.description="Image with CUDA, Bifrost, LSL, and a useful Jupyter stack" \ - org.label-schema.url="https://github.com/ledatelescope/bifrost" \ + org.label-schema.url="https://github.com/lwa-project/bifrost" \ org.label-schema.vcs-ref=$VCS_REF \ - org.label-schema.vcs-url="https://github.com/ledatelescope/bifrost_tutorial" \ + org.label-schema.vcs-url="https://github.com/lwa-project/bifrost_tutorial" \ org.label-schema.schema-version="1.0" USER root @@ -130,7 +130,7 @@ RUN pip install \ simplejson \ ctypesgen==1.0.2 ## Bifrost -RUN git clone https://github.com/ledatelescope/bifrost.git && \ +RUN git clone https://github.com/lwa-project/bifrost.git && \ cd /home/$LSL_USER/bifrost RUN cd /home/$LSL_USER/bifrost && \ ./configure --with-gpu-archs="35 50 61 75" && \ From 22109446e9ee01de0595286834cce77ede07f588 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 9 Apr 2025 14:08:43 -0600 Subject: [PATCH 1129/1155] Update to universal-ctags, Ubuntu 22.04, and CUDA 12.6.3. --- Dockerfile.cpu | 4 ++-- Dockerfile.gpu | 4 ++-- Dockerfile_prereq.gpu | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Dockerfile.cpu b/Dockerfile.cpu index ce9e8a3dd..e55514b1a 100644 --- a/Dockerfile.cpu +++ b/Dockerfile.cpu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 +FROM ubuntu:22.04 MAINTAINER Ben Barsdell @@ -17,7 +17,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ python-is-python3 \ pylint \ doxygen \ - exuberant-ctags \ + universal-ctags \ nano \ vim \ && \ diff --git a/Dockerfile.gpu b/Dockerfile.gpu index 80b9a59d8..feb4ee092 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -1,4 +1,4 @@ -FROM nvidia/cuda:12.2.0-devel-ubuntu20.04 +FROM nvidia/cuda:12.6.3-devel-ubuntu22.04 MAINTAINER Ben Barsdell @@ -17,7 +17,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ python-is-python3 \ pylint \ doxygen \ - exuberant-ctags \ + universal-ctags \ nano \ vim \ && \ diff --git a/Dockerfile_prereq.gpu b/Dockerfile_prereq.gpu index 4e38a0a15..c42a98e88 100644 --- a/Dockerfile_prereq.gpu +++ b/Dockerfile_prereq.gpu @@ -1,4 +1,4 @@ -FROM nvidia/cuda:12.2.0-devel-ubuntu20.04 +FROM nvidia/cuda:12.6.3-devel-ubuntu22.04 MAINTAINER Ben Barsdell @@ -17,7 +17,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ python-is-python3 \ pylint \ doxygen \ - exuberant-ctags \ + universal-ctags \ nano \ vim \ && \ From 281588adbfab4c67ddce1a8882494540bf3d8ab4 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 9 Apr 2025 15:17:00 -0600 Subject: [PATCH 1130/1155] Add in a few missing things - like Bifrost itself. --- Dockerfile.cpu | 7 ++++++- Dockerfile.gpu | 7 ++++++- Dockerfile_prereq.gpu | 7 +++---- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Dockerfile.cpu b/Dockerfile.cpu index e55514b1a..2e750cf32 100644 --- a/Dockerfile.cpu +++ b/Dockerfile.cpu @@ -37,10 +37,15 @@ RUN pip --no-cache-dir install \ simplejson \ pint \ ctypesgen==1.0.2 \ - graphviz + graphviz \ + sphinx \ + breathe ENV TERM xterm +# Checkout the code +RUN git clone https://github.com/lwa-project/bifrost + # Build the library WORKDIR /bifrost COPY . . diff --git a/Dockerfile.gpu b/Dockerfile.gpu index feb4ee092..3f971f110 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -37,7 +37,9 @@ RUN pip --no-cache-dir install \ simplejson \ pint \ ctypesgen==1.0.2 \ - graphviz + graphviz \ + sphinx \ + breathe RUN pip --no-cache-dir install \ cupy-cuda12x \ @@ -46,6 +48,9 @@ RUN pip --no-cache-dir install \ ENV TERM xterm +# Checkout the code +RUN git clone https://github.com/lwa-project/bifrost + # Build the library WORKDIR /bifrost COPY . . diff --git a/Dockerfile_prereq.gpu b/Dockerfile_prereq.gpu index c42a98e88..1be5f456d 100644 --- a/Dockerfile_prereq.gpu +++ b/Dockerfile_prereq.gpu @@ -37,7 +37,9 @@ RUN pip --no-cache-dir install \ simplejson \ pint \ ctypesgen==1.0.2 \ - graphviz + graphviz \ + sphinx \ + breathe RUN pip --no-cache-dir install \ cupy-cuda12x \ @@ -46,9 +48,6 @@ RUN pip --no-cache-dir install \ ENV TERM xterm -# Build the library -WORKDIR /bifrost - ENV LD_LIBRARY_PATH /usr/local/lib:${LD_LIBRARY_PATH} # IPython From 03788003d82d8038acb253d52bf09e62692b9000 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 10 Apr 2025 11:14:40 -0600 Subject: [PATCH 1131/1155] Fixed the GPU build. --- Dockerfile.gpu | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Dockerfile.gpu b/Dockerfile.gpu index 3f971f110..d5e12ad1a 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -4,6 +4,9 @@ MAINTAINER Ben Barsdell ARG DEBIAN_FRONTEND=noninteractive +# Accept GPU architectures as a build argument with an empty default +ARG GPU_ARCHS="" + # Get dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ @@ -54,7 +57,13 @@ RUN git clone https://github.com/lwa-project/bifrost # Build the library WORKDIR /bifrost COPY . . -RUN ./configure && \ +RUN ALL_GPU_ARCHS=$(nvcc -h | grep -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sort | uniq | paste -s -d ' ') && \ + if [ -z "$GPU_ARCHS" ]; then \ + echo "No GPU_ARCHS provided, building all avaliable..." && \ + GPU_ARCHS=$ALL_GPU_ARCHS; \ + fi && \ + echo "Building for GPU archs $GPU_ARCHS" && \ + ./configure --with-gpu-archs="$GPU_ARCHS" --with-shared-mem=16384 && \ make -j && \ make doc && \ make install From 85e09976366ee5a718e98a1e50ba6f8dd7f9c238 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 11 Apr 2025 09:49:57 -0600 Subject: [PATCH 1132/1155] Deal with ComplexWarning getting moved. --- python/bifrost/ndarray.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/python/bifrost/ndarray.py b/python/bifrost/ndarray.py index 1b43d5ac3..c8eea4c8a 100644 --- a/python/bifrost/ndarray.py +++ b/python/bifrost/ndarray.py @@ -39,6 +39,10 @@ import sys import ctypes import numpy as np +try: + from numpy.exceptions import ComplexWarning as NPComplexWarning +except ImportError: + from numpy import ComplexWarning as NPComplexWarning from bifrost.memory import raw_malloc, raw_free, raw_get_space, space_accessible from bifrost.libbifrost import _bf, _th, _check, _array, _space2string from bifrost import device @@ -384,7 +388,7 @@ def astype(self, dtype): else: if self.bf.dtype.is_complex: ## complex in -> real out (plus the standard "drop imag part" warning) - np.ComplexWarning() + NPComplexWarning() func_string = b'a = b.real' else: ## real in -> real out From d951aaed8bd1915751f294c267c9e72de11789fc Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 11 Apr 2025 10:28:57 -0600 Subject: [PATCH 1133/1155] More shared memory for linalg. --- Dockerfile.gpu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.gpu b/Dockerfile.gpu index d5e12ad1a..c9b8a3c09 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -63,7 +63,7 @@ RUN ALL_GPU_ARCHS=$(nvcc -h | grep -Po "'compute_[0-9]{2,3}" | cut -d_ -f2 | sor GPU_ARCHS=$ALL_GPU_ARCHS; \ fi && \ echo "Building for GPU archs $GPU_ARCHS" && \ - ./configure --with-gpu-archs="$GPU_ARCHS" --with-shared-mem=16384 && \ + ./configure --with-gpu-archs="$GPU_ARCHS" --with-shared-mem=49152 && \ make -j && \ make doc && \ make install From 631574bad7f862e3436db323f684d0a86b91b2af Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 11 Apr 2025 10:50:55 -0600 Subject: [PATCH 1134/1155] Tweak rtol and make sure we have the right dtypes moving around. --- test/test_reduce.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_reduce.py b/test/test_reduce.py index d1866e283..ff1310550 100644 --- a/test/test_reduce.py +++ b/test/test_reduce.py @@ -62,7 +62,7 @@ def pwrscrunch(data, factor=2, axis=0, func=np.sum): raise ValueError("Scrunch factor does not divide axis size") s = s[:axis] + (s[axis]//factor, factor) + s[axis:][1:] axis = axis + 1 if axis >= 0 else axis - return func(np.abs(data.reshape(s))**2, axis=axis) + return func((np.abs(data.reshape(s))**2).astype(data.dtype), axis=axis) @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class ReduceTest(unittest.TestCase): @@ -137,7 +137,7 @@ def run_complex_reduce_test(self, shape, axis, n, op='sum', dtype=np.complex64): b = bf.empty_like(b_gold, space='cuda') bf.reduce(a, b, op) b = b.copy('system') - np.testing.assert_allclose(b, b_gold, rtol=1e-3 if op[:3] == 'pwr' else 1e-7) + np.testing.assert_allclose(b, b_gold, rtol=5e-7) def run_complex_reduce_slice_test(self, shape, axis, n, op='sum', dtype=np.float32): if n is None: return None @@ -165,7 +165,7 @@ def run_complex_reduce_slice_test(self, shape, axis, n, op='sum', dtype=np.float b = bf.empty_like(b_gold, space='cuda') bf.reduce(a_slice, b, op) b = b.copy('system') - np.testing.assert_allclose(b, b_gold, rtol=1e-3 if op[:3] == 'pwr' else 1e-7) + np.testing.assert_allclose(b, b_gold, rtol=5e-7) def test_complex_reduce(self): self.run_complex_reduce_test((3,6,5), axis=1, n=2, op='pwrsum', dtype=np.complex64) for shape in [(20,20,40), (20,40,60), (40,100,200)]: From 3ccdb4a729e48a0ea193092193d39cd3203f77e1 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 11 Apr 2025 12:23:35 -0600 Subject: [PATCH 1135/1155] Bad idea. --- test/test_reduce.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_reduce.py b/test/test_reduce.py index ff1310550..f34293069 100644 --- a/test/test_reduce.py +++ b/test/test_reduce.py @@ -62,7 +62,7 @@ def pwrscrunch(data, factor=2, axis=0, func=np.sum): raise ValueError("Scrunch factor does not divide axis size") s = s[:axis] + (s[axis]//factor, factor) + s[axis:][1:] axis = axis + 1 if axis >= 0 else axis - return func((np.abs(data.reshape(s))**2).astype(data.dtype), axis=axis) + return func(np.abs(data.reshape(s))**2 axis=axis) @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class ReduceTest(unittest.TestCase): From e39409b9cba30a7d4e45b68aa564b705345ad679 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Fri, 11 Apr 2025 12:33:28 -0600 Subject: [PATCH 1136/1155] Ugh. --- test/test_reduce.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_reduce.py b/test/test_reduce.py index f34293069..b232514c7 100644 --- a/test/test_reduce.py +++ b/test/test_reduce.py @@ -62,7 +62,7 @@ def pwrscrunch(data, factor=2, axis=0, func=np.sum): raise ValueError("Scrunch factor does not divide axis size") s = s[:axis] + (s[axis]//factor, factor) + s[axis:][1:] axis = axis + 1 if axis >= 0 else axis - return func(np.abs(data.reshape(s))**2 axis=axis) + return func(np.abs(data.reshape(s))**2, axis=axis) @unittest.skipUnless(BF_CUDA_ENABLED, "requires GPU support") class ReduceTest(unittest.TestCase): From b07259defaff99f7ed693e560cc6acae95843b7e Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 16 Apr 2025 16:13:57 -0600 Subject: [PATCH 1137/1155] Update the Docker instructions in README.md. --- Makefile.in | 2 +- README.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile.in b/Makefile.in index 082e1f715..ca155f9a3 100644 --- a/Makefile.in +++ b/Makefile.in @@ -133,7 +133,7 @@ ifeq ($(HAVE_DOCKER),1) endif .PHONY: docker -# CPU-only Docker build +# Bifrost-less CPU-only Docker build docker-base-cpu: ifeq ($(HAVE_DOCKER),1) docker build --pull \ diff --git a/README.md b/README.md index 899af5e64..03de223a6 100644 --- a/README.md +++ b/README.md @@ -156,12 +156,12 @@ Build Docker image: Launch container: - $ nvidia-docker run --rm -it ledatelescope/bifrost + $ docker run --runtime=nvidia --rm -it ledatelescope/bifrost:latest For CPU-only builds: $ make docker-cpu - $ docker run --rm -it ledatelescope/bifrost + $ docker run --rm -it ledatelescope/bifrost-cpu:latest ### Running Tests From 27931c3fe708e1e4b358efe2d8310a9c080db27f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 17 Apr 2025 10:39:30 -0600 Subject: [PATCH 1138/1155] Add in a Python virtual environment to help with Python 3.12+. --- Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Dockerfile b/Dockerfile index 1c593bcbd..5fc679d59 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,12 +29,19 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ python3-dev \ python3-pip \ python-is-python3 \ + python3-venv \ pylint \ universal-ctags \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* +# Set up a Python virtual environment to avoid externally-managed-environment +# errors on newer versions of Python +ENV VIRTUAL_ENV=/opt/venv +RUN python3 -m venv $VIRTUAL_ENV +ENV PATH="$VIRTUAL_ENV/bin:$PATH" + # Documentation dependencies (only installed if BUILD_DOCS=1) RUN if [ "${BUILD_DOCS}" = "1" ]; then \ apt-get update && apt-get install -y --no-install-recommends \ From 17d7134c8e5ed04db13d1016cd765d2682cff389 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 17 Apr 2025 10:40:08 -0600 Subject: [PATCH 1139/1155] Show how to use other versions of Ubuntu and CUDA. --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 03de223a6..b339c2911 100644 --- a/README.md +++ b/README.md @@ -163,6 +163,12 @@ For CPU-only builds: $ make docker-cpu $ docker run --rm -it ledatelescope/bifrost-cpu:latest +You can also build containers that target a particular version of Ubuntu or CUDA +using the `DOCKER_UBUNTU_VERSION` and `DOCKER_CUDA_VERSION` environment variables, +respectively. For example, to build a container using Ubuntu 24.04 and CUDA 12.8.1: + + $ DOCKER_UBUNTU_VERSION=24.04 DOCKER_CUDA_VERSION=12.8.1 make docker + ### Running Tests To run all CPU and GPU tests: From 08f3de831d75094cecfadbfd887d038a4e438803 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 17 Apr 2025 11:11:34 -0600 Subject: [PATCH 1140/1155] Remove build artifacts. --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5fc679d59..db477ba11 100644 --- a/Dockerfile +++ b/Dockerfile @@ -113,7 +113,8 @@ RUN make clean && \ if [ "${BUILD_DOCS}" = "1" ]; then \ make doc; \ fi && \ - make install + make install && \ + make clean ENV LD_LIBRARY_PATH /usr/local/lib:${LD_LIBRARY_PATH} From 3bdea3e7e02ac07c45af9fe7ff4a8e3eab520aca Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Thu, 1 May 2025 10:43:00 -0600 Subject: [PATCH 1141/1155] Make a note about it and move on (#202). --- src/fft_kernels.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/fft_kernels.h b/src/fft_kernels.h index 0dad4f916..53359a11d 100644 --- a/src/fft_kernels.h +++ b/src/fft_kernels.h @@ -95,6 +95,11 @@ inline BFstatus bifrost_status(cufftResult status) { bifrost_status(cufft_ret)); \ } while(0) +/* + * The addition of (packed,aligned(4)) is necessary for CUDA 12.0 callback + * compatibility despite the fact that the compiler warns about the int_fastdiv + * fields. It's not clear to me way this attribute is needed but it works. + */ struct __attribute__((packed,aligned(4))) CallbackData { int ptr_offset; int ndim; From d54cf32edc7f04b060f8b1a5c8119252ee62ce5a Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 21 Jul 2025 15:36:28 -0600 Subject: [PATCH 1142/1155] Finish adding support for the header-only version of NVTX (#247). --- config/cuda.m4 | 30 +- configure | 3063 ++++++++++++++++++++++++++++-------------------- 2 files changed, 1793 insertions(+), 1300 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 92feabe94..5141357ff 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -151,7 +151,7 @@ AC_DEFUN([AX_CHECK_CUDA], CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - NVCCLIBS="$NVCCLIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" + NVCCLIBS="$NVCCLIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos" fi AC_ARG_WITH([gpu_archs], @@ -341,9 +341,37 @@ AC_DEFUN([AX_CHECK_CUDA], LDFLAGS="$LDFLAGS_save" NVCCLIBS="$NVCCLIBS_save" ac_ext="$ac_ext_save" + + AC_MSG_CHECKING([for header-only NVTX version]) + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + NVCCLIBS_save="$NVCCLIBS" + ac_ext_save="$ac_ext" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + NVCCLIBS="-lcuda -lcudart -lnvToolsExt" + ac_ext="cu" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include + #include ]], + [[]])], + [AC_SUBST([GPU_HEADERONLY_NVTX], [1]) + AC_MSG_RESULT([yes])], + [AC_SUBST([GPU_HEADERONLY_NVTX], [0]) + AC_MSG_RESULT([no])]) + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + NVCCLIBS="$NVCCLIBS_save -lnvToolsExt" + ac_ext="$ac_ext_save" + else AC_SUBST([GPU_PASCAL_MANAGEDMEM], [0]) AC_SUBST([GPU_EXP_PINNED_ALLOC], [1]) + AC_SUBST([GPU_HEADERONLY_NVTX], [0]) fi ac_compile="$ac_compile_save" diff --git a/configure b/configure index f84b0d5dd..88d52fea3 100755 --- a/configure +++ b/configure @@ -1,9 +1,9 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for bifrost 0.10.0. +# Generated by GNU Autoconf 2.72 for bifrost 0.10.0. # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # @@ -15,7 +15,6 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -24,12 +23,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -101,7 +101,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -131,15 +131,14 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -147,12 +146,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop - case \`(set -o) 2>/dev/null\` in #( +else case e in #( + e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi " @@ -170,8 +170,9 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else \$as_nop - exitcode=1; echo positional parameters were not saved. +else case e in #( + e) exitcode=1; echo positional parameters were not saved. ;; +esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -193,14 +194,15 @@ test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else $as_nop - as_have_required=no +else case e in #( + e) as_have_required=no ;; +esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -233,12 +235,13 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else case e in #( + e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi +fi ;; +esac fi @@ -260,7 +263,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -279,7 +282,8 @@ $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 -fi +fi ;; +esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -318,14 +322,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -394,11 +390,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -412,21 +409,14 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -500,6 +490,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' + t clear + :clear s/[$]LINENO.*/&-/ t lineno b @@ -548,7 +540,6 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -560,9 +551,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -587,10 +578,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated SHELL=${CONFIG_SHELL-/bin/sh} @@ -725,6 +718,7 @@ HAVE_TRACE HAVE_DEBUG HAVE_TMPFS ALIGNMENT +GPU_HEADERONLY_NVTX GPU_ARCHS NVCCFLAGS CUOBJDUMP @@ -1031,7 +1025,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1057,7 +1051,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1270,7 +1264,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1286,7 +1280,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1316,8 +1310,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: '$ac_option' +Try '$0 --help' for more information" ;; *=*) @@ -1325,7 +1319,7 @@ Try \`$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1375,7 +1369,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: `$host' +# There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1443,7 +1437,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1471,7 +1465,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bifrost 0.10.0 to adapt to many kinds of systems. +'configure' configures bifrost 0.10.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1485,11 +1479,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' + -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] + --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1497,10 +1491,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. +By default, 'make install' will install all the files in +'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify +an installation prefix other than '$ac_default_prefix' using '--prefix', +for instance '--prefix=\$HOME'. For better control, use the options below. @@ -1641,7 +1635,7 @@ Some influential environment variables: PYTHON_BREATHE Absolute path to breathe-apidoc executable -Use these variables to override the choices made by `configure' or to help +Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. @@ -1710,9 +1704,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF bifrost configure 0.10.0 -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.72 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1751,11 +1745,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1790,11 +1785,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1832,11 +1828,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1860,8 +1857,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -1869,10 +1866,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1892,15 +1891,15 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (void); below. */ #include #undef $2 @@ -1911,7 +1910,7 @@ else $as_nop #ifdef __cplusplus extern "C" #endif -char $2 (); +char $2 (void); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ @@ -1930,11 +1929,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1970,11 +1971,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -2012,11 +2014,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -2039,15 +2042,15 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (void); below. */ #include #undef $2 @@ -2058,7 +2061,7 @@ else $as_nop #ifdef __cplusplus extern "C" #endif -char $2 (); +char $2 (void); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ @@ -2077,11 +2080,13 @@ _ACEOF if ac_fn_cxx_try_link "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2102,8 +2107,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -2111,10 +2116,12 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2135,8 +2142,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @@ -2166,12 +2173,14 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : -else $as_nop - eval "$3=yes" +else case e in #( + e) eval "$3=yes" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2210,12 +2219,13 @@ printf "%s\n" "$ac_try_echo"; } >&5 test $ac_status = 0; }; } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 +else case e in #( + e) printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=$ac_status + ac_retval=$ac_status ;; +esac fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno @@ -2235,8 +2245,8 @@ printf %s "checking for int$2_t... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ @@ -2277,12 +2287,13 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : -else $as_nop - case $ac_type in #( +else case e in #( + e) case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; +esac ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -2291,10 +2302,12 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if eval test \"x\$"$3"\" = x"no" then : -else $as_nop - break +else case e in #( + e) break ;; +esac fi - done + done ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2315,8 +2328,8 @@ printf %s "checking for uint$2_t... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ @@ -2348,10 +2361,12 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if eval test \"x\$"$3"\" = x"no" then : -else $as_nop - break +else case e in #( + e) break ;; +esac fi - done + done ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2384,7 +2399,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by bifrost $as_me 0.10.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -2630,10 +2645,10 @@ esac printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } fi done @@ -2669,9 +2684,7 @@ struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; +static char *e (char **p, int i) { return p[i]; } @@ -2685,6 +2698,21 @@ static char *f (char * (*g) (char **, int), char **p, ...) return s; } +/* C89 style stringification. */ +#define noexpand_stringify(a) #a +const char *stringified = noexpand_stringify(arbitrary+token=sequence); + +/* C89 style token pasting. Exercises some of the corner cases that + e.g. old MSVC gets wrong, but not very hard. */ +#define noexpand_concat(a,b) a##b +#define expand_concat(a,b) noexpand_concat(a,b) +extern int vA; +extern int vbee; +#define aye A +#define bee B +int *pvA = &expand_concat(v,aye); +int *pvbee = &noexpand_concat(v,bee); + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated @@ -2712,16 +2740,19 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? +/* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif +// See if C++-style comments work. + #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); +extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare @@ -2771,7 +2802,6 @@ typedef const char *ccp; static inline int test_restrict (ccp restrict text) { - // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) @@ -2837,6 +2867,8 @@ ac_c_conftest_c99_main=' ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; + // Work around memory leak warnings. + free (ia); // Check named initializers. struct named_init ni = { @@ -2858,7 +2890,7 @@ ac_c_conftest_c99_main=' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? +/* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif @@ -3266,8 +3298,9 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; +esac fi @@ -3295,12 +3328,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -3309,18 +3342,18 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -3336,11 +3369,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -3413,15 +3446,16 @@ printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_build_alias=$build_alias +else case e in #( + e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } @@ -3448,14 +3482,15 @@ printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "x$host_alias" = x; then +else case e in #( + e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } @@ -3568,8 +3603,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3591,7 +3626,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3613,8 +3649,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3636,7 +3672,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -3671,8 +3708,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3694,7 +3731,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3716,8 +3754,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no @@ -3756,7 +3794,8 @@ if test $ac_prog_rejected = yes; then ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3780,8 +3819,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3803,7 +3842,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3829,8 +3869,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3852,7 +3892,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -3890,8 +3931,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3913,7 +3954,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3935,8 +3977,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3958,7 +4000,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -3987,10 +4030,10 @@ fi fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -4062,8 +4105,8 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' + # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. +# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -4083,7 +4126,7 @@ do ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' + # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -4094,8 +4137,9 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else $as_nop - ac_file='' +else case e in #( + e) ac_file='' ;; +esac fi if test -z "$ac_file" then : @@ -4104,13 +4148,14 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } @@ -4134,10 +4179,10 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. + # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) +# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will +# work properly (i.e., refer to 'conftest.exe'), while it won't with +# 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -4147,11 +4192,12 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -4167,6 +4213,8 @@ int main (void) { FILE *f = fopen ("conftest.out", "w"); + if (!f) + return 1; return ferror (f) || fclose (f) != 0; ; @@ -4206,26 +4254,27 @@ printf "%s\n" "$ac_try_echo"; } >&5 if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } +If you meant to cross compile, use '--host'. +See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext \ + conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4257,16 +4306,18 @@ then : break;; esac done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext +rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } @@ -4277,8 +4328,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4295,12 +4346,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -4318,8 +4371,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag +else case e in #( + e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -4337,8 +4390,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" +else case e in #( + e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4353,8 +4406,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag +else case e in #( + e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4371,12 +4424,15 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag + ac_c_werror_flag=$ac_save_c_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -4403,8 +4459,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +else case e in #( + e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4421,25 +4477,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" + CC="$CC $ac_cv_prog_cc_c11" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 + ac_prog_cc_stdc=c11 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -4449,8 +4508,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no +else case e in #( + e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4467,25 +4526,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" + CC="$CC $ac_cv_prog_cc_c99" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 + ac_prog_cc_stdc=c99 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -4495,8 +4557,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no +else case e in #( + e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4513,25 +4575,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" + CC="$CC $ac_cv_prog_cc_c89" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 + ac_prog_cc_stdc=c89 ;; +esac fi fi @@ -4546,8 +4611,8 @@ printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ +else case e in #( + e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done @@ -4572,9 +4637,10 @@ do as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in +case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -4609,7 +4675,8 @@ IFS=$as_save_IFS else ac_cv_path_SED=$SED fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } @@ -4634,8 +4701,8 @@ printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then +else case e in #( + e) if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4654,9 +4721,10 @@ do as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in +case `"$ac_path_GREP" --version 2>&1` in #( *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -4691,7 +4759,8 @@ IFS=$as_save_IFS else ac_cv_path_GREP=$GREP fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } @@ -4703,8 +4772,8 @@ printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 +else case e in #( + e) if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then @@ -4726,9 +4795,10 @@ do as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in +case `"$ac_path_EGREP" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -4764,20 +4834,23 @@ else ac_cv_path_EGREP=$EGREP fi - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" + EGREP_TRADITIONAL=$EGREP + ac_cv_path_EGREP_TRADITIONAL=$EGREP { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 +else case e in #( + e) if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then @@ -4799,9 +4872,10 @@ do as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in +case `"$ac_path_FGREP" --version 2>&1` in #( *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -4837,7 +4911,8 @@ else ac_cv_path_FGREP=$FGREP fi - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } @@ -4868,8 +4943,9 @@ test -z "$GREP" && GREP=grep if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop - with_gnu_ld=no +else case e in #( + e) with_gnu_ld=no ;; +esac fi ac_prog=ld @@ -4914,8 +4990,8 @@ fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -z "$LD"; then +else case e in #( + e) if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs @@ -4938,7 +5014,8 @@ else $as_nop IFS=$lt_save_ifs else lt_cv_path_LD=$LD # Let the user override the test with a path. -fi +fi ;; +esac fi LD=$lt_cv_path_LD @@ -4955,8 +5032,8 @@ printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 -else $as_nop - # I'd rather use --version here, but apparently some GNU lds only accept -v. +else case e in #( + e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 @@ -4983,8 +5061,8 @@ printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$NM"; then +else case e in #( + e) if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else @@ -5031,7 +5109,8 @@ else IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$lt_cv_path_NM" >&6; } @@ -5052,8 +5131,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$DUMPBIN"; then +else case e in #( + e) if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5075,7 +5154,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then @@ -5101,8 +5181,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DUMPBIN"; then +else case e in #( + e) if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5124,7 +5204,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then @@ -5178,8 +5259,8 @@ printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_nm_interface="BSD nm" +else case e in #( + e) lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) @@ -5192,7 +5273,8 @@ else $as_nop if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi - rm -f conftest* + rm -f conftest* ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } @@ -5214,8 +5296,8 @@ printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 -else $as_nop - i=0 +else case e in #( + e) i=0 teststring=ABCD case $build_os in @@ -5337,7 +5419,8 @@ else $as_nop fi ;; esac - + ;; +esac fi if test -n "$lt_cv_sys_max_cmd_len"; then @@ -5394,8 +5477,8 @@ printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 -else $as_nop - case $host in +else case e in #( + e) case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys @@ -5426,7 +5509,8 @@ else $as_nop lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac - + ;; +esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd @@ -5442,8 +5526,8 @@ printf %s "checking how to convert $build file names to toolchain format... " >& if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 -else $as_nop - #assume ordinary cross tools, or native build. +else case e in #( + e) #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) @@ -5454,7 +5538,8 @@ case $host in esac ;; esac - + ;; +esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd @@ -5470,8 +5555,9 @@ printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_reload_flag='-r' +else case e in #( + e) lt_cv_ld_reload_flag='-r' ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } @@ -5512,8 +5598,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$OBJDUMP"; then +else case e in #( + e) if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5535,7 +5621,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then @@ -5557,8 +5644,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OBJDUMP"; then +else case e in #( + e) if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5580,7 +5667,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then @@ -5621,8 +5709,8 @@ printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_file_magic_cmd='$MAGIC_CMD' +else case e in #( + e) lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support @@ -5815,7 +5903,8 @@ os2*) lt_cv_deplibs_check_method=pass_all ;; esac - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } @@ -5867,8 +5956,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$DLLTOOL"; then +else case e in #( + e) if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5890,7 +5979,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then @@ -5912,8 +6002,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DLLTOOL"; then +else case e in #( + e) if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5935,7 +6025,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then @@ -5977,8 +6068,8 @@ printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_sharedlib_from_linklib_cmd='unknown' +else case e in #( + e) lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) @@ -5998,7 +6089,8 @@ cygwin* | mingw* | pw32* | cegcc*) lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } @@ -6036,8 +6128,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CXX"; then +else case e in #( + e) if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6059,7 +6151,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then @@ -6085,8 +6178,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CXX"; then +else case e in #( + e) if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6108,7 +6201,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then @@ -6168,8 +6262,8 @@ printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -6186,12 +6280,14 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } @@ -6209,8 +6305,8 @@ printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_cxx_werror_flag=$ac_cxx_werror_flag +else case e in #( + e) ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" @@ -6228,8 +6324,8 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes -else $as_nop - CXXFLAGS="" +else case e in #( + e) CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -6244,8 +6340,8 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : -else $as_nop - ac_cxx_werror_flag=$ac_save_cxx_werror_flag +else case e in #( + e) ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -6262,12 +6358,15 @@ if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag + ac_cxx_werror_flag=$ac_save_cxx_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } @@ -6291,11 +6390,11 @@ if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_11+y} +if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_11=no +else case e in #( + e) ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -6312,36 +6411,39 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext -CXX=$ac_save_CXX +CXX=$ac_save_CXX ;; +esac fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx11" = x +else case e in #( + e) if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx11" + CXX="$CXX $ac_cv_prog_cxx_cxx11" ;; +esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 - ac_prog_cxx_stdcxx=cxx11 + ac_prog_cxx_stdcxx=cxx11 ;; +esac fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_98+y} +if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_98=no +else case e in #( + e) ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -6358,25 +6460,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext -CXX=$ac_save_CXX +CXX=$ac_save_CXX ;; +esac fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx98" = x +else case e in #( + e) if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx98" + CXX="$CXX $ac_cv_prog_cxx_cxx98" ;; +esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 - ac_prog_cxx_stdcxx=cxx98 + ac_prog_cxx_stdcxx=cxx98 ;; +esac fi fi @@ -6397,8 +6502,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AR"; then +else case e in #( + e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6420,7 +6525,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then @@ -6446,8 +6552,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_AR"; then +else case e in #( + e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6469,7 +6575,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then @@ -6515,8 +6622,8 @@ printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ar_at_file=no +else case e in #( + e) lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -6553,7 +6660,8 @@ then : fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$lt_cv_ar_at_file" >&6; } @@ -6578,8 +6686,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$STRIP"; then +else case e in #( + e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6601,7 +6709,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then @@ -6623,8 +6732,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_STRIP"; then +else case e in #( + e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6646,7 +6755,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then @@ -6687,8 +6797,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$RANLIB"; then +else case e in #( + e) if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6710,7 +6820,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then @@ -6732,8 +6843,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_RANLIB"; then +else case e in #( + e) if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6755,7 +6866,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then @@ -6841,8 +6953,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AWK"; then +else case e in #( + e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6864,7 +6976,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then @@ -6913,8 +7026,8 @@ printf %s "checking command to parse $NM output from $compiler object... " >&6; if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -7169,7 +7282,8 @@ _LT_EOF lt_cv_sys_global_symbol_pipe= fi done - + ;; +esac fi if test -z "$lt_cv_sys_global_symbol_pipe"; then @@ -7233,8 +7347,9 @@ printf %s "checking for sysroot... " >&6; } if test ${with_sysroot+y} then : withval=$with_sysroot; -else $as_nop - with_sysroot=no +else case e in #( + e) with_sysroot=no ;; +esac fi @@ -7269,8 +7384,8 @@ printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 -else $as_nop - printf 0123456789abcdef0123456789abcdef >conftest.i +else case e in #( + e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then @@ -7306,7 +7421,8 @@ else ac_cv_path_lt_DD=$lt_DD fi -rm -f conftest.i conftest2.i conftest.out +rm -f conftest.i conftest2.i conftest.out ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf "%s\n" "$ac_cv_path_lt_DD" >&6; } @@ -7317,8 +7433,8 @@ printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 -else $as_nop - printf 0123456789abcdef0123456789abcdef >conftest.i +else case e in #( + e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then @@ -7326,7 +7442,8 @@ if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; the && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out -test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf "%s\n" "$lt_cv_truncate_bin" >&6; } @@ -7537,8 +7654,8 @@ printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_ext=c +else case e in #( + e) 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' @@ -7558,8 +7675,9 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes -else $as_nop - lt_cv_cc_needs_belf=no +else case e in #( + e) lt_cv_cc_needs_belf=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -7568,7 +7686,8 @@ 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 - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } @@ -7626,8 +7745,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$MANIFEST_TOOL"; then +else case e in #( + e) if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7649,7 +7768,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then @@ -7671,8 +7791,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_MANIFEST_TOOL"; then +else case e in #( + e) if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7694,7 +7814,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then @@ -7726,15 +7847,16 @@ printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_path_mainfest_tool=no +else case e in #( + e) lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi - rm -f conftest* + rm -f conftest* ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } @@ -7757,8 +7879,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$DSYMUTIL"; then +else case e in #( + e) if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7780,7 +7902,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then @@ -7802,8 +7925,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DSYMUTIL"; then +else case e in #( + e) if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7825,7 +7948,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then @@ -7859,8 +7983,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$NMEDIT"; then +else case e in #( + e) if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7882,7 +8006,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then @@ -7904,8 +8029,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_NMEDIT"; then +else case e in #( + e) if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7927,7 +8052,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then @@ -7961,8 +8087,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$LIPO"; then +else case e in #( + e) if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7984,7 +8110,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then @@ -8006,8 +8133,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_LIPO"; then +else case e in #( + e) if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8029,7 +8156,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then @@ -8063,8 +8191,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$OTOOL"; then +else case e in #( + e) if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8086,7 +8214,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then @@ -8108,8 +8237,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OTOOL"; then +else case e in #( + e) if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8131,7 +8260,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then @@ -8165,8 +8295,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$OTOOL64"; then +else case e in #( + e) if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8188,7 +8318,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then @@ -8210,8 +8341,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OTOOL64"; then +else case e in #( + e) if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8233,7 +8364,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then @@ -8290,8 +8422,8 @@ printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_apple_cc_single_mod=no +else case e in #( + e) lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE @@ -8317,7 +8449,8 @@ else $as_nop fi rm -rf libconftest.dylib* rm -f conftest.* - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } @@ -8327,8 +8460,8 @@ printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_exported_symbols_list=no +else case e in #( + e) lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" @@ -8346,13 +8479,15 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes -else $as_nop - lt_cv_ld_exported_symbols_list=no +else case e in #( + e) lt_cv_ld_exported_symbols_list=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } @@ -8362,8 +8497,8 @@ printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_force_load=no +else case e in #( + e) lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF @@ -8388,7 +8523,8 @@ _LT_EOF fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$lt_cv_ld_force_load" >&6; } @@ -8538,8 +8674,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - enable_shared=yes +else case e in #( + e) enable_shared=yes ;; +esac fi @@ -8570,8 +8707,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - enable_static=yes +else case e in #( + e) enable_static=yes ;; +esac fi @@ -8602,8 +8740,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - pic_mode=default +else case e in #( + e) pic_mode=default ;; +esac fi @@ -8633,8 +8772,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - enable_fast_install=yes +else case e in #( + e) enable_fast_install=yes ;; +esac fi @@ -8661,15 +8801,17 @@ then : ;; esac lt_cv_with_aix_soname=$with_aix_soname -else $as_nop - if test ${lt_cv_with_aix_soname+y} +else case e in #( + e) if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_with_aix_soname=aix +else case e in #( + e) lt_cv_with_aix_soname=aix ;; +esac fi - with_aix_soname=$lt_cv_with_aix_soname + with_aix_soname=$lt_cv_with_aix_soname ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 @@ -8760,8 +8902,8 @@ printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 -else $as_nop - rm -f .libs 2>/dev/null +else case e in #( + e) rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs @@ -8769,7 +8911,8 @@ else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi -rmdir .libs 2>/dev/null +rmdir .libs 2>/dev/null ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } @@ -8830,8 +8973,8 @@ printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 -else $as_nop - case $MAGIC_CMD in +else case e in #( + e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; @@ -8874,6 +9017,7 @@ _LT_EOF IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; +esac ;; esac fi @@ -8897,8 +9041,8 @@ printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 -else $as_nop - case $MAGIC_CMD in +else case e in #( + e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; @@ -8941,6 +9085,7 @@ _LT_EOF IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; +esac ;; esac fi @@ -9040,8 +9185,8 @@ printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_rtti_exceptions=no +else case e in #( + e) lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment @@ -9069,7 +9214,8 @@ else $as_nop fi fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } @@ -9434,8 +9580,9 @@ printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +else case e in #( + e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } @@ -9450,8 +9597,8 @@ printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_pic_works=no +else case e in #( + e) lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment @@ -9479,7 +9626,8 @@ else $as_nop fi fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } @@ -9515,8 +9663,8 @@ printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_static_works=no +else case e in #( + e) lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -9537,7 +9685,8 @@ else $as_nop fi $RM -r conftest* LDFLAGS=$save_LDFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } @@ -9559,8 +9708,8 @@ printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_c_o=no +else case e in #( + e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest @@ -9600,8 +9749,9 @@ else $as_nop cd .. $RM -r conftest $RM conftest* - -fi + ;; +esac +fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -9615,8 +9765,8 @@ printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_c_o=no +else case e in #( + e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest @@ -9656,7 +9806,8 @@ else $as_nop cd .. $RM -r conftest $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -10250,8 +10401,8 @@ else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -10283,7 +10434,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi - + ;; +esac fi aix_libpath=$lt_cv_aix_libpath_ @@ -10305,8 +10457,8 @@ else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -10338,7 +10490,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi - + ;; +esac fi aix_libpath=$lt_cv_aix_libpath_ @@ -10589,8 +10742,8 @@ printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler__b=no +else case e in #( + e) lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -10611,7 +10764,8 @@ else $as_nop fi $RM -r conftest* LDFLAGS=$save_LDFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } @@ -10659,8 +10813,8 @@ printf %s "checking whether the $host_os linker accepts -exported_symbol... " >& if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 -else $as_nop - save_LDFLAGS=$LDFLAGS +else case e in #( + e) save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10669,12 +10823,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes -else $as_nop - lt_cv_irix_exported_symbol=no +else case e in #( + e) lt_cv_irix_exported_symbol=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS + LDFLAGS=$save_LDFLAGS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } @@ -10999,8 +11155,8 @@ printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 -else $as_nop - $RM conftest* +else case e in #( + e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 @@ -11036,7 +11192,8 @@ else $as_nop cat conftest.err 1>&5 fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } @@ -11763,8 +11920,8 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_shlibpath_overrides_runpath=no +else case e in #( + e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ @@ -11791,7 +11948,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir - + ;; +esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath @@ -12216,16 +12374,22 @@ printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -12237,24 +12401,27 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes -else $as_nop - ac_cv_lib_dl_dlopen=no +else case e in #( + e) ac_cv_lib_dl_dlopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop - +else case e in #( + e) lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes - + ;; +esac fi ;; @@ -12272,22 +12439,28 @@ fi if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char shl_load (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (void); int main (void) { @@ -12299,39 +12472,47 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes -else $as_nop - ac_cv_lib_dld_shl_load=no +else case e in #( + e) ac_cv_lib_dld_shl_load=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else $as_nop - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +else case e in #( + e) ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -12343,34 +12524,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes -else $as_nop - ac_cv_lib_dl_dlopen=no +else case e in #( + e) ac_cv_lib_dl_dlopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -12382,34 +12571,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes -else $as_nop - ac_cv_lib_svld_dlopen=no +else case e in #( + e) ac_cv_lib_svld_dlopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dld_link (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (void); int main (void) { @@ -12421,12 +12618,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes -else $as_nop - ac_cv_lib_dld_dld_link=no +else case e in #( + e) ac_cv_lib_dld_dld_link=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } @@ -12435,19 +12634,24 @@ then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi ;; @@ -12475,8 +12679,8 @@ printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 -else $as_nop - if test yes = "$cross_compiling"; then : +else case e in #( + e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -12570,7 +12774,8 @@ _LT_EOF fi rm -fr conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$lt_cv_dlopen_self" >&6; } @@ -12582,8 +12787,8 @@ printf %s "checking whether a statically linked program can dlopen itself... " > if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 -else $as_nop - if test yes = "$cross_compiling"; then : +else case e in #( + e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -12677,7 +12882,8 @@ _LT_EOF fi rm -fr conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } @@ -12824,8 +13030,8 @@ if test -z "$CXXCPP"; then if test ${ac_cv_prog_CXXCPP+y} then : printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CXX needs to be expanded +else case e in #( + e) # Double quotes because $CXX needs to be expanded for CXXCPP in "$CXX -E" cpp /lib/cpp do ac_preproc_ok=false @@ -12843,9 +13049,10 @@ _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : -else $as_nop - # Broken: fails on valid input. -continue +else case e in #( + e) # Broken: fails on valid input. +continue ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext @@ -12859,15 +13066,16 @@ if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue -else $as_nop - # Passes both tests. +else case e in #( + e) # Passes both tests. ac_preproc_ok=: -break +break ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : @@ -12876,7 +13084,8 @@ fi done ac_cv_prog_CXXCPP=$CXXCPP - + ;; +esac fi CXXCPP=$ac_cv_prog_CXXCPP else @@ -12899,9 +13108,10 @@ _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : -else $as_nop - # Broken: fails on valid input. -continue +else case e in #( + e) # Broken: fails on valid input. +continue ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext @@ -12915,24 +13125,26 @@ if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue -else $as_nop - # Passes both tests. +else case e in #( + e) # Passes both tests. ac_preproc_ok=: -break +break ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi ac_ext=cpp @@ -13069,8 +13281,9 @@ cc_basename=$func_cc_basename_result if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop - with_gnu_ld=no +else case e in #( + e) with_gnu_ld=no ;; +esac fi ac_prog=ld @@ -13115,8 +13328,8 @@ fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -z "$LD"; then +else case e in #( + e) if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs @@ -13139,7 +13352,8 @@ else $as_nop IFS=$lt_save_ifs else lt_cv_path_LD=$LD # Let the user override the test with a path. -fi +fi ;; +esac fi LD=$lt_cv_path_LD @@ -13156,8 +13370,8 @@ printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 -else $as_nop - # I'd rather use --version here, but apparently some GNU lds only accept -v. +else case e in #( + e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 @@ -13364,8 +13579,8 @@ else if test ${lt_cv_aix_libpath__CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -13397,7 +13612,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi - + ;; +esac fi aix_libpath=$lt_cv_aix_libpath__CXX @@ -13420,8 +13636,8 @@ else if test ${lt_cv_aix_libpath__CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -13453,7 +13669,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi - + ;; +esac fi aix_libpath=$lt_cv_aix_libpath__CXX @@ -14824,8 +15041,9 @@ printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +else case e in #( + e) lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } @@ -14840,8 +15058,8 @@ printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " > if test ${lt_cv_prog_compiler_pic_works_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_pic_works_CXX=no +else case e in #( + e) lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment @@ -14869,7 +15087,8 @@ else $as_nop fi fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } @@ -14899,8 +15118,8 @@ printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; if test ${lt_cv_prog_compiler_static_works_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_static_works_CXX=no +else case e in #( + e) lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -14921,7 +15140,8 @@ else $as_nop fi $RM -r conftest* LDFLAGS=$save_LDFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } @@ -14940,8 +15160,8 @@ printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_c_o_CXX=no +else case e in #( + e) lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest @@ -14981,7 +15201,8 @@ else $as_nop cd .. $RM -r conftest $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } @@ -14993,8 +15214,8 @@ printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_c_o_CXX=no +else case e in #( + e) lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest @@ -15034,7 +15255,8 @@ else $as_nop cd .. $RM -r conftest $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } @@ -15139,8 +15361,8 @@ printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - $RM conftest* +else case e in #( + e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 @@ -15176,7 +15398,8 @@ else $as_nop cat conftest.err 1>&5 fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } @@ -15740,8 +15963,8 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_shlibpath_overrides_runpath=no +else case e in #( + e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ @@ -15768,7 +15991,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir - + ;; +esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath @@ -16160,8 +16384,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -16183,7 +16407,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -16205,8 +16430,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -16228,7 +16453,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -16263,8 +16489,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -16286,7 +16512,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -16308,8 +16535,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no @@ -16348,7 +16575,8 @@ if test $ac_prog_rejected = yes; then ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -16372,8 +16600,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -16395,7 +16623,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -16421,8 +16650,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -16444,7 +16673,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -16482,8 +16712,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -16505,7 +16735,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -16527,8 +16758,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -16550,7 +16781,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -16579,10 +16811,10 @@ fi fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -16614,8 +16846,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -16632,12 +16864,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -16655,8 +16889,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag +else case e in #( + e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -16674,8 +16908,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" +else case e in #( + e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16690,8 +16924,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag +else case e in #( + e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16708,12 +16942,15 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag + ac_c_werror_flag=$ac_save_c_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -16740,8 +16977,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +else case e in #( + e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16758,25 +16995,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" + CC="$CC $ac_cv_prog_cc_c11" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 + ac_prog_cc_stdc=c11 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -16786,8 +17026,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no +else case e in #( + e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16804,25 +17044,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" + CC="$CC $ac_cv_prog_cc_c99" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 + ac_prog_cc_stdc=c99 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -16832,8 +17075,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no +else case e in #( + e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16850,25 +17093,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" + CC="$CC $ac_cv_prog_cc_c89" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 + ac_prog_cc_stdc=c89 ;; +esac fi fi @@ -16897,8 +17143,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CXX"; then +else case e in #( + e) if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -16920,7 +17166,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then @@ -16946,8 +17193,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CXX"; then +else case e in #( + e) if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -16969,7 +17216,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then @@ -17029,8 +17277,8 @@ printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -17047,12 +17295,14 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } @@ -17070,8 +17320,8 @@ printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_cxx_werror_flag=$ac_cxx_werror_flag +else case e in #( + e) ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" @@ -17089,8 +17339,8 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes -else $as_nop - CXXFLAGS="" +else case e in #( + e) CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17105,8 +17355,8 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : -else $as_nop - ac_cxx_werror_flag=$ac_save_cxx_werror_flag +else case e in #( + e) ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17123,12 +17373,15 @@ if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag + ac_cxx_werror_flag=$ac_save_cxx_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } @@ -17152,11 +17405,11 @@ if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_11+y} +if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_11=no +else case e in #( + e) ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17173,36 +17426,39 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext -CXX=$ac_save_CXX +CXX=$ac_save_CXX ;; +esac fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx11" = x +else case e in #( + e) if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx11" + CXX="$CXX $ac_cv_prog_cxx_cxx11" ;; +esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 - ac_prog_cxx_stdcxx=cxx11 + ac_prog_cxx_stdcxx=cxx11 ;; +esac fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_98+y} +if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cxx_98=no +else case e in #( + e) ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17219,25 +17475,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext -CXX=$ac_save_CXX +CXX=$ac_save_CXX ;; +esac fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cxx_cxx98" = x +else case e in #( + e) if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } - CXX="$CXX $ac_cv_prog_cxx_cxx98" + CXX="$CXX $ac_cv_prog_cxx_cxx98" ;; +esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 - ac_prog_cxx_stdcxx=cxx98 + ac_prog_cxx_stdcxx=cxx98 ;; +esac fi fi @@ -17256,8 +17515,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AWK"; then +else case e in #( + e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -17279,7 +17538,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then @@ -17299,8 +17559,8 @@ printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ +else case e in #( + e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done @@ -17325,9 +17585,10 @@ do as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in +case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -17362,7 +17623,8 @@ IFS=$as_save_IFS else ac_cv_path_SED=$SED fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } @@ -17390,8 +17652,8 @@ if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS @@ -17445,7 +17707,8 @@ esac IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir - + ;; +esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install @@ -17487,8 +17750,8 @@ ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 -else $as_nop - cat >conftest.make <<\_ACEOF +else case e in #( + e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' @@ -17500,7 +17763,8 @@ case `${MAKE-make} -f conftest.make 2>/dev/null` in *) eval ac_cv_prog_make_${ac_make}_set=no;; esac -rm -f conftest.make +rm -f conftest.make ;; +esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -17539,8 +17803,8 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CTAGS" >&5 printf "%s\n" "$CTAGS" >&6; } -else $as_nop - +else case e in #( + e) CTAGS="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -17554,8 +17818,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_CTAGS+y} then : printf %s "(cached) " >&6 -else $as_nop - case $CTAGS in +else case e in #( + e) case $CTAGS in [\\/]* | ?:[\\/]*) ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; @@ -17580,6 +17844,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi CTAGS=$ac_cv_path_CTAGS @@ -17594,11 +17859,12 @@ fi fi - + ;; +esac fi -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } # Extract the first word of "ctags", so it can be a program name with args. @@ -17608,8 +17874,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_CTAGS+y} then : printf %s "(cached) " >&6 -else $as_nop - case $CTAGS in +else case e in #( + e) case $CTAGS in [\\/]* | ?:[\\/]*) ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; @@ -17634,6 +17900,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi CTAGS=$ac_cv_path_CTAGS @@ -17646,7 +17913,8 @@ printf "%s\n" "no" >&6; } fi - + ;; +esac fi @@ -17661,16 +17929,17 @@ if test x${CTAGS} = x then : as_fn_error $? "Required program ctags was not found" "$LINENO" 5 fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is exuberant" >&5 -printf %s "checking whether ${CTAGS} is exuberant... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${CTAGS} is sufficiently exuberant" >&5 +printf %s "checking whether ${CTAGS} is sufficiently exuberant... " >&6; } if ! ${CTAGS} --version | grep -q Exuberant then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - as_fn_error $? "exuberant ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + as_fn_error $? "exuberant/universal ctags is required, but ${CTAGS} is a different version" "$LINENO" 5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; +esac fi SO_EXT=$shrext_cmds @@ -17685,8 +17954,8 @@ printf %s "checking for inline... " >&6; } if test ${ac_cv_c_inline+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_inline=no +else case e in #( + e) ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17704,7 +17973,8 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 printf "%s\n" "$ac_cv_c_inline" >&6; } @@ -17739,14 +18009,14 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx20_$switch" | $as_tr_sh` + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx20_$switch" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++20 features with $switch" >&5 printf %s "checking whether $CXX supports C++20 features with $switch... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_CXX="$CXX" +else case e in #( + e) ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18566,11 +18836,13 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval $cachevar=yes -else $as_nop - eval $cachevar=no +else case e in #( + e) eval $cachevar=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" + CXX="$ac_save_CXX" ;; +esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -18629,14 +18901,14 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx17_$switch" | $as_tr_sh` + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx17_$switch" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features with $switch" >&5 printf %s "checking whether $CXX supports C++17 features with $switch... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_CXX="$CXX" +else case e in #( + e) ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19430,11 +19702,13 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval $cachevar=yes -else $as_nop - eval $cachevar=no +else case e in #( + e) eval $cachevar=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" + CXX="$ac_save_CXX" ;; +esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -19493,14 +19767,14 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_CXX="$CXX" +else case e in #( + e) ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19916,11 +20190,13 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval $cachevar=yes -else $as_nop - eval $cachevar=no +else case e in #( + e) eval $cachevar=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" + CXX="$ac_save_CXX" ;; +esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -19979,14 +20255,14 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_CXX="$CXX" +else case e in #( + e) ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -20282,11 +20558,13 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval $cachevar=yes -else $as_nop - eval $cachevar=no +else case e in #( + e) eval $cachevar=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" + CXX="$ac_save_CXX" ;; +esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -20357,9 +20635,10 @@ if ac_fn_cxx_try_compile "$LINENO" then : HAVE_CXX_FILESYSTEM=1 -else $as_nop - HAVE_CXX_FILESYSTEM=0 - +else case e in #( + e) HAVE_CXX_FILESYSTEM=0 + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -20381,9 +20660,10 @@ if ac_fn_cxx_try_link "$LINENO" then : HAVE_CXX_FILESYSTEM=1 -else $as_nop - HAVE_CXX_FILESYSTEM=0 - +else case e in #( + e) HAVE_CXX_FILESYSTEM=0 + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -20424,9 +20704,10 @@ if ac_fn_cxx_try_compile "$LINENO" then : HAVE_CXX_ENDS_WITH=1 -else $as_nop - HAVE_CXX_ENDS_WITH=0 - +else case e in #( + e) HAVE_CXX_ENDS_WITH=0 + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -20448,9 +20729,10 @@ if ac_fn_cxx_try_link "$LINENO" then : HAVE_CXX_ENDS_WITH=1 -else $as_nop - HAVE_CXX_ENDS_WITH=0 - +else case e in #( + e) HAVE_CXX_ENDS_WITH=0 + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -20495,9 +20777,10 @@ then : printf "%s\n" "#define HAVE_RECVMSG 1" >>confdefs.h HAVE_RECVMSG=1 -else $as_nop - HAVE_RECVMSG=0 - +else case e in #( + e) HAVE_RECVMSG=0 + ;; +esac fi done @@ -20566,25 +20849,25 @@ printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -printf %s "checking for stdbool.h that conforms to C99... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99 or later" >&5 +printf %s "checking for stdbool.h that conforms to C99 or later... " >&6; } if test ${ac_cv_header_stdbool_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include - #ifndef __bool_true_false_are_defined - #error "__bool_true_false_are_defined is not defined" - #endif - char a[__bool_true_false_are_defined == 1 ? 1 : -1]; + /* "true" and "false" should be usable in #if expressions and + integer constant expressions, and "bool" should be a valid + type name. - /* Regardless of whether this is C++ or "_Bool" is a - valid type name, "true" and "false" should be usable - in #if expressions and integer constant expressions, - and "bool" should be a valid type name. */ + Although C99 requires bool, true, and false to be macros, + C23 and C++11 overrule that, so do not test for that. + Although C99 requires __bool_true_false_are_defined and + _Bool, C23 says they are obsolescent, so do not require + them. */ #if !true #error "'true' is not true" @@ -20618,43 +20901,12 @@ else $as_nop char n[sizeof m == h * sizeof m[0] ? 1 : -1]; char o[-1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See - https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ bool p = true; bool *pp = &p; - /* C 1999 specifies that bool, true, and false are to be - macros, but C++ 2011 and later overrule this. */ - #if __cplusplus < 201103 - #ifndef bool - #error "bool is not defined" - #endif - #ifndef false - #error "false is not defined" - #endif - #ifndef true - #error "true is not defined" - #endif - #endif - - /* If _Bool is available, repeat with it all the tests - above that used bool. */ - #ifdef HAVE__BOOL - struct sB { _Bool s: 1; _Bool t; } t; - - char q[(_Bool) 0.5 == true ? 1 : -1]; - char r[(_Bool) 0.0 == false ? 1 : -1]; - char u[sizeof (_Bool) > 0 ? 1 : -1]; - char v[sizeof t.t > 0 ? 1 : -1]; - - _Bool w[h]; - char x[sizeof m == h * sizeof m[0] ? 1 : -1]; - char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; - _Bool z = true; - _Bool *pz = &p; - #endif - int main (void) { @@ -20663,20 +20915,10 @@ main (void) *pp |= p; *pp |= ! p; - #ifdef HAVE__BOOL - _Bool pt = &t; - *pz |= z; - *pz |= ! z; - #endif - /* Refer to every declared value, so they cannot be discarded as unused. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k - + !l + !m + !n + !o + !p + !pp + !ps - #ifdef HAVE__BOOL - + !q + !r + !u + !v + !w + !x + !y + !z + !pt - #endif - ); + return (!b + !c + !d + !e + !f + !g + !h + !i + !j + !k + + !l + !m + !n + !o + !p + !pp + !ps); ; return 0; @@ -20685,10 +20927,12 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_header_stdbool_h=yes -else $as_nop - ac_cv_header_stdbool_h=no +else case e in #( + e) ac_cv_header_stdbool_h=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } @@ -20698,19 +20942,19 @@ printf %s "checking for GNU libc compatible malloc... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ - | hpux* | solaris* | cygwin* | mingw* | msys* ) + | hpux* | solaris* | cygwin* | mingw* | windows* | msys* ) ac_cv_func_malloc_0_nonnull=yes ;; # If we don't know, assume the worst. *) ac_cv_func_malloc_0_nonnull=no ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -20728,13 +20972,16 @@ _ACEOF if ac_fn_cxx_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes -else $as_nop - ac_cv_func_malloc_0_nonnull=no +else case e in #( + e) ac_cv_func_malloc_0_nonnull=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } @@ -20743,8 +20990,8 @@ then : printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h -else $as_nop - printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h +else case e in #( + e) printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; @@ -20754,7 +21001,8 @@ esac printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h - + ;; +esac fi @@ -20768,8 +21016,8 @@ printf %s "checking for OpenMP flag of C++ compiler... " >&6; } if test ${ax_cv_cxx_openmp+y} then : printf %s "(cached) " >&6 -else $as_nop - saveCXXFLAGS=$CXXFLAGS +else case e in #( + e) saveCXXFLAGS=$CXXFLAGS ax_cv_cxx_openmp=unknown # Flags to try: -fopenmp (gcc), -mp (SGI & PGI), # -qopenmp (icc>=15), -openmp (icc), @@ -20817,7 +21065,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done CXXFLAGS=$saveCXXFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_openmp" >&5 printf "%s\n" "$ax_cv_cxx_openmp" >&6; } @@ -20840,9 +21089,10 @@ fi if test x$HAVE_OPENMP != x1 then : -else $as_nop - CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" - LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" +else case e in #( + e) CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" + LDFLAGS="$LDFLAGS $OPENMP_CXXFLAGS" ;; +esac fi ac_fn_cxx_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" @@ -20896,8 +21146,8 @@ esac if test "x$ac_cv_type_pid_t" = xyes then : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ @@ -20916,14 +21166,16 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' +else case e in #( + e) ac_pid_type='__int64' ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - + ;; +esac fi @@ -20931,20 +21183,22 @@ ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_defaul if test "x$ac_cv_type_size_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define size_t unsigned int" >>confdefs.h - + ;; +esac fi ac_fn_cxx_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define ssize_t int" >>confdefs.h - + ;; +esac fi ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" @@ -20999,8 +21253,8 @@ printf %s "checking for long double with more range or precision than double... if test ${ac_cv_type_long_double_wider+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include long double const a[] = @@ -21034,10 +21288,12 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_type_long_double_wider=yes -else $as_nop - ac_cv_type_long_double_wider=no +else case e in #( + e) ac_cv_type_long_double_wider=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 printf "%s\n" "$ac_cv_type_long_double_wider" >&6; } @@ -21063,8 +21319,9 @@ fi if test ${enable_hwloc+y} then : enableval=$enable_hwloc; enable_hwloc=no -else $as_nop - enable_hwloc=yes +else case e in #( + e) enable_hwloc=yes ;; +esac fi HAVE_HWLOC=0 @@ -21076,8 +21333,8 @@ printf %s "checking for hwloc_topology_init in -lhwloc... " >&6; } if test ${ac_cv_lib_hwloc_hwloc_topology_init+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lhwloc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21096,12 +21353,14 @@ _ACEOF if ac_fn_cxx_try_link "$LINENO" then : ac_cv_lib_hwloc_hwloc_topology_init=yes -else $as_nop - ac_cv_lib_hwloc_hwloc_topology_init=no +else case e in #( + e) ac_cv_lib_hwloc_hwloc_topology_init=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hwloc_hwloc_topology_init" >&5 printf "%s\n" "$ac_cv_lib_hwloc_hwloc_topology_init" >&6; } @@ -21122,8 +21381,9 @@ fi if test ${enable_vma+y} then : enableval=$enable_vma; enable_vma=yes -else $as_nop - enable_vma=no +else case e in #( + e) enable_vma=no ;; +esac fi HAVE_VMA=0 @@ -21135,8 +21395,8 @@ printf %s "checking for recvfrom_zcopy in -lvma... " >&6; } if test ${ac_cv_lib_vma_recvfrom_zcopy+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lvma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21155,12 +21415,14 @@ _ACEOF if ac_fn_cxx_try_link "$LINENO" then : ac_cv_lib_vma_recvfrom_zcopy=yes -else $as_nop - ac_cv_lib_vma_recvfrom_zcopy=no +else case e in #( + e) ac_cv_lib_vma_recvfrom_zcopy=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_recvfrom_zcopy" >&5 printf "%s\n" "$ac_cv_lib_vma_recvfrom_zcopy" >&6; } @@ -21176,8 +21438,8 @@ printf %s "checking for vma_recvfrom_zcopy in -lvma... " >&6; } if test ${ac_cv_lib_vma_vma_recvfrom_zcopy+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lvma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21196,12 +21458,14 @@ _ACEOF if ac_fn_cxx_try_link "$LINENO" then : ac_cv_lib_vma_vma_recvfrom_zcopy=yes -else $as_nop - ac_cv_lib_vma_vma_recvfrom_zcopy=no +else case e in #( + e) ac_cv_lib_vma_vma_recvfrom_zcopy=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vma_vma_recvfrom_zcopy" >&5 printf "%s\n" "$ac_cv_lib_vma_vma_recvfrom_zcopy" >&6; } @@ -21222,8 +21486,9 @@ fi if test ${enable_verbs+y} then : enableval=$enable_verbs; enable_verbs=no -else $as_nop - enable_verbs=yes +else case e in #( + e) enable_verbs=yes ;; +esac fi HAVE_VERBS=0 @@ -21235,8 +21500,8 @@ printf %s "checking for ibv_query_device in -libverbs... " >&6; } if test ${ac_cv_lib_ibverbs_ibv_query_device+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-libverbs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21255,12 +21520,14 @@ _ACEOF if ac_fn_cxx_try_link "$LINENO" then : ac_cv_lib_ibverbs_ibv_query_device=yes -else $as_nop - ac_cv_lib_ibverbs_ibv_query_device=no +else case e in #( + e) ac_cv_lib_ibverbs_ibv_query_device=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ibverbs_ibv_query_device" >&5 printf "%s\n" "$ac_cv_lib_ibverbs_ibv_query_device" >&6; } @@ -21278,8 +21545,9 @@ fi if test ${with_rx_buffer_size+y} then : withval=$with_rx_buffer_size; -else $as_nop - with_rx_buffer_size=8192 +else case e in #( + e) with_rx_buffer_size=8192 ;; +esac fi VERBS_NPKTBUF=$with_rx_buffer_size @@ -21295,8 +21563,9 @@ fi if test ${with_tx_buffer_size+y} then : withval=$with_tx_buffer_size; -else $as_nop - with_tx_buffer_size=512 +else case e in #( + e) with_tx_buffer_size=512 ;; +esac fi VERBS_SEND_NPKTBUF=$with_tx_buffer_size @@ -21342,11 +21611,12 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - VERBS_SEND_PACING=0 +else case e in #( + e) VERBS_SEND_PACING=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +printf "%s\n" "no" >&6; } ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -21360,8 +21630,9 @@ fi if test ${enable_rdma+y} then : enableval=$enable_rdma; enable_rdma=no -else $as_nop - enable_rdma=yes +else case e in #( + e) enable_rdma=yes ;; +esac fi HAVE_RDMA=0 @@ -21373,8 +21644,8 @@ printf %s "checking for rdma_get_devices in -lrdmacm... " >&6; } if test ${ac_cv_lib_rdmacm_rdma_get_devices+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lrdmacm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21393,12 +21664,14 @@ _ACEOF if ac_fn_cxx_try_link "$LINENO" then : ac_cv_lib_rdmacm_rdma_get_devices=yes -else $as_nop - ac_cv_lib_rdmacm_rdma_get_devices=no +else case e in #( + e) ac_cv_lib_rdmacm_rdma_get_devices=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rdmacm_rdma_get_devices" >&5 printf "%s\n" "$ac_cv_lib_rdmacm_rdma_get_devices" >&6; } @@ -21416,8 +21689,9 @@ fi if test ${with_rdma_max_mem+y} then : withval=$with_rdma_max_mem; -else $as_nop - with_rdma_max_mem=134217728 +else case e in #( + e) with_rdma_max_mem=134217728 ;; +esac fi RDMA_MAXMEM=$with_rdma_max_mem @@ -21447,8 +21721,9 @@ fi if test ${with_cuda_home+y} then : withval=$with_cuda_home; -else $as_nop - with_cuda_home=/usr/local/cuda +else case e in #( + e) with_cuda_home=/usr/local/cuda ;; +esac fi CUDA_HOME=$with_cuda_home @@ -21458,8 +21733,9 @@ fi if test ${enable_cuda+y} then : enableval=$enable_cuda; enable_cuda=no -else $as_nop - enable_cuda=yes +else case e in #( + e) enable_cuda=yes ;; +esac fi @@ -21501,8 +21777,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_NVCC+y} then : printf %s "(cached) " >&6 -else $as_nop - case $NVCC in +else case e in #( + e) case $NVCC in [\\/]* | ?:[\\/]*) ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. ;; @@ -21529,6 +21805,7 @@ IFS=$as_save_IFS test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="no" ;; +esac ;; esac fi NVCC=$ac_cv_path_NVCC @@ -21548,8 +21825,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_NVPRUNE+y} then : printf %s "(cached) " >&6 -else $as_nop - case $NVPRUNE in +else case e in #( + e) case $NVPRUNE in [\\/]* | ?:[\\/]*) ac_cv_path_NVPRUNE="$NVPRUNE" # Let the user override the test with a path. ;; @@ -21576,6 +21853,7 @@ IFS=$as_save_IFS test -z "$ac_cv_path_NVPRUNE" && ac_cv_path_NVPRUNE="no" ;; +esac ;; esac fi NVPRUNE=$ac_cv_path_NVPRUNE @@ -21595,8 +21873,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_CUOBJDUMP+y} then : printf %s "(cached) " >&6 -else $as_nop - case $CUOBJDUMP in +else case e in #( + e) case $CUOBJDUMP in [\\/]* | ?:[\\/]*) ac_cv_path_CUOBJDUMP="$CUOBJDUMP" # Let the user override the test with a path. ;; @@ -21623,6 +21901,7 @@ IFS=$as_save_IFS test -z "$ac_cv_path_CUOBJDUMP" && ac_cv_path_CUOBJDUMP="no" ;; +esac ;; esac fi CUOBJDUMP=$ac_cv_path_CUOBJDUMP @@ -21669,9 +21948,10 @@ _ACEOF if ac_fn_cxx_try_link "$LINENO" then : -else $as_nop - HAVE_CUDA=0 - +else case e in #( + e) HAVE_CUDA=0 + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -21700,11 +21980,12 @@ then : CUDA_VERSION=$( ${NVCC} --version | ${GREP} -Po -e "release.*," | cut -d, -f1 | cut -d\ -f2 ) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes - v$CUDA_VERSION" >&5 printf "%s\n" "yes - v$CUDA_VERSION" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } HAVE_CUDA=0 - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -21762,8 +22043,9 @@ printf "%s\n" "C++11" >&6; } if test ${with_nvcc_flags+y} then : withval=$with_nvcc_flags; -else $as_nop - with_nvcc_flags='-O3 -Xcompiler "-Wall"' +else case e in #( + e) with_nvcc_flags='-O3 -Xcompiler "-Wall"' ;; +esac fi NVCCFLAGS=$with_nvcc_flags @@ -21774,8 +22056,9 @@ fi if test ${with_stream_model+y} then : withval=$with_stream_model; -else $as_nop - with_stream_model='per-thread' +else case e in #( + e) with_stream_model='per-thread' ;; +esac fi @@ -21809,7 +22092,7 @@ printf "%s\n" "no, only the 'legacy' stream model is supported" >&6; } CXXFLAGS="$CXXFLAGS -DBF_CUDA_ENABLED=1" NVCCFLAGS="$NVCCFLAGS -DBF_CUDA_ENABLED=1" LDFLAGS="$LDFLAGS -L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - NVCCLIBS="$NVCCLIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos -lnvToolsExt" + NVCCLIBS="$NVCCLIBS -lcuda -lcudart -lnvrtc -lcublas -lcudadevrt -L. -lcufft_static_pruned -lculibos" fi @@ -21817,8 +22100,9 @@ printf "%s\n" "no, only the 'legacy' stream model is supported" >&6; } if test ${with_gpu_archs+y} then : withval=$with_gpu_archs; -else $as_nop - with_gpu_archs='auto' +else case e in #( + e) with_gpu_archs='auto' ;; +esac fi if test "$HAVE_CUDA" = "1"; then @@ -21844,12 +22128,12 @@ printf %s "checking which CUDA architectures to target... " >&6; } ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21908,11 +22192,13 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_ARCHS" >&5 printf "%s\n" "$GPU_ARCHS" >&6; } fi -else $as_nop - as_fn_error $? "failed to find any" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "failed to find any" "$LINENO" 5 ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi @@ -21949,8 +22235,9 @@ printf "%s\n" "yes" >&6; } if test ${with_shared_mem+y} then : withval=$with_shared_mem; -else $as_nop - with_shared_mem='auto' +else case e in #( + e) with_shared_mem='auto' ;; +esac fi if test "$with_shared_mem" = "auto"; then @@ -21968,12 +22255,12 @@ printf %s "checking for minimum shared memory per block... " >&6; } ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -22018,11 +22305,13 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPU_SHAREDMEM B" >&5 printf "%s\n" "$GPU_SHAREDMEM B" >&6; } -else $as_nop - as_fn_error $? "failed to determine a value" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "failed to determine a value" "$LINENO" 5 ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi @@ -22063,12 +22352,12 @@ printf %s "checking for thrust pinned allocated support... " >&6; } ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -22089,14 +22378,16 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: full" >&5 printf "%s\n" "full" >&6; } -else $as_nop - GPU_EXP_PINNED_ALLOC=1 +else case e in #( + e) GPU_EXP_PINNED_ALLOC=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: experimental" >&5 -printf "%s\n" "experimental" >&6; } +printf "%s\n" "experimental" >&6; } ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi @@ -22104,6 +22395,74 @@ fi LDFLAGS="$LDFLAGS_save" NVCCLIBS="$NVCCLIBS_save" ac_ext="$ac_ext_save" + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for header-only NVTX version" >&5 +printf %s "checking for header-only NVTX version... " >&6; } + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + NVCCLIBS_save="$NVCCLIBS" + ac_ext_save="$ac_ext" + + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + NVCCLIBS="-lcuda -lcudart -lnvToolsExt" + ac_ext="cu" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #include + #include +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO" +then : + GPU_HEADERONLY_NVTX=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else case e in #( + e) GPU_HEADERONLY_NVTX=0 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; +esac +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac +fi + + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + NVCCLIBS="$NVCCLIBS_save -lnvToolsExt" + ac_ext="$ac_ext_save" + + else + GPU_PASCAL_MANAGEDMEM=0 + + GPU_EXP_PINNED_ALLOC=1 + + GPU_HEADERONLY_NVTX=0 + + fi + + else GPU_PASCAL_MANAGEDMEM=0 @@ -22125,8 +22484,9 @@ fi if test ${with_alignment+y} then : withval=$with_alignment; -else $as_nop - with_alignment=4096 +else case e in #( + e) with_alignment=4096 ;; +esac fi ALIGNMENT=$with_alignment @@ -22145,9 +22505,10 @@ if test ${with_logging_dir+y} then : withval=$with_logging_dir; HAVE_TMPFS=$with_logging_dir -else $as_nop - HAVE_TMPFS=/tmp - +else case e in #( + e) HAVE_TMPFS=/tmp + ;; +esac fi @@ -22157,14 +22518,15 @@ printf %s "checking for /dev/shm... " >&6; } if test ${ac_cv_file__dev_shm+y} then : printf %s "(cached) " >&6 -else $as_nop - test "$cross_compiling" = yes && +else case e in #( + e) test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/shm"; then ac_cv_file__dev_shm=yes else ac_cv_file__dev_shm=no -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_shm" >&5 printf "%s\n" "$ac_cv_file__dev_shm" >&6; } @@ -22182,14 +22544,15 @@ printf %s "checking for /Volumes/RAMDisk... " >&6; } if test ${ac_cv_file__Volumes_RAMDisk+y} then : printf %s "(cached) " >&6 -else $as_nop - test "$cross_compiling" = yes && +else case e in #( + e) test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/Volumes/RAMDisk"; then ac_cv_file__Volumes_RAMDisk=yes else ac_cv_file__Volumes_RAMDisk=no -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__Volumes_RAMDisk" >&5 printf "%s\n" "$ac_cv_file__Volumes_RAMDisk" >&6; } @@ -22207,14 +22570,15 @@ printf %s "checking for /tmp... " >&6; } if test ${ac_cv_file__tmp+y} then : printf %s "(cached) " >&6 -else $as_nop - test "$cross_compiling" = yes && +else case e in #( + e) test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/tmp"; then ac_cv_file__tmp=yes else ac_cv_file__tmp=no -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__tmp" >&5 printf "%s\n" "$ac_cv_file__tmp" >&6; } @@ -22239,8 +22603,9 @@ printf "%s\n" "$as_me: WARNING: $HAVE_TMPFS may have performance problems for lo if test ${enable_debug+y} then : enableval=$enable_debug; enable_debug=yes -else $as_nop - enable_debug=no +else case e in #( + e) enable_debug=no ;; +esac fi HAVE_DEBUG=0 @@ -22257,8 +22622,9 @@ fi if test ${enable_trace+y} then : enableval=$enable_trace; enable_trace=yes -else $as_nop - enable_trace=no +else case e in #( + e) enable_trace=no ;; +esac fi HAVE_TRACE=0 @@ -22275,8 +22641,9 @@ fi if test ${enable_sse+y} then : enableval=$enable_sse; enable_sse=no -else $as_nop - enable_sse=yes +else case e in #( + e) enable_sse=yes ;; +esac fi @@ -22292,12 +22659,12 @@ printf %s "checking for SSE support via '-msse'... " >&6; } ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -22322,14 +22689,16 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi fi @@ -22340,8 +22709,9 @@ fi if test ${enable_avx+y} then : enableval=$enable_avx; enable_avx=no -else $as_nop - enable_avx=yes +else case e in #( + e) enable_avx=yes ;; +esac fi @@ -22358,12 +22728,12 @@ printf %s "checking for AVX support via '-mavx'... " >&6; } ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -22388,14 +22758,16 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi @@ -22408,8 +22780,9 @@ fi if test ${enable_avx512+y} then : enableval=$enable_avx512; enable_avx512=no -else $as_nop - enable_avx512=yes +else case e in #( + e) enable_avx512=yes ;; +esac fi @@ -22426,12 +22799,12 @@ printf %s "checking for AVX-512 support via '-mavx512f'... " >&6; } ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" if test "$cross_compiling" = yes then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -22456,14 +22829,16 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi @@ -22476,8 +22851,9 @@ fi if test ${enable_native_arch+y} then : enableval=$enable_native_arch; enable_native_arch=no -else $as_nop - enable_native_arch=yes +else case e in #( + e) enable_native_arch=yes ;; +esac fi @@ -22508,11 +22884,12 @@ then : NVCCFLAGS="$NVCCFLAGS -Xcompiler \"-march=native\"" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - enable_native_arch=no +else case e in #( + e) enable_native_arch=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +printf "%s\n" "no" >&6; } ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -22522,8 +22899,9 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test ${enable_cuda_debug+y} then : enableval=$enable_cuda_debug; enable_cuda_debug=yes -else $as_nop - enable_cuda_debug=no +else case e in #( + e) enable_cuda_debug=no ;; +esac fi HAVE_CUDA_DEBUG=0 @@ -22539,8 +22917,9 @@ fi if test ${enable_map_cache+y} then : enableval=$enable_map_cache; enable_map_cache=no -else $as_nop - enable_map_cache=yes +else case e in #( + e) enable_map_cache=yes ;; +esac fi HAVE_MAP_CACHE=0 @@ -22559,8 +22938,9 @@ fi if test ${enable_python+y} then : enableval=$enable_python; enable_python=no -else $as_nop - enable_python=yes +else case e in #( + e) enable_python=yes ;; +esac fi HAVE_PYTHON=0 @@ -22594,8 +22974,8 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 printf "%s\n" "$PYTHON" >&6; } -else $as_nop - +else case e in #( + e) PYTHON="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -22609,8 +22989,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON in +else case e in #( + e) case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; @@ -22636,6 +23016,7 @@ IFS=$as_save_IFS test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="no" ;; +esac ;; esac fi PYTHON=$ac_cv_path_PYTHON @@ -22650,11 +23031,12 @@ fi fi - + ;; +esac fi -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } # Extract the first word of "python", so it can be a program name with args. @@ -22664,8 +23046,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON in +else case e in #( + e) case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; @@ -22691,6 +23073,7 @@ IFS=$as_save_IFS test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="no" ;; +esac ;; esac fi PYTHON=$ac_cv_path_PYTHON @@ -22703,7 +23086,8 @@ printf "%s\n" "no" >&6; } fi - + ;; +esac fi @@ -22723,8 +23107,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON3+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON3 in +else case e in #( + e) case $PYTHON3 in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON3="$PYTHON3" # Let the user override the test with a path. ;; @@ -22750,6 +23134,7 @@ IFS=$as_save_IFS test -z "$ac_cv_path_PYTHON3" && ac_cv_path_PYTHON3="no" ;; +esac ;; esac fi PYTHON3=$ac_cv_path_PYTHON3 @@ -22780,9 +23165,10 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} PYTHON=no -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; +esac fi fi if test x${PYTHON} != xno @@ -22795,11 +23181,12 @@ then : printf "%s\n" "no" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: python module will not be built" >&5 printf "%s\n" "$as_me: WARNING: python module will not be built" >&2;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } HAVE_PYTHON=1 - + ;; +esac fi fi fi @@ -22854,8 +23241,8 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOCKER" >&5 printf "%s\n" "$DOCKER" >&6; } -else $as_nop - +else case e in #( + e) DOCKER="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -22869,8 +23256,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DOCKER+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DOCKER in +else case e in #( + e) case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. ;; @@ -22896,6 +23283,7 @@ IFS=$as_save_IFS test -z "$ac_cv_path_DOCKER" && ac_cv_path_DOCKER="no" ;; +esac ;; esac fi DOCKER=$ac_cv_path_DOCKER @@ -22910,11 +23298,12 @@ fi fi - + ;; +esac fi -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } # Extract the first word of "docker", so it can be a program name with args. @@ -22924,8 +23313,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DOCKER+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DOCKER in +else case e in #( + e) case $DOCKER in [\\/]* | ?:[\\/]*) ac_cv_path_DOCKER="$DOCKER" # Let the user override the test with a path. ;; @@ -22951,6 +23340,7 @@ IFS=$as_save_IFS test -z "$ac_cv_path_DOCKER" && ac_cv_path_DOCKER="no" ;; +esac ;; esac fi DOCKER=$ac_cv_path_DOCKER @@ -22963,7 +23353,8 @@ printf "%s\n" "no" >&6; } fi - + ;; +esac fi @@ -23028,12 +23419,13 @@ n|N|no|No|NO) ;; esac -else $as_nop - +else case e in #( + e) DX_FLAG_doc=1 - + ;; +esac fi if test "$DX_FLAG_doc" = 1; then @@ -23046,8 +23438,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_DOXYGEN+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_DOXYGEN in +else case e in #( + e) case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. ;; @@ -23072,6 +23464,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN @@ -23094,8 +23487,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_DOXYGEN in +else case e in #( + e) case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. ;; @@ -23120,6 +23513,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN @@ -23162,8 +23556,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_PERL+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_PERL in +else case e in #( + e) case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. ;; @@ -23188,6 +23582,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_PERL=$ac_cv_path_DX_PERL @@ -23210,8 +23605,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_PERL+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_PERL in +else case e in #( + e) case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. ;; @@ -23236,6 +23631,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL @@ -23309,15 +23705,16 @@ n|N|no|No|NO) ;; esac -else $as_nop - +else case e in #( + e) DX_FLAG_dot=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0 - + ;; +esac fi if test "$DX_FLAG_dot" = 1; then @@ -23330,8 +23727,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_DOT+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_DOT in +else case e in #( + e) case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. ;; @@ -23356,6 +23753,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_DOT=$ac_cv_path_DX_DOT @@ -23378,8 +23776,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_DOT+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_DOT in +else case e in #( + e) case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. ;; @@ -23404,6 +23802,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT @@ -23482,15 +23881,16 @@ n|N|no|No|NO) ;; esac -else $as_nop - +else case e in #( + e) DX_FLAG_man=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 - + ;; +esac fi if test "$DX_FLAG_man" = 1; then @@ -23537,15 +23937,16 @@ n|N|no|No|NO) ;; esac -else $as_nop - +else case e in #( + e) DX_FLAG_rtf=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0 - + ;; +esac fi if test "$DX_FLAG_rtf" = 1; then @@ -23592,15 +23993,16 @@ n|N|no|No|NO) ;; esac -else $as_nop - +else case e in #( + e) DX_FLAG_xml=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0 - + ;; +esac fi if test "$DX_FLAG_xml" = 1; then @@ -23647,15 +24049,16 @@ n|N|no|No|NO) ;; esac -else $as_nop - +else case e in #( + e) DX_FLAG_chm=0 test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0 - + ;; +esac fi if test "$DX_FLAG_chm" = 1; then @@ -23668,8 +24071,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_HHC+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_HHC in +else case e in #( + e) case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. ;; @@ -23694,6 +24097,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_HHC=$ac_cv_path_DX_HHC @@ -23716,8 +24120,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_HHC+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_HHC in +else case e in #( + e) case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. ;; @@ -23742,6 +24146,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC @@ -23823,15 +24228,16 @@ n|N|no|No|NO) ;; esac -else $as_nop - +else case e in #( + e) DX_FLAG_chi=0 test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0 - + ;; +esac fi if test "$DX_FLAG_chi" = 1; then @@ -23881,8 +24287,8 @@ n|N|no|No|NO) ;; esac -else $as_nop - +else case e in #( + e) DX_FLAG_html=1 @@ -23892,7 +24298,8 @@ test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0 test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0 - + ;; +esac fi if test "$DX_FLAG_html" = 1; then @@ -23939,15 +24346,16 @@ n|N|no|No|NO) ;; esac -else $as_nop - +else case e in #( + e) DX_FLAG_ps=1 test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0 - + ;; +esac fi if test "$DX_FLAG_ps" = 1; then @@ -23960,8 +24368,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_LATEX+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_LATEX in +else case e in #( + e) case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. ;; @@ -23986,6 +24394,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_LATEX=$ac_cv_path_DX_LATEX @@ -24008,8 +24417,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_LATEX+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_LATEX in +else case e in #( + e) case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. ;; @@ -24034,6 +24443,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX @@ -24076,8 +24486,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_MAKEINDEX+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_MAKEINDEX in +else case e in #( + e) case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. ;; @@ -24102,6 +24512,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX @@ -24124,8 +24535,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_MAKEINDEX in +else case e in #( + e) case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. ;; @@ -24150,6 +24561,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX @@ -24192,8 +24604,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_DVIPS+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_DVIPS in +else case e in #( + e) case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. ;; @@ -24218,6 +24630,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS @@ -24240,8 +24653,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_DVIPS+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_DVIPS in +else case e in #( + e) case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. ;; @@ -24266,6 +24679,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS @@ -24308,8 +24722,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_EGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_EGREP in +else case e in #( + e) case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. ;; @@ -24334,6 +24748,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_EGREP=$ac_cv_path_DX_EGREP @@ -24356,8 +24771,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_EGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_EGREP in +else case e in #( + e) case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. ;; @@ -24382,6 +24797,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP @@ -24453,15 +24869,16 @@ n|N|no|No|NO) ;; esac -else $as_nop - +else case e in #( + e) DX_FLAG_pdf=1 test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0 - + ;; +esac fi if test "$DX_FLAG_pdf" = 1; then @@ -24474,8 +24891,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_PDFLATEX+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_PDFLATEX in +else case e in #( + e) case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. ;; @@ -24500,6 +24917,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX @@ -24522,8 +24940,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_PDFLATEX in +else case e in #( + e) case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. ;; @@ -24548,6 +24966,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX @@ -24590,8 +25009,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_MAKEINDEX+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_MAKEINDEX in +else case e in #( + e) case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. ;; @@ -24616,6 +25035,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX @@ -24638,8 +25058,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_MAKEINDEX in +else case e in #( + e) case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. ;; @@ -24664,6 +25084,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX @@ -24706,8 +25127,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_DX_EGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - case $DX_EGREP in +else case e in #( + e) case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. ;; @@ -24732,6 +25153,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi DX_EGREP=$ac_cv_path_DX_EGREP @@ -24754,8 +25176,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_DX_EGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_DX_EGREP in +else case e in #( + e) case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. ;; @@ -24780,6 +25202,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP @@ -24864,16 +25287,18 @@ DX_CLEAN_HTML = \$(DX_DOCDIR)/html\\ \$(DX_DOCDIR)/html " -else $as_nop - DX_SNIPPET_html="" +else case e in #( + e) DX_SNIPPET_html="" ;; +esac fi if test $DX_FLAG_chi -eq 1 then : DX_SNIPPET_chi=" DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi\\ \$(DX_DOCDIR)/\$(PACKAGE).chi" -else $as_nop - DX_SNIPPET_chi="" +else case e in #( + e) DX_SNIPPET_chi="" ;; +esac fi if test $DX_FLAG_chm -eq 1 then : @@ -24886,8 +25311,9 @@ DX_CLEAN_CHM = \$(DX_DOCDIR)/chm\\ ${DX_SNIPPET_chi} " -else $as_nop - DX_SNIPPET_chm="" +else case e in #( + e) DX_SNIPPET_chm="" ;; +esac fi if test $DX_FLAG_man -eq 1 then : @@ -24899,8 +25325,9 @@ DX_CLEAN_MAN = \$(DX_DOCDIR)/man\\ \$(DX_DOCDIR)/man " -else $as_nop - DX_SNIPPET_man="" +else case e in #( + e) DX_SNIPPET_man="" ;; +esac fi if test $DX_FLAG_rtf -eq 1 then : @@ -24912,8 +25339,9 @@ DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf\\ \$(DX_DOCDIR)/rtf " -else $as_nop - DX_SNIPPET_rtf="" +else case e in #( + e) DX_SNIPPET_rtf="" ;; +esac fi if test $DX_FLAG_xml -eq 1 then : @@ -24925,8 +25353,9 @@ DX_CLEAN_XML = \$(DX_DOCDIR)/xml\\ \$(DX_DOCDIR)/xml " -else $as_nop - DX_SNIPPET_xml="" +else case e in #( + e) DX_SNIPPET_xml="" ;; +esac fi if test $DX_FLAG_ps -eq 1 then : @@ -24957,8 +25386,9 @@ doxygen-ps: \$(DX_CLEAN_PS) \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi " -else $as_nop - DX_SNIPPET_ps="" +else case e in #( + e) DX_SNIPPET_ps="" ;; +esac fi if test $DX_FLAG_pdf -eq 1 then : @@ -24989,8 +25419,9 @@ doxygen-pdf: \$(DX_CLEAN_PDF) mv refman.pdf ../\$(PACKAGE).pdf " -else $as_nop - DX_SNIPPET_pdf="" +else case e in #( + e) DX_SNIPPET_pdf="" ;; +esac fi if test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1 then : @@ -25006,8 +25437,9 @@ DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex\\ \$(DX_DOCDIR)/latex " -else $as_nop - DX_SNIPPET_latex="" +else case e in #( + e) DX_SNIPPET_latex="" ;; +esac fi if test $DX_FLAG_doc -eq 1 @@ -25054,8 +25486,9 @@ DX_CLEANFILES = \\ \$(DX_CLEAN_PS) \\ \$(DX_CLEAN_PDF) \\ \$(DX_CLEAN_LATEX)" -else $as_nop - DX_SNIPPET_doc="" +else case e in #( + e) DX_SNIPPET_doc="" ;; +esac fi DX_RULES="${DX_SNIPPET_doc}" @@ -25112,8 +25545,8 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SPHINXB" >&5 printf "%s\n" "$PYTHON_SPHINXB" >&6; } -else $as_nop - +else case e in #( + e) PYTHON_SPHINXB="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -25127,8 +25560,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON_SPHINXB+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON_SPHINXB in +else case e in #( + e) case $PYTHON_SPHINXB in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON_SPHINXB="$PYTHON_SPHINXB" # Let the user override the test with a path. ;; @@ -25153,6 +25586,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi PYTHON_SPHINXB=$ac_cv_path_PYTHON_SPHINXB @@ -25167,11 +25601,12 @@ fi fi - + ;; +esac fi -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } # Extract the first word of "sphinx-build", so it can be a program name with args. @@ -25181,8 +25616,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON_SPHINXB+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON_SPHINXB in +else case e in #( + e) case $PYTHON_SPHINXB in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON_SPHINXB="$PYTHON_SPHINXB" # Let the user override the test with a path. ;; @@ -25207,6 +25642,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi PYTHON_SPHINXB=$ac_cv_path_PYTHON_SPHINXB @@ -25219,7 +25655,8 @@ printf "%s\n" "no" >&6; } fi - + ;; +esac fi @@ -25257,8 +25694,8 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SPHINXA" >&5 printf "%s\n" "$PYTHON_SPHINXA" >&6; } -else $as_nop - +else case e in #( + e) PYTHON_SPHINXA="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -25272,8 +25709,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON_SPHINXA+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON_SPHINXA in +else case e in #( + e) case $PYTHON_SPHINXA in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON_SPHINXA="$PYTHON_SPHINXA" # Let the user override the test with a path. ;; @@ -25298,6 +25735,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi PYTHON_SPHINXA=$ac_cv_path_PYTHON_SPHINXA @@ -25312,11 +25750,12 @@ fi fi - + ;; +esac fi -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } # Extract the first word of "sphinx-apidoc", so it can be a program name with args. @@ -25326,8 +25765,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON_SPHINXA+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON_SPHINXA in +else case e in #( + e) case $PYTHON_SPHINXA in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON_SPHINXA="$PYTHON_SPHINXA" # Let the user override the test with a path. ;; @@ -25352,6 +25791,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi PYTHON_SPHINXA=$ac_cv_path_PYTHON_SPHINXA @@ -25364,7 +25804,8 @@ printf "%s\n" "no" >&6; } fi - + ;; +esac fi @@ -25402,8 +25843,8 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_BREATHE" >&5 printf "%s\n" "$PYTHON_BREATHE" >&6; } -else $as_nop - +else case e in #( + e) PYTHON_BREATHE="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -25417,8 +25858,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON_BREATHE+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON_BREATHE in +else case e in #( + e) case $PYTHON_BREATHE in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON_BREATHE="$PYTHON_BREATHE" # Let the user override the test with a path. ;; @@ -25443,6 +25884,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi PYTHON_BREATHE=$ac_cv_path_PYTHON_BREATHE @@ -25457,11 +25899,12 @@ fi fi - + ;; +esac fi -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } # Extract the first word of "breathe-apidoc", so it can be a program name with args. @@ -25471,8 +25914,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON_BREATHE+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON_BREATHE in +else case e in #( + e) case $PYTHON_BREATHE in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON_BREATHE="$PYTHON_BREATHE" # Let the user override the test with a path. ;; @@ -25497,6 +25940,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi PYTHON_BREATHE=$ac_cv_path_PYTHON_BREATHE @@ -25509,7 +25953,8 @@ printf "%s\n" "no" >&6; } fi - + ;; +esac fi @@ -25530,8 +25975,8 @@ if test x${DX_DOXYGEN} == x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing doxygen, documentation cannot be built" >&5 printf "%s\n" "$as_me: WARNING: missing doxygen, documentation cannot be built" >&2;} -else $as_nop - HAVE_CXX_DOCS=1 +else case e in #( + e) HAVE_CXX_DOCS=1 if test x${PYTHON} != xno then : @@ -25539,23 +25984,27 @@ then : then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the sphinx-build, python documentation cannot not be built" >&5 printf "%s\n" "$as_me: WARNING: missing the sphinx-build, python documentation cannot not be built" >&2;} -else $as_nop - if test x${PYTHON_SPHINXA} = x +else case e in #( + e) if test x${PYTHON_SPHINXA} = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the sphinx-apidoc, python documentation cannot not be built" >&5 printf "%s\n" "$as_me: WARNING: missing the sphinx-apidoc, python documentation cannot not be built" >&2;} -else $as_nop - if test x${PYTHON_BREATHE} = x +else case e in #( + e) if test x${PYTHON_BREATHE} = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: missing the breathe-apidoc, python documentation cannot not be built" >&5 printf "%s\n" "$as_me: WARNING: missing the breathe-apidoc, python documentation cannot not be built" >&2;} -else $as_nop - HAVE_PYTHON_DOCS=1 - -fi -fi -fi +else case e in #( + e) HAVE_PYTHON_DOCS=1 + ;; +esac +fi ;; +esac +fi ;; +esac fi +fi ;; +esac fi @@ -25587,22 +26036,25 @@ then : NVCCFLAGS="-std=c++20 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++20 -else $as_nop - if test x$CUDA_HAVE_CXX17 = x1 +else case e in #( + e) if test x$CUDA_HAVE_CXX17 = x1 then : NVCCFLAGS="-std=c++17 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++17 -else $as_nop - if test x$CUDA_HAVE_CXX14 = x1 +else case e in #( + e) if test x$CUDA_HAVE_CXX14 = x1 then : NVCCFLAGS="-std=c++14 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++14 -else $as_nop - NVCCFLAGS="-std=c++11 $NVCCFLAGS" -fi -fi +else case e in #( + e) NVCCFLAGS="-std=c++11 $NVCCFLAGS" ;; +esac +fi ;; +esac +fi ;; +esac fi fi if test x$HAVE_CXX17 = x1 @@ -25615,22 +26067,25 @@ then : NVCCFLAGS="-std=c++17 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++17 -else $as_nop - if test x$CUDA_HAVE_CXX17 = x1 +else case e in #( + e) if test x$CUDA_HAVE_CXX17 = x1 then : NVCCFLAGS="-std=c++17 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++17 -else $as_nop - if test x$CUDA_HAVE_CXX14 = x1 +else case e in #( + e) if test x$CUDA_HAVE_CXX14 = x1 then : NVCCFLAGS="-std=c++14 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++14 -else $as_nop - NVCCFLAGS="-std=c++11 $NVCCFLAGS" -fi -fi +else case e in #( + e) NVCCFLAGS="-std=c++11 $NVCCFLAGS" ;; +esac +fi ;; +esac +fi ;; +esac fi fi if test x$HAVE_CXX14 = x1 @@ -25643,22 +26098,25 @@ then : NVCCFLAGS="-std=c++14 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++14 -else $as_nop - if test x$CUDA_HAVE_CXX17 = x1 +else case e in #( + e) if test x$CUDA_HAVE_CXX17 = x1 then : NVCCFLAGS="-std=c++14 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++14 -else $as_nop - if test x$CUDA_HAVE_CXX14 = x1 +else case e in #( + e) if test x$CUDA_HAVE_CXX14 = x1 then : NVCCFLAGS="-std=c++14 $NVCCFLAGS" MAP_KERNEL_STDCXX=c++14 -else $as_nop - NVCCFLAGS="-std=c++11 $NVCCFLAGS" -fi -fi +else case e in #( + e) NVCCFLAGS="-std=c++11 $NVCCFLAGS" ;; +esac +fi ;; +esac +fi ;; +esac fi fi if test x$STDCXX_IS_SET != x1 @@ -25703,8 +26161,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the +# 'ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF @@ -25734,14 +26192,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote + # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # `set' quotes correctly as required by POSIX, so do not add quotes. + # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -25805,9 +26263,7 @@ s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g +s/[][ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\$/$$/g H :any @@ -25867,7 +26323,6 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -25876,12 +26331,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -25953,7 +26409,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -25982,7 +26438,6 @@ as_fn_error () } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -26022,11 +26477,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -26040,11 +26496,12 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith @@ -26127,9 +26584,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -26210,10 +26667,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 @@ -26229,7 +26688,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by bifrost $as_me 0.10.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -26257,7 +26716,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions +'$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -26289,10 +26748,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ bifrost config.status 0.10.0 -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -26351,8 +26810,8 @@ do ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: '$1' +Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -26794,7 +27253,7 @@ do "share/bifrost.pc") CONFIG_FILES="$CONFIG_FILES share/bifrost.pc" ;; "src/bifrost/config.h") CONFIG_FILES="$CONFIG_FILES src/bifrost/config.h" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done @@ -26813,7 +27272,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. +# after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= @@ -26837,7 +27296,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. +# This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -27003,7 +27462,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -27025,19 +27484,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. + # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is `configure' which instantiates (i.e., don't + # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -27165,7 +27624,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when `$srcdir' = `.'. +# Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -27195,9 +27654,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -27980,54 +28439,60 @@ if test x$HAVE_CUDA = x1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS - $with_stream_model streams" >&5 printf "%s\n" "$as_me: cuda: yes - v$CUDA_VERSION - $GPU_ARCHS - $with_stream_model streams" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 -printf "%s\n" "$as_me: cuda: no" >&6;} +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: cuda: no" >&5 +printf "%s\n" "$as_me: cuda: no" >&6;} ;; +esac fi if test x$HAVE_HWLOC = x1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc: yes" >&5 printf "%s\n" "$as_me: hwloc: yes" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc: no" >&5 -printf "%s\n" "$as_me: hwloc: no" >&6;} +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc: no" >&5 +printf "%s\n" "$as_me: hwloc: no" >&6;} ;; +esac fi if test x$HAVE_VMA = x1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libvma: yes" >&5 printf "%s\n" "$as_me: libvma: yes" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libvma: no" >&5 -printf "%s\n" "$as_me: libvma: no" >&6;} +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libvma: no" >&5 +printf "%s\n" "$as_me: libvma: no" >&6;} ;; +esac fi if test x$HAVE_VERBS = x1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libverbs: yes" >&5 printf "%s\n" "$as_me: libverbs: yes" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libverbs: no" >&5 -printf "%s\n" "$as_me: libverbs: no" >&6;} +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libverbs: no" >&5 +printf "%s\n" "$as_me: libverbs: no" >&6;} ;; +esac fi if test x$HAVE_RDMA = x1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: librdmacm: yes" >&5 printf "%s\n" "$as_me: librdmacm: yes" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: librdmacm: no" >&5 -printf "%s\n" "$as_me: librdmacm: no" >&6;} +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: librdmacm: no" >&5 +printf "%s\n" "$as_me: librdmacm: no" >&6;} ;; +esac fi if test x$HAVE_PYTHON = x1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: python bindings: yes" >&5 printf "%s\n" "$as_me: python bindings: yes" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: python bindings: no" >&5 -printf "%s\n" "$as_me: python bindings: no" >&6;} +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: python bindings: no" >&5 +printf "%s\n" "$as_me: python bindings: no" >&6;} ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: memory alignment: $ALIGNMENT" >&5 From 5c2c8a55183fcad977d9f30d60a895daa1eeaaad Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Mon, 21 Jul 2025 15:42:13 -0600 Subject: [PATCH 1143/1155] Cleanup and logic swap. --- config/cuda.m4 | 49 +++++++++++++++++++++++----------------------- configure | 53 ++++++++++++++++++++++---------------------------- 2 files changed, 48 insertions(+), 54 deletions(-) diff --git a/config/cuda.m4 b/config/cuda.m4 index 5141357ff..65f26ea86 100644 --- a/config/cuda.m4 +++ b/config/cuda.m4 @@ -343,31 +343,32 @@ AC_DEFUN([AX_CHECK_CUDA], ac_ext="$ac_ext_save" AC_MSG_CHECKING([for header-only NVTX version]) - CXXFLAGS_save="$CXXFLAGS" - LDFLAGS_save="$LDFLAGS" - NVCCLIBS_save="$NVCCLIBS" - ac_ext_save="$ac_ext" - - LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - NVCCLIBS="-lcuda -lcudart -lnvToolsExt" - ac_ext="cu" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' - AC_RUN_IFELSE([ - AC_LANG_PROGRAM([[ - #include - #include - #include ]], - [[]])], - [AC_SUBST([GPU_HEADERONLY_NVTX], [1]) - AC_MSG_RESULT([yes])], - [AC_SUBST([GPU_HEADERONLY_NVTX], [0]) - AC_MSG_RESULT([no])]) + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + NVCCLIBS_save="$NVCCLIBS" + ac_ext_save="$ac_ext" - CXXFLAGS="$CXXFLAGS_save" - LDFLAGS="$LDFLAGS_save" - NVCCLIBS="$NVCCLIBS_save -lnvToolsExt" - ac_ext="$ac_ext_save" - + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + NVCCLIBS="-lcuda -lcudart -lnvToolsExt" + ac_ext="cu" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include + #include ]], + [[]])], + [AC_SUBST([GPU_HEADERONLY_NVTX], [0]) + NVCCLIBS_save="$NVCCLIBS_save -lnvToolsExt" + AC_MSG_RESULT([no])], + [AC_SUBST([GPU_HEADERONLY_NVTX], [1]) + AC_MSG_RESULT([yes])]) + + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + NVCCLIBS="$NVCCLIBS_save" + ac_ext="$ac_ext_save" + else AC_SUBST([GPU_PASCAL_MANAGEDMEM], [0]) AC_SUBST([GPU_EXP_PINNED_ALLOC], [1]) diff --git a/configure b/configure index 88d52fea3..ff5bac09a 100755 --- a/configure +++ b/configure @@ -22398,16 +22398,16 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for header-only NVTX version" >&5 printf %s "checking for header-only NVTX version... " >&6; } - CXXFLAGS_save="$CXXFLAGS" - LDFLAGS_save="$LDFLAGS" - NVCCLIBS_save="$NVCCLIBS" - ac_ext_save="$ac_ext" + CXXFLAGS_save="$CXXFLAGS" + LDFLAGS_save="$LDFLAGS" + NVCCLIBS_save="$NVCCLIBS" + ac_ext_save="$ac_ext" - LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" - NVCCLIBS="-lcuda -lcudart -lnvToolsExt" - ac_ext="cu" - ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' - if test "$cross_compiling" = yes + LDFLAGS="-L$CUDA_HOME/lib64 -L$CUDA_HOME/lib" + NVCCLIBS="-lcuda -lcudart -lnvToolsExt" + ac_ext="cu" + ac_run='$NVCC -o conftest$ac_ext $LDFLAGS $LIBS $NVCCLIBS conftest.$ac_ext>&5' + if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} @@ -22418,9 +22418,9 @@ else case e in #( /* end confdefs.h. */ - #include - #include - #include + #include + #include + #include int main (void) { @@ -22431,15 +22431,16 @@ main (void) _ACEOF if ac_fn_cxx_try_run "$LINENO" then : - GPU_HEADERONLY_NVTX=1 + GPU_HEADERONLY_NVTX=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + NVCCLIBS_save="$NVCCLIBS_save -lnvToolsExt" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } else case e in #( - e) GPU_HEADERONLY_NVTX=0 + e) GPU_HEADERONLY_NVTX=1 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -22448,10 +22449,10 @@ esac fi - CXXFLAGS="$CXXFLAGS_save" - LDFLAGS="$LDFLAGS_save" - NVCCLIBS="$NVCCLIBS_save -lnvToolsExt" - ac_ext="$ac_ext_save" + CXXFLAGS="$CXXFLAGS_save" + LDFLAGS="$LDFLAGS_save" + NVCCLIBS="$NVCCLIBS_save" + ac_ext="$ac_ext_save" else GPU_PASCAL_MANAGEDMEM=0 @@ -22462,14 +22463,6 @@ fi fi - - else - GPU_PASCAL_MANAGEDMEM=0 - - GPU_EXP_PINNED_ALLOC=1 - - fi - ac_compile="$ac_compile_save" ac_link="$ac_link_save" ac_run="$ac_run_save" From e0a851a5ea5c1be041b5e0bcd761b72d40f6d6a0 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jul 2025 09:52:13 -0600 Subject: [PATCH 1144/1155] Add an option to control where the map cache is stored. --- configure | 24 +++++++++++++++++++++++- configure.ac | 12 +++++++++++- src/bifrost/config.h.in | 1 + src/map.cpp | 6 +++++- 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/configure b/configure index ff5bac09a..d940b716d 100755 --- a/configure +++ b/configure @@ -708,6 +708,7 @@ PYBUILDFLAGS PYTHON3 PYTHON HAVE_PYTHON +MAP_CACHE_DIR HAVE_MAP_CACHE HAVE_CUDA_DEBUG enable_native_arch @@ -878,6 +879,7 @@ enable_avx512 enable_native_arch enable_cuda_debug enable_map_cache +with_map_cache_dir enable_python with_python with_pybuild_flags @@ -1599,6 +1601,8 @@ Optional Packages: --with-alignment=N default memory alignment in bytes (default=4096) --with-logging-dir=DIR directory for Bifrost proclog logging (default=autodetect) + --with-map-cache-dir directory for the bifrost.map kernels + (default=~/.bifrost) --with-python=[PATH] absolute path to python executable --with-pybuild-flags build flags for python (default='') --with-pyinstall-flags install flags for python (default='') @@ -22923,6 +22927,17 @@ then : fi + + +# Check whether --with-map_cache_dir was given. +if test ${with_map_cache_dir+y} +then : + withval=$with_map_cache_dir; +fi + +MAP_CACHE_DIR=$with_map_cache_dir + + # # Python # @@ -28537,8 +28552,15 @@ then : fi if test x$enable_map_cache != xno then : - OPTIONS="$OPTIONS map_cache" + if test x$MAP_CACHE_DIR != x +then : + OPTIONS="$OPTIONS map_cache@$MAP_CACHE_DIR" +else case e in #( + e) OPTIONS="$OPTIONS map_cache" + ;; +esac +fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: options:$OPTIONS" >&5 printf "%s\n" "$as_me: options:$OPTIONS" >&6;} diff --git a/configure.ac b/configure.ac index 156dd86a0..4a0651a5a 100644 --- a/configure.ac +++ b/configure.ac @@ -284,6 +284,14 @@ AC_SUBST([HAVE_MAP_CACHE], [0]) AS_IF([test x$enable_map_cache != xno], [AC_SUBST([HAVE_MAP_CACHE], [$HAVE_CUDA])]) + +AC_ARG_WITH([map_cache_dir], + [AS_HELP_STRING([--with-map-cache-dir], + [directory for the bifrost.map kernels (default=~/.bifrost)])], + [], + []) +AC_SUBST(MAP_CACHE_DIR, $with_map_cache_dir) + # # Python # @@ -507,7 +515,9 @@ AS_IF([test x$enable_native_arch != xno], AS_IF([test x$HAVE_FLOAT128 != x0], [AC_SUBST([OPTIONS], ["$OPTIONS float128"])]) AS_IF([test x$enable_map_cache != xno], - [AC_SUBST([OPTIONS], ["$OPTIONS map_cache"])]) + [AS_IF([test x$MAP_CACHE_DIR != x], + [AC_SUBST([OPTIONS], ["$OPTIONS map_cache@$MAP_CACHE_DIR"])], + [AC_SUBST([OPTIONS], ["$OPTIONS map_cache"])])]) AC_MSG_NOTICE(options:$OPTIONS) echo "" diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 5a97d7f6f..807106f05 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -52,6 +52,7 @@ extern "C" { #define BF_GPU_EXP_PINNED_ALLOC @GPU_EXP_PINNED_ALLOC@ #define BF_MAP_KERNEL_STDCXX "@MAP_KERNEL_STDCXX@" #define BF_MAP_KERNEL_DISK_CACHE @HAVE_MAP_CACHE@ +#define BF_MAP_KERNEL_DISK_CACHE_DIR @MAP_CACHE_DIR@ #define BF_MAP_KERNEL_DISK_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) // Features diff --git a/src/map.cpp b/src/map.cpp index ca6a30cd6..b59b41945 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -589,7 +589,11 @@ class DiskCacheMgr { } DiskCacheMgr() - : _cachedir(get_home_dir()+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), +#if defined(BF_MAP_KERNEL_DISK_CACHE_DIR) && BF_MAP_KERNEL_DISK_CACHE_DIR + : _cachedir(BF_MAP_KERNEL_DISK_CACHE+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), +#else + : _cachedir(get_home_dir()+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), +#endif _loaded(false) { make_dir(_cachedir); } From c12d2894de74875dff88845597fe921095defdf2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jul 2025 12:31:36 -0600 Subject: [PATCH 1145/1155] Fix quoting on the directory. --- configure | 5 ++++- configure.ac | 6 +++--- src/bifrost/config.h.in | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/configure b/configure index d940b716d..98a31ff5d 100755 --- a/configure +++ b/configure @@ -22933,6 +22933,9 @@ fi if test ${with_map_cache_dir+y} then : withval=$with_map_cache_dir; +else case e in #( + e) with_map_cache_dir=0 ;; +esac fi MAP_CACHE_DIR=$with_map_cache_dir @@ -28552,7 +28555,7 @@ then : fi if test x$enable_map_cache != xno then : - if test x$MAP_CACHE_DIR != x + if test x$MAP_CACHE_DIR != x0 then : OPTIONS="$OPTIONS map_cache@$MAP_CACHE_DIR" diff --git a/configure.ac b/configure.ac index 4a0651a5a..9ed6e2e3b 100644 --- a/configure.ac +++ b/configure.ac @@ -289,8 +289,8 @@ AC_ARG_WITH([map_cache_dir], [AS_HELP_STRING([--with-map-cache-dir], [directory for the bifrost.map kernels (default=~/.bifrost)])], [], - []) -AC_SUBST(MAP_CACHE_DIR, $with_map_cache_dir) + [with_map_cache_dir=0]) +AC_SUBST([MAP_CACHE_DIR], [$with_map_cache_dir]) # # Python @@ -515,7 +515,7 @@ AS_IF([test x$enable_native_arch != xno], AS_IF([test x$HAVE_FLOAT128 != x0], [AC_SUBST([OPTIONS], ["$OPTIONS float128"])]) AS_IF([test x$enable_map_cache != xno], - [AS_IF([test x$MAP_CACHE_DIR != x], + [AS_IF([test x$MAP_CACHE_DIR != x0], [AC_SUBST([OPTIONS], ["$OPTIONS map_cache@$MAP_CACHE_DIR"])], [AC_SUBST([OPTIONS], ["$OPTIONS map_cache"])])]) AC_MSG_NOTICE(options:$OPTIONS) diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index 807106f05..c6b153e9a 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -52,7 +52,7 @@ extern "C" { #define BF_GPU_EXP_PINNED_ALLOC @GPU_EXP_PINNED_ALLOC@ #define BF_MAP_KERNEL_STDCXX "@MAP_KERNEL_STDCXX@" #define BF_MAP_KERNEL_DISK_CACHE @HAVE_MAP_CACHE@ -#define BF_MAP_KERNEL_DISK_CACHE_DIR @MAP_CACHE_DIR@ +#define BF_MAP_KERNEL_DISK_CACHE_DIR "@MAP_CACHE_DIR@" #define BF_MAP_KERNEL_DISK_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) // Features From fe975d84e7c6b23f65117db1ec8b16be77442a9f Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jul 2025 13:03:11 -0600 Subject: [PATCH 1146/1155] This might actually work as intended. --- configure | 8 ++++++-- configure.ac | 7 +++++-- src/bifrost/config.h.in | 2 +- src/map.cpp | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/configure b/configure index 98a31ff5d..13457c4e2 100755 --- a/configure +++ b/configure @@ -709,6 +709,7 @@ PYTHON3 PYTHON HAVE_PYTHON MAP_CACHE_DIR +BF_MAP_KERNEL_DISK_CACHE_DIR_DEFINE HAVE_MAP_CACHE HAVE_CUDA_DEBUG enable_native_arch @@ -22932,12 +22933,15 @@ fi # Check whether --with-map_cache_dir was given. if test ${with_map_cache_dir+y} then : - withval=$with_map_cache_dir; + withval=$with_map_cache_dir; BF_MAP_KERNEL_DISK_CACHE_DIR_DEFINE="#define BF_MAP_KERNEL_DISK_CACHE_DIR \"$withval\"" + with_map_cache_dir=$withval else case e in #( - e) with_map_cache_dir=0 ;; + e) BF_MAP_KERNEL_DISK_CACHE_DIR_DEFINE="/* BF_MAP_KERNEL_DISK_CACHE_DIR not defined - using default */" + with_map_cache_dir=0 ;; esac fi + MAP_CACHE_DIR=$with_map_cache_dir diff --git a/configure.ac b/configure.ac index 9ed6e2e3b..bda80f924 100644 --- a/configure.ac +++ b/configure.ac @@ -288,8 +288,11 @@ AS_IF([test x$enable_map_cache != xno], AC_ARG_WITH([map_cache_dir], [AS_HELP_STRING([--with-map-cache-dir], [directory for the bifrost.map kernels (default=~/.bifrost)])], - [], - [with_map_cache_dir=0]) + [BF_MAP_KERNEL_DISK_CACHE_DIR_DEFINE="#define BF_MAP_KERNEL_DISK_CACHE_DIR \"$withval\"" + with_map_cache_dir=$withval], + [BF_MAP_KERNEL_DISK_CACHE_DIR_DEFINE="/* BF_MAP_KERNEL_DISK_CACHE_DIR not defined - using default */" + with_map_cache_dir=0]) +AC_SUBST([BF_MAP_KERNEL_DISK_CACHE_DIR_DEFINE]) AC_SUBST([MAP_CACHE_DIR], [$with_map_cache_dir]) # diff --git a/src/bifrost/config.h.in b/src/bifrost/config.h.in index c6b153e9a..0dd994c5d 100644 --- a/src/bifrost/config.h.in +++ b/src/bifrost/config.h.in @@ -52,7 +52,7 @@ extern "C" { #define BF_GPU_EXP_PINNED_ALLOC @GPU_EXP_PINNED_ALLOC@ #define BF_MAP_KERNEL_STDCXX "@MAP_KERNEL_STDCXX@" #define BF_MAP_KERNEL_DISK_CACHE @HAVE_MAP_CACHE@ -#define BF_MAP_KERNEL_DISK_CACHE_DIR "@MAP_CACHE_DIR@" +@BF_MAP_KERNEL_DISK_CACHE_DIR_DEFINE@ #define BF_MAP_KERNEL_DISK_CACHE_VERSION (1000*@PACKAGE_VERSION_MAJOR@ + 10*@PACKAGE_VERSION_MINOR@) // Features diff --git a/src/map.cpp b/src/map.cpp index b59b41945..44d878d91 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -589,7 +589,7 @@ class DiskCacheMgr { } DiskCacheMgr() -#if defined(BF_MAP_KERNEL_DISK_CACHE_DIR) && BF_MAP_KERNEL_DISK_CACHE_DIR +#if defined(BF_MAP_KERNEL_DISK_CACHE_DIR) : _cachedir(BF_MAP_KERNEL_DISK_CACHE+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), #else : _cachedir(get_home_dir()+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), From 38d1c5421e6e65ef8b40c5ec27d9d446cf7e74fb Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jul 2025 13:42:18 -0600 Subject: [PATCH 1147/1155] Ugh. --- src/map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map.cpp b/src/map.cpp index 44d878d91..4f8cab180 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -590,7 +590,7 @@ class DiskCacheMgr { DiskCacheMgr() #if defined(BF_MAP_KERNEL_DISK_CACHE_DIR) - : _cachedir(BF_MAP_KERNEL_DISK_CACHE+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), + : _cachedir(std::string(BF_MAP_KERNEL_DISK_CACHE)+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), #else : _cachedir(get_home_dir()+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), #endif From 72c5cce5050d9a14020ca3eef5369072ea7fad28 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jul 2025 13:44:15 -0600 Subject: [PATCH 1148/1155] Also ugh. --- src/map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map.cpp b/src/map.cpp index 4f8cab180..028d15d64 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -590,7 +590,7 @@ class DiskCacheMgr { DiskCacheMgr() #if defined(BF_MAP_KERNEL_DISK_CACHE_DIR) - : _cachedir(std::string(BF_MAP_KERNEL_DISK_CACHE)+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), + : _cachedir(BF_MAP_KERNEL_DISK_CACHE_DIR+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), #else : _cachedir(get_home_dir()+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), #endif From f4133bbbf71fb7aea457b4c8f9838719fc264abd Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jul 2025 13:45:55 -0600 Subject: [PATCH 1149/1155] Random walk. --- src/map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map.cpp b/src/map.cpp index 028d15d64..63495a2a3 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -590,7 +590,7 @@ class DiskCacheMgr { DiskCacheMgr() #if defined(BF_MAP_KERNEL_DISK_CACHE_DIR) - : _cachedir(BF_MAP_KERNEL_DISK_CACHE_DIR+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), + : _cachedir(std::string(BF_MAP_KERNEL_DISK_CACHE_DIR)+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), #else : _cachedir(get_home_dir()+"/.bifrost/"+BF_MAP_KERNEL_DISK_CACHE_SUBDIR+"/"), #endif From caadcc60f99f04690c6f13e162c92e7d358f8dd2 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jul 2025 14:55:40 -0600 Subject: [PATCH 1150/1155] Fix up the AVX detection. --- config/intrinsics.m4 | 14 ++++++-------- configure | 14 ++++++-------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/config/intrinsics.m4 b/config/intrinsics.m4 index 2f99a93de..118c5932f 100644 --- a/config/intrinsics.m4 +++ b/config/intrinsics.m4 @@ -56,10 +56,9 @@ AC_DEFUN([AX_CHECK_AVX], if test "$enable_avx" = "yes"; then AC_MSG_CHECKING([for AVX support via '-mavx']) - CXXFLAGS_temp="$CXXFLAGS -mavx" - ac_run_save="$ac_run" + CXXFLAGS_save="$CXXFLAGS" - ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + CXXFLAGS="$CXXFLAGS -mavx" AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #include ]], @@ -68,10 +67,10 @@ AC_DEFUN([AX_CHECK_AVX], x = _mm256_add_pd(x, x); return _mm256_cvtsd_f64(x) != 2.0;]])], [ - CXXFLAGS="$CXXFLAGS -mavx" AC_SUBST([HAVE_AVX], [1]) AC_MSG_RESULT([yes]) ], [ + CXXFLAGS="$CXXFLAGS_save" AC_MSG_RESULT([no]) ]) @@ -97,10 +96,9 @@ AC_DEFUN([AX_CHECK_AVX512], if test "$enable_avx512" = "yes"; then AC_MSG_CHECKING([for AVX-512 support via '-mavx512f']) - CXXFLAGS_temp="$CXXFLAGS -mavx512f" - ac_run_save="$ac_run" + CXXFLAGS_save="$CXXFLAGS" - ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + CXXFLAGS="$CXXFLAGS -mavx512f" AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #include ]], @@ -109,10 +107,10 @@ AC_DEFUN([AX_CHECK_AVX512], x = _mm512_add_pd(x, x); return _mm512_cvtsd_f64(x) != 2.0;]])], [ - CXXFLAGS="$CXXFLAGS -mavx512f" AC_SUBST([HAVE_AVX512], [1]) AC_MSG_RESULT([yes]) ], [ + CXXFLAGS="$CXXFLAGS_save" AC_MSG_RESULT([no]) ]) diff --git a/configure b/configure index 13457c4e2..c69353e59 100755 --- a/configure +++ b/configure @@ -22720,10 +22720,9 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AVX support via '-mavx'" >&5 printf %s "checking for AVX support via '-mavx'... " >&6; } - CXXFLAGS_temp="$CXXFLAGS -mavx" - ac_run_save="$ac_run" + CXXFLAGS_save="$CXXFLAGS" - ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + CXXFLAGS="$CXXFLAGS -mavx" if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 @@ -22750,7 +22749,6 @@ _ACEOF if ac_fn_cxx_try_run "$LINENO" then : - CXXFLAGS="$CXXFLAGS -mavx" HAVE_AVX=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -22758,6 +22756,7 @@ printf "%s\n" "yes" >&6; } else case e in #( e) + CXXFLAGS="$CXXFLAGS_save" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; @@ -22791,10 +22790,9 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AVX-512 support via '-mavx512f'" >&5 printf %s "checking for AVX-512 support via '-mavx512f'... " >&6; } - CXXFLAGS_temp="$CXXFLAGS -mavx512f" - ac_run_save="$ac_run" + CXXFLAGS_save="$CXXFLAGS" - ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + CXXFLAGS="$CXXFLAGS -mavx512f" if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 @@ -22821,7 +22819,6 @@ _ACEOF if ac_fn_cxx_try_run "$LINENO" then : - CXXFLAGS="$CXXFLAGS -mavx512f" HAVE_AVX512=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -22829,6 +22826,7 @@ printf "%s\n" "yes" >&6; } else case e in #( e) + CXXFLAGS="$CXXFLAGS_save" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; From f135f0ffee8a1df0a8d9a49d3e5f44c37e056db5 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jul 2025 14:57:35 -0600 Subject: [PATCH 1151/1155] Cleanup SSE as well. --- config/intrinsics.m4 | 6 +++--- configure | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/intrinsics.m4 b/config/intrinsics.m4 index 118c5932f..926b54d54 100644 --- a/config/intrinsics.m4 +++ b/config/intrinsics.m4 @@ -16,9 +16,9 @@ AC_DEFUN([AX_CHECK_SSE], if test "$enable_sse" = "yes"; then AC_MSG_CHECKING([for SSE support via '-msse']) - CXXFLAGS_temp="$CXXFLAGS -msse" + CXXFLAGS_save="$CXXFLAGS" - ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + CXXFLAGS="$CXXFLAGS -msse" AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #include ]], @@ -27,10 +27,10 @@ AC_DEFUN([AX_CHECK_SSE], x = _mm_add_ps(x, x); return _mm_cvtss_f32(x) != 2.0f;]])], [ - CXXFLAGS="$CXXFLAGS -msse" AC_SUBST([HAVE_SSE], [1]) AC_MSG_RESULT([yes]) ], [ + CXXFLAGS="$CXXFLAGS_save" AC_MSG_RESULT([no]) ]) fi diff --git a/configure b/configure index c69353e59..13001c7a9 100755 --- a/configure +++ b/configure @@ -22652,9 +22652,9 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SSE support via '-msse'" >&5 printf %s "checking for SSE support via '-msse'... " >&6; } - CXXFLAGS_temp="$CXXFLAGS -msse" + CXXFLAGS_save="$CXXFLAGS" - ac_run="$CXX -o conftest$ac_ext $CXXFLAGS_temp conftest.$ac_ext>&5" + CXXFLAGS="$CXXFLAGS -msse" if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 @@ -22681,7 +22681,6 @@ _ACEOF if ac_fn_cxx_try_run "$LINENO" then : - CXXFLAGS="$CXXFLAGS -msse" HAVE_SSE=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -22689,6 +22688,7 @@ printf "%s\n" "yes" >&6; } else case e in #( e) + CXXFLAGS="$CXXFLAGS_save" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; From ff72cbe8dc91e69b56c5089bf57607c4884e7968 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jul 2025 15:10:46 -0600 Subject: [PATCH 1152/1155] Fixed a couple of AVX problems. --- src/formats/chips.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/formats/chips.hpp b/src/formats/chips.hpp index fd9a371bb..903beff0d 100644 --- a/src/formats/chips.hpp +++ b/src/formats/chips.hpp @@ -112,7 +112,7 @@ class CHIPSProcessor : virtual public PacketProcessor { const unaligned256_type* dsrc = (const unaligned256_type*) &in[chan]; aligned256_type* ddst = (aligned256_type*) &out[pkt->src + pkt->nsrc*chan]; - __m256 mtemp = _mm256_loadu_si256(reinterpret_cast(dsrc)); + __m256i mtemp = _mm256_loadu_si256(reinterpret_cast(dsrc)); _mm256_stream_si256(reinterpret_cast<__m256i*>(ddst), mtemp); #else #if defined BF_SSE_ENABLED && BF_SSE_ENABLED @@ -141,9 +141,9 @@ class CHIPSProcessor : virtual public PacketProcessor { for( int t=0; t(ddst), mtemp); #else #if defined BF_SSE_ENABLED && BF_SSE_ENABLED From f78be6760277a9e96606c32d8bc1229d78422a1b Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 22 Jul 2025 16:40:17 -0600 Subject: [PATCH 1153/1155] Disable AVX512 for now since nothing uses it. --- configure | 73 ++-------------------------------------------------- configure.ac | 3 ++- 2 files changed, 4 insertions(+), 72 deletions(-) diff --git a/configure b/configure index 13001c7a9..1687708f4 100755 --- a/configure +++ b/configure @@ -876,7 +876,6 @@ enable_debug enable_trace enable_sse enable_avx -enable_avx512 enable_native_arch enable_cuda_debug enable_map_cache @@ -1556,7 +1555,6 @@ Optional Features: --enable-trace enable tracing mode for nvprof/nvvp (default=no) --disable-sse disable SSE support (default=no) --disable-avx disable AVX support (default=no) - --disable-avx512 disable AVX512 support (default=no) --disable-native-arch disable native architecture compilation (default=no) --enable-cuda-debug enable CUDA debugging (nvcc -G; default=no) --disable-map-cache disable caching bifrost.map kernels (default=no) @@ -22771,75 +22769,8 @@ fi ac_run="$ac_run_save" fi - - - # Check whether --enable-avx512 was given. -if test ${enable_avx512+y} -then : - enableval=$enable_avx512; enable_avx512=no -else case e in #( - e) enable_avx512=yes ;; -esac -fi - - - HAVE_AVX512=0 - - - if test "$enable_avx512" = "yes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AVX-512 support via '-mavx512f'" >&5 -printf %s "checking for AVX-512 support via '-mavx512f'... " >&6; } - - CXXFLAGS_save="$CXXFLAGS" - - CXXFLAGS="$CXXFLAGS -mavx512f" - if test "$cross_compiling" = yes -then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} -as_fn_error $? "cannot run test program while cross compiling -See 'config.log' for more details" "$LINENO" 5; } -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - #include -int -main (void) -{ - - __m512d x = _mm512_set1_pd(1.0); - x = _mm512_add_pd(x, x); - return _mm512_cvtsd_f64(x) != 2.0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO" -then : - - HAVE_AVX512=1 - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -else case e in #( - e) - CXXFLAGS="$CXXFLAGS_save" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -esac -fi - - - ac_run="$ac_run_save" - fi +#AX_CHECK_AVX512 +HAVE_AVX512=0 diff --git a/configure.ac b/configure.ac index bda80f924..95efe38d1 100644 --- a/configure.ac +++ b/configure.ac @@ -262,7 +262,8 @@ AS_IF([test x$enable_trace != xno], AX_CHECK_SSE AX_CHECK_AVX -AX_CHECK_AVX512 +#AX_CHECK_AVX512 +AC_SUBST([HAVE_AVX512], [0]) AX_CHECK_NATIVE_ARCH AC_ARG_ENABLE([cuda_debug], From 05cef349be04d5038aaed578ae00cc0809061578 Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Wed, 23 Jul 2025 13:22:21 -0600 Subject: [PATCH 1154/1155] Add in udp_verbs_transmit. --- tools/like_bmon.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/like_bmon.py b/tools/like_bmon.py index 63406f9e6..03baa8cfe 100755 --- a/tools/like_bmon.py +++ b/tools/like_bmon.py @@ -126,7 +126,8 @@ def get_statistics(blockList, prevList): except KeyError: prev = curr - elif block.find('udp_transmit') != -1: + elif block.find('udp_transmit') != -1 \ + or block.find('udp_verbs_transmit') != -1: ## udp_transmit is TX good = True type = 'tx' From b0b25168a15b1172e769b8a59874598f829a76de Mon Sep 17 00:00:00 2001 From: jaycedowell Date: Tue, 4 Nov 2025 09:19:56 -0700 Subject: [PATCH 1155/1155] Fix an overflow in the buffer size calculation. --- src/packet_capture.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packet_capture.hpp b/src/packet_capture.hpp index 077cb8a2c..52e197722 100644 --- a/src/packet_capture.hpp +++ b/src/packet_capture.hpp @@ -493,7 +493,7 @@ class BFpacketcapture_impl { if( payload_size == -1 ) { payload_size = _payload_size; } - return _nseq_per_buf * _nsrc * payload_size * BF_UNPACK_FACTOR; + return (size_t) _nseq_per_buf * _nsrc * payload_size * BF_UNPACK_FACTOR; } inline void reserve_buf() { _buf_ngood_bytes.push(0);